lagen-nu-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@lagen-nu-mcpVad säger 8 kap. 2 § socialtjänstlagen?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
lagen-nu-mcp
MCP-server och cache-pipeline för svensk lagtext, rättsfall och förarbeten från lagen.nu.
Data hämtas från lagen.nus publika Atom-feeds, cachas i Supabase Postgres (schema lagen_nu) och läses bara från cachen av MCP-verktygen. Ingen live-skrapning per query.
Skrapning av lagen.nu är juridiskt/avtalsmässigt godkänd. Tjänsten är ideell och volontärdriven — vi håller en identifierande User-Agent och max ~1 req/s.
Status
Fas | Innehåll | Läge |
1 | Feed-poller → | v1, den här koden |
2 | Fetcher + schema (dokument + SFS-versioner) | v1. |
3 | Svensk | Kolumn + GIN i schemat. Paragrafindex fylls av fetchern. |
4 | MCP-verktyg (search/get SFS, rättsfall, förarbeten) | Inte påbörjad |
5 | Paragraf-diff mellan | Efter MVP |
6 | Semantisk sökning ( | Avvaktande — se nedan |
Related MCP server: Swedish Law MCP
Fas 1 — poller
Cron (t.ex. varje timme):
Hämtar kategorifeeds (
sfs,dv,forarbeten,myndfs,myndprax,keyword).Parsar varje entry:
<id>+<updated>.Jämför mot
lagen_nu.feed_state.last_seen_entry_updated.Skriver nya/ändrade dokument-URL:er till
lagen_nu.pending_fetch(upsert på URL).Loggar
new/seenper feed.
Första körningen enqueuar allt på den aktuella feedsidan (lagen.nu paginerar äldre poster via prev-archive på äldre Ferenda-feeds). Arkiv-backfill är inte med i Fas 1.
Varför 6 feeds, inte ~66?
sitenews listar många Atom-URL:er. Flera är filter på samma dataset plus en överordnad “alla”-feed. Default LAGEN_NU_FEED_MODE=roots pollar de sex dataset-feederna. all upptäcker varje feed.atom på sitenews (utom sitenews själv).
Schema
Eget schema lagen_nu i samma Supabase-projekt som Socialism. Poller/fetcher kör med service-role. RLS avstängt i v1.
pending_fetch fanns i Fas 1-beskrivningen men inte i Fas 2-DDL:n — den är tillagd i sql/001_schema.sql.
psql "$DATABASE_URL" -f sql/001_schema.sqlKöra pollern
python3 -m venv .venv
. .venv/bin/activate
pip install -e '.[dev]'
cp .env.example .env # fyll i DATABASE_URL
python -m lagen_nu_mcp poll
python -m lagen_nu_mcp poll --store memory
python -m lagen_nu_mcp fetch --limit 20Fetchern tömmer pending_fetch, hämtar varje URL med Accept: application/json först (lagen.nu svarar idag med HTML) och sparar body + paragrafer. För SFS roteras document_versions när Ändring införd t.o.m. ändrats; den gamla raden får konsolidering_url.
Cron-exempel:
12 * * * * cd /opt/lagen-nu-mcp && .venv/bin/python -m lagen_nu_mcp pollIdentitet mot lagen.nu
User-Agent: lagen-nu-mcp/0.1 (+https://github.com/kajmund/lagen-nu-mcp; erik@devbrains.se)
LAGEN_NU_MIN_INTERVAL_SECONDS=1.0Tester
pip install -e '.[dev]'
pytestKända begränsningar (ej blockerande)
Helt upphävda lagar försvinner från lagen.nu. Historik finns bara för det vi själva hann arkivera.
Community-kommentarer (CC-BY-SA) saknar feed-signal. Utelämnas i v1.
Endast vägledande rättsfall (inte tings-/förvaltningsrätt). Kompletterande källa vid behov: Domstolsverket / offentligmcp.se.
MCP-verktygen (Fas 4) läser enbart cachen, aldrig live mot lagen.nu.
Fas 4-verktyg (plan)
search_law(query)— fritext motsearch_vector, SFS-nr + paragrafget_sfs(sfs_nr, paragraf?)— aktuell lagtext, ankareP9/P26aget_law_history(sfs_nr)— ändringspunkter urdocument_versionsget_law_version(sfs_nr, amending_sfs)— historisk lydelsesearch_case_law(query)/get_case(ref, domstol)— AD/HFD/MD/MIÖD/MÖD/NJA/PMÖD/RÅ/RH/RKget_forarbete(id)— prop/SOU/Ds/dirdiff_law_versions(sfs_nr, from_sfs, to_sfs)— Fas 5, efter MVP
Fas 6 — semantisk sökning (avvaktande, ej blockerande)
Bygg inte detta nu.
pgvectori samma Supabase-projekt är kandidaten för embeddingbaserad paragrafsökning, men bara om/när Fas 3-tsvectorinte räcker.Supabase Vector Buckets (S3, public alpha) utvärderas först efter att funktionen lämnat alpha.
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP for CanLII: Canadian case law and legislation metadata (federal, provincial, territorial).
- LegalizeOAuthdev.legalize
Official MCP connector for Legalize: read and search its whole open corpus, at any point in time.
Riksdagen (Swedish Parliament) open data MCP.
Resolve, search and verify legal citations against the official sources, with provenance.
Related MCP Servers
- AlicenseAqualityAmaintenanceMCP server for searching Swiss court decisions from federal and cantonal courts via entscheidsuche.ch. Enables full-text search, law reference lookup, and filtering by canton, court level, and date without API keys.81MIT
- AlicenseAqualityFmaintenanceEnables querying Swedish statutes, provisions, case law, preparatory works, and EU law cross-references from any MCP-compatible client.19113 npmApache 2.0
- AlicenseAqualityAmaintenanceEnables AI agents to search and retrieve consolidated Swedish statutes (SFS) from the Riksdagen open data API, with verifiable citations and persistent identifiers.4Apache 2.0
- AlicenseNot gradedqualityBmaintenanceA read-only MCP connector for searching, fetching, and citing provenance-tracked legal corpora with verifiable content hashes.Apache 2.0