A Grand Line MCP server that persists causality decisions into a SQLite database and markdown ledger. Records project decisions, rejected alternatives, and justifications for future historical reference.
Two tools with clear, thematic naming (log_causality_point, time_leap_retrieval) and reasonable descriptions (120 - 180 chars). However, input schemas lack formal type constraints (no enums, ranges, or format specs). Parameter descriptions are present but minimal (10 - 30 chars). Output is unstructured text rather than typed JSON objects, forcing LLMs to parse narrative responses. No error handling guidance, no pagination for retrieval results, no idempotency markers. Schemas are visible and valid JSON Schema, but sparse. Naming follows verb_noun convention well; descriptions explain WHAT but not WHEN or dependencies.
Anchor a moment in time. Record a project decision, the alternatives rejected, and why it was chosen — for future historical reference.
Leap backward into the timeline. Retrieve past decisions and the reasons behind them to understand how the current state came to be.
Output is unstructured narrative text, not typed JSON. LLMs must parse free-form strings to extract decision metadata, timestamps, and alternatives. This wastes tokens and invites parsing errors.
Parameter descriptions are too brief (10 - 30 chars). 'Optional keyword to find a specific past decision' lacks guidance on search scope, case sensitivity, or partial matching behavior. Descriptions should be 50 - 150 chars with format/constraint hints.
No input validation constraints. 'decision_made' is required but has no length limit, character restrictions, or format guidance. 'query' accepts any string with no bounds. Unbounded inputs risk SQL injection or resource exhaustion.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2026-07-28+ | v2 |
No error recovery guidance. If decision_made is empty, ValueError is raised but LLM sees only 'Toki Toki no Mi requires a decision_made to anchor.' No hint on what constitutes valid input or how to retry.
time_leap_retrieval returns 10 most recent anchors by default but no pagination support. If timeline grows to 1000+ entries, response bloat wastes tokens. No limit parameter, no cursor, no total count.