mcpField
E
EUDAMED MCP

EUDAMED MCP

本地服务
github.com/t4dhg法律与政务02 周前更新

关于 EUDAMED MCP

EUDAMED MCP 是面向医疗器械记录查询与核验的只读 MCP 服务,可搜索 UDI、核查经济运营者并整理可追溯的证据清单。它明确区分公开登记信息与尚未核实的合规文件,不作合规判定。

主要功能

  1. 01搜索和规范化 UDI 记录
  2. 02按 SRN 核验经济运营者
  3. 03发现公司名称候选项
  4. 04解码代码及状态值
  5. 05调查设备并列出证据缺口
  6. 06提供查询来源与时间信息

适用场景

  1. 01按 Primary DI 查找设备记录
  2. 02调查产品登记主体与制造商不一致
  3. 03整理 IFU、声明和证书待核清单

MCP 相关

作为 MCP 服务,它向客户端提供 5 个只读工具、3 个引导式工作流提示词及 5 个可读资源,用于搜索和调查 EUDAMED Public API 数据。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"t4dhg-mcp-eudamed": {
"command": "npx",
"args": [
"-y",
"@t4dhg/mcp-eudamed"
]
}
}
}
启动命令npx -y @t4dhg/mcp-eudamed

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@t4dhg/mcp-eudamed0.1.1

工具

5

收录的工具列表 · 更新于 1 周前

参数类型必填说明
rawboolean否
exactboolean否对每个已提供的筛选条件执行不区分大小写、去除首尾空格后的精确匹配。
limitinteger否本地输出上限,不是上游页面大小。
basicUdiany否
languagestring否
primaryDiany否
referenceany否
tradeNamestring否
deviceNameany否
manufacturerSrnstring否

详细介绍

欧洲委员会 — EUDAMED

独立的非官方集成。

EUDAMED MCP

通过 AI 助手搜索欧洲医疗器械记录。

npm version npm downloads TypeScript types included License: MIT GitHub stars CI codecov Node.js 22+ MCP Compatible

独立的非官方集成 · 只读访问 · 无需 API 密钥即可访问已测试的公共端点

一个用于欧洲委员会 EUDAMED 公共 API 的只读 Model Context Protocol 服务。搜索 UDI 记录、核实经济运营者、解码分类和状态值,并调查医疗器械,同时明确区分公共记录与经核实的符合性证据。

从公司名称、器械名称或 UDI 开始。查找候选记录、确认注册制造商,并通过来源链接和明确列出的缺失项建立证据清单。

5 个工具 · 3 个引导式工作流 · 5 个易读资源

开始使用 · 示例请求 · 了解证据的工作方式 · EUDAMED 官方门户

实用之处

  • 先确认身份,再作解读。 保留 UDI 的前导零,在本地执行精确匹配,并保留多个候选项供查看。
  • 找到实际制造商。 提供的 SRN 可能属于同一集团中的另一家公司。调查会独立搜索器械身份,并追踪返回记录中的制造商 SRN。
  • 可追溯的证据。 结果包含确切的来源查询、原始检索时间戳、API 版本、缓存状态和本地限制。
  • 如实呈现缺失项。 缺失标记仍视为未知。失败的请求仍标记为失败。IFU、符合性声明和证书在单独获取前均视为未经核实。
  • 精简的工具集。 5 个工具提供 3 个已验证 API 端点和有界调查工作流。提示词也作为资源提供,因此客户端无需调用斜杠命令即可读取操作流程。
  • 默认采用保守策略。 串行发送请求、限制重试次数、设置超时和响应大小上限、使用短期缓存,并且仅提供组织层面的行为者数据。

这是一个独立集成,并非欧洲委员会的官方产品。公共注册本身不能独立证明产品符合相关要求。该服务不会检索 IFU 或证书,也不会判定符合或不符合。

安装并连接

需要 Node.js 22 或更高版本。将以下条目添加到 MCP 客户端的服务配置中:

{
  "mcpServers": {
    "eudamed": {
      "command": "npx",
      "args": ["-y", "@t4dhg/[email protected]"]
    }
  }
}

要从源代码构建,请在检出目录中运行 npm ci && npm run build,并将 node 配置为使用 dist/cli.js 的绝对路径。

服务使用 stdio。标准输出专用于 MCP 消息。无需凭据或 .env 文件。可选配置从进程环境中读取;不会自动加载 .env 文件。

