Lex: Luxembourg Law MCP Server
Lex provides read-only, point-in-time retrieval and analysis of Luxembourg and EU legal texts via MCP tools. You can:
Retrieve exact document versions as of a specific date with
as_of(full, outline, or selected articles).Get a document's complete version history with
timeline.List all works in force on a given date with
in_force_on.Compare document states between two dates with
diff.Perform full-text search with filters and ranked results via
search(returns metadata only).Trace every distinct version of a specific article/provision with
article_history.Verify authenticity and chain of custody via
provenance.Check corpus coverage and known gaps by publisher with
coverage.Find articles that cite a given law with
cited_by.Identify which works gained new versions in a period with
changes_in_period.Use the curated CC-BY dataset of articles with validity dates for RAG applications.
The server is designed for machine readability, supporting AI agents and legal-tech workflows with verifiable, hallucination-free outputs.
Provides a temporal coordinate system over official Luxembourg and European Union law, with tools to search legislation, retrieve a document's state as of any date, list provisions, track article-level history and version timelines, diff versions between dates, find which works changed in a period, discover which articles cite a given law, list works in force on a date, check coverage and known gaps, and verify provenance of a lex_id.
This server has a remotely hosted endpoint. Open its connector listing for connection details, authentication requirements, and setup instructions:
Lex V3
Lex shows the published text of Luxembourg and European Union law as it stood on a date, article by article, with the official source, the text's hash and a permalink. It is served at https://law.soufien.lu (open since 27 October 2026), in French and English, over the pages, a REST API and an MCP server on one origin. It does not give advice, apply the law to a situation, make its own consolidation or let a model choose an act or rank results.
How it is built, in short: the publishers' files (Formex XML from the Publications Office, Akoma Ntoso from Legilux) are parsed into relational SQLite indexes (works, dated versions and their validity intervals, articles, hashes, publisher relations), built twice and compared byte for byte; questions are parsed by deterministic parsers (ELI, CELEX, citations, dates); retrieval goes by structure first (act, version on a date, article), then lexical search over the articles' text; every answer is a typed envelope and every refusal a typed code with a mandatory payload. Releases are reproducible, signed images, checked against the release serving before them. An assistant is built to a typed answer contract (the model only plans; code validates and quotes) and is switched off until its gates pass.
Where to read more: STATUS.md (what is served, what is next), docs/OPERATING.md (how it
runs), LAUNCH-CONTRACT.md (the acceptance list), and on the site itself the Developers page and
"What this site holds". Work starts from v3/integration; main is the legacy line.
Local verification
dotnet test Lex.V3.slnx --configuration Release
npm test --prefix web
npm run build --prefix web
pwsh -File eng/verify-v3-tree.ps1Available Tools
10 toolsarticle_historyAInspect
Every distinct text ONE provision (article/annex) has had, as validity intervals — plus its lifecycle events (inserted/removed/renumbered, renumbering detected mechanically by identical text hash). The answer to "what did Article X say over its life / when did it change".
Inputs: work (required), anchor (required).
as_ofAInspect
The state of one document as it stood on one date. Pure lookup, no ranking. mode=outline lists the provisions (articles/annexes) without text — use it first on long documents; mode=select returns only the named anchors' text; mode=full (default) returns the whole text. Every provision carries its own permalink and hash.
Inputs: date (required), work (required), mode, anchors, +1 more.
changes_in_periodAInspect
ACROSS the corpus: which works gained new versions between two dates, how many each, and when — the aggregate counterpart of diff/timeline (which cover ONE work). Use for "what changed between 2025 and 2026", "which laws changed most during the pandemic", "what moved last month". order=by_churn ranks by number of new versions; by_date (default) lists most recently changed first.
Inputs: to_date (required), from_date (required), limit, order, +3 more.
cited_byAInspect
Which ARTICLES point at this law. The reverse of the cross-references the publisher writes into its own text ("modifie par la loi du 4 juin 2020"), captured at derive time. Answers "what depends on this law", "who amended it", "is anything still referring to it" — the question legal research is actually made of, and the one a search box cannot answer.
Inputs: work (required), limit.
coverageBInspect
What we hold and what we lack, tier by tier: counts, date ranges, history_begins, known gaps. This tool exists to say what we do NOT have.
Inputs: publisher.
diffBInspect
What changed between two dates for one work: which versions applied, and where both texts are held, retrieve them via as_of to compare.
Inputs: work (required), to_date (required), from_date (required), language.
in_force_onAInspect
The set of works in force on a date, computed from validity intervals at query time, deduplicated by work. Carries a mandatory population disclosure.
Inputs: date (required), limit, offset, publisher, +1 more.
provenanceAInspect
Proof chain for one lex_id: source URI, retrieval time, record/body hashes, event chain, corpus commit, index build, stamp signature.
Inputs: lex_id (required), language.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 10 tools
Each tool targets a distinct legal research need: provenance, state-at-date, document history, force status, diffing, search, provision history, coverage, citations, and corpus-wide changes. The descriptions clearly differentiate overlapping tools like timeline vs article_history and diff vs changes_in_period.
All tool names are lowercase and use underscores for multi-word phrases, following a consistent pattern. While parts of speech vary, the formatting style is uniform, with no camelCase or mixed conventions.
With 10 tools, the server is well-scoped for legal research, covering discovery, retrieval, temporal analysis, and citation tracking. Each tool serves a unique purpose without redundancy.
The tool surface is largely complete, offering search, document retrieval, history, diffing, force status, and citations. The only notable gap is the absence of a forward-citation tool (which laws a given law references), though this can be mitigated by reading the text via as_of.
Maintenance
Related MCP Connectors
The law of nearly every country on earth, any date: read it, see what changed it, check citations.
1811,911Keyless MCP access to official Luxembourg public data: laws, statistics, mobility, and more.
Luxembourg, EU and French legal research and drafting with cited sources. Account required.
Verified EU law: verbatim, signed provisions with EUR-Lex links. Read-only, not legal advice.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceCite-grade German legal-text infrastructure for LLM agents, providing access to federal, Länder, and EU laws with cryptographic provenance.31 PyPI2Apache 2.0

conformi-searchofficial
AlicenseAqualityAmaintenanceInstallable MCP server for EU legal research with verifiable CELEX citations from the EUR-Lex corpus (DE/EN/FR).21MIT- AlicenseNot gradedqualityFmaintenanceEnables AI-powered legal research across 4,551 Luxembourg statutes, 260 case law decisions, and EU law integrations through natural language queries and 13 specialized tools.54 npm2Apache 2.0

Moonlit Legal Researchofficial
AlicenseNot gradedqualityDmaintenanceOfficial European law, expanding globally: 20M+ documents, 35+ jurisdictions, verifiable citations.MIT