MCP server for interacting with Obsidian vaults via the Local REST API plugin
Server has 13 well-named tools with consistent verb_noun patterns (list_, get_, append_, put_, patch_, delete_, search_). All tools have descriptions (avg ~120 chars, within baseline 34-392). Input schemas are present and typed for all tools. However, parameter descriptions are sparse or missing context; many lack guidance on valid ranges, formats, or constraints. Output schemas are not documented, LLMs cannot predict response structure. Error handling is basic (IsError flag) but lacks recovery guidance. No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels. Batch tools (obsidian_batch_get_file_contents, obsidian_patch_content) show good composition patterns but lack pagination/limit documentation.
Append content to a new or existing file in the vault.
Return the contents of multiple files in your vault, concatenated with headers.
Complex search for documents using a JsonLogic query. Supports standard JsonLogic operators plus 'glob' and 'regexp' for pattern matching. Results must be non-falsy. Use this tool when you want to do a complex search, e.g. for all documents with certain tags. ALWAYS follow query syntax in examples. Examples: 1. Match all markdown files {"glob": ["*.md", {"var": "path"}]} 2. Match all markdown files with 1221 substring inside them {"and": [{"glob": ["*.md", {"var": "path"}]}, {"regexp": [".*1221.*", {"var": "content"}]}]} 3. Match all markdown files in Work folder containing name Keaton {"and": [{"glob": ["*.md", {"var": "path"}]}, {"regexp": [".*Work.*", {"var": "path"}]}, {"regexp": ["Keaton", {"var": "content"}]}]}
Delete a file or directory from the vault.
Return the content of a single file in your vault.
Output schemas not documented. LLMs cannot predict response structure (fields, types, pagination). Forces agents to guess or fail on unexpected formats.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools marked READ_ONLY, WRITE, DESTRUCTIVE in metadata but not exposed to MCP clients. Agents cannot distinguish safe from dangerous operations.
Parameter descriptions lack constraints and formats. 'dirpath' and 'filepath' lack guidance on valid paths, separators, or edge cases. 'context_length' and 'limit' lack min/max bounds. LLMs will pass invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Get current periodic note for the specified period.
Get recently modified files in the vault.
Get most recent periodic notes for the specified period type.
Lists all files and directories that exist in a specific Obsidian directory.
Lists all files and directories in the root directory of your Obsidian vault.
Insert content into an existing note relative to a heading, block reference, or frontmatter field.
Create a new file in your vault or update the content of an existing one.
Simple search for documents matching a specified text query across all files in the vault. Use this tool when you want to do a simple text search.
Error handling lacks recovery guidance. Tests show IsError=true but no actionable message. 'Invalid period: fortnightly' tells agent nothing about valid options (daily, weekly, monthly, quarterly, yearly).
Batch operations lack pagination/limit documentation. obsidian_batch_get_file_contents accepts unbounded filepaths array; no guidance on max items or chunking strategy.