HealthData.gov MCP — wraps HealthData.gov CKAN API (free, no auth)
Two tools with clear verb-noun naming (search_datasets, get_dataset) and reasonable descriptions (194 - 250 chars, within baseline 34 - 392). Input schemas present with type definitions and parameter descriptions. However, output schemas are completely undocumented, LLMs cannot predict response structure for planning. Parameter descriptions lack constraints (e.g., 'limit' has no min/max enforcement stated). No error handling guidance. Missing tool annotations (readOnlyHint, idempotentHint). Descriptions are functional but generic; they do not explain WHEN to use each tool vs. the other or what downstream operations become possible.
Get full metadata for a HealthData.gov dataset by its package ID. Returns title, description, organization, resources (CSV/JSON download links), update frequency, and tags.
Search HealthData.gov for public health datasets by keyword (e.g., "COVID hospitalizations", "Medicare spending", "opioid prescriptions"). Returns dataset titles, descriptions, organizations, and resource links.
Output schemas completely undocumented. searchDatasets returns {total, results:[{id, name, title, description, organization, created, modified, tags, num_resources, resource_formats}]} and getDataset returns {id, name, title, description, organization, license, created, modified, tags, resources:[{id, name, format, url, description, created, last_modified}]}, but LLMs have no way to know this from the tool definition. Agents cannot plan downstream operations or extract the right fields.
Parameter 'limit' in search_datasets lacks constraint documentation. Description says '1-50, default 10' but no JSON Schema minumum/maximum fields. Code enforces Math.min(50, Math.max(1, limit)) internally, but LLMs cannot see this validation, they may pass invalid values and receive confusing errors.
No error handling guidance. If hdGet() throws 'HealthData.gov API error (404): ...' or 'HealthData.gov error: Unknown error', the LLM receives a raw error with no recovery hint. Should return 'Dataset not found. Try search_datasets() to find available datasets.' or similar.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Tool annotations missing. Both tools are read-only and idempotent, but no readOnlyHint or idempotentHint declared. Agents cannot distinguish safe tools from destructive ones without explicit hints.
Descriptions do not explain tool selection logic. Both tools operate on datasets, but descriptions do not clarify: use search_datasets to discover datasets by keyword, then get_dataset to fetch full metadata. This forces LLMs to infer the workflow.