Single tool 'search_skill' has a reasonable description (145 chars) but critical schema gaps. Input schema visible with user_query parameter (string type, description present). However, output schema is completely undocumented, the tool returns CallToolResult with Content::text but no structured schema is declared. Parameter descriptions are minimal. Tool does one thing (search skills) but lacks error handling guidance, pagination support, and output structure documentation. No tool annotations present. Naming is verb-forward (search_skill) which is good, but the implementation reveals keyword-matching logic that may not scale, no guidance on matching quality or fallback behavior.
Search and load the best matching skill from the skill library based on user query. Returns the full SKILL.md content with instructions that the agent MUST follow to complete the user's task.
Output schema completely undocumented. Tool returns full SKILL.md content as plain text with no structured schema declaration. LLMs cannot parse or extract fields from unstructured text responses.
No error handling guidance. Tool returns 'No skills available' as success, not error. No guidance on what to do if query matches no skills, or if skill loading fails. LLM cannot recover from ambiguous states.
Parameter description for user_query is minimal (47 chars). Does not explain expected format, examples of good queries, or what happens if query is ambiguous. Lacks guidance on multi-word vs single-word queries.
No pagination or result limiting. Tool loads all skills into memory and returns full SKILL.md content. For large skill libraries, this wastes tokens and risks context window exhaustion. No limit parameter or pagination cursor.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 43 | <=2025-11-25 | v2 |
Keyword matching algorithm is simplistic and undocumented. Code shows substring matching with scoring, but no explanation of how ties are broken, what constitutes a 'best match', or fallback behavior if no match exceeds threshold.