Temporal search and comparison for official Luxembourg and reviewed EU law, with provenance.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent — or use 1-click editor setup below.
💡 Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Point-in-time retrieval of regulatory text. Regulators publish the current rule; every audit, investigation and dispute is about a past date. Lex keeps every version it has seen and answers "what did this say on 15 March 2022?" with the exact validity interval, the timeline, the instrument that changed it, and a hashed provenance record, and an honest, machine-readable refusal when it cannot know.
Live demo · Ask the AI · MCP endpoint · Dataset (CC-BY) · Examples · Architecture · Next architecture · Benchmarks · Verify it yourself · Program · Retrieval + agent plan · Spec (D1-D77)
Dated retrieval → deterministic keyword or optional local hybrid search → exact EU article → verified temporal diff → evidence export → deployed architecture. Watch the narrated, continuous-browser MP4 or read the release evidence.
Give any MCP-capable AI the full toolset, no key, no install:
Modern clients such as VS Code and Cursor connect to the hosted endpoint directly:
For a client that only accepts local stdio servers, bridge to the same hosted
endpoint with a pinned version of the third-party mcp-remote adapter (Node.js 18+):
The hosted endpoint is canonical: no legal corpus, vector files or Azure credentials are downloaded to the client. Lex also publishes its remote-server metadata to the official MCP Registry from GitHub Actions using OIDC. Lex intentionally does not publish an npm package: the command above is a compatibility bridge for older clients, not a second implementation.
Or ask the live site. A real answer, verbatim:
Q: What did CRR Article 92 require as capital ratios on 1 March 2020, and has that text changed since?
Quoted verbatim (Article 92(1)) from the CRR version in force on that date: "Subject to Articles 93 and 94, institutions shall at all times satisfy the following own funds requirements: (a) a Common Equity Tier 1 capital ratio of 4,5 %; (b) a Tier 1 capital ratio of 6 %; (c) a total capital ratio of 8 %." ,
eu-eurlex:32013r0575:2019-12-25(valid 2019-12-25 → 2020-06-26), permalink.Article 92 has had four distinct texts since 2013-06-28 → 2021-06-28, 2021-06-29 → 2022-12-31, 2023-01-01 → 2024-12-31, 2025-01-01 onward, each with its own permalink and sha256.
Every claim in that answer came from a deterministic tool call (the trace is shown under each reply); the model never answers from its own memory. Do not take this file's word for it, the numbers above are checkable in one call, and if they ever drift from the live system, that is a bug worth reporting:
valid_from/valid_to to filter before
similarity (dataset).article_history: every distinct text state, dated).Lex answers what the rule was. It does not decide "were we compliant?", "does this apply to me?", or "what does this mean?", those are professional opinions. The evidence, index and MCP layers never generate or interpret legal text (fitness rule F10). The optional assistant may explain retrieved evidence, but it is visibly separate, carries the tool trace and is not part of the record.
git log carries the ingest history, and the two are deliberately not the same (why).lex verify derive re-derives and
byte-compares.FilterSet on the only query entry point. Hybrid may use a
bounded binary-vector preselection for speed, but an ineligible candidate can
never enter the fused result set.no_version_for_date, anchor_not_in_version,
outside_observed_window, text_not_available, text_withheld, a flagged wrong answer is still
a wrong answer, so Lex refuses instead.Luxembourg (Legilux, Tier A): every work and dated version currently mounted
from the publisher's Consolidation catalogue. Nothing in that collection is
filtered out by legal form. Counts, dates, corpus commit and extraction-profile
mix are read from the index on the
live coverage page, rather than copied into
product prose that becomes stale after the next publisher run.
The consolidation catalogue is not all Luxembourg law. The same official
endpoint exposes 150,187 resources classified as Act, including laws,
grand-ducal regulations, ministerial regulations and orders that may never have
received a consolidation record. That broad number also contains notices and
other material that should not all enter lawyer-facing search. The measured
boundary and the proposed normative-act increment are documented in
Luxembourg scope.
Where official XML exists, text is retained as verbatim Akoma Ntoso. The
deterministic pdf-lu/1 fallback handles eligible born-digital consolidated
PDFs and records that article boundaries came from typography rather than
publisher markup. Narrow pdf-memorial-lu/2 recovery first verifies the requested
act inside an official-gazette issue, then exposes only a strongly identified
section and visibly labels its inferred boundaries in the reader. Thematic
folders, unverified gazette matches and fileless records remain metadata-only;
Lex does not trade provenance for a larger text count. Exact text availability
and extraction-profile mix are reported from the mounted artifact on the
coverage page.
EU (EUR-Lex/Cellar, Tier A): a reviewed Luxembourg-facing scope spanning financial services, AML, corporate, competition, tax, employment, consumer, procurement, environmental, judicial-cooperation, intellectual-property, data, digital, cyber and energy law, plus bounded legal-history relationships. The mounted index and live coverage page are the source of truth for work and version counts. Full text comes from the Publications Office's Formex 4 structural XML where served, including large consolidations the XHTML channel cannot carry. The present EU limit is scope, not format.
The derived dataset publishes its current counts and source commits in its release catalog. The broader Luxembourg original-act catalogue and approved EU scope are tracked by the temporal expansion program. Communal regulations are deliberately out of scope: 17,232 exist as published acts, none is ever consolidated, so there is no point-in-time history to hold. The fallback ladder for XML-less versions is spec D49.
Lex.Mcp contains the legal tools and official SDK bridge, not a deployment entry point.
The standalone stdio executable is isolated in Lex.Mcp.Stdio; production composes the same
library into Lex.Web for Streamable HTTP. Co-hosting is deliberate while site and MCP traffic
share one immutable index set and one scale/SLA boundary. D67 records the measured triggers for
extracting an independently deployed MCP service rather than adding a second runtime for optics.
The generated key above is for local development only. Production publication uses GitHub OIDC to ask the non-exportable Azure Key Vault key to sign the whole-artifact manifest, then deploys a zero-traffic candidate revision.
as_of (full / outline / per-article select) · timeline · in_force_on ·
diff · search · article_history · provenance · coverage ·
cited_by · changes_in_period.
The same read-only tools cover Luxembourg and EU material. Search spans every
mounted publisher by default and can filter jurisdiction, date, hierarchy,
legal form, binding status, domain and language. Keyword retrieval is
deterministic FTS5/BM25. Hybrid adds the pinned local encoder and fixed rank
fusion when verified vectors are mounted; no generative model participates in
retrieval. Official work metadata and reviewed aliases such as RGPD, GDPR,
DORA, and AI Act resolve deterministically. Model-derived weak discovery is
not active, and keyword remains the production default because the signed hybrid
holdout gate has not passed. The optional assistant runs a bounded retrieval loop over
the same tools, then uses Agent Framework for claim-typed composition and a conditional
grounding judge. Application code retains work resolution, tool authorization, citation
and gap authority. coverage exists to say what Lex does not have, because a system
that cannot state its own gaps cannot be trusted with a completeness question.
Issues and PRs welcome, the highest-leverage areas:
ISourceAdapter, ~200 lines): any jurisdiction
with an official machine-readable channel. The seam is publisher-pure by
fitness test; adapters never touch files or git.fmx4-eu/1 beside xhtml-eu/1).Contributions are accepted under the Developer Certificate of Origin
(git commit -s).
Code: Apache-2.0 (LICENSE). The code licence does not extend
to corpus data or index artefacts, see each corpus repository's NOTICE
(three layers: official acts outside copyright / Lex's compilation rights /
code licence inapplicable). Derived dataset: CC-BY-4.0 (LU) and EU
reuse-with-attribution, licence inline in every file.
This is free and open, and it stays that way whatever you decide. It is also not free to run: the live site, the nightly jobs and the storage sit on Azure infrastructure I pay for out of pocket, and I maintain it on my own time.
If it saved you an afternoon, you can buy me a coffee ☕ and put it towards the hosting bill. Starring the repo helps just as much, and costs nothing.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/lex-temporal-luxembourg-and-eu-law)<a href="https://allmcps.com/mcp/lex-temporal-luxembourg-and-eu-law"><img src="https://allmcps.com/api/badge/lex-temporal-luxembourg-and-eu-law?style=directory" alt="Lex — Temporal Luxembourg and EU Law on AllMCPs" /></a>