mcpField
E
Ema Article57

Ema Article57

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

关于 Ema Article57

Ema Article57 是面向药品监管与市场授权查询的 MCP 服务,覆盖欧洲经济区各国获批产品,并按产品与授权国家分别记录。它提供搜索、产品记录、数据集信息及基于快照的变更比较;数据来自预先处理的 EMA 数据集,而非实时抓取。

主要功能

  1. 01按药品、成分、持有人或国家搜索
  2. 02查询产品的各国授权记录
  3. 03比较日期快照中的新增与移除产品
  4. 04查看字段、国家名称和数据快照信息
  5. 05返回 EMA 来源文档链接

适用场景

  1. 01核查某药品在哪些 EEA 国家获批
  2. 02查找特定国家的上市许可持有人
  3. 03查看公司在 EEA 的产品授权
  4. 04检查有快照可比时的登记变化

MCP 相关

向 MCP 客户端提供 EMA Article 57 产品登记搜索、详情、数据集信息和快照变更工具,可通过 Pipeworx 网关连接或作为本地 stdio MCP 服务运行。

配置

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

服务地址https://gateway.pipeworx.io/ema-article57/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 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

详细介绍

@pipeworx/ema-article57

EMA Article 57 产品数据——涵盖欧洲经济区内所有持有有效上市许可的药品(包括集中审批、相互认可、分散审批和纯国家审批),每个产品与授权国家组合占一行,并列出各自的上市许可持有人和药物警戒系统所在地。无需密钥。

属于 Pipeworx——一个将 AI Agent 连接到 1683+ 个实时数据源的 MCP 网关。

这是 EMA 的广覆盖注册库。姊妹数据包 ema-medicines 仅涵盖欧盟集中审批程序的药品(每种药品约 1 行,字段更丰富——状态、适应症、批准日期)。Article 57 则取舍相反:字段较少,但也涵盖所有 EEA 国家的国家审批产品,而 ema-medicines 明确不包含这些产品。

工具

  • ema_article57_search(query?, active_substance?, holder?, country?, route?, limit?, offset?) — 支持自由文本和筛选条件的搜索,提供真正的 offset+limit 分页以及 total_matches 计数。可回答“X 在哪些 EEA 国家获批”“X 在 Y 国的上市许可持有人是谁”“Z 公司在 EEA 持有哪些产品”。
  • ema_article57_product(name, country?) — 按名称查找某种产品的所有授权国家记录(优先精确匹配,否则回退到子串匹配,并标记 match_type)。Article 57 不包含适应症文本,也不提供单个产品的 URL,因此此工具返回 EMA 权威来源文档 URL,而不是转述适应症。
  • ema_article57_recent_changes(since) — 返回自指定日期以来新增到注册库或从中移除的产品,通过对比此数据包自身带日期的快照计算(来源完全没有变更日期列——详见注意事项)。如果没有快照涵盖所请求的时间范围,则返回 comparable: false 并说明原因,而不是猜测并返回空差异。
  • ema_article57_dataset_info() — 返回 EMA 权威批量下载 URL、当前行数、此数据包记录的快照日期,以及所有不同的授权国家值(按 country 筛选前可用于确认准确拼写)。

身份验证

无需密钥。

数据源

架构 — 此工具包不会实时获取 EMA 数据

