mcpbeat Sign in
E

nu:legal Deutsches Recht MCP Server

answering

nu:legal Deutsches Recht is answering right now. Last checked 4 min ago. It exposes 9 tools.

German federal and Land statutes plus court decisions for agents. Keyless, read-only, CC BY 4.0.

Uptime history 2 hours of history
2 hours agonow
100.0%
Uptime 24h
6 of 6 checks
9
Tools
read from the server
244 ms
Response time
average over 24h
open, no key
Access
streamable-http

Nothing serious here today

Today is the operative word: we check nu:legal Deutsches Recht every 15 minutes and re-read its code on every release. Watch it and you find out the day that stops being true.

Three servers free · no card

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 4 min ago.

run in your terminal
claude mcp add recht --transport http https://recht.nulegal.eu/v1/mcp
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "recht": {
      "url": "https://recht.nulegal.eu/v1/mcp"
    }
  }
}
~/.codex/config.toml
[mcp_servers.recht]
url = "https://recht.nulegal.eu/v1/mcp"
.cursor/mcp.json
{
  "mcpServers": {
    "recht": {
      "url": "https://recht.nulegal.eu/v1/mcp"
    }
  }
}
.vscode/mcp.json
{
  "mcpServers": {
    "recht": {
      "url": "https://recht.nulegal.eu/v1/mcp"
    }
  }
}

Available tools 9

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

