Exposes a local work journal as an MCP server for Claude Code and Claude Desktop. Provides read-only access to journal entries, search, topic retrieval, learning extraction, project arcs, and entity profiles via 11 tools.
ClaudeJournal exposes 11 read-only journal tools with consistent naming (journal_* prefix) and reasonable descriptions (avg ~150 chars). All tools have input schemas with types and defaults. However, output schemas are entirely undocumented, the code returns formatted strings with no structured field definitions, forcing LLMs to parse prose. Parameter descriptions are present but generic (e.g., 'Maximum number of results to return'). Error handling is minimal: tools return plain strings on failure with no recovery guidance. No tool annotations (readOnlyHint, etc.) despite all being read-only. The _suggest_matches helper shows thoughtful UX (difflib + substring fallback) but this sophistication is invisible to the LLM.
Full multi-day project arc retrospective.
Pages that reference a given target. Returns backlinks with source scope, key, link type, and URL.
Tiered transfer-recall: find prior learnings from other projects that are relevant to the given query. Three signal tiers: entity match, tag overlap, FTS5.
Temporal recall: prior-year echoes, recurring friction, milestones from the journal.
Entity profile: synthesis prose, project list with date counts, top learnings.
Return 'learned' bullets pulled from session briefs across the corpus, newest first. If `topic` is given, only bullets containing that substring (case-insensitive) are returned.
No output schemas documented. All tools return formatted strings (prose) with no structured field definitions. LLMs cannot parse results reliably or chain tools without manual extraction.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All 11 tools are read-only but this is not declared in the schema, forcing LLMs to infer safety from descriptions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
Return unresolved frictions still open from session briefs.
Return the last N days of daily diary prose.
Search the journal via BM25 + vector retrieval. Returns formatted excerpts a model can read and cite.
Third-party tools/libraries/services mentioned in briefs (extracted entities).
Return days tagged with `tag` (case-insensitive). Tags come from the 'tags' field of session briefs. When no exact tag match is found, falls back to an FTS5 search for the term and suggests close tag names.
Error handling returns plain strings with no recovery guidance. E.g., 'No matches in the journal for: {query}' gives no hint to retry with different terms or call a discovery tool. No error classification (retryable vs fatal).
Parameter descriptions are generic and lack constraints. E.g., 'Maximum number of results to return (default 5, max 25)' does not explain what 'results' are or when to use different limits. No guidance on when to call journal_search vs journal_connections.
journal_backlinks requires 'scope' and 'key' parameters but no enum or documentation of valid scope values (e.g., 'daily', 'topic', 'project_arc'). LLMs must guess or fail.