教程演示如何通过 MCP 连接 FAERS 数据库,让 Claude 获取真实的药物不良反应报告及患者数据。
向 Claude 询问某种药物有哪些已知的安全信号,它会根据训练数据作答:给出一份看似合理的总结,但信息停留在过去的某个时间点,也没有对应的报告 ID。对于随口一问,这或许足够了。但在药物警戒工作中,任务是从真实报告中识别真实信号,而“看似合理的总结”恰恰与你需要的东西背道而驰。你需要看到原始病例:哪些人受到了影响、记录了什么不良反应、严重程度如何,以及报告者实际将哪种药物标记为可疑药物。
本指南将把 Claude 连接到官方 Apify MCP server,并开放一个用于读取 FDA Adverse Event Reporting System(FAERS)的 Actor。完成后,你将拥有一个可实际运行的工具,Claude、Cursor 或任何 MCP client 都可以在对话过程中调用它,获取某种药物的真实不良事件报告,包括患者详情、不良反应、严重程度,以及安全性审查真正关注的可疑药物与合并用药分类。
下面展示的全部是真实配置和真实输出,没有模拟响应。
Model Context Protocol(MCP)是一项开放标准,允许 AI client 调用外部工具。Apify MCP server 在 Apify 平台之上实现了这一标准,这意味着 Apify Store 中数以千计的 Actor 都可以成为 Agent 能够调用的工具。
为什么要通过 MCP 调用 Actor,而不是硬编码 API 请求?
Agent 自行决定何时获取数据。Claude 会理解对话内容,在发现自己需要当前并不掌握的最新报告数据时,自主调用工具。你不必为每个问题编写胶水代码。
结构化输入与输出。MCP server 会把 Actor 的输入 schema 提供给 Claude,让模型能够正确填写参数,并返回便于推理的整洁 dataset。
一次连接,多个工具。同一个 MCP endpoint 会开放 search-actors、fetch-actor-details 和 call-actor,因此 Agent 无需新增配置,就能发现并运行任意 Actor。
无需基础设施。server 已经托管完成,只需在配置文件中添加几行内容即可。
我们将开放 openFDA Drug Adverse Events & Recalls Scraper。输入药物名称后,它会以结构化记录的形式返回 FAERS 安全性报告,包括:安全报告 ID、患者性别和年龄、报告的不良反应、严重性标记及其原因(住院、危及生命、死亡)、报告类型和日期、报告国家,以及报告中列出的全部药物。每种药物都会标明是可疑药物还是合并用药,并附带适应症和给药途径。将其 dataset 输入切换后,同一个 Actor 还可以获取药品召回行动。
这组字段正是药物警戒和药物安全性审查所需要的:不是单独一个数字,而是完整报告,让分析人员能够了解患者背景,并判断哪种药物被认为与事件有关。FAERS 是公开且权威的数据源,因此非常适合作为接入 Agent 的第一个数据源。

