Model Context Protocol server for SoloMD vaults — exposes a Markdown notes folder to Claude Code, Codex CLI, Cursor, Cline, Continue, Zed, and any other MCP client
The server provides 12 tools with varying quality. Naming is generally action-verb-based (list_, read_, search_, get_, write_, append_, export_), which is good. However, descriptions range from adequate to incomplete. Most tools have input schemas with types present, but parameter descriptions are often terse or missing entirely. Output schemas are not documented. Error handling and recovery guidance are absent from descriptions. Tool composition is reasonable (single responsibility), but parameter descriptions lack depth about constraints, formats, and error cases. The server sits in the D-to-C range: functional definitions, but significant gaps in LLM-friendliness and validation guidance.
Append markdown content to an existing note. Creates the file if it does not exist.
Unified diff for a given commit on a given file (vs its parent).
Recent AutoGit commits that touched a given file.
Export a single note to DOCX, PDF, or HTML.
Find all notes that link to the given note via [[wikilinks]].
Get the heading tree (level/text/line) for a markdown note.
List markdown files in the workspace. Returns lightweight metadata (path, name, title, mtime, summary).
Output schemas are completely undocumented. Tool descriptions state what fields are returned (e.g., list_notes 'returns lightweight metadata'), but no formal schema is provided for LLM planning. LLMs cannot know what data is available downstream without documented output structure.
Parameter descriptions are present but often terse. E.g., get_outline has 'path' with no description of format/constraint. get_backlinks 'note_name' lacks guidance on whether to include extension or not. These ambiguities force LLMs to guess, increasing error rate.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
Enumerate every #tag used in the vault, with per-tag file counts.
Read a previous agent run's trace.jsonl (returns parsed steps).
Read a single markdown note. Returns content + parsed frontmatter, headings, tags, wikilinks.
Full-text search across the workspace's markdown / text files. Returns matching lines + snippets.
Create or overwrite a markdown note. Rejects attempts to escape the workspace root via `..` paths or absolute paths.
No error handling guidance in descriptions. Tools that perform file I/O (read_note, write_note, append_to_note) may fail (file not found, permission denied, workspace exhausted), but descriptions do not explain what happens or how LLM should recover. This violates recovery-guide pattern.
list_notes and search accept 'limit' parameters but lack bounds documentation. No mention of min/max values, and missing guidance on what happens if limit exceeds server capability (e.g., limit=10000). Default values are stated (200, 50) but no justification or context on typical use cases.
write_note has 'allow_overwrite' boolean with unclear default behavior. Description says 'If false (default), refuse to clobber', good, but no guidance on error returned when overwrite is refused. Does the tool return success or failure? Error message format?
Tool composition is sound (each does one thing), but several tools are closely related and lack cross-referencing. E.g., search and list_notes both retrieve notes but in different ways. Description should explain when to use each: 'Use search for keyword matching across full text; use list_notes to enumerate vault structure.' Currently, LLM must infer the distinction.