Developer Docs

FDA Data MCP documentation

Everything you need to connect, authenticate, and explore all 23 MCP tools. Built for AI agents, compliance teams, and regulated workflows.

On this page

Authentication

Every MCP call requires a bearer token. Use the API key generated on /signup in the Authorization header.

Include Authorization: Bearer fda_... on every request and persist the MCP session id returned by initialize as Mcp-Session-Id for all subsequent calls.

Setup

First: Get your API key — you'll need it for every setup method below. Your key starts with fda_.

FDA Data MCP uses Streamable HTTP transport at a single endpoint. Pick your client below for copy-paste setup.

Claude Code

One command — no config files needed.

claude mcp add fda-data https://www.regdatalab.com/mcp \
  --transport http --header "Authorization: Bearer YOUR_API_KEY"

This adds FDA Data to your current project. To make it available across all projects:

claude mcp add fda-data https://www.regdatalab.com/mcp \
  --transport http --scope user --header "Authorization: Bearer YOUR_API_KEY"

Verify it's connected by typing /mcp inside Claude Code. You should see fda-data listed with 23 tools.

Managing the server
# List all MCP servers
claude mcp list

# Check details
claude mcp get fda-data

# Remove
claude mcp remove fda-data

Claude Desktop

Option 1 — Integrations UI (easiest)

  1. Open Claude Desktop → Settings (gear icon)
  2. Navigate to IntegrationsAdd Integration
  3. Name: FDA Data
  4. URL: https://www.regdatalab.com/mcp
  5. Add header: Authorization: Bearer YOUR_API_KEY

Option 2 — JSON config (fallback using mcp-remote)

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):

{
  "mcpServers": {
    "fda-data": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://www.regdatalab.com/mcp",
        "--header",
        "Authorization: Bearer YOUR_API_KEY"
      ]
    }
  }
}

Restart Claude Desktop after saving. Requires Node.js installed.

Cursor

Add to ~/.cursor/mcp.json:

{
  "mcpServers": {
    "fda-data": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://www.regdatalab.com/mcp",
        "--header",
        "Authorization: Bearer YOUR_API_KEY"
      ]
    }
  }
}

Cursor uses stdio transport, so mcp-remote bridges to our HTTP endpoint. Requires Node.js.

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "fda-data": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://www.regdatalab.com/mcp",
        "--header",
        "Authorization: Bearer YOUR_API_KEY"
      ]
    }
  }
}

Same mcp-remote bridge pattern as Cursor. Requires Node.js.

ChatGPT / OpenAI API

Use the MCP tool type in the OpenAI Responses API:

from openai import OpenAI

client = OpenAI()

resp = client.responses.create(
    model="gpt-4.1",
    tools=[{
        "type": "mcp",
        "server_label": "fda_data",
        "server_url": "https://www.regdatalab.com/mcp",
        "headers": {"Authorization": "Bearer YOUR_API_KEY"},
        "require_approval": "never",
    }],
    input="Look up Pfizer facilities",
)

The OpenAI API connects to the MCP endpoint directly — no proxy needed. Replace YOUR_API_KEY with your FDA Data API key.

Team Sharing (.mcp.json)

Add a .mcp.json file to your project root so teammates get FDA Data automatically. Environment variables are expanded at runtime:

{
  "mcpServers": {
    "fda-data": {
      "type": "http",
      "url": "https://www.regdatalab.com/mcp",
      "headers": {
        "Authorization": "Bearer ${FDA_DATA_API_KEY}"
      }
    }
  }
}

Each team member sets FDA_DATA_API_KEY in their environment (e.g. in .env or shell profile). The .mcp.json file is safe to commit — no secrets are embedded.

Raw HTTP / cURL

For any MCP client or direct integration:

curl -X POST https://www.regdatalab.com/mcp \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"agent","version":"1.0"}}}'

Store the Mcp-Session-Id header from the response and include it on all subsequent requests.

Tool Reference

Tools are grouped by domain. All responses are JSON compatible.

Company and Facilities

fda_lookup_company

Lookup all FDA data for a company: facilities, enforcement actions, and aliases (including subsidiaries). Returns a comprehensive summary.

Parameter Type Description
company string Company name to look up.
facilities_offset number Facilities result offset.
facilities_limit number Facilities result limit.
enforcement_offset number Enforcement result offset.
enforcement_limit number Enforcement result limit.
Example
{
  "company": "Pfizer",
  "facilities_limit": 50,
  "enforcement_limit": 25
}

fda_search_facilities

Search FDA-registered facilities by name, city, state, or country. Searches both drug (DECRS) and device registration databases.

