io.github.matematicsolutions/lu-eli-mcp
MCP server for Luxembourg Legilux: ELI-native legislation and Akoma Ntoso with citations.
Open source Open in the app JSON README (API)
About
MCP server for Luxembourg Legilux: ELI-native legislation and Akoma Ntoso with citations.
Details
- Kind
- MCP servers
- Topic
- Government & public data
- Publisher
- matematicsolutions
- Origin
- official
- Category
- ferramentas
- Transport
- local
- Version
- 0.3.3
- Stars
- 1
- Last push
- 2026-08-24T13:57:07Z
- Repository state
- ativo
- Language
- Python
- License
- Apache-2.0
- Added
- 2026-08-29 04:00:29
- Updated
- 2026-08-29 04:00:29
- Origin id
io.github.matematicsolutions/lu-eli-mcp
README
# lu-eli-mcp
<!-- mcp-name: io.github.matematicsolutions/lu-eli-mcp -->
## Install (one command)
Published on PyPI + MCP Registry (`io.github.matematicsolutions/lu-eli-mcp`). Run without cloning:
```bash
uvx lu-eli-mcp
```
Configure your MCP client (stdio):
```json
{ "mcpServers": { "lu-eli-mcp": { "command": "uvx", "args": ["lu-eli-mcp"] } } }
```
### Windows 11 with Smart App Control
Smart App Control blocks unsigned executables, which covers `uvx.exe`, `pip.exe`
and the `lu-eli-mcp.exe` launcher that pip writes at install time. The `python.exe` and
`py.exe` from the python.org installer are signed by the Python Software
Foundation, so running the module through the interpreter works:
```bash
python -m pip install lu-eli-mcp
python -m lu_eli_mcp
```
`pip.exe` is blocked for the same reason, so install with `python -m pip`, not
`pip install`. If `python` is not on PATH, use the Windows launcher: `py -3 -m lu_eli_mcp`.
```json
{ "mcpServers": { "lu-eli-mcp": { "command": "python", "args": ["-m", "lu_eli_mcp"] } } }
```
Do not turn Smart App Control off to work around this - it cannot be re-enabled
without reinstalling Windows.
Building from source: see [Install](#install).
An MCP server for **Luxembourg legislation** via [Legilux](https://legilux.public.lu) open data
(`data.legilux.public.lu`). It fetches act metadata and full Akoma Ntoso text with verifiable
citations. Part of the **eu-legal-mcp** line of national legal connectors by
[MateMatic](https://matematic.co).
Legilux is genuinely **ELI-native**: every act is addressed by its ELI and described as jolux RDF
over a FRBR model (Work / Expression / Manifestation), with full text as Akoma Ntoso XML. Every
response carries a native `eli_uri`, a `human_readable_citation` and a resolvable `source_url`.
> **Read-only.** The server only queries Legilux and writes a local audit log. It never modifies
> official text.
## Tools
| Tool | What it does |
| --- | --- |
| `lu_get_act(eli)` | Metadata for an act by its ELI (full URI or bare `eli/...` path). Returns the native `eli_uri`, title, dates, in-force status, available languages / manifestations, and the act's `cites` / `modifies` / `repeals` links. |
| `lu_get_text(eli, language, file_format)` | Verbatim text in one `language` (default `fr`) and `file_format` (default `xml`, Akoma Ntoso). |
| `lu_coverage()` | Declare what this connector covers, when each family was captured, and - explicitly - what it does NOT cover. Every gap carries a fallback. |
There is **no free-text search**: Legilux exposes no HTTP search endpoint. Discover acts by ELI
coordinates (from legilux.public.lu) or by following the `cites` / `modifies` / `repeals` ELIs that
`lu_get_act` returns. Luxembourg is multilingual, so titles and text may be French or German; the
`languages` field shows what exists for a given act.
## Configuration
Legilux is keyless. Configuration is optional:
| Variable | Meaning |
| --- | --- |
| `LU_ELI_BASE_URL` | Legilux data host (default `https://data.legilux.public.lu`). |
| `LU_ELI_CACHE_DIR` | Disk cache dir (default `~/.matematic/cache/lu-eli`). |
| `LU_ELI_AUDIT_DIR` | Audit log dir (default `~/.matematic/audit`). |
Copy `.mcp.json.example` to your MCP client config.
## Install
```bash
py -3.13 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -e ".[dev]" # Windows
# or: python -m pip install -e ".[dev]" # POSIX
```
## Tests
```bash
pytest tests/test_instructions_drift.py tests/test_parse.py # offline
pytest tests/test_smoke.py -v # live, hits Legilux
```
## Licence
Apache-2.0. Legilux content is © the Grand Duchy of Luxembourg; this software only retrieves and
cites it.