eur-lex-mcp-server
Search EU legislation, CJEU case law, and treaties; traverse the CELLAR relationship graph; resolve EuroVoc concepts via MCP. STDIO or Streamable HTTP.
Install / Use
claude mcp add cyanheads -- npx -y github:cyanheads/eur-lex-mcp-serverIf the server publishes to npm under a different name, use that package instead — check the repo README.
MCP Server
Model Context Protocol server
Quality Score
Category
MarketingSupported Platforms
Tags
Our assessment of eur-lex-mcp-server
eur-lex-mcp-server scores 84/100 on our quality scale, 433rd of 573 Marketing skills we index.
Its MCP Server is 20 KB long, well organised into 31 sections with 11 code examples: a thorough specification that gives an agent plenty to work with.
It has 10 GitHub stars, so there is little community track record yet; judge it on its content.
Maintenance, license and trust
- The repository was last updated 5 days ago, so eur-lex-mcp-server is actively maintained.
- It is released under the Apache-2.0 license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 97/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
Safety scan
No issues foundOur scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. An AI review of the same text found nothing harmful.
AI review by kimi-k2.7-code on 2026-10-22. Automated pattern scan on 2026-10-22. It catches known dangerous patterns, not every risk — read a skill before letting an agent act on it.
eur-lex-mcp-server compared with similar skills
All 4 of these similar skills score higher than eur-lex-mcp-server; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| eur-lex-mcp-server (this skill)by cyanheads | 84 | 10 | 5d ago | MCP Server |
| Agent-Reachby Panniantong | 100 | 101.0k | 2d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 77.5k | today | CLAUDE.md |
| CowAgentby zhayujie | 100 | 47.5k | today | CLAUDE.md |
| Scraplingby D4Vinci | 100 | 89.2k | today | MCP Server |
Frequently asked questions
- How do I install eur-lex-mcp-server?
- Run
claude mcp add cyanheads -- npx -y github:cyanheads/eur-lex-mcp-server. The install tabs above show the steps for each supported agent. - Which AI agents does eur-lex-mcp-server work with?
- It is written for Claude Code and Claude Desktop, as a MCP Server file. Other agents that read the same format can often use it too.
- Is eur-lex-mcp-server safe to use?
- Our scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. An AI review of the same text found nothing harmful. It is Apache-2.0-licensed and scores 97/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is eur-lex-mcp-server still maintained?
- The repository was last updated 5 days ago, so eur-lex-mcp-server is actively maintained.
Skill content
View source on GitHubPublic Hosted Server: https://eur-lex.caseyjhand.com/mcp
</div>Overview
EU legislation, CJEU case law, and treaties from EUR-Lex. Search documents and case law, fetch full text, resolve citations, trace how acts amend and cite each other, and browse the EuroVoc subject thesaurus.
Tools
| Tool | Description |
|:-----|:------------|
| eurlex_search_documents | Search EU legislation, treaties, and preparatory acts by type, date, EuroVoc subject, author institution, and in-force status |
| eurlex_get_document | Fetch metadata and full text (HTML, Markdown, or Formex4 XML) for an act or case by CELEX, ELI, or work URI, with a section outline of either |
| eurlex_lookup_celex | Resolve a CELEX number, ELI URI, ECLI, or OJ citation (Regulation (EU) 2016/679) to its canonical CELLAR work |
| eurlex_get_cases | Search CJEU and General Court case law by case number, court, case type, and date range |
| eurlex_get_relations | Traverse the CELLAR relationship graph — amendments, repeals, consolidations, legal basis and the works adopted under it, interpreting rulings, citations, transpositions |
| eurlex_browse_subjects | Search the EuroVoc thesaurus to resolve terms to concept URIs |
| eurlex_query_sparql | Run a raw, read-only SPARQL SELECT against the CELLAR endpoint |
Resources
| Resource | Description |
|:---|:---|
| eurlex://document/{celexNumber} | Metadata snapshot for a CELLAR work |
| eurlex://document/{celexNumber}/relations | One-hop relationship summary for a CELLAR work |
All resource data is also reachable via tools.
Prompts
| Prompt | Description |
|:---|:---|
| eurlex_comparative_analysis | Frame a comparative EU/US legal analysis for a policy domain |
Capability reference
eurlex_search_documents <sub>tool</sub>
- At least one filter:
keyword(English titles, plus CELEX numbers or fragments such as2016R0679; a keyword with letters and no digit, such asR(01), scans every CELEX and can take tens of seconds; no body search),document_type(REG,DIR,DEC,TREATY,JUDG,OPIN_AG,PROP,REC),date_from/date_to,eurovoc_concept(fromeurlex_browse_subjects),author_institution, orin_force(true/false;falsecovers repealed, expired, and not-yet-in-force acts) - Pages of up to 100 via
offset/limit(a largerlimitis served at 100 and reported inlimit_clamp), newest first; each row flagsis_consolidatedandis_corrigendum, and corrigenda and consolidated texts appear only underinclude_corrigendaandinclude_consolidated. Paging stops at row 10,000: the last page carries nonext_offsetand anoticegiving thedate_from/date_towindow that continues past it - No match returns an empty page with a
noticeon how to broaden the filters; typed errors:no_filters,invalid_date_range,invalid_author_institutionandinvalid_keyword(no letters or digits),offset_past_window(offset10,000 or more)
eurlex_get_document <sub>tool</sub>
- Exactly one of
celex_number,eli_uri, orwork_uri(pasted forms such as aCELEX:prefix or EUR-Lex URL are accepted); body ashtml(default),markdown, orxml(Formex4) in any of the 24 EUR-Lex languages, falling back to English. Case law also carriesecli,formation,referring_court,subject_matter, andcase_reference; a consolidated text reports its base act asbase_act_celex content_mode"paged"(default),"full", or"metadata_only", capped at 100,000 characters per call (a largerlimitis reported inlimit_clamp) withcontent_chars_total/has_moreto page on;outline: truelists headings with offsets, andselect(e.g.{ articles: "1,5,17" }) returns just those sections. For judgments and AG opinions the outline lists section headings, andselect: { operative_part: true }returns the ruling aloneis_supersededflags a newer consolidated version (current_consolidated_celex,consolidated_as_of), andresolve: "current_consolidated"serves it;in_force: falsecomes withrepealed_by,end_of_validity, orentry_into_forcewhere CELLAR records one. Typed errors:invalid_identifier_args,not_found,content_challenge(a WAF bot-challenge in place of text)
eurlex_lookup_celex <sub>tool</sub>
- A CELEX number, ELI URI, ECLI, or OJ citation naming its act type and year (
Regulation (EU) 2016/679,Directive 95/46/EC); pasted forms (aCELEX:prefix, a EUR-Lex page URL, an ELI with or without scheme or language segment) are normalized and echoed incelex_number. A citation without its act type (95/46/EC) or year (Regulation No 17) is not parsed identifier_typeauto-detects the format or sets it;ambiguous_identifierfires when auto-detection can't classify the input. A case number (C-131/12) returnsfound: falsewith anoticepointing toeurlex_get_cases- Returns work URI, confirmed CELEX number, resource type, date, and the case's ECLI;
found: falsewith anoticefor a well-formed identifier that matches no work
eurlex_get_cases <sub>tool</sub>
- Filters:
case_number(C-131/12,T-22/20,F-12/05, or a pre-198926/62; reaches every judgment, order, and AG opinion filed under it),court(CJEUorGC),case_type(judgment,order,ag_opinion),keyword(English titles, plus CELEX numbers or fragments such as2013CJ0131), anddate_from/date_to; primary records only unlessinclude_derivativeadds notices, abstracts, summaries, and corrigenda - Pages of up to 100 via
offset/limit(a largerlimitis served at 100 and reported inlimit_clamp), newest first; each case carries its ECLI where recorded, plusformation,advocate_general,display_title,parties,referring_court,subject_matter, andcase_reference, and the rawtitleonly when those fields miss part of it. Paging stops at row 10,000: the last page carries nonext_offsetand anoticegiving thedate_from/date_towindow that continues past it - No match returns an empty page with a
noticeon how to broaden the filters; typed errors:invalid_case_number,invalid_date_range,invalid_keyword(no letters or digits),offset_past_window(offset10,000 or more)
eurlex_get_relations <sub>tool</sub>
- Exactly one of
celex_numberorwork_uri;relation_typesnarrows to any ofcites,amends,amended_by,repeals,repealed_by,implicitly_repeals,implicitly_repealed_by,legal_basis,basis_for,interprets,interpreted_by,consolidated_version,national_transposition(omit for all) basis_forlists the works naming the act among their legal bases;interpreted_bylists the CJEU and General Court rulings interpreting it, andinterpretswhat a ruling interprets.member_statesnarrowsnational_transpositionto named member states (ISO 3166-1 alpha-3 or two-letter codes, echoed as alpha-3); using it withoutnational_transpositionfails asmember_states_not_applicable- One hop, paged per relation type and direction via
offset/limit(up to 100, default 100; a largerlimitis reported inlimit_clamp), newest first. Each type and direction pages to row 10,000, then anoticeroutes older works toeurlex_query_sparqlwith a ready-to-run query - Each relation carries
relation_type,direction(outgoing/incoming),related_work_uri, and where knownrelated_celex_number,related_date,related_title(English only), andrelated_member_stateonnational_transpositionrows;empty_relation_typesseparates "no edges of this type" from "paged out". Typed errors:invalid_identifier_args,member_states_not_applicable,not_found,offset_past_window
eurlex_browse_subjects <sub>tool</sub>
- Matches preferred and alternative EuroVoc labels, so a common synonym resolves to its concept, in any EU official
language(default English);offset/limitpagination (up to 50; a largerlimitis served at 50 and reported inlimit_clamp), to row 10,000 (offset_past_windowbeyond) - Returns concept URI, preferred label, code, broader (parent) label, and the alternative label that matched when one did; an empty page with a
noticewhen nothing matches - Exact label matches rank first, then label or word-start matches, then other substring matches, so
"AI"leads with artificial intelligence
eurlex_query_sparql <sub>tool</sub>
- Read-only SELECT only (update forms and ASK/CONSTRUCT/DESCRIBE are rejected);
cdm:,skos:, andxsd:prefixes are auto-injected; optionaltimeout_hint(1000–55000 ms) - Results capped at
MAX_SPARQL_RESULTS(default 100); a truncated result'snoticesays to addORDER BYand repeat with a higherOFFSET, up to row 10,000. A zero-row result from an untyped string literal gets anoticeto type it (^^xsd:string,^^xsd:anyURIfor an ELI) or language-tag it - Typed errors:
not_read_only(a SPARQL Update),unsupported_query_form(ASK, CONSTRUCT, DESCRIBE, or no SELECT),sparql_error,sparql_timeout
eurlex://document/{celexNumber} <sub>resource</sub>
- Metadata snapshot as
application/json— resource type, author institution(s) labelled aseurlex_get_documentlabels them, Advocates General, date, English title, in-force flag, legal basis, EuroVoc subjects; a consolidated text addsbase_act_celexand reads authors, in-force flag, legal basis, and subjects from that act celexNumbercomes fromeurlex_search_documents,eurlex_get_cases, oreurlex_lookup_celex
eurlex://document/{celexNumber}/relations <sub>resource</sub>
- One-hop re
Truncated for display — read the full file on GitHub.
Related Skills
Agent-Reach
101.0kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
77.5kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
CowAgent
47.5kOpen-source personal AI assistant & Agent Harness. Plans tasks, runs tools and skills, self-evolves with memory and knowledge. Multi-agent, multi-model, multi-channel. Lightweight, extensible, one-line install.
Scrapling
89.2k🕷️ A Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ and follow here for daily tips and tricks: https://x.com/Scrapling_dev
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