若以编程方式使用,请从软件包导入 EudamedClient、investigate 或 createServer。导入该库不会启动传输:

import { EudamedClient, investigate } from '@t4dhg/mcp-eudamed';

const api = new EudamedClient();
const results = await api.devices({
  primaryDi: 'YOUR_PRIMARY_UDI_DI',
  exact: true,
});

const dossier = await investigate(api, {
  manufacturerSrn: 'US-MF-000000001',
  tradeName: 'YOUR_DEVICE_NAME',
});

试试这些请求

查找此 Primary UDI-DI 对应的公开 EUDAMED 记录。显示法定制造商、授权代表、风险等级和确切的来源查询。

我有制造商 SRN 和产品名称,但制造商搜索结果为空。检查该产品是否以其他法定实体的名义注册。

为此器械创建证据清单。区分 EUDAMED 中的信息与仍需通过受控 IFU、声明或证书确认的信息。

工具

工具用途主要输入
eudamed_devices搜索并规范化 UDI 记录;可选择包含原始器械字段至少提供一项:primaryDi、basicUdi、manufacturerSrn、tradeName、deviceName、reference;可选:exact、limit、language、raw
eudamed_actors仅使用组织字段验证一个确切的 SRNactorId
eudamed_discover_actors查找确切的法定/简称公司名称候选项,并在需要时回退到门户搜索name,可选:country、role、limit
eudamed_references获取代码译文,可选择在本地进一步筛选language、code、id、limit
eudamed_investigate解析候选器械及运营方、解码字段并指出证据缺口器械搜索字段;language、maxDevices、maxManufacturers、maxRepresentatives、deadlineMs

所有工具均声明为只读、非破坏性、幂等和开放世界注解。工具错误会返回 isError: true。搜索工具提供 JSON 文本及等效的 structuredContent。调查工具会在文本内容中提供简洁报告,并在 structuredContent 中提供完整证据(也包含该报告)。

搜索器械
{
  "primaryDi": "YOUR_PRIMARY_UDI_DI",
  "exact": true,
  "limit": 10,
  "language": "en",
  "raw": true
}

发现模式下,exact 默认为 false。设为 true 时,每个提供的筛选条件都会在本地按去除首尾空格且不区分大小写的方式进行精确匹配。不要假设上游支持部分名称匹配;请使用已知的确切标识符并检查返回的证据。多个筛选条件会一并发送;观察到的上游行为是 AND,但这并非已发布的合同保证。

器械工具会返回规范化的标识信息、运营方、解码后的值、三态标志、预期用途状态以及未经验证的文档清单。设置 raw: true 可保留其他上游器械字段。该库的 devices() 方法始终返回经过验证的原始器械记录。

调查制造商不匹配情况
{
  "manufacturerSrn": "YOUR_SUPPLIED_SRN",
  "tradeName": "YOUR_DEVICE_NAME",
  "maxDevices": 10,
  "maxManufacturers": 3,
  "maxRepresentatives": 3
}

工作流:

  1. 先查询 Primary DI,再查询 Basic UDI,然后分别对每个提供的名称/参考值进行精确本地匹配。过时的名称不能压过精确的 UDI 结果。
  2. 查询提供的参与者及其返回的器械组合。
  3. 将结果最强的非空路径用作目标候选项,记录与其他已提供字段之间的冲突,并保留其他路径的候选项。从目标候选项中读取制造商 SRN,并检查其参与者及范围受限的器械组合。
  4. 核实所选证据记录的授权代表。
  5. 解码参考值,并列出仍未核实的受控文件。
  6. 返回查询来源、失败情况、省略数量及未知的上游覆盖范围。

targetEvidence 仅包含来自最强非空身份路径的目标候选项。portfolioEvidence 包含其他制造商记录,不得归属于目标。evidence 仍是仅指目标证据的兼容别名。仅调查制造商时,不存在目标证据。

searches 保留每项独立查询。conflicts 记录已提供信息与观察结果之间的差异;alternativeCandidates 保留其他搜索路径匹配项。identityStatus 区分标识符匹配、候选项、歧义、冲突、未找到、未解决和仅器械组合结果。多个版本仍作为独立候选项保留;服务不会自动选择最新版本。缺失的运营方身份和未匹配的参与者查询会显示在 unresolved 中。

