Documentation
The lovverk tool surface: what each tool answers, what it will not answer, authentication, the corpus behind it and the caveats.
lovverk is an MCP server with 17 read-only tools. None of them changes the corpus. How to point your client at it: Connect.
The tools
Finding. search_laws searches slug and title, search_body the legal text itself, and semantic_search by meaning — for when your question uses different words than the law does. list_recent_changes shows what changed most recently, and corpus_status how fresh the corpus you are reading from is.
Reading. get_law returns the whole text, get_section a single provision with its cross-references already checked, and list_sections the table of contents — so the model need not pull an entire act through its context window to reach one paragraph.
Verifying. validate_citation answers whether a citation exists at all, and verify_quote whether a verbatim quote really appears in the provision you attribute it to. These two exist for the most common failure of all: a model quoting words that are not there.
History. get_law_history, list_law_versions, get_law_at and diff_law_versions read the corpus's own git history: what the corpus held at the end of a given date, and what differed between two dates. get_temporal_events returns what the source itself states about amendments and commencement.
EU and EEA. get_eu_basis gives the CELEX identifiers an act implements; search_eu_implementations goes the other way, from an EU document to Norwegian acts.
What it will not answer
- Not legal advice. The tools show you the text of the law. The interpretation is yours.
- Not the law in force on a date. The history tools answer what the corpus held at a date — not which provisions were legally in force then. Those are two different questions, and only the first can be answered from here.
- No case law, preparatory works, circulars or municipal regulations. A rule can be binding and still be absent here. An empty result is not evidence that no such rule exists.
- No paraphrase checking.
verify_quoteconfirms that a verbatim string appears in the provision. Whether a rewording is legally faithful, it cannot answer — for that, read the text yourself.
The corpus behind it
5,873 documents at the last release: Norwegian acts and central regulations currently in force, taken from Lovdata's open data and rendered as Markdown. Browse them here — acts and regulations.
The distinction is the source's own: lover are passed by the Storting, sentrale forskrifter are issued under the authority of an act by a ministry or directorate. Local and municipal regulations are not included.
Source: Lovdata, licensed under NLOD 2.0, and every file carries the licence in its own front matter. The corpus is public in lovverk; the engine that builds it is lovspor, under AGPL-3.0.
Authentication
The hosted service always requires credentials: a call without them gets 401 with a Bearer challenge. There are two forms. Opaque tokens are handed out by hand, for developer clients. Hosted OAuth login, for chat-app connectors such as claude.ai and ChatGPT, is on when the OAuth 2.1 pair is configured on the server — the service then answers RFC 9728 discovery; when it is off, there is no .well-known at all.
With OAuth on, both forms are accepted at once: a token that already works keeps working. Which state the service was actually observed in at the last release is on status — not here.
Quotas
Every call is counted in two layers: per credential and per instance. Both bound calls in flight, calls per minute, calls per day and semantic searches per day. The limits are set per token and can be changed without a release, so they travel with the token you are given — not with this page. The counters live in memory: a restart forgives the day.
Honest caveats
semantic_searchneeds a key on the server. Your query is sent out to an embedding service to be turned into a vector. The corpus vectors were computed in advance, but your question leaves the machine — so do not paste confidential text into it. Without the key only this one tool is off; the rest work unchanged. If you run the server yourself, the key is your own.- Score is similarity, not relevance. A high number from
semantic_searchmeans the provision is about something similar — not that it answers the question. Read the text withget_sectionbefore quoting it. search_bodyis substring matching. No stemming: searching for skattefradrag will not find documents that only write skattefradraget.- Unobserved does not mean "down". On status, a value is marked unobserved when the measurement itself did not complete — our network, our credential or our tooling. The page then says exactly that, with the reason and the time, instead of showing a previous value or a zero. A failure of the observer is not a failure of the service, and the two must not look alike.