登录 Apify Console,打开 Settings → Integrations,然后复制你的个人 API token。MCP server 使用该 token 进行身份验证,并将 Actor 运行费用计入你的账户。
📌 注意:token 属于机密信息。只应将其保存在 client 配置中,绝不要放进 prompt 或提交到版本库的文件里。
打开 Claude Desktop 的配置文件(Settings → Developer → Edit Config;在 macOS 上也可以打开 ~/Library/Application Support/Claude/claude_desktop_config.json),然后添加 Apify server。这里最重要的是 tools query parameter:它会告诉 server 应该开放哪个 Actor,从而让 Claude 获得一个目标明确的工具,而不是整个 Apify Store。
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=scrapers_lat/openfda-drug-events-scraper",
"headers": {
"Authorization": "Bearer YOUR_APIFY_TOKEN"
}
}
}
}
Cursor 使用同样的 JSON,配置文件位于 .cursor/mcp.json。如果你更愿意在本地通过 stdio 运行,而不是使用托管 endpoint,可以使用以下配置:
{
"mcpServers": {
"apify": {
"command": "npx",
"args": ["-y", "@apify/actors-mcp-server", "--tools", "scrapers_lat/openfda-drug-events-scraper"],
"env": { "APIFY_TOKEN": "YOUR_APIFY_TOKEN" }
}
}
}
重启 Claude Desktop,让它加载新的 server。
重启后,这个 Actor 会显示为一个可调用工具。如果列出 Apify server 开放的工具,你会看到一些 storage helper,以及以 Store handle 命名的 Actor 本身:
get-actor-run, get-dataset-items, get-key-value-store-record,
abort-actor-run, scrapers_lat--openfda-drug-events-scraper
最后一项 scrapers_lat--openfda-drug-events-scraper 就是我们的药物警戒工具。现在,Claude 已经知道它的存在、它能做什么(来自 Actor 的 README),以及它接受哪些输入(来自 server 提供的 input schema):作为药物名称的 searchQuery、用于选择 events 或 recalls 的 dataset、可选的日期范围,以及限制记录数量的 maxRecords。
现在到了看到成果的时候。在普通对话中,提出一个必须依赖真实报告才能回答的问题:
“获取近期提到 aspirin 的 FDA 不良事件报告(FAERS)。完整展示一个严重病例,包括患者信息、不良反应,以及哪种药物被标记为可疑药物。”
Claude 会识别出自己无法仅凭记忆回答这个问题,于是选择 FAERS 工具,并根据你的问题填写输入参数。在底层,client 会通过 tools/call 发送 Actor 参数:
{
"name": "scrapers_lat--openfda-drug-events-scraper",
"arguments": {
"searchQuery": "aspirin",
"dataset": "events",
"maxRecords": 25
}
}
Apify MCP server 会启动 Actor,等待其运行结束,然后返回 dataset。下面是这次真实运行生成的 metadata:
{
"runId": "DzlAwbvYGb0ojGgBt",
"actorName": "scrapers_lat/openfda-drug-events-scraper",
"status": "SUCCEEDED",
"startedAt": "2026-07-30T17:43:55.891Z",
"finishedAt": "2026-07-30T17:44:00.884Z",
"stats": { "runTimeSecs": 4.8 }
}
不到 5 秒,就拿到了 25 份实时 FAERS 报告。
该工具返回的 dataset 是结构化的安全报告数据。以下是此次运行中的一条真实记录,为便于安全性审查,仅保留了关键字段:
{
"safetyReportId": "10003432",
"reportType": "Spontaneous",
"serious": true,
"seriousnessReasons": ["Hospitalization"],
"receiveDate": "2014-03-12",
"primarySourceCountry": "US",
"reporterQualification": "Consumer or non-health professional",
"patientSex": "Female",
"patientAge": "84 year",
"reactions": ["Oedema peripheral", "Fluid retention"],
"drugs": [
{ "product": "LETAIRIS", "genericName": "AMBRISENTAN",
"characterization": "Suspect", "indication": "PULMONARY HYPERTENSION",
"route": "ORAL" },
{ "product": "ASPIRIN", "genericName": "ASPIRIN",
"characterization": "Concomitant", "route": "ORAL" }
]
}
Claude 会读取这些数据,并用自然语言回答:这是一份严重报告,安全报告编号为 10003432。患者是一名 84 岁女性,因外周水肿和液体潴留住院。她的用药清单中包含 aspirin,但报告者将其标记为合并用药;被标记为可疑药物的是 Letairis(ambrisentan),用于治疗肺动脉高压,而液体潴留是该类药物已知的安全信号。上述每一项事实都可以追溯到官方 FAERS 记录,而不是来自模型的记忆。