status: "completed" 表示执行已完成,并不表示身份、文件或符合性已获确立。partial、timed-out 和 cancelled 会保留已收集的证据及其限制。简明报告会列出目标身份、已解码字段、证据缺口、冲突、失败情况、范围限制及所需的后续文件。详细记录仍可在结构化输出中查看。

提示词和资源

每个提示词都需要一个必填的 query 字符串,其中包含已知标识符、名称或调查问题。提示词提供流程,但不会自行获取数据。

提示词工作流
investigate_device器械身份、实际制造商、代表及证据缺口
manufacturer_portfolio核实运营方并检查其范围受限的返回器械组合
conformity_evidence准备文件清单,同时保留尚未核实的声明

可读取的资源:

  • eudamed://guides/search
  • eudamed://guides/evidence
  • eudamed://prompts/investigate_device
  • eudamed://prompts/manufacturer_portfolio
  • eudamed://prompts/conformity_evidence

理解证据

输出含义
sourceUrl、retrievedAt、apiVersion查询时间和观察时间;缓存的观察结果保留其原始时间
returnedByApi此响应中的记录数,不是注册表总记录数
matched本地匹配后剩余的记录数
returned、truncated本地输出数量,以及此响应是否在本地受到数量上限限制
coverage: "unknown"尚未确认注册表覆盖范围和单条记录的新鲜度
decoded.FIELD原始数字 ID、译文标签及已解析/未解析状态
pagination已获取的页面、源页面 URL,以及查询是否已遍历完所有后续链接
flags对未知或无法识别的值,返回 true、false 或 null
intendedPurpose.statuspublic-record 或 missing;两者都无法验证当前受控版 IFU
documents明确标注为未经验证的 IFU、声明和证书证据;不会伪造 URL
调查中的 failures失败的步骤,与成功但结果为空的搜索相区分

空搜索结果是关于该查询的证据,并不能证明该器械不存在或不合规。ISO 13485 证书针对的是质量管理体系,不能替代特定产品的文档。请参阅证据工作流。

配置和限值

环境变量默认值范围 / 用途
EUDAMED_BASE_URLhttps://api.datalake.sante.service.ec.europa.eu/eudamedHTTPS 端点,不含凭据、查询参数或片段
EUDAMED_API_VERSIONv1.0版本字符串,例如 v1.0
EUDAMED_TIMEOUT_MS150001–120000;每次请求尝试,包括正文读取
EUDAMED_MAX_PAGES10每个查询 1–50 页;记录总数上限为 10,000
EUDAMED_MAX_RETRIES2初次尝试后重试 0–3 次
EUDAMED_CACHE_TTL_MS600000–86400000;器械 / 行为主体响应的 TTL
EUDAMED_REFERENCE_TTL_MS36000000–86400000;参考数据响应的 TTL
EUDAMED_MAX_RESPONSE_BYTES100000001–50000000;流式正文大小上限

请求按顺序执行。缓存最多保存 32 条经过验证的响应,且仅存储经过筛选的行为主体数据。参考数据会根据请求的语言,使用 CODE + ID 进行关联。重定向会被拒绝。GET 请求在网络故障、超时、HTTP 429 和 500/502/503/504 时会重试。系统会遵循 Retry-After;若冷却时间超过 30 秒,则结束请求,而不会提前重试。

器械输出默认包含 20 条记录(最多 100 条),参考数据默认包含 100 条(最多 500 条)。调查默认每个身份查询最多返回 10 条记录、10 条目标记录、10 条独立的产品组合上下文记录、10 个备选候选项、3 家发现的制造商和 3 名代表;每组最多 20 条记录,每个类别最多 5 家运营方。代表查询针对目标记录;如果未提供目标身份,则针对产品组合记录。HTTP 适配器会拒绝记录总数超过 10,000 的查询,并且只会在页数上限内跟进经过验证的续页链接。MCP 输出上限为 250 KB;如果超出,请缩小查询范围或降低限制。这些是本地防护措施,并不代表上游分页行为。一次调查可能会执行多个顺序请求并进行重试;deadlineMs 用于限制整个调查的时长(默认 60000,最大 300000),包括队列等待、重试和正文读取。MCP 取消操作会停止排队的请求、正在进行的 fetch 和重试等待。其他请求仍可正常使用。该库接受 { signal } 作为单独的请求选项参数。

开发与验证