Parameter Type Description
company string Facility or company name (fuzzy search).
city string City name.
state string State code (e.g. CA, NY).
country string ISO country code (e.g. US, DE).
operations string DECRS operations keyword.
offset number Result offset.
limit number Result limit.
Example
{
  "company": "Fresenius",
  "state": "NY",
  "limit": 25
}

fda_get_facility

Get detailed information about a specific FDA-registered facility by its FEI number, including enforcement history.

Parameter Type Description
fei string Facility Establishment Identifier.
products_offset number Products result offset.
products_limit number Products result limit.
Example
{
  "fei": "1234567890",
  "products_limit": 100
}

fda_facility_products

List device products manufactured at a facility by FEI number, including classification details when available.

Parameter Type Description
fei string Facility Establishment Identifier.
offset number Result offset.
limit number Result limit.
Example
{
  "fei": "1234567890",
  "limit": 50
}

fda_resolve_company

Resolve a company name to its canonical ID and find all known aliases. Uses the company_alias table for matching.

Parameter Type Description
company string Company name to resolve.
Example
{
  "company": "Johnson & Johnson"
}

fda_save_aliases

Save normalized alias names for a parent company, updating confidence and tracking collisions.

Parameter Type Description
parent_company string Canonical parent company name.
aliases object[] Alias entries with alias, source, and confidence.
Example
{
  "parent_company": "Pfizer",
  "aliases": [
    { "alias": "Hospira", "source": "client", "confidence": 0.9 },
    { "alias": "Wyeth" }
  ]
}

fda_suggest_subsidiaries

Suggest potential subsidiaries by aggregating FDA datasets and optionally EDGAR Exhibit 21 results.

Parameter Type Description
company string Company name to analyze.
cik string SEC CIK (optional, auto-resolved if omitted).
Example
{
  "company": "Bayer"
}

fda_company_full

Premium company lookup: facilities, enforcement actions, 510(k) clearances, PMA approvals, and drug applications with alias resolution.

Parameter Type Description
company string Company name to look up.
facilities_offset number Facilities result offset.
facilities_limit number Facilities result limit.
enforcement_offset number Enforcement result offset.
enforcement_limit number Enforcement result limit.
clearances_offset number 510(k) clearances result offset.
clearances_limit number 510(k) clearances result limit.
approvals_offset number PMA approvals result offset.
approvals_limit number PMA approvals result limit.
drugs_offset number Drug applications result offset.
drugs_limit number Drug applications result limit.
Example
{
  "company": "Medtronic",
  "facilities_limit": 25,
  "enforcement_limit": 25
}

Enforcement and Compliance

fda_search_enforcement

Search FDA enforcement actions (recalls). Filter by company name, classification, date range, or status.

Parameter Type Description
company string Company or firm name (fuzzy search).
classification enum Recall classification severity (Class I, II, III).
from_date string Start date for report_date range (YYYY-MM-DD).
to_date string End date for report_date range (YYYY-MM-DD).
status enum Recall status (Ongoing, Terminated).
offset number Result offset.
limit number Result limit.
Example
{
  "company": "Abbott",
  "classification": "Class II",
  "from_date": "2023-01-01",
  "limit": 20
}

fda_recall_facility_trace

Trace a recall to candidate facilities with explicit confidence levels and caveats.

Parameter Type Description
recall_number string Recall reference number.
Example
{
  "recall_number": "Z-1234-2024"
}

fda_inspections

Search FDA Dashboard inspection classifications by company name, FEI, classification code, or date range.

Parameter Type Description
company_name string Company name (fuzzy match).
fei_number string FDA Establishment Identifier (FEI number).
classification_code enum Inspection classification code (NAI, VAI, OAI).
date_from string Start date for inspection_end_date range (YYYY-MM-DD).
date_to string End date for inspection_end_date range (YYYY-MM-DD).
limit number Result limit.
Example
{
  "company_name": "AbbVie",
  "classification_code": "VAI",
  "limit": 50
}

fda_citations

Search FDA Dashboard inspection citations by company name or FEI number.

Parameter Type Description
company_name string Company name (fuzzy match).
fei_number string FDA Establishment Identifier (FEI number).
limit number Result limit.
Example
{
  "company_name": "Novo Nordisk",
  "limit": 25
}

fda_compliance_actions

Search FDA Dashboard compliance actions by company name, FEI, action type, or date range.

Parameter Type Description
company_name string Company name (fuzzy match).
fei_number string FDA Establishment Identifier (FEI number).
action_type enum Compliance action type (Warning Letter, Seizure, Injunction).
date_from string Start date for action_taken_date range (YYYY-MM-DD).
date_to string End date for action_taken_date range (YYYY-MM-DD).
limit number Result limit.
Example
{
  "company_name": "Baxter",
  "action_type": "Warning Letter",
  "limit": 25
}

fda_import_refusals

