openfda-mcp-server
An MCP server that queries the openFDA public API to retrieve data on drugs, food, devices, and recalls. It provides tools for searching adverse events, recalls, drug approvals, device clearances, and looking up NDC codes and drug labels.
Package and access
Local package with source-attributed installation metadata. Koskamo does not execute packages during review.
What you can do with it
- Search adverse event reports across drugs, food, and devices
- Search enforcement reports and recall actions
- Look up FDA drug labeling and package inserts
- Search FDA drug shortage records
Source and maintenance
- Maintenance checked
Packages and installation
Source-provided package data. Koskamo has not executed or live-probed this package.
@cyanheads/openfda-mcp-server 0.9.1
{
"version": "0.9.1",
"transport": "stdio",
"identifier": "@cyanheads/openfda-mcp-server",
"runtimeHint": "npx",
"registryType": "npm",
"registryBaseUrl": "https://registry.npmjs.org",
"environmentVariables": [
{
"name": "OPENFDA_API_KEY",
"format": "string",
"description": "Free API key from open.fda.gov — increases daily limit from 1K to 120K requests."
},
{
"name": "CANVAS_PROVIDER_TYPE",
"format": "string",
"default": "duckdb",
"description": "DataCanvas 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."
},
{
"name": "OPENFDA_DATAFRAME_DROP_ENABLED",
"format": "string",
"default": "false",
"description": "Enable openfda_dataframe_drop, which deletes a table staged on a DataCanvas. Off by default; applies only when DataCanvas is enabled (CANVAS_PROVIDER_TYPE=duckdb)."
},
{
"name": "OPENFDA_MIRROR_ENABLED",
"format": "string",
"default": "false",
"description": "Serve 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."
},
{
"name": "OPENFDA_MIRROR_PATH",
"format": "string",
"default": "./data/openfda-mirror",
"description": "Directory holding one SQLite file per mirrored dataset."
},
{
"name": "OPENFDA_MIRROR_REFRESH_CRON",
"format": "string",
"description": "Cron 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."
},
{
"name": "OPENFDA_MIRROR_FALLBACK_LIVE",
"format": "string",
"default": "true",
"description": "Fall back to the live API when the mirror is cold, missing the record, or failing. Disable to fail loudly instead."
},
{
"name": "OPENFDA_MIRROR_REFRESH_TIMEOUT_MS",
"format": "string",
"default": "21600000",
"description": "Wall-clock budget for one scheduled refresh before it is aborted. Raise it for drug/label, the only multi-partition dataset."
},
{
"name": "OPENFDA_MIRROR_BASE_URL",
"format": "string",
"default": "https://api.fda.gov",
"description": "Host serving the openFDA bulk download manifest. Override only to harvest from a private mirror of the dumps."
},
{
"name": "MCP_LOG_LEVEL",
"format": "string",
"default": "info",
"description": "Sets the minimum log level for output (e.g., 'debug', 'info', 'warn')."
}
]
}Tools
Reported by the attributed source; not independently observed by Koskamo.
Connect from your client
Each snippet configures the same source-provided package; replace placeholders before use.
Cursor
{
"mcpServers": {
"openfda-mcp-server": {
"command": "npx",
"args": [
"-y",
"@cyanheads/openfda-mcp-server@0.9.1"
],
"env": {
"OPENFDA_API_KEY": "<YOUR_OPENFDA_API_KEY>",
"CANVAS_PROVIDER_TYPE": "<YOUR_CANVAS_PROVIDER_TYPE>",
"OPENFDA_DATAFRAME_DROP_ENABLED": "<YOUR_OPENFDA_DATAFRAME_DROP_ENABLED>",
"OPENFDA_MIRROR_ENABLED": "<YOUR_OPENFDA_MIRROR_ENABLED>",
"OPENFDA_MIRROR_PATH": "<YOUR_OPENFDA_MIRROR_PATH>",
"OPENFDA_MIRROR_REFRESH_CRON": "<YOUR_OPENFDA_MIRROR_REFRESH_CRON>",
"OPENFDA_MIRROR_FALLBACK_LIVE": "<YOUR_OPENFDA_MIRROR_FALLBACK_LIVE>",
"OPENFDA_MIRROR_REFRESH_TIMEOUT_MS": "<YOUR_OPENFDA_MIRROR_REFRESH_TIMEOUT_MS>",
"OPENFDA_MIRROR_BASE_URL": "<YOUR_OPENFDA_MIRROR_BASE_URL>",
"MCP_LOG_LEVEL": "<YOUR_MCP_LOG_LEVEL>"
}
}
}
}Cline
{
"mcpServers": {
"openfda-mcp-server": {
"command": "npx",
"args": [
"-y",
"@cyanheads/openfda-mcp-server@0.9.1"
],
"env": {
"OPENFDA_API_KEY": "<YOUR_OPENFDA_API_KEY>",
"CANVAS_PROVIDER_TYPE": "<YOUR_CANVAS_PROVIDER_TYPE>",
"OPENFDA_DATAFRAME_DROP_ENABLED": "<YOUR_OPENFDA_DATAFRAME_DROP_ENABLED>",
"OPENFDA_MIRROR_ENABLED": "<YOUR_OPENFDA_MIRROR_ENABLED>",
"OPENFDA_MIRROR_PATH": "<YOUR_OPENFDA_MIRROR_PATH>",
"OPENFDA_MIRROR_REFRESH_CRON": "<YOUR_OPENFDA_MIRROR_REFRESH_CRON>",
"OPENFDA_MIRROR_FALLBACK_LIVE": "<YOUR_OPENFDA_MIRROR_FALLBACK_LIVE>",
"OPENFDA_MIRROR_REFRESH_TIMEOUT_MS": "<YOUR_OPENFDA_MIRROR_REFRESH_TIMEOUT_MS>",
"OPENFDA_MIRROR_BASE_URL": "<YOUR_OPENFDA_MIRROR_BASE_URL>",
"MCP_LOG_LEVEL": "<YOUR_MCP_LOG_LEVEL>"
}
}
}
}VS Code
{
"servers": {
"openfda-mcp-server": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@cyanheads/openfda-mcp-server@0.9.1"
],
"env": {
"OPENFDA_API_KEY": "<YOUR_OPENFDA_API_KEY>",
"CANVAS_PROVIDER_TYPE": "<YOUR_CANVAS_PROVIDER_TYPE>",
"OPENFDA_DATAFRAME_DROP_ENABLED": "<YOUR_OPENFDA_DATAFRAME_DROP_ENABLED>",
"OPENFDA_MIRROR_ENABLED": "<YOUR_OPENFDA_MIRROR_ENABLED>",
"OPENFDA_MIRROR_PATH": "<YOUR_OPENFDA_MIRROR_PATH>",
"OPENFDA_MIRROR_REFRESH_CRON": "<YOUR_OPENFDA_MIRROR_REFRESH_CRON>",
"OPENFDA_MIRROR_FALLBACK_LIVE": "<YOUR_OPENFDA_MIRROR_FALLBACK_LIVE>",
"OPENFDA_MIRROR_REFRESH_TIMEOUT_MS": "<YOUR_OPENFDA_MIRROR_REFRESH_TIMEOUT_MS>",
"OPENFDA_MIRROR_BASE_URL": "<YOUR_OPENFDA_MIRROR_BASE_URL>",
"MCP_LOG_LEVEL": "<YOUR_MCP_LOG_LEVEL>"
}
}
}
}Claude Desktop
{
"mcpServers": {
"openfda-mcp-server": {
"command": "npx",
"args": [
"-y",
"@cyanheads/openfda-mcp-server@0.9.1"
],
"env": {
"OPENFDA_API_KEY": "<YOUR_OPENFDA_API_KEY>",
"CANVAS_PROVIDER_TYPE": "<YOUR_CANVAS_PROVIDER_TYPE>",
"OPENFDA_DATAFRAME_DROP_ENABLED": "<YOUR_OPENFDA_DATAFRAME_DROP_ENABLED>",
"OPENFDA_MIRROR_ENABLED": "<YOUR_OPENFDA_MIRROR_ENABLED>",
"OPENFDA_MIRROR_PATH": "<YOUR_OPENFDA_MIRROR_PATH>",
"OPENFDA_MIRROR_REFRESH_CRON": "<YOUR_OPENFDA_MIRROR_REFRESH_CRON>",
"OPENFDA_MIRROR_FALLBACK_LIVE": "<YOUR_OPENFDA_MIRROR_FALLBACK_LIVE>",
"OPENFDA_MIRROR_REFRESH_TIMEOUT_MS": "<YOUR_OPENFDA_MIRROR_REFRESH_TIMEOUT_MS>",
"OPENFDA_MIRROR_BASE_URL": "<YOUR_OPENFDA_MIRROR_BASE_URL>",
"MCP_LOG_LEVEL": "<YOUR_MCP_LOG_LEVEL>"
}
}
}
}Let your agent find its tools
Find servers like openfda-mcp-server from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.