MCP server for NHS health content backed by SQLite
This server demonstrates solid tool design with well-named, documented tools and proper Zod schemas. All 6 tools follow verb_noun naming conventions (search_nhs, get_condition, get_medicine, get_page, list_conditions, list_medicines). Descriptions are clear and context-rich (averaging ~140 chars), explaining what each tool does and when to use it. Input schemas use Zod with type constraints and descriptions for all parameters. Error handling includes recovery guidance (e.g., 'Did you mean...' suggestions and search fallbacks). However, output schemas are not explicitly documented, the formatters exist but their return structures are not declared in the tool definitions. Parameter descriptions could be more explicit about constraints (e.g., slug format validation). The 'aspect' enum in get_condition is well-designed but only applies to one tool. No tool annotations (readOnlyHint, destructiveHint) are present, though all tools are read-only.
Get detailed NHS information about a specific health condition. Use search_nhs or list_conditions first to find the correct slug.
Get detailed NHS information about a specific medicine including uses, dosage, side effects, and interactions. Use search_nhs or list_medicines first to find the correct slug.
Fetch any NHS page by its slug, regardless of type.
Browse NHS conditions A-Z. Optionally filter by first letter.
Browse NHS medicines A-Z. Optionally filter by first letter.
Full-text search across all NHS conditions and medicines. Returns matching pages with names, types, and descriptions.
Output schemas are not documented in tool definitions. Formatters exist (formatPageWithSections, formatSearchResults, formatPageList) but their return structure is not declared. LLMs cannot plan downstream extraction or tool chaining without knowing what fields to expect.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) are present. Although all tools are read-only and safe to retry, explicit annotations would help clients (e.g., Claude) classify tools correctly for safety and planning.
Parameter 'slug' in get_condition, get_medicine, and get_page lacks explicit format constraints. Descriptions say 'e.g., asthma, type-2-diabetes' but do not state case sensitivity, allowed characters, or transformation rules (e.g., spaces → hyphens). This invites malformed inputs.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 8 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 49 | - | v1 |
The 'letter' parameter in list_conditions and list_medicines is constrained to .length(1) but the description does not clarify: is it case-sensitive? Must be uppercase? Does it match first character only? These details should be explicit in the description.
No pagination support on list_conditions or list_medicines. If the NHS A-Z lists grow large, returning all matches could exceed token budgets. Even if not needed now, these tools should document max result size or add offset/limit parameters following MCP pagination patterns.