Larch provides 4 read-only tools with basic schemas and descriptions. All tools have input schemas with typed parameters and descriptions present. However, descriptions are minimal (10-50 chars), lacking context on WHEN to use each tool or dependencies between them. Parameter descriptions are present but terse. No output schemas documented. Error handling is absent, no guidance on recovery or retryable vs. fatal errors. Tool naming is verb-based (search, document, tree, tags) but lacks clarity on distinctions (e.g., 'tags' could mean list all tags or filter by tag). No tool annotations (readOnlyHint, idempotentHint). Composition is reasonable, tools are single-purpose, but output structure is not documented, forcing LLMs to infer response shape.
Read precise line ranges from a local Markdown file to gain deeper context.
Search the local Larch Markdown knowledge base using keywords.
Get all tags or documents associated with a specific tag.
Get the complete directory tree of the vault.
Descriptions are too brief (10-50 chars). 'Get the complete directory tree of the vault' lacks context on when to call tree vs. search, or what structure is returned. LLMs cannot determine tool selection from minimal descriptions.
No output schemas documented. Tools return structured data (SearchResult, DocumentResponse, etc. visible in server.rs) but MCP tool definitions do not declare return types. LLMs cannot plan downstream calls or extract fields without guessing.
No error handling guidance. If search fails, document path is invalid, or tree is empty, tools return errors with no recovery hints. LLMs cannot distinguish retryable from fatal errors or know what to try next.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 47 | <=2025-11-25 | v2 |
Parameter 'tag' in search and tags is ambiguous. In search, 'tag' filters results; in tags, 'tag' selects a specific tag or lists all. Naming should distinguish: search accepts 'filter_tag', tags accepts 'tag_name' or 'tag' with clear description.
No tool annotations. Tools lack readOnlyHint (all are read-only), idempotentHint (all are idempotent), or destructiveHint (none are destructive). Annotations help LLMs reason about safety and retry logic.