关于 Swissmedic
Swissmedic 将瑞士授权人用药品登记数据提供给需要核实授权状态、持有人和配药类别的用户及应用。它支持分页筛选、产品剂量规格查询和按真实授权日期检索近期变更。
主要功能
- 01搜索并筛选授权药品
- 02查询产品的全部授权剂量规格
- 03按日期查询近期授权变更
- 04查看数据集及类别信息
适用场景
- 01核实药品是否获准在瑞士销售
- 02查找授权持有人和配药类别
- 03追踪指定日期后的新授权或剂量授权
MCP 相关
向 MCP 客户端公开药品搜索、产品详情、近期变更和数据集信息工具。可经 Pipeworx 网关连接,也可本地通过 stdio 运行;数据来自 Swissmedic 的公开药品清单。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://gateway.pipeworx.io/swissmedic/mcpclaude mcp add --transport http pipeworx-io-swissmedic https://gateway.pipeworx.io/swissmedic/mcp{"mcpServers":{"pipeworx-io-swissmedic":{"type":"http","url":"https://gateway.pipeworx.io/swissmedic/mcp"}}}在 Cursor 中打开{"servers":{"pipeworx-io-swissmedic":{"type":"http","url":"https://gateway.pipeworx.io/swissmedic/mcp"}}}在 VS Code 中打开{"mcpServers":{"pipeworx-io-swissmedic":{"type":"http","url":"https://gateway.pipeworx.io/swissmedic/mcp"}}}{"mcpServers":{"pipeworx-io-swissmedic":{"serverUrl":"https://gateway.pipeworx.io/swissmedic/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
@pipeworx/swissmedic
Swissmedic 的瑞士人用药品获批登记册——“Zugelassene Arzneimittel HAM”清单:每种获批产品及其每种获批剂量规格,以及上市许可持有人、药品类别、调配类别(处方等级)和许可日期。无需密钥。
属于 Pipeworx——一个将 AI Agent 连接到 1683+ 个实时数据源的 MCP 网关。
工具
swissmedic_search(query?, holder?, category?, dispensing_category?, limit?, offset?)— 支持全文搜索和筛选,并提供真正的 offset+limit 分页及total_matches计数。可回答“X 是否在瑞士获批”“谁持有 X 的瑞士许可”“X 属于哪种调配类别”等问题。swissmedic_product(name)— 按名称查询某个产品的所有获批剂量规格(优先精确匹配,未匹配时回退到子字符串匹配,并标记match_type)。导出文件不包含适应症文本,也没有单个产品的 URL,因此此工具会返回 Swissmedic 官方下载文件。swissmedic_recent_changes(since)— 自某日期以来首次获批或新增获批剂量规格的产品——这是源数据自身日期列提供的真实信号。swissmedic_dataset_info()— 官方批量下载 URL、来源页面、行数,以及筛选器使用的药品类别和调配类别完整列表。
身份验证
无需密钥。
数据源
- https://www.swissmedic.ch/dam/swissmedic/en/dokumente/internetlisten/zugelassene_arzneimittel_ham_ind.xlsx.download.xlsx/Zugelassene_Arzneimittel_HAM.xlsx — 获批人用药品 XLSX 文件,链接来自 swissmedic.ch 的“Listen und Verzeichnisse”页面。经实时验证(2026-09-25):HTTP 200,1,005,371 字节,11,086 行数据。Swissmedic 表示清单“每月更新”——未公布更具体的更新频率。
此工具包获取的是 EMA 规模的数据,而非 ema-article57 规模的数据——这一差异决定了架构
文件压缩后约 1 MB,工作表 XML 约 4.8 MB。它与同系列的 ema-medicines 工具包相同,后者已能在每次请求时实时解析,且没有问题;文件大小约为促使 ema-article57 工具包改为构建由 R2 支持的本地副本的文件的 1/9(前者有 164,314 行 / 63 MB 工作表 XML,而此处有 11,086 行 / 4.8 MB)。因此,swissmedic 采用与 ema-medicines 相同的模式实时获取:每个 isolate 保存一份解析后的副本,保留 12 小时(DATASET_TTL_MS),此外还有 12 小时的 Cloudflare 边缘缓存——考虑到 Swissmedic 自身每月更新一次,设置更短的时长只会对未变更的文件进行不必要的重复下载。如果刷新失败且已有较早的副本,则会提供较早的副本,而不是返回错误。
许可——这是实时代理,不是镜像,因此无需单独获得再利用许可
Swissmedic 的一般法律声明听起来比 EMA 的限制更多(“下载或复制内容……需要版权所有者的书面同意”——这是面向整个网站撰写的页面,并非针对这份特定的公开清单)。此处无需解决这个问题:根据代理与镜像规则(mirror-needs-grant-proxy-does-not,CLAUDE.md),每次缓存未命中时实时调用公开、无需密钥的上游服务的工具包是客户端,而非发布者,无需明确授权——只有批量复制或镜像数据集才需要授权。此工具包采用前者(获取并缓存,与 ema-medicines 相同),绝不采用后者。
架构 — 第 7 行为表头,德语/法语双语源文件
第 1–6 行为标题区块(德语/法语双语,格式与大多数瑞士联邦导出文件相同),第 7 行为表头,第 8 行及之后为记录。共 10 列:授权编号、剂量规格编号、产品名称、上市许可持有人、药品类别(“Heilmittelcode”——例如 “Impfstoffe” = 疫苗,“Blutprodukte” = 血液制品)、剂量规格层级的处方类别、药品层级的处方类别、首次授权日期、剂量规格授权日期、有效期(“unbegrenzt” = 无限期,本文件中的大多数记录均如此)。
两个日期列均为 Excel 序列日期(自 1899-12-30 起的天数,即 Excel 沿用的 Lotus-1-2-3 兼容历元)——导出时会转换为 ISO YYYY-MM-DD 格式(src/index.ts 中的 excelSerialToIso)。已通过一条已知记录验证:Vivotif 的 first_authorisation_date 序列日期转换后为 1980-12-09,与其实际授权历史一致。
除授权编号外,没有适应症文本,也没有每个产品对应的 URL。swissmedic_product 的响应会指向权威的 Swissmedic 下载文件,而不会改写数据中并不存在的适应症信息。
dispensing_category 会匹配任一列
每个产品都有药品层级的处方类别,此外每种剂量规格也有各自的处方类别——二者通常一致,但不保证相同。swissmedic_search 的 dispensing_category 筛选器会在 EITHER 列等于指定值时匹配该行,因此调用方无需知道 Swissmedic 具体在哪个层级记录了不一致的值。实时观察到的不同值:A、A+、B、B/D、D、E。
swissmedic_recent_changes 使用真实日期,不同于 ema-article57 的同类工具
EMA 的 Article 57 导出文件(ema-article57 包)完全没有日期列,因此该包的 recent_changes 只能比较自身快照。此文件有两个真实日期列,因此 swissmedic_recent_changes 会直接按 first_authorisation_date/dosage_authorisation_date >= since 筛选——无需快照历史。已于 2026-09-25 实时验证:since: "2026-01-01" 返回了 384 条真实变更,包括 2026 年 8 月的剂量规格层级重新授权。
重复使用解析器
src/xlsx.ts 是 mcps/ema-medicines/src/xlsx.ts(手写的 zip+XML 读取器)的副本,而非共享依赖——这两个文件都很小,而且 Worker 包不应为了每个包各自对一种文件格式进行的一次基于正则表达式的扫描,而引入共享的 xlsx 解析包。如果底层方法需要更改,请手动确保两者保持一致;CELL_RE 中惰性的 [^>]*? 属性匹配至关重要(见其上方的注释),切勿将其“简化”为贪婪匹配。
快速开始
添加到你的 MCP 客户端(Claude Desktop、Cursor、Windsurf 等):
{
"mcpServers": {
"swissmedic": {
"url": "https://gateway.pipeworx.io/swissmedic/mcp"
}
}
}
此端点实际提供的内容
https://gateway.pipeworx.io/swissmedic/mcp 上的 tools/list 会返回上表中的工具,以及 Pipeworx 的共享元工具——ask_pipeworx、
discover_tools、search_within、remember/recall 及网关范围内的其他工具。因此,你看到的工具数量会多于表格中的数量:目前,单个工具包端点除了列出该工具包自有的工具,还会列出大约 30 个共享工具。连接的 initialize 响应会说明其确切范围,是当天的权威答案。
这是有意为之,并非意外的多路复用。这些元工具可让限定范围的连接回答本工具包未覆盖的问题——通过可跨整个目录路由的
ask_pipeworx——无需再添加第二个 MCP 服务。目前无法挂载不含这些元工具的工具包端点;如果额外的 schema 占用的上下文多于路由带来的收益,请改为连接一次完整网关,而不是连接多个工具包端点。
或者,连接完整的 Pipeworx 网关,直接列出所有工具包的工具,而不只是这个工具包的工具:
{
"mcpServers": {
"pipeworx": {
"url": "https://gateway.pipeworx.io/mcp"
}
}
}
两个 URL 都连接到同一网关和相同的 1683+ 个数据源。唯一的区别在于直接列出哪个工具包的工具;从任一端点都可以通过 ask_pipeworx 访问所有工具包。
没有 MCP 客户端?通过 HTTP 调用
curl -X POST https://gateway.pipeworx.io/v1/tools/swissmedic_search \
-H 'Content-Type: application/json' \
-d '{"query":"Vivotif","limit":5}'
首次调用无需账号。检查任意工具:GET https://gateway.pipeworx.io/v1/tools/swissmedic_search。查找工具包:使用 {"query":"..."} 向 https://gateway.pipeworx.io/v1/tools/search_packs 发送 POST 请求。
独立运行(无需网关账号)
此软件包也可以作为本地 stdio MCP 服务运行——无需 Pipeworx 账号,也无需通过网关往返:
{
"mcpServers": {
"swissmedic": {
"command": "npx",
"args": ["-y", "@pipeworx/mcp-swissmedic"]
}
}
}
或者直接运行,以确认服务能够启动:
npx -y @pipeworx/mcp-swissmedic
它通过 stdin/stdout 使用 MCP,并针对仅此工具包的工具响应 initialize/tools/list/tools/call——不包含上述网关连接额外提供的任何共享元工具。源码相同,工具相同,不支持 ask_pipeworx 路由。
使用 ask_pipeworx
你可以用通俗英语提问,而不是直接调用工具——这既适用于上面的工具包端点,也适用于完整网关:
ask_pipeworx({ question: "your question about Swissmedic data" })
网关会选择合适的工具并自动填入参数。
更多信息
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。