se-eli-mcp
Install (one command)
Published on PyPI + MCP Registry (io.github.matematicsolutions/se-eli-mcp). Run without cloning:
uvx se-eli-mcp
Configure your MCP client (stdio):
{ "mcpServers": { "se-eli-mcp": { "command": "uvx", "args": ["se-eli-mcp"] } } }
Windows 11 with Smart App Control
Smart App Control blocks unsigned executables, which covers uvx.exe, pip.exe
and the se-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:
python -m pip install se-eli-mcp
python -m se_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 se_eli_mcp.
{ "mcpServers": { "se-eli-mcp": { "command": "python", "args": ["-m", "se_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.
An MCP server for Swedish statutes (SFS, Svensk författningssamling), served as open data
by the Riksdagen (parliament) at data.riksdagen.se (keyless). It gives an AI agent the
consolidated text of an act with a verifiable citation: a persistent identifier, a
human-readable citation, and a link to the official source.
Part of the eu-legal-mcp line by MateMatic — one connector per EU member state, the same citation contract everywhere.
On ELI. Sweden does not publish native ELI (
/eli/) URIs. To keep the line's contract honest,eli_uricarries the official persistent document identifier instead — thedata.riksdagen.se/dokumentURI (e.g.https://data.riksdagen.se/dokument/sfs-2018-218). The SFS number (2018:218) is the canonical Swedish citation. The connector never fabricates an/eli/URI and says so in its tool instructions. SeeDISCOVERY.md.
Tools
| Tool | What it does |
|---|---|
se_search(query) |
Free-text search over SFS statutes (title and full text). Returns acts, each with the citation contract. |
se_get_act(sfs_number) |
Metadata for one act by its SFS number (e.g. 2018:218) — title, authority, date, consolidation marker. |
se_get_text(sfs_number) |
The full consolidated plain text of one act. |
se_coverage() |
Declare what this connector covers, when each family was captured, and - explicitly - what it does NOT cover. Every gap carries a fallback. |
Every response carries the citation contract:
eli_uri— the official persistent identifier (document URI; see the ELI note above).human_readable_citation— the act title, which embeds the SFS number, e.g. Lag (2018:218) med kompletterande bestämmelser till EU:s dataskyddsförordning.source_url— the browsabledata.riksdagen.sepage for the act.consolidated_through— the last amendment folded into the text (the "ändrad t.o.m." marker).
Install
pip install -e ".[dev]"
Register it with your MCP client (see .mcp.json.example):
{
"mcpServers": {
"se-eli-mcp": {
"command": "se-eli-mcp",
"env": {
"SE_ELI_BASE_URL": "https://data.riksdagen.se",
"SE_ELI_CACHE_DIR": "~/.matematic/cache/se-eli",
"SE_ELI_AUDIT_DIR": "~/.matematic/audit"
}
}
}
}
Design
- Public data only. Read-only against the keyless Riksdagen open-data API; nothing is sent beyond the query / SFS number.
- Audit log. Every call appends one JSON line to
~/.matematic/audit/se-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 Riksdagen's schema 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 Riksdagen API
Licence
Apache-2.0. The Swedish legislation served is official public data of the Kingdom of Sweden; this connector adds no rights over it.
Metadata
Release files for se-eli-mcp 0.3.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| se_eli_mcp-0.3.3.tar.gz | 36.8 kB | Without provenance | Details for se_eli_mcp-0.3.3.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| se_eli_mcp-0.3.3-py3-none-any.whl | Python 3 | none | any | Details for se_eli_mcp-0.3.3-py3-none-any.whl |
Total release size: 59.0 kB
Release files / se_eli_mcp-0.3.3.tar.gz
| Download URL | se_eli_mcp-0.3.3.tar.gz |
|---|---|
| Size | 36.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
181a1a426ea0a90ffd816323f7e6fcebe010c86a9351c439f98c7a531073e995
|
|
BLAKE2b-256 checksum How to use checksums |
6dce03936dd6cc1fba2413200bf9f404b6a242a9fc6d2b8327fc062221a62cf2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / se_eli_mcp-0.3.3-py3-none-any.whl
| Download URL | se_eli_mcp-0.3.3-py3-none-any.whl |
|---|---|
| Size | 22.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
821bb1c65113898d86edeb5ccb27868261124e1c2a13c7012a5e44b8a64596a4
|
|
BLAKE2b-256 checksum How to use checksums |
03e42fba13c1266b533eb0513b4b3fd1c4a03396a315548d149dcbe26295329a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Security for se-eli-mcp 0.3.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.