@cyanheads/openfda-mcp-server
Query FDA data on drugs, food, devices, and recalls via openFDA. STDIO or Streamable HTTP.
7 Tools
公共托管服务器: https://openfda.caseyjhand.com/mcp
______________________________________________________________________
工具
用于查询药品、食品、设备和召回的FDA数据的七种工具:
| 工具 | 说明 |
|---|---|
openfda_search_adverse_events | 在药物、食品和设备中搜索不良事件报告 |
openfda_search_recalls | 搜索药品、食品和设备的执法报告和召回行动 |
openfda_count | 汇总和统计任何openFDA端点上任何字段的唯一值 |
openfda_get_drug_label | 查阅美国食品药品监督管理局药品标签(包装说明书/SPL文件) |
openfda_search_drug_approvals | 搜索Drugs@FDANDA/ANDA申请审批数据库 |
openfda_search_device_clearances | 搜索FDA器械上市前通知——510(k)批准和PMA批准 |
openfda_lookup_ndc | 在NDC(国家药品代码)目录中查找药品 |
openfda_search_adverse_events
在药物、食品和设备中搜索不良事件报告。用于调查安全信号,查找特定产品的报告,或根据人口统计数据探索反应。
- 类别选择:
drug,food,或device--每个返回不同的字段模式 - Elasticsearch查询语法,用于按产品、反应、严重性、日期范围进行过滤
- 分页通过
limit(最多1000)和skip(最多25000) - 格式化输出包括报告ID、严重程度、患者人口统计、反应、具有特征/适应症/路线的药物以及所有剩余字段
______________________________________________________________________
openfda_count
汇总和统计任何openFDA端点上任何字段的唯一值。返回按计数降序排列的排名术语计数对。
- 适用于所有19个openFDA端点(药物、食品、设备、动物/兽医、其他)
- 使用
.exact字段名称后缀用于整短语计数 - 可选的
search筛选以确定聚合范围 - 每次查询最多返回1000个词
______________________________________________________________________
openfda_search_recalls
搜索药品、食品和设备的执法报告和召回行动。
- 支持
enforcement(所有类别)和recall(仅限设备)端点 - 按分类(I/II/III类)、召回公司、原因、状态过滤
- 格式化输出包括召回编号、分类、产品描述、原因、分布模式
______________________________________________________________________
openfda_search_device_clearances
搜索FDA设备上市前通知——510(k)许可和PMA批准。
- 两条路径:
510k(174K+条记录,最常见)和pma(高风险设备) - 按申请人、产品代码、咨询委员会、设备名称筛选
- 格式化输出适应路径:510(k)显示k号/清除类型,PMA显示补充信息
______________________________________________________________________
openfda_get_drug_label
查阅美国食品药品监督管理局药品标签(包装说明书/SPL文件)。检查适应症、警告、剂量、禁忌症、活性成分或任何结构化标签部分。
- 按品牌名称、通用名称、制造商或集合ID搜索
- 格式化输出动态呈现记录中存在的所有标签部分和openfda元数据
- 较大的部分会自动截断,以保持输出可读性
- 默认限制为5个——标签是大文档
______________________________________________________________________
openfda_search_drug_approvals
搜索Drugs@FDA药物申请批准数据库(NDAs和ANDAs)。返回申请详细信息、赞助商信息和完整的提交历史记录。
- 按品牌名称、赞助商、提交类型、审核优先级筛选
- 格式化输出包括含有活性成分、剂型、路线和营销状态的产品
- 完整的提交历史记录,包括类型、状态、日期和审核优先级
- 分页通过
limit(最多1000)和skip(最多25000)
______________________________________________________________________
openfda_lookup_ndc
在NDC(国家药品代码)目录中查找药品。通过NDC代码识别药品,查找活性成分、包装细节或制造商信息。
- 按产品NDC、品牌名称、通用名称、制造商或活性成分搜索
- 返回产品详细信息、具有强度的活性成分和包装信息
- 可按列出到期日期或其他字段进行排序
特性
- 声明性工具定义——每个工具一个文件,框架处理注册和验证
- 跨所有工具的统一错误处理
- 可插拔身份验证(
none,jwt,oauth) - 可交换存储后端:
in-memory,filesystem,Supabase,Cloudflare KV/R2/D1 - 带可选OpenTetry跟踪的结构化日志记录
- 在本地(stdio/HTTP)或Cloudflare Workers上从同一代码库运行
openFDA特定:
- 适用于所有openFDA端点的通用API客户端,具有重试(指数退避)和速率限制意识
- 自动错误规范化——404返回空结果,429/5xx次重试,400提供可操作的消息
- 可选的API密钥支持-无需密钥即可工作(每天1K次请求),使用免费密钥可增加到每天120K次
入门指南
公共托管实例
公共实例可在以下网址获得 https://openfda.caseyjhand.com/mcp --无需安装。通过Streamable HTTP将任何MCP客户端指向它:
{
"mcpServers": {
"openfda": {
"type": "streamable-http",
"url": "https://openfda.caseyjhand.com/mcp"
}
}
}通过bunx(无需安装)
添加到MCP客户端配置中:
{
"mcpServers": {
"openfda": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/openfda-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"OPENFDA_API_KEY": "your-key-here"
}
}
}
}或者使用npx(不需要Bun):
{
"mcpServers": {
"openfda": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/openfda-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"OPENFDA_API_KEY": "your-key-here"
}
}
}
}或者使用Docker:
{
"mcpServers": {
"openfda": {
"type": "stdio",
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/openfda-mcp-server:latest"]
}
}
}对于Streamable HTTP,设置传输并启动服务器:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp先决条件
- Bun v1.3.0 或更高。
- 可选: openFDA API密钥 对于更高的速率限制(120K请求/天vs 1K/天)。
安装
- 克隆存储库:
git clone https://github.com/cyanheads/openfda-mcp-server.git- 导航到以下目录:
cd openfda-mcp-server- 安装依赖项:
bun install配置
所有配置在启动时通过Zod模式进行验证 src/config/server-config.ts.关键环境变量:
| 变量 | 描述 | 默认值 |
|---|---|---|
MCP_TRANSPORT_TYPE | 运输: stdio 或 http | stdio |
MCP_HTTP_PORT | HTTP服务器端口 | 3010 |
MCP_AUTH_MODE | 身份验证: none, jwt,或 oauth | none |
MCP_LOG_LEVEL | 日志级别(debug, info, warning, error等等) | info |
LOGS_DIR | 日志文件目录(仅限Node.js)。 | ` |
| /logs` | ||
STORAGE_PROVIDER_TYPE | 存储后端: in-memory, filesystem, supabase, cloudflare-kv/r2/d1 | in-memory |
OPENFDA_API_KEY | 来自的免费API密钥 open.fda.gov。将每日请求限制从1K增加到120K。 | 没有 |
OPENFDA_BASE_URL | 用于对代理或模拟进行测试的基本URL覆盖。 | https://api.fda.gov |
OTEL_ENABLED | 启用开放遥测 | false |
运行服务器
本地开发
- 构建并运行生产版本:
# One-time build
bun run rebuild
# Run the built server
bun run start:http
# or
bun run start:stdio- 运行检查和测试:
bun run devcheck # Lints, formats, type-checks, and more
bun run test # Runs the test suite项目结构
| 目录 | 目的 |
|---|---|
src/index.ts | 入口点-- createApp() 工具注册和服务设置。 |
src/config/ | 使用Zod进行服务器特定的env-var解析和验证。 |
src/services/openfda/ | openFDA API客户端,具有重试、速率限制处理和错误规范。 |
src/mcp-server/tools/definitions/ | 工具定义(*.tool.ts).七个openFDA工具。 |
开发指南
看 CLAUDE.md 了解开发指南和架构规则。简短版本:
- 处理程序抛出,框架捕获——否
try/catch工具逻辑 - 使用
ctx.log用于请求范围的日志记录 - 在中注册新工具
src/mcp-server/tools/definitions/index.ts
贡献
欢迎问题和拉取请求。提交前进行检查和测试:
bun run devcheck
bun run test许可证
此项目根据Apache 2.0许可证获得许可。看 许可证 文件以获取详细信息。
