EUDAMED MCP
Read-only EUDAMED public API access for device search, operator verification, reference decoding, and bounded evidence investigation.
Search UDI device records by Primary DI, Basic UDI, manufacturer SRN, trade name, device name, or reference, with optional exact local matching, limits, language, and raw fields.
Verify an economic operator or notified body by exact SRN/four-digit ID, returning organizational identity, role, country, and status without personal/contact details.
Discover company actors by exact legal or abbreviated name, with optional country/role filters and a portal link for partial-name discovery.
Decode EUDAMED reference values by language and CODE + ID.
Investigate a device within bounds: resolve candidates, verify manufacturers, inspect portfolios and representatives, decode fields, and report evidence gaps, conflicts, failures, provenance, and unverified documents.
All tools are read-only, non-destructive, idempotent, and do not retrieve IFUs/certificates or issue conformity decisions.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@EUDAMED MCP Find the public EUDAMED record for primary UDI-DI 1234567890, including manufacturer and risk class."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Independent, unofficial integration.
EUDAMED MCP
Search European medical-device records from your AI assistant.
Independent, unofficial integration · Read-only access · No API key required for the public endpoints tested
A read-only Model Context Protocol server for the European Commission's EUDAMED Public API. Search UDI records, verify economic operators, decode classification and status values, and investigate a device without losing the distinction between a public record and verified conformity evidence.
Start with a company name, device name or UDI. Find candidate records, identify the registered manufacturer and build an evidence checklist with source links and explicit gaps.
5 tools · 3 guided workflows · 5 readable resources
Get started · Example requests · How evidence works · Official EUDAMED portal
What makes it useful
Identity before interpretation. Preserve leading zeroes in UDIs, apply exact matching locally, and keep multiple candidates visible.
Find the actual manufacturer. A supplied SRN can belong to another company in the same group. Investigation searches device identity independently and follows the manufacturer SRN in the returned record.
Evidence you can trace. Results carry the exact source query, original retrieval timestamp, API version, cache status and local limits.
Honest gaps. Missing flags remain unknown. Failed requests remain failures. IFUs, declarations and certificates remain unverified until obtained separately.
Small tool surface. Five tools expose the three verified API endpoints and a bounded investigation workflow. Prompts are also resources, so clients can read the procedures without invoking a slash command.
Conservative by default. Serialized requests, bounded retries, timeouts, response-size limits, short-lived caching and organizational-only actor data.
This is an independent integration, not an official European Commission product. Public registration does not independently establish product conformity. The server does not retrieve IFUs or certificates and does not issue a compliant/non-compliant verdict.
Related MCP server: clinicmarketiq-public-data
Install and connect
Requires Node.js 22 or later. Add this entry to your MCP client's server configuration:
{
"mcpServers": {
"eudamed": {
"command": "npx",
"args": ["-y", "@t4dhg/mcp-eudamed"]
}
}
}To build from source, run npm ci && npm run build in the checkout and configure node with the absolute path to dist/cli.js.
The server uses stdio. Standard output is reserved for MCP messages. No credentials or .env file are needed. Optional configuration is read from the process environment; .env files are not loaded automatically.
For reproducible installs, append @<version> to the package name using a release from npm.
For programmatic use, import EudamedClient, investigate or createServer from the package. Importing the library does not start a transport:
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',
});Try these requests
Find the public EUDAMED record for this Primary UDI-DI. Show the legal manufacturer, authorised representative, risk class and the exact source query.
I have a manufacturer SRN and a product name, but the manufacturer search is empty. Check whether the product is registered under a different legal entity.
Build an evidence checklist for this device. Separate what EUDAMED says from what still needs a controlled IFU, declaration or certificate.
Tools
Tool | Purpose | Main inputs |
| Search and normalize UDI records; optionally include raw device fields | At least one of |
| Verify one exact SRN with organizational fields only |
|
| Discover exact legal/abbreviated company-name candidates, with portal fallback |
|
| Retrieve code translations, optionally narrowed locally |
|
| Resolve candidate devices and operators, decode fields and expose evidence gaps | Device search fields; |
All tools advertise read-only, non-destructive, idempotent, open-world annotations. Tool errors return isError: true. Search tools provide JSON text and equivalent structuredContent. Investigation provides a concise report in text content and complete evidence in structuredContent (also including the report).
Search a device
{
"primaryDi": "YOUR_PRIMARY_UDI_DI",
"exact": true,
"limit": 10,
"language": "en",
"raw": true
}exact defaults to false for discovery. When true, every supplied filter is compared locally using trimmed, case-insensitive equality. Do not assume upstream partial-name matching; use exact known identifiers and inspect the returned evidence. Multiple filters are sent together; the observed upstream behavior is AND, but it is not a published contractual guarantee.
The device tool returns normalized identity, operators, decoded values, tri-state flags, intended-purpose status and unverified document checklists. Set raw: true to retain additional upstream device fields. The library's devices() method always returns validated raw device records.
Investigate a manufacturer mismatch
{
"manufacturerSrn": "YOUR_SUPPLIED_SRN",
"tradeName": "YOUR_DEVICE_NAME",
"maxDevices": 10,
"maxManufacturers": 3,
"maxRepresentatives": 3
}The workflow:
Query Primary DI first, then Basic UDI, then each supplied name/reference independently with exact local matching. A stale name cannot suppress an exact UDI result.
Look up the supplied actor and its returned device portfolio.
Use the strongest nonempty route as target candidates, record conflicts with other supplied fields, and preserve alternative route candidates. Read manufacturer SRNs from target candidates and inspect their actors and bounded portfolios.
Verify authorised representatives for the selected evidence records.
Decode reference values and list the controlled documents still unverified.
Return query provenance, failures, omitted counts and unknown upstream coverage.
targetEvidence contains only target candidates from the strongest nonempty identity route. portfolioEvidence contains other manufacturer records and must not be attributed to the target. evidence remains a compatibility alias for target evidence only. Manufacturer-only investigations have no target evidence.
searches retains each independent query. conflicts records supplied-versus-observed disagreements; alternativeCandidates retains other search-route matches. identityStatus distinguishes identifier matches, candidates, ambiguity, conflicts, not-found, unresolved and portfolio-only results. Multiple versions remain separate candidates; the server does not automatically choose the latest. Missing operator identities and unmatched actor lookups appear in unresolved.
status: "completed" means execution completed, not that identity, documents or conformity have been established. partial, timed-out and cancelled retain gathered evidence and its limits. The concise report lists target identity, decoded fields, evidence gaps, conflicts, failures, bounds and next documents needed. Detailed records remain available in structured output.
Prompts and resources
Each prompt takes a required query string containing known identifiers, names or the investigation question. Prompts supply procedures; they do not fetch data themselves.
Prompt | Workflow |
| Device identity, actual manufacturer, representatives and evidence gaps |
| Verify an operator and inspect its bounded returned portfolio |
| Prepare a document checklist while preserving unverified claims |
Readable resources:
eudamed://guides/searcheudamed://guides/evidenceeudamed://prompts/investigate_deviceeudamed://prompts/manufacturer_portfolioeudamed://prompts/conformity_evidence
Understand the evidence
Output | Meaning |
| Query and observation time; cached observations retain their original time |
| Records in this response, not a total registry count |
| Records left after local matching |
| Local output count and whether this response was locally capped |
| Registry coverage and individual-record freshness are not established |
| Raw numeric ID, translated label and resolved/unresolved status |
| Pages fetched, source page URLs and whether the query exhausted its continuation links |
|
|
|
|
| Explicitly unverified IFU, declaration and certificate evidence; no fabricated URLs |
Investigation | Failed steps, distinct from successful empty searches |
An empty search is evidence about that query. It is not proof that the device does not exist or is non-compliant. An ISO 13485 certificate addresses a quality-management system; it does not replace product-specific documentation. See the evidence workflow.
Configuration and bounds
Environment variable | Default | Range / purpose |
|
| HTTPS endpoint, without credentials, query or fragment |
|
| Version string such as |
|
| 1–120000; each request attempt including body reads |
|
| 1–50 pages per query; combined record cap 10,000 |
|
| 0–3 retries after the initial attempt |
|
| 0–86400000; device/actor response TTL |
|
| 0–86400000; reference response TTL |
|
| 1–50000000; streamed body cap |
Requests are serialized. The cache holds at most 32 validated responses and stores only projected actor data. References are joined using CODE + ID within the requested language. Redirects are rejected. GET retries apply to network failures, timeouts, HTTP 429 and 500/502/503/504. Retry-After is honored; a cooldown over 30 seconds ends the request instead of retrying early.
Device output defaults to 20 records (maximum 100), references to 100 (maximum 500). Investigation defaults to up to 10 records per identity query, 10 target records, 10 separate portfolio-context records, 10 alternative candidates, 3 discovered manufacturers and 3 representatives; maxima are 20 records per group and 5 operators per category. Representative lookups concern targets, or portfolio records when no target identity was supplied. The HTTP adapter rejects queries with over 10,000 combined records and follows only validated continuation links within the page cap. MCP output is capped at 250 KB; narrow the query or reduce limits if exceeded. These are local safeguards, not claims about upstream pagination. An investigation can perform multiple sequential requests and retries; deadlineMs limits the whole investigation (default 60000, maximum 300000), including queue waits, retries and body reads. MCP cancellation stops queued requests, active fetches and retry waits. Other requests remain usable. The library accepts { signal } as a separate request-options argument.
Development and verification
npm ci
npm run lint
npm run format:check
npm run typecheck
npm run test:coverage
npm run test:stdio
npm run test:packageUnit and MCP protocol tests are deterministic and use synthetic data. Built stdio checks verify transport initialization, discovery, resources and validation without live network access. CI also checks the npm tarball, installs it with strict engine checks, audits its runtime dependencies and exercises the installed command and library on Node.js 22, 24 and 26. Coverage gates include the adapter, investigation and MCP registrations.
Live checks are opt-in:
npm run test:live
EUDAMED_SMOKE_PRIMARY_DI=YOUR_KNOWN_UDI EUDAMED_SMOKE_ACTOR_ID=YOUR_KNOWN_SRN npm run test:liveThe first command verifies reference data. EUDAMED_SMOKE_LANGUAGE selects a reference language (default en); EUDAMED_SMOKE_EXPECT_LEGISLATION optionally asserts a known substring such as 2017/746 in the decoded legislation label. Supply both identifiers to exercise live device and actor lookups too. Live data can change; a failed check requires investigation rather than automatically rewriting fixtures. Payloads and actor contacts are not logged.
See CONTRIBUTING.md, API contract notes, and SECURITY.md.
API scope
Implemented: anonymous JSON GETs to /udi, /actors and /reference, verified against the live service on 14 October 2026. The DG SANTE API catalogue is the upstream reference.
Not implemented: certificate-portal scraping, IFU downloads, writes, bulk registry export or legal-rule evaluation. Pagination follows documented nextLink values. Rate limits, actual record freshness and uptime commitments remain unverified. This package covers the supplied public API integration scope, not every EUDAMED module.
MIT licensed.
Company discovery and full UDI inputs
Call eudamed_discover_actors with a company name. It queries legal and abbreviated names independently, deduplicates identical organizational projections and preserves distinct candidates. Confirm the country, role and legal identity before using a candidate SRN with eudamed_investigate. A company portfolio remains separate from a particular device's evidence.
The Data Lake requires an exact registered name in observed name queries. A shortened name can return no matches even when the public portal finds the company. Follow portalUrl in a browser for partial-name discovery, then verify the returned SRN with eudamed_actors. This server does not automatically browse the portal. Coverage and source details.
manufacturerSrn requires the form US-MF-000000001 (synthetic example), not a company name. actorId accepts economic-operator SRNs or four-digit notified body IDs. Validation checks syntax, not registration existence.
primaryDi also accepts a parenthesized GS1 UDI starting with (01) and a valid 14-digit GTIN, for example (01)00012345678905(10)TESTLOT. Only the DI is sent to the API; production identifiers are not query filters. identifier preserves the original input, extracted DI, recognized format and whether it changed. Invalid or ambiguous (01) fields are rejected. Raw DIs, including legacy identifiers, remain strings and are not padded or coerced. This is DI extraction, not validation of every UDI production field or a universal HIBCC/ICCBBA/barcode parser. See GS1 application identifiers.
Installation and workflow verification
npm run test:package packs the actual artifact, installs it into a clean temporary project, imports the library and exercises the installed executable over MCP stdio. It requires npm registry access for dependencies.
See maintenance for scheduled contract checks and handling API changes.
Independence and attribution
EUDAMED MCP is an independent, unofficial open-source project. It is not developed, commissioned, endorsed or supported by the European Commission, and is not affiliated with the European Commission.
The header reproduces the European Commission logo supplied by the EUDAMED portal, with an adjacent EUDAMED label. The logo remains the property of its respective owner and is not covered by this project’s MIT license.
EUDAMED is the European Commission’s European Database on Medical Devices. References to EUDAMED identify the public service this project integrates with; they do not imply official status or endorsement. For official information, visit the European Commission’s EUDAMED website.
Public database records do not independently establish a device’s conformity. This software provides research assistance, not a regulatory determination.
Available Tools
5 toolseudamed_actorsVerify an economic operatorARead-onlyIdempotent
Look up an exact actor SRN or four-digit notified body ID. Returns organizational identity, role, country and status; excludes personal names, addresses and contact details.
Inputs: actorId (required).
eudamed_devicesSearch EUDAMED devicesARead-onlyIdempotent
Search public UDI records by at least one restrictive filter. Upstream name matching is not guaranteed to be partial; exact=true additionally matches every supplied filter locally. Returns normalized evidence and source provenance; raw=true adds original device fields. No exhaustive-coverage or conformity guarantee.
Inputs: raw, exact, limit, basicUdi, +6 more.
eudamed_discover_actorsDiscover company actorsARead-onlyIdempotent
Resolve a company name using exact legal and abbreviated name searches. Returns deduplicated organizational candidates, source observations and a public-portal link for partial-name discovery. Confirm legal entity, country and role before using its SRN; never invent or silently pick an ambiguous SRN.
Inputs: name (required), role, limit, country.
eudamed_investigateInvestigate device evidenceARead-onlyIdempotent
Bounded device investigation: verify supplied manufacturer, search identifiers first and names separately, discover actual manufacturers, inspect portfolios and representatives, decode fields and list unverified documents. Separates target evidence from portfolio context, reports identity conflicts, and returns a concise report plus detailed JSON. Preserves failures, provenance and bounds. No certificate/IFU retrieval or conformity decision.
Inputs: basicUdi, language, primaryDi, reference, +7 more.
eudamed_referencesDecode EUDAMED reference valuesARead-onlyIdempotent
Fetch reference values by language, optionally filtering CODE and ID together. Local limit only; use CODE + ID as the join key, never ID alone.
Inputs: id, code, limit, language.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 5 tools
The five tools mostly target distinct operations: device search, exact actor lookup, actor name discovery, reference lookup, and bounded investigation. The main overlap is between eudamed_devices and eudamed_investigate, since investigation also searches devices, but the composite/multi-step scope is described clearly enough to distinguish them. Actor lookup versus actor discovery is well separated by exact-ID versus name-resolution intent.
All names use the eudamed_ prefix and snake_case, which is predictable. However, the set mixes noun-style resource names (eudamed_devices, eudamed_actors, eudamed_references) with action-style names (eudamed_discover_actors, eudamed_investigate), so the verb_noun convention is not fully consistent.
Five tools is well within the appropriate range for a focused public-data lookup server. Each tool covers a distinct slice of the domain, and the composite investigation tool avoids needing many narrow follow-up tools.
The surface covers device UDI search, actor lookup and discovery, reference values, and bounded investigation, which is solid for public EUDAMED exploration. The main explicit gaps are certificate/IFU/document retrieval, but the investigate tool acknowledges these limits so agents can recognize the boundary.
Maintenance
Related MCP Connectors
Manage products, EU Digital Product Passports, operator parties, and GS1 EPCIS supply-chain events.
Read-only EU e-invoice checks: VAT format, VIES, Peppol lookup. Returns evidence, no filing.
Keyless, read-only US public records for agents: SEC, FDA, enforcement, sanctions, market data.
Find governed AI capabilities and verify signed receipts. Read-only, no account.
Related MCP Servers
- AlicenseCqualityCmaintenanceEnables AI assistants to query ClinicalTrials.gov and PubMed for research evidence, and to compare regulatory document changes against internal files, with strict read-only access and no ability to modify or export data.5Apache 2.0
- FlicenseNot gradedqualityBmaintenanceEnables read-only access to public U.S. healthcare market-intelligence datasets, including catalogs, schemas, metadata, checksums, and artifact URLs. It supports CMOs, analysts, researchers, and AI agents in discovering and consuming governed market observations without patient-level data.-
- AlicenseNot gradedqualityBmaintenanceEnables local read-only retrieval and search across 27 global medical device regulatory knowledge hubs (NMPA/FDA/MDR/PMDA etc.) using four MCP tools, with zero credentials and no external network calls.1Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables free, read-only checks of AI agents and MCP servers for conformance, published changes, delivery evidence, and verifiable receipts without requiring an account or API key, using public or non-personal data only.MIT