Search FDA Dashboard import refusals by company name, FEI, country code, or date range.

Parameter Type Description
company_name string Company name (fuzzy match).
fei_number string FDA Establishment Identifier (FEI number).
country_code string ISO country code (e.g. CN, IN).
date_from string Start date for refusal_date range (YYYY-MM-DD).
date_to string End date for refusal_date range (YYYY-MM-DD).
limit number Result limit.
Example
{
  "country_code": "CN",
  "date_from": "2024-01-01",
  "limit": 100
}

fda_ires_enforcement

Search iRES enforcement recalls by company name, recall number, date range, or product type.

Parameter Type Description
company_name string Company name (fuzzy match).
recall_number string IRES recall number.
product_type string Product type (e.g. Drugs, Devices).
date_from string Start date for enforcement_report_date range (YYYY-MM-DD).
date_to string End date for enforcement_report_date range (YYYY-MM-DD).
offset number Result offset.
limit number Result limit.
Example
{
  "company_name": "Novartis",
  "product_type": "Drugs",
  "limit": 50
}

Products and Approvals

fda_search_510k

Search FDA 510(k) clearances by company, product code, decision code, and/or decision date range.

Parameter Type Description
company string Company name (fuzzy search).
product_code string Device product code.
decision_code string Decision code (e.g., SESE, SESD).
clearance_type string Clearance type (e.g., Traditional, Special).
from_date string Start date for decision_date range (YYYY-MM-DD).
to_date string End date for decision_date range (YYYY-MM-DD).
offset number Result offset.
limit number Result limit.
Example
{
  "company": "Dexcom",
  "product_code": "LZG",
  "limit": 15
}

fda_search_pma

Search FDA PMA approvals by company, product code, and/or decision date range.

Parameter Type Description
company string Company name (fuzzy search).
product_code string Device product code.
from_date string Start date for decision_date range (YYYY-MM-DD).
to_date string End date for decision_date range (YYYY-MM-DD).
offset number Result offset.
limit number Result limit.
Example
{
  "company": "Boston Scientific",
  "from_date": "2023-01-01",
  "limit": 20
}

fda_search_drugs

Search Drugs@FDA applications by company, application number, brand name, or submission status.

Parameter Type Description
company string Company name (fuzzy search).
application_number string Application number.
brand_name string Brand name (searches products JSONB).
status string Submission status (searches submissions JSONB).
offset number Result offset.
limit number Result limit.
Example
{
  "company": "Gilead",
  "status": "Approved",
  "limit": 20
}

fda_search_ndc

Search the NDC directory by labeler, brand name, product NDC, or application number.

Parameter Type Description
company string Labeler company name (fuzzy search).
brand_name string Brand name.
product_ndc string Product NDC.
application_number string Application number.
offset number Result offset.
limit number Result limit.
Example
{
  "company": "Amgen",
  "product_ndc": "55513-0001"
}

fda_search_by_product

Search FDA device and drug datasets by product name (device, trade, generic, or brand names).

Parameter Type Description
product_name string Product or brand name (fuzzy search).
offset number Result offset.
limit number Result limit.
Example
{
  "product_name": "glucose monitor",
  "limit": 30
}

fda_device_class

Lookup FDA device classification details by product code.

Parameter Type Description
product_code string Device product code.
Example
{
  "product_code": "DQO"
}

fda_product_code_lookup

Cross-reference a device product code across classification, 510(k) clearances, and PMA approvals.

Parameter Type Description
product_code string Device product code.
clearances_offset number 510(k) clearances result offset.
clearances_limit number 510(k) clearances result limit.
approvals_offset number PMA approvals result offset.
approvals_limit number PMA approvals result limit.
Example
{
  "product_code": "LON"
}

Veterinary

fda_search_aphis

Search APHIS veterinary biologics establishments by company, state, or establishment type.

Parameter Type Description
company string Company name (fuzzy search).
state string State code (e.g., CA, NY).
type enum Establishment type (Licensee, Permittee).
offset number Result offset.
limit number Result limit.
Example
{
  "company": "Zoetis",
  "type": "Licensee",
  "limit": 20
}

Rate Limits

Rate limits are enforced per API key. Headers include X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset to help schedule calls.

Each key has a per-minute limit configured in your account (defaults to 60 requests/minute unless overridden). When the limit is exceeded, the API returns HTTP 429.

Errors

Errors use standard HTTP codes with JSON payloads. If authentication fails, you will receive 401 or 403 responses with a descriptive message. Credits exhausted return 402, and rate limit errors return 429. MCP-level errors return an error object in the tool response.

Data Sources

FDA Data MCP ingests openFDA bulk downloads, DECRS facility data, FDA Dashboard compliance feeds, and IRES enforcement reports. Each dataset is normalized with provenance metadata.