getchanges
getChanges
Which provisions got a new text recently, newest first — the freshness feed, as JSON. Poll it with `since` set to the newest `observed` you have already processed. `observed` is the day the new text was FIRST SEEN here, which is not necessarily the day it came into force. Say so if you report a date. The window is the last 120 days; the law's own Änderungsverlauf goes further back.
getcoverage
getCoverage
Corpus scope with its holes stated. Call this once when your answer depends on whether an absence is real. Returns totals (laws, provisions, versions, decisions, courts, citation edges), the per-source windows, the count of Aktenzeichen we can prove exist and do not hold, and `limits`: the version-archive floor, the federal scope of the citation graph, what a version date actually means, and why source windows differ. Use it to tell `outside_coverage` from `not_in_corpus`. They are different answers and this API never collapses them.
getnorm
getNorm
The text of one provision, by default as clean Markdown — about a tenth the size of the reader page for the same provision, with no navigation, no scripts and no boilerplate. `law` is the abbreviation as a citation writes it ('BGB', 'DSGVO', 'BDSG 2018', 'RVG'); `ref` is the bare number, with any letter suffix and no § or Art. ('622', '823', '3a', '83'). Aliases and case variants resolve. POINT IN TIME: `as_of=YYYY-MM-DD` returns the version stored for that date. Read `version_coverage` on every answer — the version archive begins 2019-06-10, and a date before that answers `outside_coverage` with the law's amendment register attached. That is a limit of our archive and says nothing about whether the provision existed. Every answer carries `first_observed`, `valid_to`, `date_precision` and `amendment_note`. `first_observed` is the day we first saw the text, NOT the legal Inkrafttreten — do not compute a deadline from it without reading `date_precision` (day / week / launch; 'launch' means the date is a floor). TRUST: `fundstelle` is the gazette citation of the authentic text — the citation a court accepts. `authoritative_source` names what our copy is (a consolidated, non-official reading version) and where the binding text lives. Quote the provision from `markdown`; the reader page at `url` carries per-Absatz anchors (#abs-N) if you want to deep-link a single Absatz.
listcasepassages
listCasePassages
The full text of one decision, split into its paragraphs, each with a permalink you can cite. `rn` is the Randnummer the COURT printed, read out of the decision's own markup. It is never inferred from position: where a document prints no numbers, `rn` is null and stays null. `anchor_basis` is derived per decision — only 'native_numbering' means our anchor and the printed number provably coincide, so pin-cite a Randnummer only when you see that value. `amtliche_seite` is null everywhere: our texts carry no page breaks, so a BVerfGE-style page pin cannot be produced honestly. Long decisions run to several hundred paragraphs; page with `offset` and `limit`.
listcitedauthorities
listCitedAuthorities
Outgoing citation edges of one decision: the statute provisions it cites (with how often it cites each — that is the Normenkette, weighted) and the decisions it relies on. `treatment` is null on every edge and stays null. Classifying an edge as gefolgt / abgegrenzt / aufgegeben is unbuilt work, and a wrong 'aufgegeben' in a brief is worse than no label at all. Read the citing passage yourself with `listCasePassages`. A decision we can prove exists but do not hold answers `known_missing`, with the decisions that attest it — not a 404.
listcitingdecisions
listCitingDecisions
Incoming citation edges. Give EITHER `law` + `ref` (which decisions apply this statute provision) OR `case` (which decisions cite this decision) — exactly one of the two. Results are ranked by citation weight, then court tier, then recency. Read the ranking honestly: for a provision with many EU decisions the first ten can be almost all CJEU, and the German courts appear only further down. If `total` exceeds what you read, page on with `offset` (`pagination.next_offset`) before concluding anything about national case law. For a decision, each citer carries `citing_rn`: the Randnummer of the CITING decision's own text that holds the citation, as that court numbered it, and the URL is anchored to it. COVERAGE: the graph is built over federal case law. A Land provision can answer `total: 0` because it is not indexed, not because no court has cited it — `coverage.complete_for_this_norm` tells you which, and for a Land provision you should fall back to `search` on the provision's wording.
listnormversions
listNormVersions
Every stored version of one provision, newest first, so you can find out which dates `getNorm(as_of=…)` can actually answer before you ask. Each entry carries `first_observed` (the day the text was first seen here — NOT the Inkrafttreten), `valid_to`, `date_precision` and the law-level `amendment_note`. `at_archive_floor: true` marks the version that was current when mirroring began: its date is a floor, not an amendment, and earlier amendments exist that are named in the law's Änderungsverlauf (linked as `amendment_history_url`) but whose text is not held. There is no diff tool: fetch two versions with `getNorm(as_of=…)` and diff them yourself — a diff we computed would hide which side of it came from a floor date.
resolveidentifiers
resolveIdentifiers
Ground a batch of German legal citations against the corpus. Call this BEFORE stating any citation you did not read here. Takes the citation in the form you already hold it — including the court name, the dispositive word and the date a model normally writes around a docket. Those are stripped for you and reported back under `normalised_from` / `normalised_to`, never silently. Accepted kinds: norm citations ('§ 823 Abs. 1 BGB', '§§ 305-310 BGB', 'Art. 83 DSGVO'), Aktenzeichen ('2 C 9.22', '8 AZR 26/18'), ECLI ('ECLI:DE:BGH:2019:180619UVIIIZR247.18.0') and Fundstellen ('BVerfGE 65, 1'). Full prose citations work: 'BVerwG, Urteil vom 24.10.2023 - 2 C 9.22'. It never returns a near match. A miss comes back as `not_in_corpus` (we hold nothing and know of nothing), `attested` / `known_missing` (the decision provably EXISTS — decisions we do hold cite it by Aktenzeichen, and they are listed as the evidence — but we do not have its text), `ambiguous` (with candidates) or `unparseable`. `attested` is not a failure: you may state that the decision exists, cite it, and say the text was not available to you. What you must not do is treat it as `not_in_corpus`. A resolved norm carries `fundstelle`: the gazette citation of the authentic text, which is the citation a court accepts. Our own URL is a reading copy, and for Land law the gazette citation is the only source reference there is. Prefer it in anything you publish. `text` on a resolved norm is a 300-character stub unless you pass `include: ["text"]`, and `text_truncated` says which it is. Never verify a quotation against the stub: it is the head of the provision, not the Absatz you cited. When you supply a date that does not match the decision the docket resolves to, the result carries `date_mismatch` with the actual date. That is the hallucinated-citation case this tool exists for: cite the actual date, not the one you held.
search
search
One query over BOTH corpora: federal and Land statutes (lexical, with concept pinning) and court decisions (semantic — natural-language questions work well here and are the better shape for case law). Search both unless you have a reason not to. A term of art often does not appear in the statute that governs it: 'Verzugspauschale' matches no provision (§ 288 BGB says 'Pauschale in Höhe von 40 Euro') while 184 decisions use the word. scope='norms' alone will read as 'nothing here' in exactly those cases. CROSS-LAND COMPARISON: a single query returns the parallel provisions of the Bund and of every covered Land side by side, each row jurisdiction-labelled, plus a `by_jurisdiction` roll-up. Ask 'Videoüberwachung öffentlich zugänglicher Räume' and you get BDSG § 4 next to the Land data-protection and police provisions. Full text is held for Bayern, Brandenburg, Nordrhein-Westfalen and Sachsen. Decision hits come back already anchored at the best-matching Randnummer (…#rd_51), so you can quote a paragraph rather than a document. Query in German; write raw umlauts, they are handled.

Endpoints

URLTransportStateLatencyChecked
https://recht.nulegal.eu/v1/mcp streamable-http answering 398 ms 4 min ago

Alternatives to nu:legal Deutsches Recht

same job, measured the same way
Courtlistener MCP
by mrfentmen

Keyless MCP server for CourtListener: search court opinions and federal dockets (RECAP), case...

251 installs/wk local only
Swiss Courts MCP
by malkreide

Swiss court decisions via entscheidsuche.ch, including federal and cantonal courts

133 installs/wk local only
Base Intel MCP
by datakoot

Read-only on-chain intel for AI agents on Base: balances, tokens, gas, tx status. No API keys.

5 tools answering
CourtListener
by vaquill-ai

MCP for CourtListener: US federal and state opinions, dockets, judges, plus eCFR regulations.

34 tools answering
Ris Austria MCP Server
by cyanheads

Search Austrian federal and state law, court decisions, and the authentic Bundesgesetzblatt (RIS).

285 installs/wk 9 tools answering
Pk Eli MCP
by matematicsolutions

MCP server for Pakistani law: search and cite federal statutes and Supreme Court judgments.

238 installs/wk local only
Stymie Golf
by thatdudefreak

Read-only US golf course, scorecard, equipment, deal, and golf-trip data for AI agents.

12 tools answering
MCP Git
by infoinlet-marketplace

Read-only Git inspection for AI agents — log, show, diff, status, blame, grep. No writes.

32 installs/wk local only

nu:legal Deutsches Recht — questions

Answers built from our own checks of this server.

What can nu:legal Deutsches Recht do?
It exposes 9 tools, read directly from the server on our last check. Among them: getChanges, getCoverage, getNorm, listCasePassages, listCitedAuthorities, listCitingDecisions and 3 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
Is nu:legal Deutsches Recht working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 6 of 6 checks got a reply (100.0%), average response time 244 ms. The bar chart above shows every period we have measured.
How do I connect nu:legal Deutsches Recht?
Copy the ready config from this page — we generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each with the file path that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address.
Does nu:legal Deutsches Recht need an API key?
No. nu:legal Deutsches Recht completed a full MCP handshake with us as an anonymous client and listed its tools without asking for anything. All 9 of them are readable on this page. This is what we observed, not what the docs claim.
How fast is nu:legal Deutsches Recht?
It answers our handshake in 244 ms on average, which is faster than 68% of all working MCP servers we measure. The comparison comes from our own checks across the whole registry, every 15 minutes.