SkillAgentSearch skills...

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-server

If the server publishes to npm under a different name, use that package instead — check the repo README.

About this skill
🔌

MCP Server

Model Context Protocol server

Quality Score

84/100

Category

Marketing

Supported Platforms

Claude Code
Claude Desktop

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.

Substance
30/30
Structure
20/20
Description
15/15
Adoption
4/20
Freshness
15/15

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 found

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.

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.

SkillScoreStarsUpdatedFormat
eur-lex-mcp-server (this skill)by cyanheads84105d agoMCP Server
Agent-Reachby Panniantong100101.0k2d agoCLAUDE.md
headroomby headroomlabs-ai10077.5ktodayCLAUDE.md
CowAgentby zhayujie10047.5ktodayCLAUDE.md
Scraplingby D4Vinci10089.2ktodayMCP 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.
<div align="center"> <h1>@cyanheads/eur-lex-mcp-server</h1> <p><b>Search EU legislation, CJEU case law, and treaties; traverse the CELLAR relationship graph; resolve EuroVoc concepts via MCP. STDIO or Streamable HTTP.</b> <div>7 Tools • 2 Resources • 1 Prompt</div> </p> </div> <div align="center">

Version License Docker MCP Server npm TypeScript Bun

</div> <div align="center">

Install in Claude Desktop Install in Cursor Install in VS Code

Framework

</div> <div align="center">

Public 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 as 2016R0679; a keyword with letters and no digit, such as R(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 (from eurlex_browse_subjects), author_institution, or in_force (true/false; false covers repealed, expired, and not-yet-in-force acts)
  • Pages of up to 100 via offset/limit (a larger limit is served at 100 and reported in limit_clamp), newest first; each row flags is_consolidated and is_corrigendum, and corrigenda and consolidated texts appear only under include_corrigenda and include_consolidated. Paging stops at row 10,000: the last page carries no next_offset and a notice giving the date_from/date_to window that continues past it
  • No match returns an empty page with a notice on how to broaden the filters; typed errors: no_filters, invalid_date_range, invalid_author_institution and invalid_keyword (no letters or digits), offset_past_window (offset 10,000 or more)

eurlex_get_document <sub>tool</sub>

  • Exactly one of celex_number, eli_uri, or work_uri (pasted forms such as a CELEX: prefix or EUR-Lex URL are accepted); body as html (default), markdown, or xml (Formex4) in any of the 24 EUR-Lex languages, falling back to English. Case law also carries ecli, formation, referring_court, subject_matter, and case_reference; a consolidated text reports its base act as base_act_celex
  • content_mode "paged" (default), "full", or "metadata_only", capped at 100,000 characters per call (a larger limit is reported in limit_clamp) with content_chars_total/has_more to page on; outline: true lists headings with offsets, and select (e.g. { articles: "1,5,17" }) returns just those sections. For judgments and AG opinions the outline lists section headings, and select: { operative_part: true } returns the ruling alone
  • is_superseded flags a newer consolidated version (current_consolidated_celex, consolidated_as_of), and resolve: "current_consolidated" serves it; in_force: false comes with repealed_by, end_of_validity, or entry_into_force where 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 (a CELEX: prefix, a EUR-Lex page URL, an ELI with or without scheme or language segment) are normalized and echoed in celex_number. A citation without its act type (95/46/EC) or year (Regulation No 17) is not parsed
  • identifier_type auto-detects the format or sets it; ambiguous_identifier fires when auto-detection can't classify the input. A case number (C-131/12) returns found: false with a notice pointing to eurlex_get_cases
  • Returns work URI, confirmed CELEX number, resource type, date, and the case's ECLI; found: false with a notice for 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-1989 26/62; reaches every judgment, order, and AG opinion filed under it), court (CJEU or GC), case_type (judgment, order, ag_opinion), keyword (English titles, plus CELEX numbers or fragments such as 2013CJ0131), and date_from/date_to; primary records only unless include_derivative adds notices, abstracts, summaries, and corrigenda
  • Pages of up to 100 via offset/limit (a larger limit is served at 100 and reported in limit_clamp), newest first; each case carries its ECLI where recorded, plus formation, advocate_general, display_title, parties, referring_court, subject_matter, and case_reference, and the raw title only when those fields miss part of it. Paging stops at row 10,000: the last page carries no next_offset and a notice giving the date_from/date_to window that continues past it
  • No match returns an empty page with a notice on how to broaden the filters; typed errors: invalid_case_number, invalid_date_range, invalid_keyword (no letters or digits), offset_past_window (offset 10,000 or more)

eurlex_get_relations <sub>tool</sub>

  • Exactly one of celex_number or work_uri; relation_types narrows to any of cites, 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_for lists the works naming the act among their legal bases; interpreted_by lists the CJEU and General Court rulings interpreting it, and interprets what a ruling interprets. member_states narrows national_transposition to named member states (ISO 3166-1 alpha-3 or two-letter codes, echoed as alpha-3); using it without national_transposition fails as member_states_not_applicable
  • One hop, paged per relation type and direction via offset/limit (up to 100, default 100; a larger limit is reported in limit_clamp), newest first. Each type and direction pages to row 10,000, then a notice routes older works to eurlex_query_sparql with a ready-to-run query
  • Each relation carries relation_type, direction (outgoing/incoming), related_work_uri, and where known related_celex_number, related_date, related_title (English only), and related_member_state on national_transposition rows; empty_relation_types separates "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/limit pagination (up to 50; a larger limit is served at 50 and reported in limit_clamp), to row 10,000 (offset_past_window beyond)
  • Returns concept URI, preferred label, code, broader (parent) label, and the alternative label that matched when one did; an empty page with a notice when 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:, and xsd: prefixes are auto-injected; optional timeout_hint (1000–55000 ms)
  • Results capped at MAX_SPARQL_RESULTS (default 100); a truncated result's notice says to add ORDER BY and repeat with a higher OFFSET, up to row 10,000. A zero-row result from an untyped string literal gets a notice to type it (^^xsd:string, ^^xsd:anyURI for 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 as eurlex_get_document labels them, Advocates General, date, English title, in-force flag, legal basis, EuroVoc subjects; a consolidated text adds base_act_celex and reads authors, in-force flag, legal basis, and subjects from that act
  • celexNumber comes from eurlex_search_documents, eurlex_get_cases, or eurlex_lookup_celex

eurlex://document/{celexNumber}/relations <sub>resource</sub>

  • One-hop re

Truncated for display — read the full file on GitHub.

Related Skills

View on GitHub
GitHub Stars10
CategoryMarketing
Updated5d ago
Forks3

Languages

TypeScript

Trust signals

97/100

From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.

1 info