MCP server for Day One Journal integration with Claude Desktop
This server has significant definition quality gaps. While tool names generally follow verb_noun conventions (create_journal_entry, search_entries, etc.), there are critical issues: (1) Several tools are functionally redundant or overlapping (list_journals vs list_journals_from_db, get_entry_count vs get_entry_count_from_db, create_journal_entry vs create_entry_with_attachments vs create_location_entry), forcing the LLM to reason about subtle distinctions without clear guidance. (2) Descriptions are present but generic, most are 50-150 chars, lacking depth about when to use each tool vs alternatives. (3) Input schemas are well-formed JSON Schema with type definitions, but many parameters lack sufficient constraint documentation (e.g., 'limit' parameters state '1-50' in description but not via minItems/maxItems; 'date' format is documented as 'YYYY-MM-DD HH:MM:SS' in text but not via JSON Schema format keyword). (4) Output schemas are NOT documented anywhere, tools return results but there is no specification of the output structure, forcing LLMs to guess what fields to expect. (5) Error handling is minimal, code raises DayOneError but no guidance is provided about recovery, retryability, or remediation. (6) Three write operations (create_journal_entry, create_entry_with_attachments, create_location_entry) lack idempotency indicators and confirmation patterns.
Create a journal entry with file attachments (photos, videos, audio, PDFs)
Create a new entry in Day One journal with support for attachments, location, and metadata
Create a journal entry with location coordinates
Get journal entries for a specific date across multiple years ('On This Day' feature)
Get the total number of entries in a journal
Get actual entry count from Day One database
List all available Day One journals
Tool redundancy without clear distinction: list_journals, list_journals_from_db; get_entry_count, get_entry_count_from_db. LLMs will struggle to choose between near-identical tools. The difference (CLI vs database) is implementation detail, not user-facing semantic distinction.
Three separate create-entry tools (create_journal_entry, create_entry_with_attachments, create_location_entry) without clear guidance on which to use. They overlap significantly, create_journal_entry already accepts attachments and coordinates as optional nested objects, making the specialized variants redundant. Naming suggests false multiplicity.
No documented output schemas. Tools return results (e.g., read_recent_entries returns List[Dict[str, Any]], search_entries returns matches, create_journal_entry returns UUID) but no schema is declared specifying field names, types, or structure. LLMs cannot infer downstream tool availability or plan multi-step flows.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 47 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 25 | - | v1 |
List all journals from database with entry counts
Read recent journal entries from Day One database
Search journal entries by text content
Parameter descriptions lack formal constraints. E.g., 'limit' is documented as '1-50' or '1-50' in text but not enforced via JSON Schema minItems/maxItems or pattern. 'date' is described as 'YYYY-MM-DD HH:MM:SS format' but lacks format keyword. 'target_date' in get_entries_by_date accepts 'MM-DD or YYYY-MM-DD' without regex pattern. LLMs rely on text descriptions, missing formal constraints invite invalid input.
Write operations lack error guidance and confirmation patterns. create_journal_entry, create_entry_with_attachments, and create_location_entry are stateful mutations, but code only raises DayOneError with messages like 'Failed to create entry: {e.stderr}'. No guidance on retryability, idempotency, or recovery. No confirmation pattern to prevent accidental entry creation.
Descriptions are generic and lack 'when to use' guidance. Most descriptions are 40-70 chars (e.g., 'Create a new entry in Day One journal with support for attachments, location, and metadata'). Descriptions do not explain when to choose create_journal_entry vs create_entry_with_attachments, or list_journals vs list_journals_from_db. Baseline for A+ tools is 50-200 chars with clear context.