npm ci
npm run lint
npm run format:check
npm run typecheck
npm run test:coverage
npm run test:stdio
npm pack --dry-run

单元测试和 MCP 协议测试具有确定性,并使用合成数据。构建后的 stdio 检查会在不访问实时网络的情况下验证传输初始化、发现、资源和校验。覆盖率门槛包括适配器、调查和 MCP 注册项。

实时检查默认关闭:

npm run test:live
EUDAMED_SMOKE_PRIMARY_DI=YOUR_KNOWN_UDI EUDAMED_SMOKE_ACTOR_ID=YOUR_KNOWN_SRN npm run test:live

第一条命令用于验证参考数据。EUDAMED_SMOKE_LANGUAGE 用于选择参考语言(默认 en);EUDAMED_SMOKE_EXPECT_LEGISLATION 可选,用于断言解码后的法规标签中包含已知子串,例如 2017/746。同时提供这两个标识符,也可对实时器械和行为主体查询进行测试。实时数据可能会变化;检查失败时需要进行调查,而不是自动重写固件。不会记录负载和行为主体联系方式。

请参阅 CONTRIBUTING.md、API 契约说明 和 SECURITY.md。

API 范围

已实现:对 /udi、/actors 和 /reference 发起匿名 JSON GET 请求,并于 2026 年 10 月 14 日根据实时服务进行验证。DG SANTE API 目录 是上游参考。

未实现:证书门户抓取、IFU 下载、写入、注册表批量导出或法规规则评估。分页遵循文档中列出的 nextLink 值。速率限制、实际记录更新情况和正常运行时间承诺仍未验证。本软件包涵盖所提供的公共 API 集成范围,不涵盖 EUDAMED 的所有模块。

采用 MIT 许可。

公司发现与完整 UDI 输入

使用公司名称调用 eudamed_discover_actors。该工具会分别查询法定名称和简称,去重相同的组织投影,并保留不同候选项。使用候选 SRN 调用 eudamed_investigate 前,请确认国家、角色和法律实体身份。公司产品组合与特定器械的证据彼此独立。

根据观察到的名称查询,Data Lake 要求使用准确的注册名称。即使公共门户能找到公司,使用简称也可能无法返回匹配项。若需按部分名称查找,请在浏览器中打开 portalUrl,然后使用 eudamed_actors 验证返回的 SRN。本服务不会自动浏览门户。覆盖范围与来源详情。

manufacturerSrn 要求使用 US-MF-000000001 格式(合成示例),而不是公司名称。actorId 接受经济运营者 SRN 或四位公告机构 ID。验证只检查语法,不检查是否存在对应注册。

primaryDi 也接受以 (01) 开头且包含有效 14 位 GTIN 的括号格式 GS1 UDI,例如 (01)00012345678905(10)TESTLOT。仅将 DI 发送到 API;生产标识符不是查询筛选条件。identifier 会保留原始输入、提取出的 DI、识别出的格式以及输入是否发生变化。无效或含糊的 (01) 字段会被拒绝。原始 DI(包括旧版标识符)会保留为字符串,不会补齐或强制转换。这是 DI 提取功能,并非对所有 UDI 生产字段的验证,也不是通用的 HIBCC/ICCBBA/条码解析器。参见 GS1 应用标识符。

安装与工作流验证

npm run test:package 会打包实际产物,将其安装到干净的临时项目中,导入该库,并通过 MCP stdio 测试已安装的可执行文件。依赖项需要通过 npm 注册表获取。

有关计划执行的契约检查和 API 变更处理方式,请参见维护。

独立性与归属说明

EUDAMED MCP 是一个独立、非官方的开源项目。它并非由欧盟委员会开发、委托开发、认可或支持,也不隶属于欧盟委员会。

页眉使用了 EUDAMED 门户提供的欧盟委员会徽标,旁边标有 EUDAMED。该徽标仍归其各自所有者所有,不受本项目 MIT 许可的约束。

EUDAMED 是欧盟委员会的欧洲医疗器械数据库。提及 EUDAMED 是为了指明本项目集成的公共服务,并不表示本项目具有官方身份或获得认可。官方信息请访问欧盟委员会的 EUDAMED 网站。

公共数据库记录本身不能证明器械符合相关要求。本软件仅提供研究辅助,不作出法规判定。

评论

支持 Markdown

第一次接触 MCP?

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

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