FDA & NHTSA regulatory risk intelligence for AI agents: device compliance risk by product code, parsed 510(k) premarket evidence with source quotes, predicate chains, postmarket drift signals, clearance-to-payment reimbursement pathways, and vehicle safety history. Live public regulatory data — decision support, not regulatory advice.
The FDA Risk Radar MCP declares 12 tools with descriptions and basic input schemas in .well-known/mcp.json. However, inspection reveals significant quality gaps: (1) Tool descriptions are present but lack specificity about WHEN to use each tool vs. alternatives (e.g., device_risk_lookup vs. device_postmarket_lookup distinction is unclear). (2) Input schemas are minimal, most tools accept only a single string or generic object parameter with minimal constraint documentation. (3) No output schemas are visible in the source code, only tool names and descriptions appear in mcp.json. (4) Parameter descriptions are sparse or absent; for example, 'evidence_search' accepts a query object with fields like 'product_code, panel, applicant, clinical_data, sensitivity_metric, or PCCP' but these are listed in prose rather than as a typed schema. (5) No error handling guidance is documented. The server.mjs is a STDIO bridge that forwards requests to a hosted endpoint, so actual tool implementation is opaque, we can only evaluate what is statically visible. All 12 tools are READ_ONLY, which is positive for safety but not documented in the descriptions themselves. Naming follows a reasonable pattern (verb_noun style: lookup, search, stats) but could be more specific about distinctions.
Postmarket presence rates across the AI/ML cohort, every rate with its denominator inline.
Parsed premarket evidence FDA accepted for an AI/ML device by 510(k) number, each field with a verbatim source quote and page.
Post-clearance intelligence for one AI/ML device — recalls, MAUDE level and trend, letter/483 matches, drift signals.
FDA compliance risk for a device category by 3-letter product code — recall history, MAUDE trend, warning-letter matches, composite score.
Reporting-rate stats across the parsed AI/ML corpus — presence figures with denominators, never pooled values.
Find AI/ML clearances by product code, panel, applicant, clinical data, sensitivity metric, or PCCP.
Output schemas not documented. Tool descriptions in mcp.json mention what data is returned (e.g., 'recall history, MAUDE trend, warning-letter matches, composite score') but no formal output schema is visible. LLMs cannot reliably extract fields or chain results without documented return types.
Generic query object schemas. Tools like 'evidence_search', 'postmarket_search', and 'reimbursement_search' accept a generic 'query' object parameter. The mcp.json description lists accepted fields in prose ('product_code, panel, applicant, ...') but the schema shows no typed properties, enums, or field constraints. This forces LLMs to guess field names and valid values.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 53 | <=2025-11-25 | v2 |
Find AI/ML devices by postmarket criteria — drift signals, recalls in 24 months, rising MAUDE trend.
Trace a device's predicate ancestry with each predicate's age at clearance.
Clearance-to-payment pathway by K/DEN number or CPT code — NTAP, Cat I/III, CMS rates, HCPCS, LCDs, payer policies.
Find payment pathways by mechanism, CPT category, NTAP status, or applicant.
Mechanism distribution across the reimbursement corpus with min/median/max amounts per mechanism.
NHTSA safety history by make/model/year — recall campaigns and complaint statistics.
Parameter descriptions missing or minimal. Input schemas in mcp.json show field names and types but lack descriptions explaining constraints, formats, or when to use each field. Example: 'product_code' is listed as a string with no guidance on format (3-letter code), valid ranges, or examples.
No error handling or recovery guidance. Tool descriptions do not mention what happens on invalid input, not-found responses, or how LLMs should retry. Example: if a K/DEN number is invalid, does reimbursement_lookup return a 404, a null result, or an error message? How should the LLM proceed?
Tool naming ambiguity for similar operations. 'device_risk_lookup' and 'device_postmarket_lookup' both retrieve risk/safety data but for different stages (premarket vs. postmarket). The distinction is not clear from names alone. LLMs may conflate them or pick the wrong one.
Minimal schema detail for list/stats tools. Tools like 'evidence_cohort_stats' and 'cohort_postmarket_stats' accept no parameters (no schema shown) but descriptions reference 'the parsed AI/ML corpus' and 'presence figures with denominators'. Without documented output schema, LLMs cannot extract or interpret the returned statistics.