Semantic search over markdown files (MCP + REST modes)
The server defines 3 semantic search tools with reasonable naming and clear descriptions. All tools have input schemas with proper types and descriptions. However, output schemas are undocumented, parameter descriptions lack actionable constraints (ranges, formats), and error handling guidance is absent. The tool set is focused and read-only, but lacks the richness expected of production tools. Average tool score: 62/100.
Find notes that are potential duplicates of the given file.
Fetch the content of a file from the indexed vault.
Search for notes semantically related to the query text.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract expected fields without knowing what each tool returns.
Parameter descriptions lack actionable constraints. 'top_k' has no documented min/max bounds; 'context_lines' has no maximum to prevent unbounded memory consumption; 'query' in get_content doesn't clarify matching semantics (substring, semantic similarity, regex).
No error handling guidance in tool descriptions. Tool descriptions do not explain what to do if: file not found, path is invalid, query is empty, top_k is negative. LLMs receive bare errors without recovery instructions.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 56 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 47 | - | v1 |
Parameter descriptions are uniformly brief (12-26 characters). While concise, they lack context for LLM decision-making. E.g., 'Number of results to return (default 5)' doesn't explain quality tradeoffs (is 5 usually sufficient? When to use higher values?), performance implications, or cost.
Tool descriptions do not clarify relationships or disambiguation. 'search_related' and 'check_duplicates' are similar; descriptions should explain when to use each (semantic relevance vs duplicate detection). LLMs may conflate them.
get_content parameter 'query' is only used when snippet=true, but this dependency is not enforced or clearly stated in parameter descriptions. LLMs may pass query without setting snippet=true, causing confusion.