MCP server library for sapphire-journal - a task, event and note management app built on sapphire-framework with file-based, local-first architecture for human-agent collaboration
Server has 9 well-structured tools with complete input schemas and descriptions. Naming follows verb_noun convention (entry_list, entry_new, entry_modify, entry_remove, entry_search). Descriptions are substantive (100-250 chars typical). However, output schemas are not documented in the provided source, LLMs cannot predict return structure. Parameter descriptions are present but some lack format constraints (e.g., date formats stated in description but not as JSON Schema patterns). Error handling guidance is absent, tools do not indicate what to do on failure. No tool annotations (readOnlyHint, destructiveHint) despite clear risk levels (READ_ONLY, WRITE, DESTRUCTIVE). Composition is sound: each tool has one responsibility, and tools chain naturally (entry_list → entry_show → entry_modify). Security: no credentials exposed as parameters. Overall: solid foundation, but missing output documentation and error recovery guidance prevents A-grade.
Validate an entry for consistency and report any issues
Automatically fix common issues in an entry (e.g., missing frontmatter, malformed dates)
List entries with optional filtering by period, task status, tags, and other criteria. Supports sorting and pagination.
Modify an existing entry's fields including title, body, parent, tags, task status, and event dates
Create a new entry with optional title, body, parent, tags, task fields, and event fields
Delete an entry from the journal
Search entries using full-text search (FTS5) and vector similarity search with optional filtering
Output schemas not documented. LLMs cannot predict return structure (fields, types, pagination). Tools like entry_list and entry_search should document: result array structure, total count, next_cursor, per-item fields (id, title, task_status, created_at, etc.).
Tool annotations missing. entry_remove is DESTRUCTIVE but has no destructiveHint. entry_list, entry_show, entry_search are READ_ONLY but lack readOnlyHint. Annotations guide agent safety reasoning and retry logic.
Error handling guidance absent. No tool description explains what to do on failure (e.g., 'If entry not found, try entry_search() with partial title'). Agents have no recovery path on errors.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 69 | <=2025-11-25 | v2 |
Display the full content of a single entry by ID or path
Display entries in a hierarchical tree structure following parent_id relationships, with the same filtering options as entry_list
Date/time format constraints not formalized in schema. Descriptions state 'YYYY-MM-DD or YYYY-MM-DDTHH:MM' but JSON Schema lacks pattern or format declarations. LLMs may pass invalid formats.
entry_show parameter 'entry' is an object type with no sub-schema. Unclear whether it accepts {id: string}, {path: string}, or both. LLMs cannot determine valid structure.