nl-eli-mcp
Instalacja (jedna komenda)
Opublikowany na PyPI + MCP Registry (io.github.matematicsolutions/nl-eli-mcp). Uruchomienie bez klonowania:
uvx nl-eli-mcp
Konfiguracja klienta MCP (stdio):
{ "mcpServers": { "nl-eli-mcp": { "command": "uvx", "args": ["nl-eli-mcp"] } } }
(Budowanie ze źródeł — niżej.)
An MCP server for the Dutch consolidated legislation BWB (Basiswettenbestand), served byKOOP over the official SRU API (zoekservice.overheid.nl, keyless). It gives an AI agent theversion of an act in force on a given date, with a verifiable citation: a persistentidentifier, a human-readable citation, and a link to the official source.
Part of the eu-legal-mcp line by MateMatic — one connector per EUmember state, the same citation contract everywhere.
On ELI. The Netherlands does not publish native ELI (
/eli/) URIs on consolidatedBWB. To keep the line's contract honest,eli_uricarries the official persistentidentifier instead — thewetten.overheid.nl/idtoestand URI(e.g.http://wetten.overheid.nl/id/BWBR0005537/2026-06-04/0). The connector neverfabricates an/eli/URI and says so in its tool instructions. SeeDISCOVERY.md.
Tools
| Tool | What it does |
|---|---|
nl_search(query, on_date=today) |
Find acts by words in the title that are in force on a date. Returns distinct acts, each with the citation contract. |
nl_get_act(bwb_id, on_date=today) |
Metadata for one act (e.g. BWBR0005537) — identifier, title, authority, version date. |
nl_get_text(bwb_id, on_date=today) |
The full consolidated XML (BWB toestand) of one act. |
nl_case_search(date_from, date_to, ...) |
List court decisions (Rechtspraak Open Data) by date range / court / subject. No free-text; each hit carries a native ecli. |
nl_get_decision(ecli) |
A court decision by its ECLI (e.g. ECLI:NL:HR:2020:1) — court, dates, zaaknummer and full text. |
Legislation comes from the BWB (KOOP SRU); case law comes from Rechtspraak Open Data(data.rechtspraak.nl), keyed by native ECLI. Every response carries the citation contract:
eli_uri— the official persistent identifier (toestand URI; see the ELI note above).human_readable_citation— the official short title (citeertitel), e.g. Algemene wet bestuursrecht.source_url— the browsablewetten.overheid.nlpage for that version.
Versions and dates
Each act has many time-stamped versions. The tools default to the version in force today;pass on_date (YYYY-MM-DD) to pin a historical or future version. An act with no versionvalid on that date returns not_found — retry with another on_date.
Install
pip install -e ".[dev]"
Register it with your MCP client (see .mcp.json.example):
{
"mcpServers": {
"nl-eli-mcp": {
"command": "nl-eli-mcp",
"env": {
"NL_ELI_BASE_URL": "https://zoekservice.overheid.nl/sru/Search",
"NL_ELI_CACHE_DIR": "~/.matematic/cache/nl-eli",
"NL_ELI_AUDIT_DIR": "~/.matematic/audit"
}
}
}
}
Design
- Public data only. Read-only against the keyless KOOP SRU API and the official repositoryhost; nothing is sent beyond the query / identifier and the date.
- Audit log. Every call appends one JSON line to
~/.matematic/audit/nl-eli-mcp.jsonl(AI Act art. 12 record-keeping). - Vendor-neutral. No LLM provider, no telemetry; own backoff + on-disk cache.
- No fabrication. Identifiers and titles are parsed from the source record. If KOOP'sschema changes, the connector fails loudly rather than returning stale or invented data.
See CONSTITUTION.md (the 4 principles) and DISCOVERY.md (how the source was mapped).
Tests
pytest tests/test_instructions_drift.py tests/test_parse.py # offline
pytest tests/test_smoke.py # live KOOP API
Licence
Apache-2.0. The Dutch legislation served is official public data of the Kingdom of theNetherlands; this connector adds no rights over it.