Module · Machine access
fedlex-Engine
The own build over the Confederation's public Fedlex endpoint: SR numbers, versions, article texts — every answer with provenance. The first built area.
prepared Machine access licence not declared in the crate (corpus: Apache-2.0) no public endpoint Source on GitHub
L2.2 · mcp/servers/fedlex
Start now
Requirements:
- Rust (stable via rustup) and Git; every command runs from the root of the corpus checkout.
cargo run --locked --manifest-path mcp/gateway/Cargo.toml -- --root . --http 8700 --fedlex-fixtures mcp/servers/fedlex/tests/fixtures --lindas-fixtures mcp/servers/lindas/tests/fixturesExpected: gateway on 127.0.0.1:8700
The server speaks MCP over stdin/stdout and has no network address of its own; the simplest start is behind the gateway with fixtures. Directly: cargo run --locked --manifest-path mcp/servers/fedlex/Cargo.toml -- --fixtures mcp/servers/fedlex/tests/fixtures, then an MCP client connects over stdio.
Download
- Source
- https://github.com/OpenHelvetia/mcp-fedlex-oh · mcp/servers/fedlex
- Release
- not yet No tagged release yet; the first follows the publication lane.
- Container image
- not yet No container image published yet.
- Crate
- not applicable — the module is not a library crate
git clone https://github.com/OpenHelvetia/mcp-fedlex-oh
Dependencies
- Needs
- none
- Needed by
- MCP-Gateway prepared
- Documentation
- the page in the documentation
State and evidence
prepared — built and tested, not publicly served.
Every piece of evidence carries its source. Values marked «recounted» are counted from the source at every build; if the figure differs, the build fails.
| Measure | Value | Source |
|---|---|---|
| Tools | 35 35 (der 8er-Spine von TOOLSET-v0.md, 12 Navigator-Werkzeuge, 13 der zweiten Welle, dazu das Zitat-Paar) recounted: jq '[getpath([])[] | select(.domain == "fedlex")] | length' mcp/gateway/tool-inventory.json |
mcp/gateway/tool-inventory.json |
| Tests | 114 run (31 in lib, 76 e2e, 7 rule gate); 15 more are deliberate recording runs marked #[ignore] that go live to the Confederation | mcp/servers/fedlex |
| Rulebook and conformance table | docs/reference/fedlex-data-rules.md: 123 rules (80 JOLux rules J…, 43 Akoma Ntoso rules X…) — 99 honoured, 15 untested, 3 violated, 6 not_applicable | mcp/servers/fedlex |
| The gate over the table | mcp/servers/fedlex/tests/rules_table.rs, 7 running tests: an «honoured» row must name a function marked #[test]/#[tokio::test] without #[ignore], an «untested» row may not carry a dead name, and a status outside the five permitted ones is an error | mcp/servers/fedlex |
| Fixture mechanism | 102 recorded files (94 JSON SPARQL answers, 8 Akoma Ntoso XML) under SEMANTIC keys — tool plus parameters, never query bytes; INDEX.txt holds exactly 102 lines with key and recording date, so a rewritten query has to be re-recorded instead of silently missing the fixture | mcp/servers/fedlex |
| Vendored upstream crates | Three: fedlex-akn, fedlex-jolux, fedlex-core under third_party/mcp-fedlex, Apache-2.0, byte-identical at pin 64e0ec3fdce3cc6841fa9f659456a520c1e21083 (upstream commit of 09.07.2026), with a SHA-256 per crate in PROVENANCE.md | mcp/servers/fedlex |
What is missing
- until in operation: Three rules stand open as «violated» rather than as a green tick: find_treaties still searches a treaty as one contiguous string and misses it under its official multi-word title (J3.5); get_article_history does not see impacts that hang as a mere comment at act level (J6.3); and the vendored text writer produces nothing at all for a <br/> — the census over the eight recorded versions finds 74 line breaks, 21 of which run two words together (X6.1). A further 15 rules are untested, there is no public endpoint, and the semantic tier above the base has not been built.
History
- 2026-09-03 Source published as its own repository on GitHub (publication lane, wave 1).
Documentation
- fedlex-Engine in the documentation: what it does, run, test, call
- Run it yourself · Test · Call