可疑药物与合并用药之间的区别,正是这里的关键。简单搜索关键字“aspirin”会找到这份报告,但报告作者并没有把问题归因于 aspirin。分析人员必须看到这种区别,而模型也需要结构化的 characterization 字段,才能如实传达信息,而不是暗示 aspirin 导致了水肿。这个工具能够呈现这种区别;仅凭记忆生成的总结则会把它抹平。
把它放到实际场景中来看。负责监测某个产品的药物安全性分析人员,需要处理不断进入的 FAERS 报告,并从噪声中分离出信号。对于每种关注的药物,他们都需要快速了解:近期有多少份严重报告、哪些不良反应反复出现,以及在多少份报告中,该药物是真正的可疑药物,而不是仅仅出现在患者的用药清单里。
没有工具时,分析人员需要查询 FAERS 前端,逐份打开报告,再把字段复制到电子表格中。将这个工具接入 Claude 后,分析人员只需说出药物名称,并要求 Agent 获取近期报告、统计其中有多少份被标记为严重、汇总最常见的不良反应,再列出该药物被标记为可疑药物的病例及其记录的严重性原因。Claude 会调用 Actor,对返回的 dataset 进行推理,并生成一份简短的分诊记录,以报告 ID 作为证据。分析人员可以把时间花在专业判断上,而不是复制粘贴。
一个更具体的请求可以写成这样的任务简报:“获取该药物最近一批报告,按不良反应分组,告诉我哪些不良反应出现在严重报告中,并标记所有该药物属于可疑药物、且严重性原因为死亡或危及生命的病例。”Claude 会填写输入参数,运行一次 Actor,然后用表格回答。表格中的每一行都有据可查,因为每一行都能通过 safetyReportId 指向对应的 FAERS 记录。对下一种药物,只需改一个词就能复用同一个 prompt。这正是 Agent 工具优于固定 dashboard 的原因:问题可以变化,工具也能随之调整。
所有优秀的 Agent 工具都遵循这种模式:它消除的是机械的数据获取工作,而不是替代决策。并且,由于每条记录都包含 safetyReportId,Agent 总结中的每一项结论都可以回溯并审计至原始报告。
不良事件分诊通常不会止步于报告本身。确定可疑药物后,下一个问题是:其获批的药品说明书怎么说?其中包括适应症、警告、黑框警告,以及制造商已经列出的不良反应。
你可以扩展 tools parameter,让同一个 MCP 连接开放更多 Actor:
https://mcp.apify.com?tools=scrapers_lat/openfda-drug-events-scraper,scrapers_lat/openfda-drug-labels-scraper
现在,Agent 可以在同一次对话中获取某种药物的 FAERS 报告和 FDA 官方药品说明书,然后告诉你:报告中反复出现的某项不良反应,究竟已经是说明书记录的警告,还是看起来像一个新信号。由于每个 Actor 都是独立工具,Agent 会自行选择每一步该使用哪一个:用 events 获取现场信号,用 labels 获取获批的参考信息。
🏹 故障排查:如果工具没有出现在 Claude 中,通常有两个原因。一是 tools parameter 中缺少 Actor handle 或存在拼写错误——它必须与 Store URL 中的 username/actor-name 完全一致;二是在 Claude 运行期间修改了配置。修正 handle、保存配置,然后彻底重启 client。
📌 注意:每次工具调用都会真正运行一次 Actor,并计费到你的 Apify 账户中(该 Actor 按结果收费)。对于交互式分诊,每次查询的成本不到一美分;如果你计划定期扫描数千种药物,应通过 Apify API 或 scheduled task 直接运行 Actor,而不是让每条聊天消息都触发一次调用。
FAERS 是一个自发报告系统。一份报告只代表有人提交了它,并不意味着药物导致了该事件,而且许多报告来自消费者,而不是临床医生。报告中的不良反应可能对应任何结局,同一个病例可能列出十几种药物,并且还存在重复报告。
把 FAERS 接入 Agent 的价值,不在于自动判断因果关系,而在于快速、可审计地访问原始报告,让经过专业训练的审查人员负责解读。只要始终坚持这一定位,这个工具就能在严肃的工作流程中发挥应有的价值。
现在,你已经拥有一个能够在对话过程中按需获取真实 FDA 不良事件报告的 AI Agent,并能提供安全性审查真正需要的患者背景、严重程度和可疑药物详情。这套模式可以重复使用:选择一个返回权威结构化数据的 Actor,通过 Apify MCP server 的 tools parameter 将其开放出来,再让 Agent 自行决定何时调用。
切换 Actor 的 dataset 输入,即可获取药品召回行动,而不是不良事件;也可以设置日期范围,将查询聚焦于特定报告窗口。
添加 drug-labels Actor,或 clinical-trials、NDC-directory Actor,即可构建多步骤的药物情报 Agent。
阅读 Apify MCP server 文档,可以进一步了解 OAuth 配置、resource 读取,以及允许 Agent 发现未预先配置 Actor 的 search-actors / call-actor 工具。
本指南使用的 Actor:openFDA Drug Adverse Events & Recalls Scraper。
如需采取进一步措施,你可以考虑屏蔽此人和/或举报滥用行为。