在 2026-09-25 使用实际文件测得:7.87 MB 的压缩文件解压后,sheet1.xml 为 63.0 MB,sharedStrings.xml 为 4.7 MB(164,314 行 × 8 列)。使用相同的正则扫描方法解析一个小得多的 EMA 导出文件(ema-medicines 的约 0.9 MB 报告),测得的 V8 堆内存占用已经达到 123 MB;此文件大约大 9 倍,无法装入 Cloudflare Worker 的 128 MB 上限。因此,此工具包从共享的 pipeworx-datasets R2 存储桶读取预构建、预压缩的数据集,而不是逐个请求调用 EMA。scripts/ingest-ema-article57.mjs 执行实际的数据获取和 XLSX 解析(离线运行,不在 Worker 中),并写入:

  • ema-article57/latest.json.gz — 包含全部 164,314 行,采用字典编码(架构 2:每列是唯一字符串表,每行对应一个整数索引),原始大小 6.35 MB / gzip 压缩后 1.42 MB,每个隔离实例读取一次。

    为何采用列而非行对象: 架构 1 为每行存储一个对象(JSON 大小为 29 MB),2026-09-25,四个工具中有三个在网关隔离实例内因资源限制而触发 Cloudflare 错误 1102。每列中重复值很多 — 值共 15.9M 个字符,其中有 2.8M 个唯一值、32 个国家/地区和约 4,000 个持有人 — 因此,筛选条件只针对每个唯一值判定一次,然后按行索引查找。使用实际文件进行本地测量:搜索峰值内存比基准值高约 33 MB,recent_changes(两个快照)高约 59 MB,缓存后仅占用 15 MB。工具包会拒绝任何其他架构,以免误读数据。

  • ema-article57/snapshots/YYYY-MM-DD.json.gz — 每次数据导入运行都会保存一个带日期的副本,供 ema_article57_recent_changes 进行差异比较。

  • ema-article57/snapshots-index.json — 记录在案的快照日期列表,文件较小且未压缩。

  • ema-article57/meta.json — 生成元数据。

定期重新运行数据导入(node scripts/ingest-ema-article57.mjs),以跟踪 EMA 自身的更新,并为 ema_article57_recent_changes 提供多个快照进行差异比较 — 当前发布版本仅记录了 2026-09-25 的快照,因此 recent_changes 目前无法回答任何更早 since 日期的问题,并会明确说明这一点,而不是猜测结果为零。

如果没有网关的 _r2 绑定(即直接对本软件包运行 npm install),每个工具都会返回 {reason: "dataset_unavailable", hint: ...},其中会指出可直接获取数据的上游 URL — 没有实时回退方案,因为本架构说明解释的正是为何无法进行逐请求实时获取和解析。

许可 — EMA 的法律声明明确允许此操作

EMA 的法律声明:“EMA 网页上提供的信息和文件均为公开内容,可出于非商业或商业目的,无论采用何种方式和/或格式,全部或部分进行复制和/或分发,但必须始终注明 EMA 为材料来源。” 这是明确授予的再利用许可,并非未作说明 — 在此构建副本无需依赖仅适用于代理服务的 mirror-needs-grant-proxy-does-not 回退方案。

架构 — 八列,仅此而已

第 20 行是表头(第 1 至 19 行是来源说明横幅和空行,结构与 medicines-output-* 报告相同),第 21 行起为数据。列顺序为:产品名称、活性物质、给药途径、授权国家、上市许可持有人、药物警戒系统主文件所在地、药物警戒咨询邮箱、药物警戒咨询电话。

我们只保留前六列,在存储任何内容之前删除药物警戒邮箱和电话。 这些是联系方式——对于小型持有人,它们往往是具名个人的私人地址。这个数据包提供的是副本,而非实时代理,因此 CLAUDE.md 中关于个人数据的例外条款适用。ema_article57_dataset_info 在 fields_withheld 中列出了这些字段。未经裁定,不得将其添加回来。

没有日期字段、单个产品 ID,也没有单个产品 URL。 第 57 条是一项简要的监管交叉索引(谁持有什么、在哪里),不是临床登记册。不要期待有适应症文本、批准日期或状态字段;ema_article57_dataset_info 准确列出了存在和不存在的内容(fields / fields_not_present)。

数据粒度 — 按设计,每个产品 × 每个国家一行

同一产品名称会在其获准销售的每个 EEA 国家各出现一行,这完全合理(例如,“Helixor A”在拉脱维亚和立陶宛各有一行,且各自有独立的持有人/药物警戒联系人——本例中持有人相同,但并非每种产品都如此)。ema_article57_product 会返回每个匹配行,而不是合并后的单条记录,countries_found 会列出这些国家。

国家名称采用 EMA 自己使用的英文拼写,而非 ISO 代码

