npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

eurlex-mcp-server

v1.0.0

Published

MCP Server for EU law via EUR-Lex Cellar API — search, fetch, and analyze EU regulations, directives, and court decisions

Downloads

99

Readme

eurlex-mcp-server

CI npm version License: MIT Node.js MCP

Search and retrieve EU law via the EUR-Lex Cellar API -- an MCP server that gives AI assistants direct access to EU regulations, directives, court decisions, and more. No API key required.

What You Can Do

Ask your AI assistant questions like:

  • "Find EU regulations about artificial intelligence from 2024"
  • "Show me the full text of the AI Act (32024R1689)"
  • "What EuroVoc topics are assigned to the GDPR?"
  • "Which documents cite the Digital Services Act?"
  • "Search for directives about renewable energy"
  • "Get the consolidated version of Regulation 2016/679 (GDPR)"

Features

  • 6 specialized tools for searching, fetching, and analyzing EU legal documents
  • EuroVoc thesaurus search -- find documents by EU taxonomy concepts
  • Consolidated versions -- retrieve the latest in-force text of regulations, directives, and decisions
  • Citation graph -- explore which documents cite or are cited by a given act
  • Structured metadata -- access dates, EuroVoc descriptors, legal basis, and more
  • Multi-language -- supports English, German, and French
  • No API key required -- uses the public EUR-Lex Cellar SPARQL endpoint

Quick Start

pnpm dlx eurlex-mcp-server

Or with npx:

npx -y eurlex-mcp-server

Configuration

Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "eurlex": {
      "command": "npx",
      "args": ["-y", "eurlex-mcp-server"]
    }
  }
}

Claude Code

claude mcp add eurlex-mcp-server -- npx -y eurlex-mcp-server

VS Code

Add to .vscode/mcp.json:

{
  "servers": {
    "eurlex": {
      "command": "npx",
      "args": ["-y", "eurlex-mcp-server"]
    }
  }
}

Cursor

Add to .cursor/mcp.json:

{
  "mcpServers": {
    "eurlex": {
      "command": "npx",
      "args": ["-y", "eurlex-mcp-server"]
    }
  }
}

Windsurf

Add to ~/.windsurf/mcp.json:

{
  "mcpServers": {
    "eurlex": {
      "command": "npx",
      "args": ["-y", "eurlex-mcp-server"]
    }
  }
}

Tool Reference

eurlex_search

Full-text search across EUR-Lex documents.

| Parameter | Type | Required | Default | Description | |-----------|------|----------|---------|-------------| | query | string | yes | -- | Search term (3-500 chars), e.g. "artificial intelligence high risk" | | resource_type | string | no | "any" | Document type filter: REG, DIR, DEC, JUDG, REG_IMPL, REG_DEL, DIR_IMPL, DIR_DEL, DEC_IMPL, DEC_DEL, ORDER, OPIN_AG, RECO, any | | language | string | no | "DEU" | Language for titles and full text: DEU, ENG, FRA | | limit | number | no | 10 | Max results (1-50) | | date_from | string | no | -- | Filter from date, format: YYYY-MM-DD | | date_to | string | no | -- | Filter to date, format: YYYY-MM-DD |

eurlex_fetch

Retrieve the full text of a document by its CELEX identifier.

| Parameter | Type | Required | Default | Description | |-----------|------|----------|---------|-------------| | celex_id | string | yes | -- | CELEX identifier, e.g. "32024R1689" for the AI Act | | language | string | no | "DEU" | Language: DEU, ENG, FRA | | format | string | no | "xhtml" | Output format: xhtml (structured) or plain (tags stripped) | | max_chars | number | no | 20000 | Max characters returned (1000-50000) |

eurlex_metadata

Retrieve structured metadata for a document (dates, EuroVoc descriptors, legal basis, etc.).

| Parameter | Type | Required | Default | Description | |-----------|------|----------|---------|-------------| | celex_id | string | yes | -- | CELEX identifier, e.g. "32024R1689" | | language | string | no | "DEU" | Language for titles and EuroVoc labels: DEU, ENG, FRA |

eurlex_citations

Explore the citation graph of a document -- which acts it cites and which acts cite it.

| Parameter | Type | Required | Default | Description | |-----------|------|----------|---------|-------------| | celex_id | string | yes | -- | CELEX identifier, e.g. "32024R1689" | | language | string | no | "DEU" | Language for titles: DEU, ENG, FRA | | direction | string | no | "both" | cites (outgoing), cited_by (incoming), or both | | limit | number | no | 20 | Max results (1-100) |

eurlex_by_eurovoc

Find documents by EuroVoc thesaurus concept (label or URI).

| Parameter | Type | Required | Default | Description | |-----------|------|----------|---------|-------------| | concept | string | yes | -- | EuroVoc concept: label (e.g. "artificial intelligence") or URI (e.g. "http://eurovoc.europa.eu/4424") | | resource_type | string | no | "any" | Document type filter (same values as eurlex_search) | | language | string | no | "DEU" | Language: DEU, ENG, FRA | | limit | number | no | 10 | Max results (1-50) |

eurlex_consolidated

Retrieve the consolidated (in-force) version of a regulation, directive, or decision.

| Parameter | Type | Required | Default | Description | |-----------|------|----------|---------|-------------| | doc_type | string | yes | -- | Document type: reg (regulation), dir (directive), dec (decision) | | year | number | yes | -- | Year of the act (1950-2100), e.g. 2024 | | number | number | yes | -- | Document number, e.g. 1689 | | language | string | no | "DEU" | Language: DEU, ENG, FRA | | format | string | no | "xhtml" | Output format: xhtml or plain | | max_chars | number | no | 20000 | Max characters returned (1000-50000) |

CELEX Number Schema

CELEX identifiers uniquely identify EU legal documents. The format is:

[sector][year][type][number]
  • Sector (1 digit): 3 = legislation, 6 = case law, 5 = preparatory acts
  • Year (4 digits): year of the document
  • Type (1-2 letters): R = regulation, L = directive, D = decision, J = judgment, etc.
  • Number: sequential number

Examples:

| CELEX | Document | |-------|----------| | 32024R1689 | AI Act (Regulation 2024/1689) | | 32016R0679 | GDPR (Regulation 2016/679) | | 32022R2065 | Digital Services Act (Regulation 2022/2065) | | 62014CJ0131 | Court of Justice case C-131/14 |

Development

Setup

git clone https://github.com/philrox/eurlex-mcp-server.git
cd eurlex-mcp-server
pnpm install
pnpm build

Commands

| Command | Description | |---------|-------------| | pnpm dev | Start dev server with hot reload | | pnpm build | Compile TypeScript | | pnpm test | Run unit tests | | pnpm test:watch | Run tests in watch mode | | pnpm test:integration | Run integration tests (hits real API) | | pnpm start | Start production server |

Testing

pnpm test              # unit tests
pnpm test:integration  # integration tests (hits real API)

Limitations

  • Rate limits: The EUR-Lex Cellar API is public but may throttle excessive requests.
  • Document availability: Not all documents have full text in all languages.
  • Consolidated versions: Only available for regulations, directives, and decisions.
  • Response size: Full text is truncated at max_chars (default 20,000 characters) to stay within LLM context limits.
  • SPARQL timeouts: Complex EuroVoc queries may occasionally time out on the Cellar endpoint.

Contributing

See CONTRIBUTING.md for development setup, architecture overview, and submission guidelines.

License

MIT