
Openfda Mcp Server
Connects Claude to the openFDA API with nine tools spanning adverse events, recalls, drug labels, device clearances, and NDC lookups. You can search adverse event reports across drugs, food, and devices, pull complete FDA package inserts, query 510(k) clearances and PMA approvals, or aggregate counts across any field in the openFDA dataset. Built on a framework that handles auth, storage backends, and retry logic, so it runs locally over stdio or as a public HTTP endpoint. Useful when you need to cross-reference drug safety signals, check recall history, verify NDC codes, or pull official labeling for clinical or regulatory work. Supports up to 1000 results per query with Elasticsearch syntax for filtering.
- GitHub stars
- 4
- tools
- 14
- transport
- STDIO, HTTP
- env vars
- 16
- last updated
- Nov 11, 2026
Install
From registry metadata$ npx add-mcp https://openfda.caseyjhand.com/mcp --name openfdaRun in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.
Review the command, arguments and environment values before installing. MCP servers run with your local permissions.
Other ways
Claude Code
$ claude mcp add --transport http openfda https://openfda.caseyjhand.com/mcpRun in your terminal. Add --scope user to make it available in every project.
Tools
Verified live · 14 toolsVerified live against the running server on Nov 6, 2026.
openfda_search_adverse_eventsSearch adverse event reports across drugs, food, and devices. Use to investigate safety signals, find reports for a specific product, or explore reactions by demographics. With stage=true, call openfda_dataframe_describe for the staged columns, then openfda_dataframe_query for...8 params
Search adverse event reports across drugs, food, and devices. Use to investigate safety signals, find reports for a specific product, or explore reactions by demographics. With stage=true, call openfda_dataframe_describe for the staged columns, then openfda_dataframe_query for...
canvas_idstringcategory*stringdrug · food · devicefieldsarraylimitnumbersearchstringskipnumbersortstringstagebooleanopenfda_search_animal_eventsSearch adverse event reports for veterinary drugs and devices submitted to the FDA Center for Veterinary Medicine. Records include animal species, breed, age, weight, drug name and route, adverse reactions (using VeDDRA terminology), and outcome. Use to investigate safety sign...7 params
Search adverse event reports for veterinary drugs and devices submitted to the FDA Center for Veterinary Medicine. Records include animal species, breed, age, weight, drug name and route, adverse reactions (using VeDDRA terminology), and outcome. Use to investigate safety sign...
canvas_idstringfieldsarraylimitnumbersearchstringskipnumbersortstringstagebooleanopenfda_search_drug_shortagesSearch FDA drug shortage records. Returns per-product shortage status, availability, therapeutic category, dosage form, manufacturer, and dates. Use to check whether a drug is currently in shortage, find all oncology drugs with supply issues, or retrieve the openfda block (bra...7 params
Search FDA drug shortage records. Returns per-product shortage status, availability, therapeutic category, dosage form, manufacturer, and dates. Use to check whether a drug is currently in shortage, find all oncology drugs with supply issues, or retrieve the openfda block (bra...
canvas_idstringfieldsarraylimitnumbersearchstringskipnumbersortstringstagebooleanopenfda_search_recallsSearch enforcement reports and recall actions across drugs, food, and devices. With stage=true, call openfda_dataframe_describe for the staged columns, then openfda_dataframe_query for SQL.9 params
Search enforcement reports and recall actions across drugs, food, and devices. With stage=true, call openfda_dataframe_describe for the staged columns, then openfda_dataframe_query for SQL.
canvas_idstringcategory*stringdrug · food · deviceendpointstringenforcement · recalldefault: enforcementfieldsarraylimitnumbersearchstringskipnumbersortstringstagebooleanopenfda_search_tobacco_reportsSearch problem reports submitted to the FDA for tobacco products, including e-cigarettes, vaping products, cigarettes, and smokeless tobacco. Reports capture product type, reported health problems (e.g. seizure, chest pain), product problems (e.g. exploding battery), whether a...7 params
Search problem reports submitted to the FDA for tobacco products, including e-cigarettes, vaping products, cigarettes, and smokeless tobacco. Reports capture product type, reported health problems (e.g. seizure, chest pain), product problems (e.g. exploding battery), whether a...
canvas_idstringfieldsarraylimitnumbersearchstringskipnumbersortstringstagebooleanopenfda_count_valuesAggregate and tally unique values for any field across any openFDA endpoint. Returns ranked term-count pairs sorted by count descending; a date field tallies one term per distinct YYYYMMDD date, ranked the same way. Pair with openfda_search_adverse_events, openfda_search_drug_...4 params
Aggregate and tally unique values for any field across any openFDA endpoint. Returns ranked term-count pairs sorted by count descending; a date field tallies one term per distinct YYYYMMDD date, ranked the same way. Pair with openfda_search_adverse_events, openfda_search_drug_...
count*stringendpoint*stringdrug/event · drug/label · drug/enforcement · drug/ndc · drug/drugsfda · drug/shortageslimitnumbersearchstringopenfda_describe_fieldsReturn the searchable field paths for an openFDA endpoint, grouped by category with type and description. Use before constructing a search query to find the correct dotted field path — field names differ per endpoint and are not discoverable from the tool schema alone.1 params
Return the searchable field paths for an openFDA endpoint, grouped by category with type and description. Use before constructing a search query to find the correct dotted field path — field names differ per endpoint and are not discoverable from the tool schema alone.
endpoint*stringdrug/event · drug/label · drug/enforcement · drug/ndc · drug/drugsfda · drug/shortagesopenfda_get_drug_labelLook up FDA drug labeling (package inserts / SPL documents). Check indications, warnings, dosage, contraindications, active ingredients, or any structured label section. A label runs to tens of thousands of tokens, so a page that exceeds the inline budget returns the list of a...5 params
Look up FDA drug labeling (package inserts / SPL documents). Check indications, warnings, dosage, contraindications, active ingredients, or any structured label section. A label runs to tens of thousands of tokens, so a page that exceeds the inline budget returns the list of a...
limitnumbersearch*stringsectionsarrayskipnumbersortstringopenfda_search_drug_approvalsSearch the Drugs@FDA database for drug application approvals (NDAs and ANDAs). Returns application details, sponsor info, and full submission history. Pair with openfda_get_drug_label to read the approved label, or openfda_count_values to aggregate by sponsor_name, product_typ...7 params
Search the Drugs@FDA database for drug application approvals (NDAs and ANDAs). Returns application details, sponsor info, and full submission history. Pair with openfda_get_drug_label to read the approved label, or openfda_count_values to aggregate by sponsor_name, product_typ...
canvas_idstringfieldsarraylimitnumbersearchstringskipnumbersortstringstagebooleanopenfda_search_device_clearancesSearch FDA device premarket notifications — 510(k) clearances and PMA approvals. With stage=true, call openfda_dataframe_describe for the staged columns, then openfda_dataframe_query for SQL.8 params
Search FDA device premarket notifications — 510(k) clearances and PMA approvals. With stage=true, call openfda_dataframe_describe for the staged columns, then openfda_dataframe_query for SQL.
canvas_idstringfieldsarraylimitnumberpathway*string510k · pmasearchstringskipnumbersortstringstagebooleanopenfda_lookup_ndcLook up drugs in the NDC (National Drug Code) Directory. Identify drug products by NDC code, find active ingredients, packaging details, or manufacturer info. Pair with openfda_get_drug_label using the returned brand_name or set_id to read the package insert. With stage=true,...7 params
Look up drugs in the NDC (National Drug Code) Directory. Identify drug products by NDC code, find active ingredients, packaging details, or manufacturer info. Pair with openfda_get_drug_label using the returned brand_name or set_id to read the package insert. With stage=true,...
canvas_idstringfieldsarraylimitnumbersearch*stringskipnumbersortstringstagebooleanopenfda_drug_profileResolve one drug name to its FDA identity, then fan out in parallel across the bounded per-drug openFDA endpoints and merge into one profile: identity, label highlights, adverse-event summary, recall history, Drugs@FDA approval, and shortage status. Replaces chaining openfda_g...1 params
Resolve one drug name to its FDA identity, then fan out in parallel across the bounded per-drug openFDA endpoints and merge into one profile: identity, label highlights, adverse-event summary, recall history, Drugs@FDA approval, and shortage status. Replaces chaining openfda_g...
drug*stringopenfda_dataframe_describeList the tables and column schemas on a DataCanvas staged by an openFDA search tool. Call before openfda_dataframe_query to discover the exact table name, column names, and DuckDB types needed for valid SQL. row_count is the full staged result set, not the inline preview count...1 params
List the tables and column schemas on a DataCanvas staged by an openFDA search tool. Call before openfda_dataframe_query to discover the exact table name, column names, and DuckDB types needed for valid SQL. row_count is the full staged result set, not the inline preview count...
canvas_id*stringopenfda_dataframe_queryRun a read-only SQL SELECT against a DataCanvas table staged by an openFDA search tool (call one with stage=true; its response carries canvas_id + canvas_table). Enables GROUP BY, COUNT/SUM/AVG, time-series, and joins across the staged result set without re-paging the API. Cal...2 params
Run a read-only SQL SELECT against a DataCanvas table staged by an openFDA search tool (call one with stage=true; its response carries canvas_id + canvas_table). Enables GROUP BY, COUNT/SUM/AVG, time-series, and joins across the staged result set without re-paging the API. Cal...
canvas_id*stringquery*stringSponsors
Configuration
OPENFDA_API_KEYFree API key from open.fda.gov — increases daily limit from 1K to 120K requests.
OPENFDA_CLAMP_LIMITSdefault: trueClamp a limit above its endpoint's cap to that cap, with a notice naming the requested value and the cap. On by default; set to 'false' to reject such a limit instead and advertise the cap as the schema maximum.
CANVAS_PROVIDER_TYPEdefault: duckdbDataCanvas staging, on by default: stage=true or a canvas_id on an openfda_search_* tool or openfda_lookup_ndc stages the matched records as a SQL table for the openfda_dataframe_* tools. The DuckDB binding ships with the server. Set to 'none' to disable.
OPENFDA_DATAFRAME_DROP_ENABLEDdefault: falseEnable openfda_dataframe_drop, which deletes a table staged on a DataCanvas. Off by default; applies only when DataCanvas is enabled (CANVAS_PROVIDER_TYPE=duckdb).
OPENFDA_MIRROR_ENABLEDdefault: falseServe exact-key lookups for drug/label, drug/ndc, drug/enforcement, and drug/drugsfda from a local bulk mirror instead of the API. Off by default; the initial harvest runs out-of-band via the mirror:init script.
OPENFDA_MIRROR_PATHdefault: ./data/openfda-mirrorDirectory holding one SQLite file per mirrored dataset.
OPENFDA_MIRROR_REFRESH_CRONCron expression for the in-process mirror refresh. HTTP transport only; stdio operators run mirror:refresh from the host. Requires the optional node-cron peer dependency.
OPENFDA_MIRROR_FALLBACK_LIVEdefault: trueFall back to the live API when the mirror is cold, missing the record, or failing. Disable to fail loudly instead.
OPENFDA_MIRROR_REFRESH_TIMEOUT_MSdefault: 21600000Wall-clock budget for one scheduled refresh before it is aborted. Raise it for drug/label, the only multi-partition dataset.
OPENFDA_MIRROR_BASE_URLdefault: https://api.fda.govHost serving the openFDA bulk download manifest. Override only to harvest from a private mirror of the dumps.
MCP_LOG_LEVELdefault: infoSets the minimum log level for output (e.g., 'debug', 'info', 'warn').
MCP_TRANSPORT_TYPEdefault: httpSelects the HTTP transport.
MCP_HTTP_HOSTdefault: 127.0.0.1The hostname for the HTTP server.
MCP_HTTP_PORTdefault: 3010The port to run the HTTP server on.
MCP_HTTP_ENDPOINT_PATHdefault: /mcpThe endpoint path for the MCP server.
MCP_AUTH_MODEdefault: noneAuthentication mode to use: 'none', 'jwt', or 'oauth'.
Readme
@cyanheads/openfda-mcp-server
Query FDA data on drugs, food, devices, and recalls via openFDA. STDIO or Streamable HTTP.
Details
- Repository
- github.com/cyanheads/openfda-mcp-server
- Category
- Data & Analytics
- Package
@cyanheads/openfda-mcp-server- Transport
- STDIO, HTTP
- Registry
- MCP registry, active
- Resources
- 1
- Tools verified
- Nov 6, 2026
More from cyanheads
- Openlibrary Mcp Server4
- Un Comtrade Mcp Server4
- Aviation Weather Mcp Server3
- Devops Status Mcp Server3
- Earthquake Mcp Server3
- Eia Energy Mcp Server3
- Ensembl Mcp Server3
- Noaa Marine Mcp Server3
- Openstates Mcp Server3
- Treasury Fiscaldata Mcp Server3
- Usgs Water Mcp Server3
- Wikidata Mcp Server3
- Worldbank Mcp Server3
- Mcp Ts Core153
- Arxiv Mcp Server7
- Bluesky Mcp Server2
- Fbi Crime Mcp Server2
- Fema Mcp Server2
- Imf Mcp Server2
- Nonprofit Explorer Mcp Server2
- Onebusaway Mcp Server2
- Openfec Mcp Server2
- Openfoodfacts Mcp Server2
- Reliefweb Mcp Server2