mcpField
V
Veterinary Fda

Veterinary Fda

远程服务
pipeworx.io健康医疗15 周前更新

关于 Veterinary Fda

Veterinary FDA 是用于查询动物药品审批、兽医不良事件报告、产品召回和附近宠物服务的 MCP 服务。它整合 FDA Green Book、openFDA 和 OpenStreetMap 数据,支持动物健康研究及本地服务查询。

主要功能

  1. 01搜索已批准动物药及申请详情
  2. 02获取 Green Book 月度更新
  3. 03查询单条不良事件报告
  4. 04按反应、结果和年份汇总
  5. 05搜索兽医产品召回记录
  6. 06查找附近宠物服务

适用场景

  1. 01核实动物药的批准状态和适应症
  2. 02查看兽药相关反应报告
  3. 03查询宠物产品召回记录
  4. 04查找附近兽医诊所或狗公园

MCP 相关

向 MCP 客户端提供动物药品、兽医不良事件、召回和宠物服务工具。数据来自 FDA Green Book、openFDA 和 OpenStreetMap。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://gateway.pipeworx.io/veterinary-fda/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

48
参数类型必填说明
qstring否question 的别名。
askstring否question 的别名。
textstring否question 的别名。
inputstring否question 的别名。
packsarray否可选。将路由限制为这些包的 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(绝不会返回空答案)。
querystring否question 的别名。
promptstring否question 的别名。
messagestring否question 的别名。
questionstring是用自然语言表达的问题或请求。支持 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_updatesGreen Book 月度变更 PDF(新批准、撤回、标签变更)
vet_adverse_events某种药物/物种的单条动物不良事件报告
vet_adverse_event_summary某种药物/物种组合按反应、结果和年份统计的数量
vet_product_recallsFDA 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

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。