Exposes the FDA open data API (api.fda.gov) to Claude as tools for searching drug enforcement reports, drug labels, adverse events, and generic openFDA queries.
Five tools with complete input schemas and descriptions. Naming follows verb_noun pattern (search_*, server_version). Descriptions are adequate (100-250 chars) but lack LLM-optimized guidance on WHEN to use each tool vs. alternatives. Parameter descriptions present but generic ('openFDA query string' without format/constraint examples). Output schemas not documented, LLMs cannot predict response structure. Error handling returns in-band errors without recovery guidance. No tool annotations (readOnlyHint present conceptually but not declared in schema). Composition is sound: each tool has one responsibility, but no pagination guidance despite limit parameters.
Generic openFDA query for any endpoint not covered by the specific tools. endpoint: an openFDA path WITHOUT '.json', e.g. 'device/510k', 'device/event', 'drug/ndc', 'food/event', 'animalandveterinary/event'. search: a raw openFDA query string. Returns the total count and up to `limit` raw result records (large objects are returned as-is — prefer the specific tools where they exist).
Search FDA drug adverse-event reports (FAERS). search: e.g. 'patient.drug.medicinalproduct:metformin', 'patient.reaction.reactionmeddrapt:"NAUSEA"', or a date range 'receivedate:[20240101+TO+20241231]'. Returns each report's id, seriousness, date, and its reactions + drugs (capped).
Search FDA structured drug labeling (SPL). search: e.g. 'openfda.brand_name:"Tylenol"', 'openfda.generic_name:metformin'. Returns brand/generic/manufacturer plus truncated indications, warnings and dosage.
Search FDA recall / enforcement reports. category: 'drug', 'device', or 'food'. search: an openFDA query — e.g. 'recalling_firm:"Acme Pharma"', 'product_description:insulin', 'classification:"Class I"', or combine with '+AND+' (e.g. 'classification:"Class I"+AND+state:CA'). Returns recalls trimmed to the key fields: status, classification (I/II/III), recalling firm, product, reason, initiation date, voluntary/mandated.
Output schemas not documented. LLMs cannot predict response structure (total, results, note fields). Rubric baseline: 100% of A+ tools have documented return types.
Parameter descriptions lack format/constraint guidance. 'openFDA query string' does not explain syntax (e.g., 'recalling_firm:"Acme"+AND+state:CA'). Rubric: 'The project key (2-10 uppercase letters)' is actionable; bare names invite invalid input.
No tool annotations (readOnlyHint). All tools are read-only but schema does not declare this. Agents cannot distinguish safe tools from destructive ones without explicit hints.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | <=2025-11-25 | v2 |
Return the deployed paraqualis-gxp version + the server's Python runtime. Lets a caller confirm at runtime which qualified build is in use, rather than trusting a static manifest (21 CFR Part 11 §11.10(k); GAMP 5 change control).
Error handling returns in-band errors without recovery guidance. 'No matching records' is clear, but 429 rate-limit error lacks actionable next step for LLM (e.g., 'Retry in 60s' or 'Call /openfda:setup').
Descriptions do not explain WHEN to use each search tool vs. alternatives. 'search_enforcement' vs 'openfda_query' distinction unclear, LLM may pick wrong tool. Rubric: 'When should the LLM call it instead of a similar tool?'