A narrow, typed Model Context Protocol filesystem server over a sandboxed Obsidian Markdown vault. Exposes five operations: read_file, write_file, list_directory, search_files, directory_tree
Five tools with clear verb-noun naming (read_file, write_file, list_directory, search_files, directory_tree). All have descriptions (avg 95 chars) and visible input schemas with type definitions. Parameters are well-described with constraints (e.g., mode enum, max_results bounds). Output schemas are documented in docstrings. However, descriptions are terse (under 100 chars) and lack WHEN/WHY guidance for LLM selection. Error handling is present but generic (SandboxError). No tool annotations (readOnlyHint, destructiveHint). write_file lacks explicit confirmation/dry-run for destructive operations. Output field naming is consistent but could include more chaining IDs for multi-step workflows.
Return a nested tree of the vault (or a subtree) for orientation.
List immediate children of a directory inside the vault.
Read a Markdown note from the vault.
Case-insensitive substring search across note bodies. Walks the vault, reads each text note, and returns matching lines with file and line number.
Write text to a note. Defaults to append so history is preserved.
Descriptions lack WHEN/WHY context for LLM selection. 'Read a Markdown note' does not explain when to call read_file vs search_files or when to use directory_tree for orientation. LLMs need explicit guidance to pick the right tool.
write_file_tool lacks confirmation/dry-run pattern for destructive operations. Mode 'overwrite' can replace file content without agent confirmation. Agents make mistakes, a confirm_before_execute pattern prevents data loss.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot infer which tools are safe to retry or which modify state. Annotations are current MCP spec (2026-07-28) and improve agent planning.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Error messages are generic (SandboxError). 'path escapes vault sandbox' does not guide recovery. Should suggest: 'Path escapes vault. Paths must be relative to vault root (e.g., projects/notes.md).'
search_files returns matching lines but omits context (surrounding lines, snippet preview). LLMs need richer output to decide whether to read the full file. Current output: [{'file': '...', 'line_number': ..., 'line': '...'}], add 'context' field with 1-2 surrounding lines.