Skill management and retrieval for AI agents: sync native skills across clients and route the long tail over MCP
Skillmux defines 2 tools with clear, action-oriented names (resolve_skill, fetch_skill) and solid descriptions (145 - 180 chars, within baseline 194 avg). Both tools have complete input schemas with typed parameters and descriptions. However, output schemas are not documented in the visible code, LLMs cannot predict return structure. Parameter descriptions are adequate but lack format/constraint details (e.g., what constitutes a valid skill_id?). Error handling and recovery guidance are absent. No tool annotations (readOnlyHint, idempotentHint) despite both being read-only operations. Composition is sound: resolve_skill returns candidates; fetch_skill retrieves by ID, with optional request_id for audit correlation. Missing: output schema documentation, error classification, and tool annotations.
Fetch a skill's SKILL.md verbatim by skill_id, with sha256 and supporting-file paths. Independent of any prior resolve_skill outcome. Pass the request_id from a resolve_skill result to correlate the fetch in audit logs.
Route a natural-language task description to candidate skills in the vault. Returns a ranked shortlist of candidates. Use fetch_skill to retrieve a candidate's complete instructions.
Output schemas not documented. LLMs cannot predict return structure (fields, types, pagination). Both tools lack documented return types.
No tool annotations despite both tools being read-only. Missing readOnlyHint metadata to signal safety to agents.
Parameter descriptions lack format/constraint details. 'skill_id' and 'query' lack minLength, pattern, or format guidance. 'top_k' has minimum but no maximum bound.
No error handling or recovery guidance. Tools lack descriptions of failure modes (e.g., skill not found, invalid query, rate limits) and what LLM should do next.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2025-06-18+ | v2 |
resolve_skill's 'top_k' parameter is optional but lacks default value documentation. Unclear what happens if omitted or what server's max_top_k limit is.