Self-hosted LiveSync-compatible backend for Obsidian with search and MCP, for Cloudflare Workers
Strong foundation with 11 well-named tools following verb_noun convention (list*, read*, search*, append*, write*). All tools have descriptions (avg 120 chars, within 10-1024 baseline). Input schemas present with types and constraints (minLength, maxLength, pattern, minimum/maximum). However, output schemas are not documented, LLMs cannot infer response structure. Error handling is minimal; no recovery guidance or actionable error messages visible. Missing tool annotations (readOnlyHint, destructiveHint). Composition is sound: tools chain well (readNote returns path for appendToNote), but no batch variants for common loops.
Append a Markdown block to the end of a daily note (created if missing). Requires the vault:append scope.
Append a Markdown block to the end of a vault note. Requires the vault:append scope.
Exact-match full-text search over Obsidian notes (substring for Japanese/CJK, whole-word for ASCII). Whitespace-separated phrases are ANDed. Use searchNotes for semantic queries instead.
List Markdown files and subdirectories directly under a vault-relative directory.
List vault-relative Markdown note paths. Response includes the total count so you can tell when results are truncated.
List Markdown notes sorted by modification time (newest first), with mtime and size.
Output schemas not documented. LLMs cannot infer response structure (fields, types, pagination). Clients must guess what readNote or searchNotes return.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot distinguish safe reads from destructive writes without explicit hints.
Error handling lacks recovery guidance. No visible error messages telling LLMs what to do on failure (retry, ask user, try alternative tool).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 68 | 2026-07-28+ | v2 |
Read a daily note by date using Obsidian daily-notes settings when available.
Read a Markdown note by vault-relative path.
Search indexed Obsidian notes semantically.
Get the status of the vault and its indexes.
Create or overwrite a vault note. Requires the vault:write scope.
vaultStatus description is vague (60 chars). Does not explain what 'status' means or when to call it. Should clarify: index health, sync state, available scopes.
writeNote's expectedContentHash parameter lacks clear guidance on when/why to use it. Description should explain: prevents lost updates on concurrent edits; omit for new files.