MCP server for OpenFDA Drug Label API - enables AI agents to query FDA drug information
The server defines 5 tools with generally adequate naming and descriptions, but has moderate gaps in schema completeness and error handling guidance. Tool names follow verb_noun convention (search_, get_) which is good. Descriptions are present and substantive (140-220 chars typical), meeting the 10-1024 char baseline. However, parameter descriptions are sparse or missing in several tools, and output schemas are completely undocumented, LLMs cannot reason about return structures. The RAG tool is ambitious but underspecified. Error handling is minimal; no recovery guidance or actionable error messages are evident. Schema validation exists via Zod (server-side) but is not visible to clients. Overall definition quality is above average for STDIO servers but below production A-grade standards.
Advanced RAG pipeline for drug safety analysis. Fetches, extracts, chunks, retrieves and summarizes FDA drug label data in one call to prevent LLM response truncation.
Get adverse reactions information for a specific drug from FDA labels
Get indications and usage information for a specific drug from FDA labels
Get warnings and precautions for a specific drug from FDA labels
Search FDA drug labels using OpenFDA API. Returns drug labeling information including indications, contraindications, warnings, and adverse reactions.
No output schemas documented. LLMs cannot predict return structure (fields, types, array depth) and must guess how to parse responses. This violates the pattern:tool requirement that all tools document output schemas.
search_drug_labels has vague parameter descriptions. 'count' is described as 'Field to count results by' but it is unclear what this does, does it return a frequency distribution? A histogram? The description must explain the parameter's effect on the response.
ae_pipeline_rag has underspecified input parameters. 'query', 'drug', and 'condition' are all optional, but the tool description does not clarify: (a) which combinations are required? (b) what is the behavior if all are omitted? (c) does order of precedence matter? LLMs cannot determine valid invocation patterns.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 57 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 43 | - | v1 |
Error handling is absent. No error recovery guidance, no actionable error messages, no classification of retryable vs fatal errors. If an API call fails, the server will return a raw error with no guidance on what the LLM should do next.
get_drug_adverse_reactions, get_drug_warnings, and get_drug_indications lack pagination support. If a drug has many records, the fixed 'limit' parameter (max 10) may truncate results silently. No offset, cursor, or total_count feedback. Large datasets will be silently truncated.
search_drug_labels documentation includes example query 'openfda.brand_name:tylenol' in the description. LLMs tend to reuse examples literally, and this may confuse users who expect a free-form search. Replace with formal constraints or move examples into inline helper text, not the description.