CLI + MCP: LLM-formatierte Obsidian-Notizen (Vault-Dateisystem oder Local REST API)
Two tools with basic Zod schemas and German descriptions. format_note has a clear verb-noun name and acceptable description (95 chars). save_note_to_obsidian is compound (save + format), violating single-responsibility. Both tools lack output schema documentation, LLMs cannot predict return structure. Parameter descriptions are present but minimal (10-40 chars), below the 72-char baseline. No error handling guidance, no recovery paths, no validation rules stated in descriptions. Schemas are present but sparse: raw is required string, isoDate/subfolder/useRest are optional with minimal constraint documentation. No enum constraints, no format specifications, no range limits. The code shows environment variable injection (SMART_NOTE_VAULT, OBSIDIAN_REST_URL) but no documentation of these prerequisites in tool descriptions. Overall: functional but well below production baseline.
Formatiert eine Rohe Notiz per LLM: Titel, Slug, Tags, Kategorie, Zusammenfassung, YAML-Frontmatter, Markdown-Body.
Wie format_note; speichert die Notiz im Vault (Dateisystem oder Local REST API per Env).
save_note_to_obsidian violates single-responsibility: combines formatting + saving + REST/filesystem routing. Should split into separate tools (format_note already exists; add save_to_vault and save_via_rest).
No output schema documented. Both tools return {content: [{type: 'text', text: markdown}]} but LLMs cannot predict this structure. Document return types explicitly.
Parameter descriptions are too brief (10-40 chars vs 72-char baseline). 'Roher Notiztext' and 'Relativ zum Vault; Standard SMART_NOTE_INBOX oder leer' lack actionable constraints. Add format, length, and dependency hints.
No error handling guidance. Code throws 'OBSIDIAN_REST_URL und OBSIDIAN_REST_API_KEY setzen' but tool description does not mention these prerequisites or recovery steps. LLM cannot self-correct.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 38 | 2026-07-28+ | v2 |
No input validation rules in descriptions. 'isoDate' accepts optional string but format (YYYY-MM-DD) is only documented in description text, not as a regex pattern or enum. LLMs may pass invalid dates.