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)
- Open Claude Desktop → Settings (gear icon)
- Navigate to Integrations → Add Integration
- Name:
FDA Data
- URL:
https://www.regdatalab.com/mcp
- 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.
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.