MCP server giving AI agents cited, review-gated grounding in EU regulation: ESMA MiCAR register search, register change tracking, white paper linting, EU AI Act classification.
Server has 5 tools with clear naming (verb_noun pattern: search_, micar_, lint_, classify_) and reasonable descriptions (100-200 chars). Input schemas are present with type definitions and descriptions. However, output schemas are completely undocumented, LLMs cannot predict what fields to expect from responses. Parameter descriptions lack detail on constraints, formats, and valid values. Error handling is minimal; tools degrade gracefully to install hints but provide no recovery guidance. No tool annotations (readOnlyHint, etc.). Overall: functional but below production quality.
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.
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.
Recent register movement: new filings, changed entries, removals. change_type: all | added | changed | removed.
Current totals per MiCAR register and white paper format coverage.
Search the ESMA interim MiCAR register by entity name or LEI. query: entity-name substring (case-insensitive) or an exact LEI. register_slug: all | other-wp | emt-wp | art-wp | casps | ncasp. member_state: optional two-letter code (DE, IE, MT, ...).
No output schemas documented. LLMs cannot predict response structure, forcing them to guess at field names and types. This breaks tool chaining and wastes tokens on exploratory calls.
Parameter descriptions lack constraint details. 'register_slug: all | other-wp | emt-wp | art-wp | casps | ncasp' is listed in description text, not as an enum schema. LLMs cannot parse this reliably and may hallucinate invalid values.
micar_register_summary has no input parameters but also no description of what it returns (totals per register, format coverage). Description is too vague for LLM selection.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2026-07-28+ | v2 |
Optional dependencies (lint, classify) degrade to install hints but provide no structured error recovery guidance. LLMs cannot distinguish between 'feature not installed' and 'feature failed', both return a dict with 'available' flag.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All tools are read-only but this is not declared in the schema, forcing LLMs to infer safety from descriptions.