A small, generic Model Context Protocol (MCP) server demonstrating typed read/write tools, env-gated write safeguards, structured errors, and deterministic record review.
Server demonstrates solid fundamentals: all 5 tools have explicit schemas with proper JSON Schema structure, descriptions are present and action-oriented, and error handling is structured with typed exceptions. However, parameter descriptions are entirely absent, the schema declares properties but provides no guidance on what each parameter means or how to use it. Tool descriptions are brief (10-30 chars) and lack context on when to use each tool or what it returns. No output schemas are documented. The review_record tool is well-designed (deterministic, structured), but the CRUD tools lack the depth expected of production integrations.
Create a record. Requires MCP_ALLOW_WRITES=true.
Get a single record by id.
List all records.
Run deterministic checks on a record and return structured findings.
Patch a record by id. Requires MCP_ALLOW_WRITES=true.
No parameter descriptions. Schema declares 'id', 'name', 'amount', 'status' but provides zero guidance on what each means, valid ranges, or format expectations. LLMs cannot infer parameter semantics from names alone.
Tool descriptions are too brief (10 - 30 chars). 'List all records' and 'Get a single record by id' lack context on when to use each tool, what data structure is returned, or dependencies. Baseline is 194 chars; these are 5 - 10x too short.
No output schemas documented. Callers cannot know what fields list_records returns, what structure review_record produces, or what create_record echoes back. LLMs must guess or infer from examples.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
No pagination support on list_records. If the record store grows, returning all records will blow context windows. Should accept limit and offset/cursor parameters and return a total count.
create_record and update_record descriptions mention 'Requires MCP_ALLOW_WRITES=true' but do not explain what happens if writes are disabled. Error handling is structured (fail() returns isError=true), but the description should guide the LLM on recovery.