MCP server for Obsidian vaults — direct filesystem access for AI agents
13 tools with complete schemas and descriptions. Naming follows verb_noun convention well (read_note, search_notes, create_note). Descriptions are adequate (50-150 chars typical) but lack LLM-optimized guidance on when to use each tool vs. alternatives. Parameters have types and descriptions. Output schemas not documented in source. Error handling not visible in provided code. Search tools (search_notes, search_semantic, search_hybrid) have good parameter constraints (enums, ranges). Write/destructive tools lack confirmation or dry-run patterns. No tool annotations visible (readOnlyHint, destructiveHint). Composition is sound, tools are single-responsibility and chainable (e.g., search_notes → read_note). Missing: recovery guidance in error messages, per-tool permission scopes, and output schema documentation.
Create a new note in the vault
Delete a note from the vault
Get all notes that link to a given note
Get all wikilinks from a note
Get all notes with a specific tag
Get statistics about the vault (note count, file count, tags, links, size)
List all notes in the vault with metadata
Read the full content of a note by path
Rename or move a note to a new path
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) visible in source. Destructive tools (delete_note, rename_note) and write tools (create_note, update_note) lack explicit risk markers that guide agent behavior.
Destructive operations (delete_note) lack confirmation or dry-run pattern. Agents can permanently delete notes without a safety gate, risking data loss.
Output schemas not documented in source code. LLMs cannot infer what fields search_notes, get_vault_stats, or list_notes return, forcing them to guess downstream field names.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | <=2025-11-25 | v2 |
Hybrid search combining BM25 lexical and semantic search with configurable alpha weighting
Full-text search across all notes using BM25 ranking
Semantic search using embeddings (requires daemon)
Update the content of an existing note
Descriptions lack LLM-optimized guidance on when to use each search variant. search_notes vs search_semantic vs search_hybrid, when should an agent pick each? No decision tree provided.
No error handling guidance visible in source. Error responses likely lack recovery hints (e.g., 'Note not found. Try search_notes() first'). Agents cannot self-correct on failures.