nu:legal Deutsches Recht
German federal and Land statutes plus court decisions for agents. Keyless, read-only.
| Endpoint | https://recht.nulegal.eu/v1/mcp (streamable-http) |
|---|---|
| Registry version | 1.0.4 |
| Now | 11 tools · grade A (91) · pin ts_698a63364c556ac86834f943db3425e6 · protocol 2025-06-18 |
| First / last listed | 2026-11-08 00:53 UTC / 2026-11-08 00:53 UTC |
| Grade over time | 2026-11-08: A (91), 11 tools |
Is this your server? Own a server? ToolFit hosted watch re-checks it every 24 h ($0.25 per 30 days) or 6 h ($0.60) and sends you an HMAC-signed webhook when its tools or grade change: POST https://api.youraitools.co/toolfit/v1/watch. To opt out, see About & opt-out.
Tools: resolveIdentifiers search getNorm listNormVersions listCitingDecisions listCitedAuthorities listCasePassages getChanges getCoverage search_lawyers get_lawyer
resolveIdentifiers | Look up German legal citations, up to 100 at once: a § or Article, an Aktenzeichen, an ECLI or a Fundstelle. Use it to find a decision by its docket and to check a citation before you state it. Pass each citation as you hold it, with court and date: they pick the right decision where a docket repeats. It never guesses. A miss is `not_in_corpus`; `attested` / `known_missing` means the decision exis params: citations*, include |
search | Find statutes and decisions on a topic or a question, in one call. Use it when you hold no citation yet. German keywords or a full question both work; decisions are matched by meaning. A decision hit carries `url` (pass it as `case` to the decision tools), `ecli` and `cited_by`; a statute hit carries `slug` and `ref_norm` (pass them as `law` and `ref` to getNorm). Full text is held for Bayern, Bra params: q*, scope, limit, include_repealed, court, court_level, state, panel, from, to, decision_type, sort |
getNorm | The text of one provision (§ or Article) as Markdown. `law` is the abbreviation ('BGB', 'StGB', 'DSGVO'; Hessen: 'HBO'), `ref` the number ('573', '3a'). For the text on a past date add `as_of` (YYYY-MM-DD; versions are held from 2019-06-10; for EU acts, the EMRK and some Landesrecht from the day their held text applies). The answer says how many versions are held (`versions_held`) and how many dec params: law*, ref*, as_of, format, compare_to |
listNormVersions | Every stored version of one provision with its dates, newest first. Use it to see when a provision changed, then read a version with getNorm `as_of`. `at_archive_floor` marks a text that was already in force when the archive began. To compare two versions, call `getNorm(compare_to=…)`: the answer's `diff` is the word diff, and each side says what its date is (`date_basis`: `in_force`, `eurlex_cons params: law*, ref* |
listCitingDecisions | Who cites this: the decisions citing a provision (`law` + `ref`) or a decision (`case`). Ranked by weight; `sort: "recent"` gives the newest first. Each citer links to the Randnummer where it cites. The graph is built over every decision held, federal, Land and EU courts alike, and links federal, EU and Land provisions; it does not link Hessen provisions, which answer `total: 0` with `coverage.com params: law, ref, case, limit, offset, sort |
listCitedAuthorities | What one decision cites: the provisions (with how often) and the decisions it relies on. Example: {"case": "bgh/2017-03-29/viii-zr-45-16"} params: case*, lang, offset |
listCasePassages | Read a decision: its paragraphs, each with the court's Randnummer (`rn`) and a link. `case` takes an ECLI, our decision URL or an Aktenzeichen. Jump to a Randnummer with `around`, page with `offset` and `limit`. The first page also says how often the decision is cited and by whom. The answer carries `card`: typed `headnotes` (Leitsatz apart from Orientierungssatz), the `tenor` where the source mar params: case*, offset, limit, around, lang, include |
getChanges | What changed here, as JSON. Two ways to read it.
The cursor feed (send `kinds`, or `cursor`): everything that changed, oldest first, readable to the end without gaps: decisions added or changed, provisions with a new text (new Fassung, new provision, new law), and new citation links (decision X now cites Y, or decision Y gained a citer). Start with `kinds` (and `since`, default 7 days ago), then params: since, limit, cursor, kinds, court, land, law |
getCoverage | What the corpus holds and what it does not: laws, decisions, courts, the version archive and the Länder covered. Call it before you report that something does not exist. The answer's `coverage` block is /v1/coverage: statutes per Land (`statutes`: full_text, partial or none), decisions per court level, the citation graph and what every version date is, all from one daily table. Example: {} params: include, court |
search_lawyers | Find lawyers in Germany in the official register of the Bundesrechtsanwaltskammer. Give `city` (a German city or place; English names such as Munich or Cologne work; a 5-digit postcode is searched 10 km around, a smaller place 25 km), `name` (a lawyer or a firm), or both. Narrow with `area`, one of the 24 Fachanwalt areas in German or English ('Arbeitsrecht' or 'employment law', 'Strafrecht' or 'c params: city, area, language, name, limit, offset |
get_lawyer | One lawyer's profile by `id` from search_lawyers: the official register entry with the date it was checked (chamber, admission, firm, office address, phone, fax, e-mail, website, beA id), Fachanwalt titles, contact data, languages, focus areas, opening hours and ratings per platform with the combined score. It holds what the public profile page (`profile_url`) shows, no more. Example: {"id": "8a0f params: id* |
Entries describe changes in tool definitions. They are not statements about a server, its quality or its author. The grade measures how the tool definitions fit model providers (token cost, schema compatibility, confusable names) as scored by the ToolFit engine at the time of the listing. JSON: append .json. Opt-out: how or hello@youraitools.co.