Lex — Temporal Luxembourg and EU Law

io.github.SFHAJJIPublished by GitHub account SFHAJJIv1.2.0Updated Nov 2, 2026

Temporal search and comparison for official Luxembourg and reviewed EU law, with provenance.

VerifiedStreamable HTTPWeb executableWeb Search & ScrapingKnowledge & Memory

Overview

AI-generated overview

Remote MCP server for dated Luxembourg and EU law: resolve acts, read articles as of a date, diff versions and check provenance.

What you can do
  • Resolve acts and permalinks, and read an act's state on a date with its articles
  • List an act's states over time, one article's history, and article-level diffs between two dates
  • Find works in force on a date, states that began in a period, and browse or search the held index
  • Inspect provenance, sources, digests, citations, cited-by links and publisher classification facts
  • Verify hash-pinned permalinks and fetch bounded evidence bundles for quoting
  • Read the event log, past answers invalidated by revisions, and coverage of what is held
When to use it
Useful when an assistant must answer questions about Luxembourg or EU law as it stood on a specific date, compare versions of an act, or produce quotes with verifiable sources and digests. Also suited to checking whether a given act or article is covered at all.
Requirements
A remote MCP endpoint at law.soufien.lu over streamable HTTP; no package, account, API key or header is declared. Network access to that host is required.
Before you install
The server states it gives no legal advice and does not apply law to a situation, so answers should not be treated as legal counsel. Its built-in assistant tool always returns an unavailable result rather than model answers. EU dates are wording dates, not applicability dates, and observation times are not held, so dated claims need care.

Installation

In SourceWeft

  1. Open Lex — Temporal Luxembourg and EU Law in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.SFHAJJI%2Flex/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "lex-temporal-luxembourg-and-eu-law": {
      "type": "http",
      "url": "https://law.soufien.lu/mcp"
    }
  }
}

README

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

powershell
dotnet test Lex.V3.slnx --configuration Releasenpm test --prefix webnpm run build --prefix webpwsh -File eng/verify-v3-tree.ps1

Source: README.md at commit a741573

Tools

24

resolve

Resolve a Luxembourg legal-act identifier or a hash-pinned permalink to the work and expression it names.

Parametersidentifierrequired

as_of

The state of a Luxembourg act applicable on a date (publisher), with its articles; for an EU act, the wording dated at or before the date (an EU wording date, never an applicability date).

Parametersdaterequiredlanguageidentifierrequired

timeline

Every state of a Luxembourg act the index holds, in publisher applicability order; for an EU act, every wording its census discovered, in wording-date order.

Parameterslanguageidentifierrequired

article_history

The history of one article of a Luxembourg act across its states.

Parametersanchorrequiredlanguageidentifierrequired

diff

The article-level difference between the states of a Luxembourg act on two dates.

Parametersdate_torequiredlanguagedate_fromrequiredidentifierrequired

changes_in_period

The Luxembourg states that began in a period, for a work or across the index.

Parameterslimitdate_torequiredlanguagedate_fromrequiredidentifier

in_force_on

The Luxembourg works with a state applicable on a date.

Parametersdaterequiredlimitlanguageidentifierafter_work_key

coverage

What this mount holds and serves, named, and what it does not.

Parameterslanguage

provenance

The retained sources, rule profiles and digests behind a Luxembourg state.

Parametersdaterequiredlanguageidentifierrequired

dossier

The work record of a Luxembourg act as the index holds it; for an EU work named by identifier, its held expressions from the EU index.

Parameterslanguageidentifierrequired

citation

The references the publisher wrote in the text of a Luxembourg state's articles.

Parametersdaterequiredafterlimitanchorlanguageidentifierrequired

cited_by

The references, in any held Luxembourg state, whose target is exactly this work.

Parametersafterlimitidentifierrequired

verify

Verify a hash-pinned permalink against the state digest the index holds, or read the current digests to pin.

Parameterslanguageidentifierrequired

relations

The reference edges of a Luxembourg work in both directions, as one ordered, paged list.

Parametersdateafterlimitlanguagedirectionidentifierrequired

evidence_bundle

What a quote of a Luxembourg state needs, one bounded page at a time (at most 50 articles and 96 KiB of text; page or article chooses the page, contents adds the table of contents): each article's text with its digests, the state's permalink, digests, sources and official identities, composed under the rights rule; for an EU act, the same for the wording of the date.

Parametersdaterequiredpagearticlecontentslanguageidentifierrequired

classification

The publisher's typed facts about a Luxembourg work, verbatim: document type, RDF types, legal value, responsible body, historical identifiers, publication and document dates.

Parameterslanguageidentifierrequired

manifestation

The publisher's manifestations of a Luxembourg work's expressions with their formats and items, the retained one marked with its body digest.

Parametersformatlanguageidentifierrequired

status_on

The publisher's force assertions about a Luxembourg work (its inForceStatus, dateEntryInForce and dateNoLongerInForce facts), verbatim, beside the state applicable on a date, with one fixed reading of the dates.

Parametersdaterequiredlanguageidentifierrequired

browse

The Luxembourg works this mount holds, one ordered and paged list with their identifiers, languages, state dates and the publisher's document types; filter by type or language.

Parameterstypeafterlimitlanguage

ask

The contained assistant (Decisions 51 and 91): every question answers the typed presentation result assistant_v3_unavailable, naming the deterministic operations that answer from held law; no model answers.

Parametersquestionrequired

events

The Luxembourg event log, polled by cursor, at least once: a genesis log holds one first_sighting per held state; a chained log adds each later build's comparison events; each build's time, never an observation time.

Parametersaftereventlimit

answer_drift

The past dated answers a publisher revision invalidated, enumerated from the log's revising events; a genesis log holds none, and the answer says why rather than asserting that nothing drifted.

Parametersafterlimitidentifier

as_observed

The state of a Luxembourg act applicable on a date (publisher) as one build of the mounted log held it, named by that build's index digest, with its build time as an upper bound on observation; a time refuses, since no observation time is held.

Parametersatdaterequiredlanguagesnapshotidentifierrequired

Version history

1
  1. v1.2.0LatestSep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts