关于 Veterinary Fda
Veterinary FDA 是用于查询动物药品审批、兽医不良事件报告、产品召回和附近宠物服务的 MCP 服务。它整合 FDA Green Book、openFDA 和 OpenStreetMap 数据,支持动物健康研究及本地服务查询。
主要功能
- 01搜索已批准动物药及申请详情
- 02获取 Green Book 月度更新
- 03查询单条不良事件报告
- 04按反应、结果和年份汇总
- 05搜索兽医产品召回记录
- 06查找附近宠物服务
适用场景
- 01核实动物药的批准状态和适应症
- 02查看兽药相关反应报告
- 03查询宠物产品召回记录
- 04查找附近兽医诊所或狗公园
MCP 相关
向 MCP 客户端提供动物药品、兽医不良事件、召回和宠物服务工具。数据来自 FDA Green Book、openFDA 和 OpenStreetMap。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://gateway.pipeworx.io/veterinary-fda/mcpclaude mcp add --transport http pipeworx-io-veterinary-fda https://gateway.pipeworx.io/veterinary-fda/mcp{"mcpServers":{"pipeworx-io-veterinary-fda":{"type":"http","url":"https://gateway.pipeworx.io/veterinary-fda/mcp"}}}在 Cursor 中打开{"servers":{"pipeworx-io-veterinary-fda":{"type":"http","url":"https://gateway.pipeworx.io/veterinary-fda/mcp"}}}在 VS Code 中打开{"mcpServers":{"pipeworx-io-veterinary-fda":{"type":"http","url":"https://gateway.pipeworx.io/veterinary-fda/mcp"}}}{"mcpServers":{"pipeworx-io-veterinary-fda":{"serverUrl":"https://gateway.pipeworx.io/veterinary-fda/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
48| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| q | string | 否 | question 的别名。 |
| ask | string | 否 | question 的别名。 |
| text | string | 否 | question 的别名。 |
| input | string | 否 | question 的别名。 |
| packs | array | 否 | 可选。将路由限制为这些包的 slug(例如 ["sec-form-d","sec-13f"]),路由器随后只会从这些包中的工具进行选择。省略则使用默认的完整目录路由。Slug 可从 list_packs / search_packs / https://pipeworx.io/directory 获取;未列出或未知的 slug 会被忽略,并在 _meta.pack_scope.ignored 中列出。如果没有任何 slug 能匹配问题,则会在整个目录中路由,并设置 _meta.pack_scope.full_catalog:true(绝不会返回空答案)。 |
| query | string | 否 | question 的别名。 |
| prompt | string | 否 | question 的别名。 |
| message | string | 否 | question 的别名。 |
| question | string | 是 | 用自然语言表达的问题或请求。支持 query、q、prompt、text、input、ask、message 作为别名。 |
详细介绍
兽医 FDA — 获批动物药物、不良事件、宠物产品召回、宠物服务
动物与兽医领域的获批动物药物、副作用报告、产品召回,以及附近的宠物服务,涵盖狗、猫、马和牛。数据来自三个来源:FDA Green Book(Animal Drugs @ FDA——获批新动物药物申请的官方列表,无需密钥)、openFDA 的兽医药品中心不良事件数据库(截至 2026-09-04,有 985,705 条狗和 148,091 条猫的报告,无需密钥),以及 OpenStreetMap(兽医诊所、狗公园、宠物商店、收容所)。在此之前,MCP 生态系统中没有工具包提供动物不良事件数据——openfda 从未涉及这些数据,而且 openfda 的药物端点仅涵盖人用药,因此 Green Book 数据也无人提供服务。
Pipeworx 的一部分:https://pipeworx.io — 一个将 AI Agent 接入 1684+ 个实时数据源的 MCP 网关。
这些数据共同支持端到端回答以下一系列问题:这种动物可以使用哪些获批药物(Green Book)→ 这些药物对动物产生过什么影响(不良事件)→ 是否有召回记录(执法报告)。
为什么这对 AI Agent 很重要
“我家狗的跳蚤药引起这种副作用正常吗?”以及“这种狗粮被召回了吗?”是人们确实会问的问题,而此前没有工具能根据 FDA 一手数据回答这些问题。
常见工作流:
- 获批药物查询。“哪些 FDA 获批药物含有 carprofen?”→
animal_drug_search({query: "carprofen"})→ 24 个获批申请,包含申办方、状态和批准日期。“狗有哪些获批药物?”→animal_drug_search({species: "Dogs"})→ 694 个。 - 查看批准内容。“Rimadyl 获批用于什么用途?”→
animal_drug_search({brand_name: "Rimadyl"})→ applicationId 1024 →animal_drug_detail({application_id: 1024})→ FDA 官方 FOI 批准摘要、各物种的剂量和适应症,以及标签 PDF。 - 查询药物副作用。“狗使用 Bravecto 后有哪些副作用报告?”→
vet_adverse_events({drug: "Bravecto", species: "Dog"})→ 包含反应、结果和剂量的个别报告。 - 查看整体安全情况。“狗使用 fluralaner 后癫痫发作有多常见?”→
vet_adverse_event_summary({active_ingredient: "fluralaner", species: "Dog"})→ 按反应、结果和年份统计的数量。 - 查询召回。“Blue Buffalo 狗粮被召回过吗?”→
vet_product_recalls({product: "Blue Buffalo"})。 - 查找附近服务。“奥斯汀 TX 附近的急诊兽医”→
pet_services_near({place: "Austin TX", kind: "emergency_vet"})。
身份验证
全程公开访问,无需密钥。
Green Book 工具(animal_drug_*)直接调用 animaldrugsatfda.fda.gov——即 Animal Drugs @ FDA SPA 自身使用的后端 API。它与 openFDA 的上游服务不同:不适用任何密钥,不会发送 PLATFORM_DATAGOV_KEY,_apiKey 在此也不起作用。
api.fda.gov 运行于 api-umbrella(与 openfda 使用相同的 api.data.gov 技术栈),因此网关会注入 PLATFORM_DATAGOV_KEY(workers/gateway/src/index.ts 中 MCP_PACKS 的 veterinary-fda 条目),将匿名访问限制从每分钟 40 次、每天 1,000 次提高到每天 120,000 次。这与另外 15 个联邦工具包(openfda、fac、nasa、govinfo、regulations-gov 等)使用的同一平台密钥。使用 _apiKey 自带密钥,即可使用自己的配额。若平台密钥被拒绝或撤销,系统会退回匿名访问,而不会导致调用失败。
Nominatim(地理编码)和 Overpass(pet_services_near)是独立的公开 OSM 基础设施,均无需密钥。
工具
| 工具 | 可回答的问题 |
|---|---|
animal_drug_search | 哪些 FDA 批准的动物药物符合某种成分、物种、申办方、品牌、适应症或状态 |
animal_drug_detail | 某一已批准申请的全部信息:产品、物种、剂量、适应症、FOI 批准摘要、标签 PDF |
animal_drug_monthly_updates | Green Book 月度变更 PDF(新批准、撤回、标签变更) |
vet_adverse_events | 某种药物/物种的单条动物不良事件报告 |
vet_adverse_event_summary | 某种药物/物种组合按反应、结果和年份统计的数量 |
vet_product_recalls | FDA Enforcement Report 中有关宠物食品或兽药产品的召回信息 |
pet_services_near | 附近的兽医、急诊兽医、狗公园、宠物店、收容所(OpenStreetMap) |
数据陷阱(截至 2026-09-04 测得,会影响这些工具的构建方式)
drug.brand_name几乎毫无用处。 在不良事件端点中,它几乎总是登记方的内部简称(例如,Merck Animal Health 的"MSK"),而不是上市产品名称。按drug.brand_name搜索 "Bravecto"、"Frontline"、"Heartgard" 或 "Simparica",四者均返回 零 条匹配结果。实际产品名称记录在drug.active_ingredients.name中(与真正的化学成分名称混杂在一起,源数据很杂乱)。vet_adverse_events/vet_adverse_event_summary会先尝试brand_name,再自动回退到active_ingredients.name,并报告resolved_from,让调用方知道实际匹配的是哪个字段。count=<field>.exact是按字段分别支持的,并非通用功能。count=reaction.veddra_term_name.exact和count=outcome.medical_status.exact都可用;count=animal.species.exact和count=original_receive_date.exact都会返回"Nothing to count"。vet_adverse_event_summary的按年份统计表通过请求count=original_receive_date绕过日期字段的限制(它会按确切的日期分组,而不是按年份),再由客户端汇总。- 不带引号的多词词项使用 OR 而非 AND,且 openFDA 不会按相关性排序。
search=product_description:dog+food(不带引号)会匹配约 29,000 条记录——大多是热狗和玉米热狗,因为 "dog" OR "food" 几乎会命中整个食品召回数据集,而 openFDA 返回结果的顺序完全随意。只有用引号括起短语的形式search=product_description:"dog food"才会返回真正的 2 条宠物食品匹配结果(Freshpet)。因此,vet_product_recalls总会将多词产品词项用引号括起来,并且绝不会回退到宽泛的 OR 匹配——在召回/安全问题的回答中,误报(搜索 "Blue Buffalo" 时出现一条 "Blue Bell" 冰淇淋召回)比诚实地返回零条结果更糟。所以不同于此工具包自身的不良事件回退机制,也不同于openfda的自由文本回退机制,这里没有宽泛匹配层级。 - openFDA 中的宠物食品召回覆盖确实不完整,并非搜索语法问题。 没有专门的动物/宠物食品召回端点——
vet_product_recalls复用了food/enforcement.json和drug/enforcement.json,与openfda用于人类食品/药品的 feed 相同。多个知名且经 FDA 确认的宠物食品召回事件完全不在此数据集中。这一点并非通过一次查询失败得出,而是逐一尝试所有合理的产品名称/公司名称拼写(包括 FDA 自己新闻稿中的确切名称)并穷尽搜索后确认的:Blue Buffalo 在 2010、2017 和 2022 年的召回,以及 2021 年 Sportmix 黄曲霉毒素召回事件(约 70 只狗死亡,FDA 正式列为 I 级召回),无论怎样搜索都返回 零 条记录。FDA 自己的召回历史页面(fda.gov/animal-veterinary/safety-health/recalls-withdrawals)与 openFDA Enforcement Reports API 使用的底层数据并不相同,openFDA 也不会镜像该页面的数据。在此情况下,vet_product_recalls会返回total: 0,并附上明确说明——应将零条结果理解为“未找到 Enforcement Report 记录”,绝不能理解为“从未召回”。
Green Book 陷阱(2026-09-05 测得)
/advancedSearch会静默丢弃basicSearchTerm。 这是最危险的问题:它不会报错,而是返回状态码为 200、看似很可靠但实际错误的记录。{basicSearchTerm: "carprofen", speciesName: "Cats"}返回 338 条结果,首条是戊巴比妥钠——也就是整个猫类结果集,自由文本搜索词被直接忽略,而不是返回 carprofen∩cats 的交集。响应中没有任何信息表明搜索词遭到了忽略。因此,animal_drug_search绝不会将自由文本转发给/advancedSearch:当query与结构化筛选条件同时出现时,会将其解析为activeIngredientName(如果为空,则解析为proprietaryName),并通过query_resolved_to报告解析结果。- 无论实际结果数量如何,
totalPages始终为1。 694 条狗类记录在pageSize: 2时,报告的totalPages仍然是1。如果信任该值,所有大型结果集都会被截断到一页。animal_drug_search会根据totalElements / page_size重新计算该值。 publishDate和voluntaryWithdrawalDate的单位是 Unix 纪元毫秒,不是秒——如果按秒读取,日期会落在 1970 年。显示格式为YYYY-MM-DD。- 列表记录中的
applicationStatusValue始终为null。 只有applicationStatusCode(单独的A/W/G/R)有值,因此直接透传会让每条结果的状态都显示为未知。状态码会通过/codes/application_status解码(每个隔离区仅缓存一次,并提供硬编码备用表,因此即使 4 行查询短暂出错,也不会导致状态退化为单个字母)。 proprietaryName可能包含嵌入的换行符——"Carprofen Caplets\nNovox® Caplets"是同一条记录,包含两个商品名。返回结果同时包含proprietary_names[]和第一个名称proprietary_name。/retrievePreviewBean/{id}收到未知 ID 时会返回 500 和 HTML Weblogic 错误页,简单处理时会将其归类为upstream_down——当调用方只是传入了错误的 ID(或误将 NADA 编号作为所需的 applicationId 传入)时,就会被报告为 FDA 服务宕机。animal_drug_detail会先检查/preview/{id},该接口会对同一 ID 返回正常的 200 和applicationId: null,并抛出指出两者区别的参数错误。/retrievePreviewBean自身的application区块无法使用——即使 ID 有效,applicationNumber也是0,type 和 status 也都是null。详细内容是真实的;身份字段必须从/preview/{id}获取。两个接口都不能单独满足需求。/specandstatus/{id}并未接入,这是有意为之。specandstatus/1024返回的是与申请 1024(Rimadyl)无关的金霉素 VFD 记录——它似乎使用了另一套 ID 空间。我们选择不接入,以免发布看起来合理、实际错误的答案。- 文档下载分布在三种不同的路径格式下,且都已验证可返回 200
application/pdf:/document/downloadFoi/{foiId}、/document/downloadLabeling/{labelingId},以及不属于/document/路径的/monthlyUpdates/downloadMonthlyUpdate/{greenbookMonthlyUpdatesId}。
其他陷阱
- OpenStreetMap 对
emergency=yes的标注并不完整。 许多真实存在的急诊兽医诊所并没有这样的标注。pet_services_near({kind: "emergency_vet"})在按急诊标注搜索无结果时,会回退到附近所有兽医诊所(并附带说明),而不是错误地返回“未找到”。
此 MCP 工具包应能回答的问题示例
- “哪些 FDA 批准的药物含有 carprofen?”
- “哪些药物获准用于狗?”
- “Rimadyl 获批用于什么用途?何时获批?”
- “Zoetis 有哪些动物药被撤回?”
- “狗使用 Bravecto 后报告了哪些副作用?”
- “猫使用 fluralaner 后发生了多少起不良事件?结果如何?”
- “Blue Buffalo 狗粮被召回过吗?”
- “德克萨斯州奥斯汀附近的急诊兽医诊所”
- “俄勒冈州波特兰附近的狗公园”
快速开始
添加到你的 MCP 客户端(Claude Desktop、Cursor、Windsurf 等):
{
"mcpServers": {
"veterinary-fda": {
"url": "https://gateway.pipeworx.io/veterinary-fda/mcp"
}
}
}
此端点实际提供的内容
https://gateway.pipeworx.io/veterinary-fda/mcp 上的 tools/list 会返回上表中的工具,以及 Pipeworx 共享元工具——ask_pipeworx、
discover_tools、search_within、remember/recall 等整个网关通用工具集。因此,你看到的工具数量会多于表格中的数量:目前,单个工具包端点除了列出该工具包自己的工具外,还会列出大约 30 个共享工具。连接的 initialize 响应会说明其确切范围,是当天情况的权威依据。
这是有意为之,并非意外的多路复用。元工具可以让限定范围的连接回答此工具包无法涵盖的问题——通过可跨整个目录路由的 ask_pipeworx 实现——而无需添加第二个 MCP 服务。目前无法挂载不含这些元工具的工具包端点;如果额外的架构定义消耗的上下文超过路由功能带来的价值,请连接一次完整网关,而不是连接多个工具包端点。
或者,连接完整的 Pipeworx 网关,直接列出所有工具包的工具,而不只是当前工具包的工具:
{
"mcpServers": {
"pipeworx": {
"url": "https://gateway.pipeworx.io/mcp"
}
}
}
两个 URL 都连接到同一个网关和相同的 1684+ 个数据源。唯一的区别是,哪个工具包的工具会被直接列出;ask_pipeworx 可从任一端点访问所有工具。
没有 MCP 客户端?通过 HTTP 调用
curl -X POST https://gateway.pipeworx.io/v1/tools/vet_adverse_events \
-H 'Content-Type: application/json' \
-d '{"drug":"Bravecto","species":"Dog"}'
首次调用无需账户。查看任意工具:GET https://gateway.pipeworx.io/v1/tools/vet_adverse_events。查找工具:使用 {"query":"..."} 调用 POST https://gateway.pipeworx.io/v1/tools/search_packs。
独立运行(无需网关账户)
此软件包也可作为本地 stdio MCP 服务运行——无需 Pipeworx 账户,也无需通过网关往返:
{
"mcpServers": {
"veterinary-fda": {
"command": "npx",
"args": ["-y", "@pipeworx/mcp-veterinary-fda"]
}
}
}
也可以直接运行,确认它能正常启动:
npx -y @pipeworx/mcp-veterinary-fda
它通过 stdin/stdout 使用 MCP,并响应 initialize/tools/list/tools/call,仅提供此工具包的工具——不包含上述网关连接额外提供的共享元工具。源代码相同,工具相同,但没有 ask_pipeworx 路由功能。
使用 ask_pipeworx
你可以用通俗的英语提问,而不是直接调用工具——此功能既适用于上面的工具包端点,也适用于完整网关:
ask_pipeworx({ question: "your question about Veterinary Fda data" })
网关会选择合适的工具,并自动填写参数。
更多信息
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。