Transactional guard proxy for MCP agents: impact diff, human approval gate, saga compensation, hash-chained audit log.
ChronoMCP demonstrates strong naming conventions (verb_noun pattern: list_records, create_record, delete_record, send_email, charge_payment) and comprehensive tool descriptions (avg 85 chars, all present). All 8 tools have explicit JSON Schema input definitions with required fields clearly marked. Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are present and correctly applied. However, parameter descriptions are entirely absent from input schemas, the schema objects contain only type and required fields, no 'description' key per parameter. Output schemas are not documented. Error handling is minimal (toolError() returns generic text). The custom _meta.dev.chronomcp/compensate extension is well-structured for saga/compensation patterns but non-standard.
Charges a payment (simulated). Fails when amount > 100 (demo card limit).
Creates a named record and returns the generated id.
Deletes a record by id. The content is not retained.
Disables the admin tools.
Enables admin tools (adds wipe_all_records and notifies tools/list_changed).
Lists the records currently in the in-memory store.
Sends an email (simulated). There is no 'un-send'.
Parameter descriptions missing from all input schemas. JSON Schema objects contain only 'type' and 'required' keys; no 'description' field for any parameter (e.g., 'name' in create_record, 'to'/'subject'/'body' in send_email, 'amount'/'customer' in charge_payment). LLMs cannot infer parameter semantics from names alone.
Output schemas not documented. Tool handlers return structured content (e.g., create_record returns {id, name}, list_records returns {records, count}), but these schemas are not declared in tool definitions. Agents cannot plan downstream calls without knowing what fields to expect.
Minimal error handling. toolError() returns only a text message with no guidance on recovery. Errors like 'create_record: name is required' lack actionable next steps (e.g., 'Provide a non-empty name string'). charge_payment fails silently when amount > 100 with no explanation of the constraint.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Deletes ALL records. No way back.
No pagination support. list_records returns all records in memory without limit or offset parameters. In production, unbounded result sets exhaust context windows and degrade LLM reasoning.
Custom _meta.dev.chronomcp/compensate extension is non-standard and not part of the MCP 2026-07-28 spec. While the compensation metadata is well-structured, it relies on a proprietary convention that clients must explicitly understand. Consider aligning with official MCP extensions or documenting the extension in a spec proposal.