country 值是 EMA 发布的自由文本,例如 "Germany"、"United Kingdom (Northern Ireland)"、"Czech Republic"、"European Union"(没错,这确实是 country 列中的真实值,与更广义 EEA 中的 "Iceland"、"Liechtenstein"、"Norway" 并列)。ema_article57_search 的 country 筛选器会进行精确匹配(不区分大小写),因此请先从 ema_article57_dataset_info 的 distinct_countries 获取拼写,不要猜测 ISO 代码或缩写。

ema_article57_recent_changes 至少需要两个快照——随包发布时只有一个

来源完全不提供逐行变更日期,因此“发生了哪些变更”只能通过比较此数据包自身两个带日期的快照来回答。随包发布时恰好只有一个快照(2026-09-25),所以目前每个 since 请求都会返回 comparable: false, reason: "no_snapshot_at_or_before_since"——这是正确行为,不是错误;工具会明确说明这一点,而不会返回虚构的空差异。定期重新运行摄取脚本,才能让此工具真正回答问题;请参见上文的“架构”。

add-pack.mjs 的自动冒烟测试对由 R2 支持的数据包存在已知缺陷

scripts/lib/pack-smoke.mjs(由 scripts/add-pack.mjs 的第 3 步使用)只会使用 smoke.json 中的参数调用各个工具——它没有注入 _r2 绑定的机制,因此记录的此数据包(以及所有其他 injectR2 数据包:court-listener、crs-reports、esef-filings、fda-drug-competition)的冒烟测试结果,是如实返回的“无绑定”(dataset_unavailable),而非真实数据。根据 payload-emptiness.mjs 的启发式判断,该负载并非字面意义上的空(其中有非数组键),因此自动检查会机械地通过,却从未实际测试真实数据路径。发布前,我们已使用手工构建的绑定模拟层,针对线上生产 R2 数据集独立验证了此数据包的工具(基于 164,314 条真实记录,实际调用了 search/product/dataset_info/recent_changes)——对话记录请参见 fleet #2421 的关闭说明。以后值得在 pack-smoke.mjs 中普遍修复此问题;但这不属于此数据包单独处理的范围。

快速开始

添加到你的 MCP 客户端(Claude Desktop、Cursor、Windsurf 等):

{
  "mcpServers": {
    "ema-article57": {
      "url": "https://gateway.pipeworx.io/ema-article57/mcp"
    }
  }
}
此端点实际提供的内容

tools/list 在 https://gateway.pipeworx.io/ema-article57/mcp 返回上表中的工具,以及 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+ 个数据源。唯一的区别是哪些工具包的工具会被直接列出;通过任一 URL,ask_pipeworx 都可以访问所有工具。

没有 MCP 客户端?通过 HTTP 调用

curl -X POST https://gateway.pipeworx.io/v1/tools/ema_article57_search \
  -H 'Content-Type: application/json' \
  -d '{"query":"Helixor","limit":5}'

首次调用无需账户。查看任意工具:GET https://gateway.pipeworx.io/v1/tools/ema_article57_search。查找工具:使用 {"query":"..."} 调用 POST https://gateway.pipeworx.io/v1/tools/search_packs。

独立运行(无需网关账户)

此软件包也可以作为本地 stdio MCP 服务运行——无需 Pipeworx 账户,也无需经由网关往返:

{
  "mcpServers": {
    "ema-article57": {
      "command": "npx",
      "args": ["-y", "@pipeworx/mcp-ema-article57"]
    }
  }
}

或者直接运行它,确认服务可以启动:

npx -y @pipeworx/mcp-ema-article57

它通过 stdin/stdout 使用 MCP 通信,并响应 initialize/tools/list/tools/call,但只提供此工具包的工具——不包含上述网关连接额外提供的任何共享元工具。来源相同,工具相同,但没有 ask_pipeworx 路由。

使用 ask_pipeworx

你可以用简单英语提问,而不是直接调用工具——这既适用于上面的工具包端点,也适用于完整网关:

ask_pipeworx({ question: "your question about Ema Article57 data" })

网关会自动选择合适的工具并填入参数。

更多信息

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

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

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