eu-reg-mcp
This MCP server lets an AI assistant query the ESMA interim MiCAR register and run cited MiCAR white-paper linting and EU AI Act risk classification, with outputs flagged for human legal review.
Search the MiCAR register by entity name or LEI, filter by register slug/member state, and paginate results.
Summarize current MiCAR register totals and white paper format coverage.
Track recent register changes: added, changed, and removed entries, including whether they remain listed.
Lint draft MiCAR white papers against Annex I–III rules, returning cited candidate findings pending review (requires
lintextra).Classify EU AI Act systems by risk tier with pinpoint citations; an empty profile returns the schema (requires
classifyextra).Register tools need no API key; outputs are not legal advice.
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., "@eu-reg-mcpsearch for Binance on the MiCAR register"
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.
eu-reg-mcp
Let your AI assistant answer MiCAR and EU AI Act questions with citations instead of guesses — every finding flagged for human legal review.
Scope today: the ESMA interim MiCAR register (search, summary, change tracking), MiCAR white paper linting, and EU AI Act risk-tier classification. Other EU regulation is not covered.
Quick start
eu-reg-mcp is a Model Context Protocol server on PyPI and requires Python 3.13 or newer. With uv installed, add it to Claude Code:
claude mcp add eu-reg -- uvx eu-reg-mcpThe register tools need no API key. For all five tools, add the lint and classify extras; --python 3.13 makes uv use Python 3.13 even where an older one is the default:
claude mcp add eu-reg -- uvx --python 3.13 --from 'eu-reg-mcp[lint,classify]' eu-reg-mcpClaude Desktop and other clients: docs/clients.md. pip: docs/tools.md.
Related MCP server: attestix
Tools
Tool | What it does | Needs |
| Look up an entity by name or LEI in the ESMA interim MiCAR register | — |
| Register totals and white paper format coverage | — |
| New filings, changed entries, removals | — |
| Deterministic Annex I–III lint of a draft white paper |
|
| AI Act risk tier with pinpoint citations |
|
Review-gated, not legal advice
Register results are public-register facts with extraction artifacts possible; lint and classification outputs are candidate flags pending human legal review. Nothing here is legal advice. MIT licensed.
Links
Overview: who it's for, example output, why not just ask an LLM
Tools reference: parameters, data sources, caching, network use, errors
Register data: micar-register-observatory (weekly snapshots of the public ESMA register, Art. 109 VO (EU) 2023/1114)
Linter: micar-whitepaper-linter (rules mapped to Annex I–III) · Classifier: eu-ai-act-classifier — both MIT-licensed
PyPI: eu-reg-mcp, micar-whitepaper-linter, eu-ai-act-classifier
Available Tools
5 toolsclassify_eu_ai_act_systemARead-onlyIdempotent
Classify an AI system's EU AI Act risk tier with pinpoint citations.
Pass a SystemProfile as JSON; pass an empty string to get the schema.
Requires the optional classify extra; degrades to an install hint.
| Name | Required | Description | Default |
|---|---|---|---|
| profile_json | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, openWorldHint=false), and the description adds genuinely new context: it depends on an optional `classify` extra and degrades to an install hint if absent. That dependency/failure-mode disclosure is exactly the kind of behavior annotations can't express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short lines with zero filler; the purpose leads, followed by invocation mechanics and the dependency caveat. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation. The description covers purpose, input format, the schema-discovery trick, and the optional-dependency caveat — enough to call the tool correctly, with only the SystemProfile field structure left to a follow-up empty-string call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single parameter has no description, so the description must compensate. It does explain the input is a JSON-encoded SystemProfile and that an empty string returns the schema, but it never says what fields the profile requires — the agent must make a discovery call to learn the shape.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Classify an AI system's EU AI Act risk tier' — plus a differentiator ('with pinpoint citations'). The sibling tools are all MiCAR-register related, so the EU AI Act framing alone cleanly separates this tool from every alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains how to invoke it ('Pass a SystemProfile as JSON; pass an empty string to get the schema') but never states when to use it versus the MiCAR siblings or what prerequisites must hold before calling. Usage is operational rather than selective, leaving selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lint_micar_whitepaperARead-onlyIdempotent
Lint a draft MiCAR white paper (JSON) against Annex I-III rules.
Returns cited candidate findings pending human review. Requires the
optional lint extra; degrades to an install hint when absent.
| Name | Required | Description | Default |
|---|---|---|---|
| whitepaper_json | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and a closed world, so the safety profile is covered. The description adds genuinely new behavior: the result is 'cited candidate findings pending human review' and the tool requires the optional `lint` extra, degrading to an install hint when absent — a real prerequisite/edge-case disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the action, then output semantics, then the dependency caveat. No filler or repetition of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. The description still covers the key operational facts an agent needs before calling: what it checks, that findings are candidates needing human review, and the optional-extra prerequisite with fallback behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter with 0% schema description coverage, so the schema says nothing about `whitepaper_json`. The description partly compensates by marking the input as JSON ('draft MiCAR white paper (JSON)'), but it gives no shape, encoding, or required-fields guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (lint) plus a specific resource (draft MiCAR white paper as JSON) and the rule set it checks against (Annex I-III). None of the siblings (register search/summary/changes, AI Act classification) overlap with linting, so the agent can route to it unambiguously.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the resource: use it when you have a draft white paper to check. There is no explicit when-not guidance and no named alternative (e.g., why not just read the Annex rules manually), so it stops at implied context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
micar_register_changesBRead-onlyIdempotent
Recent register movement: new filings, changed entries, removals.
change_type: all | added | changed | removed. Each record says whether the entry is still listed in the latest snapshot.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| change_type | No | all |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds one useful behavioral fact — that each record indicates whether the entry is still listed in the latest snapshot — but omits how far back 'recent' extends and any pagination/freshness behavior, so it adds only moderate value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short fragments with the core purpose front-loaded and no padding. The change_type line is slightly manual-like but still earns its place as a filter summary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be spelled out, and the record-listing semantics are noted. However, with zero schema description coverage, the description should still clarify the limit/recency semantics; that omission leaves the definition only minimally complete for a delta-listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and both parameters are undocumented in the schema. The description restates the change_type enum values already present in the schema but never explains the 'limit' parameter or the meaning of 'recent', so it does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource ('Recent register movement: new filings, changed entries, removals'), so an agent immediately knows this is a change/delta feed. It does not, however, contrast itself with close siblings like search_micar_register or micar_register_summary, leaving the agent to infer the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to choose this delta tool over search_micar_register or micar_register_summary, and no prerequisites or exclusions are stated. The enumeration of change_type values is parameter detail, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
micar_register_summaryBRead-onlyIdempotent
Current totals per MiCAR register and white paper format coverage.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds almost nothing beyond that — it does not say whether data is live or cached, how registers are grouped, or what 'coverage' is measured against.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no filler and the core payload front-loaded. The phrasing is slightly telegraphic ('format coverage'), but it wastes no space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, an output schema covering the return values, and full annotation coverage, the description is nearly sufficient. The remaining gap is routing: an agent gets no signal about when to pick this over micar_register_changes or search_micar_register.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero input parameters and schema coverage is 100%, so the baseline is 4. Nothing further about parameters is needed or expected.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific resource (MiCAR register, white paper formats) and the exact output shape (current totals and format coverage), which clearly separates it from search_micar_register and micar_register_changes. It lacks an explicit verb ('returns'/'lists'), but the meaning is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is given, and no sibling is named. An agent must infer from the word 'summary' that this is the aggregate-overview tool rather than the search or change-history tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_micar_registerARead-onlyIdempotent
Search the ESMA interim MiCAR register by entity name or LEI.
query: entity-name substring (case- and accent-insensitive) or an exact LEI. Each result carries its entry_id and the ESMA source file; the response states the snapshot date, data_age_days and a stale flag. register_slug: all | other-wp | emt-wp | art-wp | casps | ncasp. member_state: optional two-letter code (DE, IE, MT, ...). offset: skip this many matches (results come 25 at a time; see truncated).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| offset | No | ||
| member_state | No | ||
| register_slug | No | all |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, openWorld), so the bar is lower. The description goes beyond them with genuinely useful operational context: results come 25 at a time with a truncated flag, and responses carry entry_id, source file, snapshot date, data_age_days and a stale flag.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose in the first line, then one line per parameter with no filler. Slightly clunky line-wrapping that splits a sentence across lines, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a filtered search: an agent knows the key, the filters, the paging model and the freshness signals. Return-value detail beyond the output schema is a bonus rather than a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage the description must carry the full load, and it does: query is documented as case- and accent-insensitive substring or exact LEI, register_slug's enum values are listed with meaning, member_state is given as a two-letter code with examples, and offset is tied to the 25-per-page/truncated paging model.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: 'Search the ESMA interim MiCAR register by entity name or LEI.' The name/LEI lookup key clearly separates it from sibling tools like micar_register_summary and micar_register_changes, though it never names those alternatives explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the query semantics (entity-name substring or exact LEI), but there is no statement of when to reach for this tool over micar_register_summary or micar_register_changes, and no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v0.1.1- Changed
micar_register_changes1 field changed- added
Input schema / properties / change_type / enumAdded value: +[ + "all", + "added", + "changed", + "removed" +]
- Changed
search_micar_register2 fields changed- added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "title": "Offset", + "type": "integer" +} - added
Input schema / properties / register_slug / enumAdded value: +[ + "all", + "other-wp", + "emt-wp", + "art-wp", + "casps", + "ncasp" +]
5 tool updates
v0.1.0- First observed
classify_eu_ai_act_system - First observed
lint_micar_whitepaper - First observed
micar_register_changes - First observed
micar_register_summary - First observed
search_micar_register
TDQS
Scored across 5 tools
Each tool has a clearly distinct purpose: search the register, get a summary, see recent changes, lint a whitepaper, or classify an AI system. There is no overlap in functionality between tools.
All names use snake_case consistently, but the pattern is mixed: some are verb_noun (search_micar_register, lint_micar_whitepaper, classify_eu_ai_act_system) while others are noun phrases (micar_register_summary, micar_register_changes). Token order also varies (search_micar_register vs. micar_register_summary), a minor deviation.
Five tools is well-scoped for a focused regulatory data server; each tool earns its place by addressing a distinct need (search, summary, changes, lint, classify).
The search tool returns an entry_id but there is no companion tool to fetch full entry details, creating a dead end. AI Act coverage is limited to a single classification tool, leaving notable gaps for a server that otherwise covers MiCAR register operations.
Maintenance
Related MCP Connectors
AI governance MCP server for EU AI Act compliance and jurisdiction verification
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Hosted MCP server for live public-data APIs and Skills for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server for AI compliance auditing. Scores agent outputs for hallucination liability under the EU AI Act, issues verifiable compliance stamps, and tracks audit history by agent.MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for compliance automation of AI agents, enabling EU AI Act compliance, verifiable credentials, and decentralized identity management with 47 tools across 9 modules.182 PyPI841Apache 2.0
- AlicenseAqualityCmaintenanceAn MCP server for AI economy infrastructure with built-in EU AI Act compliance, supporting risk management, transparency, and bias detection.10MIT
- AlicenseAqualityDmaintenanceMCP server for EU AI Act compliance, providing risk classification of AI features and Article 50 transparency notices.232 PyPI1Apache 2.0