MCP server for a self-hosted AI journal backend. Provides tools to create, search, and reflect on journal entries with AI-powered enrichment, tagging, and semantic search capabilities.
The Recto MCP server defines 7 tools with generally good naming conventions (all start with action verbs: create_, get_, list_, search_, reflect, add_, get_). Tool descriptions are well-written and contextual, explaining WHEN to use each tool. Input schemas are comprehensive with proper JSON Schema structure (types, descriptions, enums where appropriate). However, output schemas are NOT documented in the visible source code, a critical gap for production-grade tools. Error handling guidance is absent from the code. The prompts feature is enabled but not shown in the source excerpt. Overall, this is a solid B-grade implementation with clear room for improvement on output documentation and error handling.
Add tags to an existing journal entry. Use this when the user wants to categorize or label an entry.
Create a new journal entry. Use this when the user shares thoughts, experiences, reflections, or anything they want to record in their journal.
Get a specific journal entry by its ID. Use this to retrieve the full details of a known entry.
Get a summary of journal entries for a specific time period. Use this when the user asks for a recap or overview of a day, week, or month.
List journal entries with optional filters. Use this to browse recent entries or find entries by tag, date range, or mentioned people.
Generate an AI-powered reflection on journal entries. Use this when the user asks for insights, patterns, or a summary of their journal over a period.
Output schemas not documented. Clients cannot predict what fields list_entries, search_entries, reflect, and get_summary return. This forces LLMs to guess about available fields and breaks tool chaining.
Error handling guidance absent. No recovery hints or error classification. If create_entry fails due to invalid mood or people array, the LLM has no guidance on how to retry or correct input.
Date range parameters (from, to) accept strings but lack format specification. Descriptions say 'ISO 8601' but don't clarify if partial dates (YYYY-MM) are valid, timezone handling, or whether boundaries are inclusive/exclusive.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | A | 82 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Search journal entries by keyword or semantic meaning. Use this when the user wants to find entries about a specific topic, event, or feeling.
The 'mode' parameter in search_entries has enum constraints but lacks a description explaining what 'hybrid', 'keyword', and 'semantic' mean. An LLM cannot reason about which mode to choose without knowing their semantics.
List and search tools have 'limit' parameters but no documented bounds (min/max). An LLM might pass limit=10000, causing performance issues or token exhaustion.