MCP server for OpenFDA Drug Label API - enables AI agents to query FDA drug information
npm install bach-openfda一个用于查询 FDA 药物标签信息的 MCP(Model Context Protocol)服务器,专为药物不良反应智能体设计。
无需安装,直接在 Cursor / Cherry Studio 的 MCP 配置中使用:
``json`
{
"mcpServers": {
"openfda": {
"command": "npx",
"args": ["-y", "bach-openfda"]
}
}
}
保存配置后重启,npx 会自动从 npm 下载并运行最新版本的 bach-openfda。
包地址: https://www.npmjs.com/package/bach-openfda
---
- 药物标签搜索: 通过药物名称、活性成分、制造商等搜索 FDA 药物标签
- 不良反应查询: 获取特定药物的不良反应信息
- 警告信息: 查询药物的警告和注意事项
- 适应症信息: 获取药物的适应症和用法信息
搜索 FDA 药物标签,支持复杂查询语法。
参数:
- search (string): 搜索查询,如 "aspirin", "openfda.brand_name:tylenol"count
- (string): 按字段统计结果skip
- (number): 跳过记录数(分页)limit
- (number): 返回记录数限制 (1-1000)
获取特定药物的不良反应信息。
参数:
- drug_name (string, 必需): 药物名称limit
- (number): 返回记录数限制 (1-100)
获取药物的警告和注意事项。
参数:
- drug_name (string, 必需): 药物名称limit
- (number): 返回记录数限制 (1-100)
获取药物的适应症和用法信息。
参数:
- drug_name (string, 必需): 药物名称limit
- (number): 返回记录数限制 (1-100)
`bash安装依赖
npm install
$3
#### 1. 环境准备
`bash
更新系统
sudo apt update && sudo apt upgrade -y安装Node.js 18+
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs验证安装
node --version
npm --version
`#### 2. 部署 MCP 服务器
`bash
创建项目目录
mkdir -p ~/mcp-servers/openfda
cd ~/mcp-servers/openfda上传项目文件(使用scp或git clone)
方法1: 使用git
git clone .方法2: 使用scp从本地上传
scp -r /path/to/mcp-openfda/* user@your-server:~/mcp-servers/openfda/
安装依赖
npm install构建项目
npm run build测试运行
npm start
`#### 3. 使用 PM2 管理进程(推荐)
`bash
全局安装PM2
sudo npm install -g pm2创建PM2配置文件
cat > ecosystem.config.js << 'EOF'
module.exports = {
apps: [{
name: 'mcp-openfda',
script: 'dist/index.js',
cwd: '/home/ubuntu/mcp-servers/openfda',
instances: 1,
autorestart: true,
watch: false,
max_memory_restart: '1G',
env: {
NODE_ENV: 'production'
}
}]
}
EOF启动服务
pm2 start ecosystem.config.js设置开机自启
pm2 startup
pm2 save查看状态
pm2 status
pm2 logs mcp-openfda
`#### 4. 配置防火墙(如果需要网络访问)
`bash
如果需要通过网络访问,可以配置nginx反向代理
sudo apt install nginx创建nginx配置
sudo tee /etc/nginx/sites-available/mcp-openfda << 'EOF'
server {
listen 80;
server_name your-domain.com; # 替换为你的域名或IP location / {
proxy_pass http://localhost:3000; # 如果MCP服务器监听3000端口
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
}
EOF
启用站点
sudo ln -s /etc/nginx/sites-available/mcp-openfda /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
`远程调用配置
$3
在客户端机器上创建 SSH 隧道:
`bash
创建SSH隧道,将本地端口转发到服务器
ssh -L 3000:localhost:3000 user@your-server-ip然后在MCP客户端配置中使用 localhost:3000
`$3
如果需要通过网络直接访问,需要修改 MCP 服务器以支持网络传输:
`typescript
// 在src/index.ts中添加网络传输支持
import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";// 替换stdio传输为网络传输
const transport = new SSEServerTransport("/message", response);
`$3
`bash
创建Dockerfile
cat > Dockerfile << 'EOF'
FROM node:18-alpineWORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY dist/ ./dist/
COPY src/ ./src/
EXPOSE 3000
CMD ["npm", "start"]
EOF
构建和运行
docker build -t mcp-openfda .
docker run -d -p 3000:3000 --name mcp-openfda-server mcp-openfda
`使用示例
$3
在 Claude Desktop 的配置文件中添加:
`json
{
"mcpServers": {
"openfda": {
"command": "node",
"args": ["/path/to/mcp-openfda/dist/index.js"],
"env": {}
}
}
}
`$3
`json
{
"mcpServers": {
"openfda": {
"command": "ssh",
"args": [
"user@your-server-ip",
"cd ~/mcp-servers/openfda && node dist/index.js"
],
"env": {}
}
}
}
`API 使用示例
`javascript
// 搜索阿司匹林的信息
await searchDrugLabels({
search: "aspirin",
limit: 5,
});// 获取布洛芬的不良反应
await getDrugAdverseReactions("ibuprofen", 3);
// 查询泰诺的警告信息
await getDrugWarnings("tylenol", 2);
`注意事项
1. API 限制: OpenFDA API 有速率限制,建议合理控制请求频率
2. 数据准确性: 返回的数据仅供参考,不应作为医疗建议
3. 网络安全: 如果部署在公网,请确保适当的安全措施
4. 日志监控: 建议配置日志监控以跟踪 API 使用情况
故障排除
$3
1. 连接失败: 检查网络连接和防火墙设置
2. 权限错误: 确保 Node.js 进程有适当的文件权限
3. 端口冲突: 检查端口是否被其他服务占用
$3
`bash
PM2日志
pm2 logs mcp-openfda系统日志
sudo journalctl -u nginx -f
``MIT License