nu:legal Deutsches Recht
Server Details
German federal and Land statutes plus court decisions for agents. Keyless, read-only, CC BY 4.0.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
TDQS
Scored across 9 tools
Each tool has a clearly distinct purpose: corpus feed, coverage metadata, provision text, case text, outgoing citations, incoming citations, version history, identifier grounding, and free-text search. The closest pair, listCitedAuthorities vs listCitingDecisions, is explicitly distinguished by direction, so no tool is substitutable for another.
Names broadly follow an action_object pattern and the get/list prefix usefully suggests single-item vs collection retrieval. Minor inconsistency exists because getChanges returns a list rather than a single item and search/resolveIdentifiers use bare verbs rather than a prefix, but the overall style remains predictable and readable.
Nine tools is well-scoped for a legal research server covering statutes, case law, citations, versions, and coverage. Each tool earns its place by supporting a distinct phase of the research workflow, with no redundancy or obvious bloat.
The surface covers the full workflow: coverage awareness, search, provision text with point-in-time versions, amendment feeds, decision texts, both directions of the citation graph, and citation grounding. Deliberately unimplemented features like diffing are explicitly documented as compositional tasks rather than dead ends.
Available Tools
9 toolsgetChangesRecently changed provisionsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| since | No | Only changes observed on or after this date. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and idempotent, so the description's job is to add behavioral nuance. It does: `observed` means first-seen date, not in-force date; the result is JSON; ordering is newest first; and the window is capped at 120 days. This goes well beyond the annotations and helps the agent use the feed correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each carrying distinct information: the core function, the polling pattern, and the essential semantic caveat about `observed`. The most decision-relevant content is front-loaded in the first sentence, and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only feed, the description covers the polling model, ordering, date semantics, and window. It does not specify the response object shape, and there is no output schema, so an agent must infer the exact JSON fields beyond `observed`. Still, the description provides enough to call and interpret the tool in most cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%: `since` is described but `limit` is not. The description compensates for `since` by defining the critical `observed` semantics, which is more precise than the schema's 'on or after this date'. `limit` remains undeveloped, but its name plus schema constraints make it self-explanatory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise statement of what the tool does: it returns provisions whose text changed recently, ordered newest first, and identifies itself as a 'freshness feed'. This is a specific verb and resource, and the 'freshness feed' framing separates it from siblings like listNormVersions or search without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete polling strategy: set `since` to the newest `observed` value already processed. It also clarifies the 120-day window and notes that the law's own Änderungsverlauf reaches further back, implying an alternative for older changes. It does not explicitly name a sibling tool or state a 'when not to use' condition, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getCoverageWhat the corpus holds, and what it does notARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds meaningful context: it explains that the tool reveals holes in the corpus, provides limits that clarify the meaning of version dates and source windows, and explicitly states that it never collapses two different answers. This is valuable behavioral context beyond the annotations and does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, using three sentences to convey purpose, returns, and usage. It front-loads the core purpose ('Corpus scope with its holes stated') and then elaborates. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description takes on the responsibility of explaining what the tool returns. It lists categories (totals, per-source windows, count of Aktenzeichen, limits) and explains what limits include. This is sufficient for an agent to understand the tool's output, though it could be more specific about the exact structure. For a zero-parameter tool, this is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description does not need to explain parameters, and it doesn't. It doesn't add parameter-specific semantics because there are none.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific purpose: reporting corpus scope with its holes. It names the resource (corpus), the verb (get coverage), and distinguishes the tool by explaining it returns totals, windows, and limits, and that it differentiates 'outside_coverage' from 'not_in_corpus'. This clearly differentiates it from siblings like getNorm or search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit trigger: 'Call this once when your answer depends on whether an absence is real.' It also explains the key usage of distinguishing two distinct concepts, which is a clear instruction for when to use this tool over others. It doesn't need to list alternatives since it's a specialized coverage tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getNormStatute text, as MarkdownARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| law | Yes | Law abbreviation, or a `law_key` (`slug` in search results) when an abbreviation is ambiguous. | |
| ref | Yes | Provision number without § or Art. A sub-unit ('Abs. 1', 'lit. f') is dropped: the whole provision is returned. | |
| as_of | No | Return the version stored for this date. | |
| format | No | 'markdown' (default, compact, quotable) or 'json' for the structured payload. | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses response fields (first_observed, valid_to, date_precision, amendment_note), warns that first_observed is not the legal Inkrafttreten, and explains outside_coverage behavior for pre-archive dates. It also clarifies the trust semantics of fundstelle and authoritative_source.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured into core purpose, parameter rules, point-in-time caveats, and trust metadata; every sentence carries actionable information. The front-loaded purpose statement is followed by logical sections, and no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description covers the key return fields, the outside_coverage error case, and how to quote or deep-link. It gives an agent enough to call the tool and interpret results correctly, including caveats about date precision and authoritative sources.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 100% schema coverage, the description adds material meaning: ref must be the bare number with no §/Art and may carry letter suffixes, sub-units are dropped, aliases/case variants resolve, and as_of triggers version lookup with archive limits. This goes well beyond the schema examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line names the exact deliverable: 'the text of one provision, by default as clean Markdown.' This is a specific verb+resource, and the 'one provision' scope distinguishes it from siblings like listNormVersions, getChanges, and search, which serve different retrieval tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational context: how to format law and ref, when to use as_of, and the coverage caveat for dates before 2019-06-10. It does not explicitly name sibling tools as alternatives or say when not to use this tool, so it stops short of full selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listCasePassagesA decision as numbered passagesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| case | Yes | A juris doknr, an ECLI, or this site's decision URL as `search` returns it. | |
| limit | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, and the description builds on this with crucial behavioral details: rn is null when the court printed no numbers, anchor_basis must equal 'native_numbering' for a reliable pin-cite, and amtliche_seite is always null because page breaks are absent. This goes well beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded in the first sentence, and every subsequent paragraph earns its place with necessary caveats about citation integrity, page numbers, and pagination. There is no redundant or filler language.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Since there is no output schema, the description responsibly explains the key return fields and their reliability implications, which is essential for correct citation usage. It doesn't enumerate every possible paragraph field or error behavior, but it is sufficient for an agent to invoke the tool correctly and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The case parameter is well described in the schema, and the description adds pagination purpose for offset/limit. However, with only 33% schema coverage, the description mostly explains output fields (rn, anchor_basis, amtliche_seite) rather than adding deeper meaning to the input parameters, leaving limit/offset semantics mostly inferred from names and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it returns the full text of one decision split into citeable paragraphs. This clearly differentiates it from sibling tools like listCitedAuthorities and listCitingDecisions, which handle citation relationships rather than paragraph-level full text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the use case clear: retrieve paragraph-level text for a single decision, with pagination advice for long decisions. It doesn't explicitly name alternatives or state when not to use the tool, but the return content is specific enough that an agent can identify when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listCitedAuthoritiesWhat a decision citesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| case | Yes | A juris doknr, an ECLI, or this site's decision URL as `search` returns it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal read-only and idempotent behavior. The description adds valuable, non-obvious details: treatment is always null, classification is intentionally unbuilt work, and known-missing cases return known_missing with attestations rather than a 404. This is exactly the kind of behavioral context annotations cannot provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the primary purpose in the first clause)Skip and every subsequent sentence addresses a meaningful caveat or edge case an agent needs to know. There is no padding or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description provides enough about the return shape: statute provisions with how often each is cited, relied-upon decisions, always-null treatment, and the known_missing representation. For a tool with one parameter and clear semantics, this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for the single parameter, documenting that case accepts a juris doknr, ECLI, or decision URL as returned by search. The description does not add additional parameter-level nuance, so the schema carries the load and the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact resource ('one decision'), the direction of the edges ('outgoing'), and the two kinds of results (statute provisions with citation counts, and relied-upon decisions). It also points to listCasePassages as the sibling to use for reading actual passage text, which helps an agent distinguish this tool from that one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use this tool: to inspect what one decision cites)Skip or relies on with weighting. It also explicitly tells the agent to use listCasePassages when it needs to read the citing passage itself, which is an alternative. It does not spell out exclusions such as 'do not use this for incoming citations,' though the word 'outgoing' implies the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listCitingDecisionsDecisions citing a provision or a decisionARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| law | No | ||
| ref | No | ||
| case | No | A juris doknr, an ECLI, or this site's decision URL as `search` returns it. | |
| limit | No | ||
| offset | No | Rows to skip, for reading past the first page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (read-only, idempotent, non-destructive), the description discloses the ranking order, the risk of over-reading early CJEU-heavy results, pagination via offset and pagination.next_offset, the citing_rn semantics, and the coverage limitation where total: 0 can mean 'not indexed' rather than 'no citations'. This is substantial behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but every paragraph earns its place: core instruction, ranking caveat, result semantics, and coverage warning. It is front-loaded with the essential either/or usage first. A slight trim of the 'Read the ranking honestly' phrasing would make it tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description provides the needed return-value hints (total, pagination.next_offset, coverage.complete_for_this_norm, citing_rn) and the coverage limitations that are critical for interpreting results. Nothing an agent needs to call this correctly and interpret its output is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 40% schema coverage, the description compensates by clarifying the mutual-exclusivity of law+ref versus case, how offset interacts with pagination.next_offset, and what results represent. It does not add much on the limit parameter, but the schema already supplies default and bounds, and limit is self-explanatory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening phrase 'Incoming citation edges' plus the explicit 'EITHER law + ref OR case' formulation states exactly what the tool lists and what inputs select each mode. It clearly distinguishes the tool from the likely outgoing-citation sibling (listCitedAuthorities) by framing this as the incoming direction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use law+ref versus case, and gives an explicit fallback to 'search' for Land provisions when coverage is incomplete. It does not explicitly name or exclude sibling tools like listCitedAuthorities, but the directional language and coverage guidance are strong enough for correct routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listNormVersionsObserved versions of a provisionARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| law | Yes | ||
| ref | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnly, idempotent, non-destructive, and openWorld=false. The description goes well beyond that by explaining the meaning of each field (first_observed, valid_to, date_precision, amendment_note), the at_archive_floor flag, and the caveat that earlier amendments exist but are not held. It also discloses the lack of a diff tool, which is a behavioral limitation an agent must know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: purpose, ordering, field explanations, floor caveat, and the no-diff guidance. It is front-loaded with the primary use case and stays focused without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with two parameters and no output schema, the description fully covers what the agent needs: what is returned, how to interpret ambiguous dates, the floor concept, and how to perform diffs. No critical behavioral or usage details are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain what 'law' and 'ref' mean. It only implies that they identify a provision ('Every stored version of one provision') without explicit details. The schema examples (BGB, 288) help, but the description adds no semantic meaning beyond that. Given the zero coverage, this is a notable gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (list) and resource (stored versions of one provision), and immediately ties it to a specific purpose: discovering which dates getNorm(as_of=…) can answer. This distinguishes it from sibling tools like getNorm and getChanges without needing to inspect schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this tool (before calling getNorm with an as_of date) and provides a concrete workflow: fetch two versions with getNorm and diff them because no diff tool exists. It also explains the floor-date concept, which is essential for interpreting results correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolveIdentifiersResolve German legal citationsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | Opt-in extra payload. 'text' returns a norm's FULL text instead of the 300-character stub — the stub is the same 300 characters whichever Absatz you cited, so never verify a quotation against it. 'leitsatz' returns a decision's whole Leitsatz instead of its preview. An unknown value is refused, not ignored. | |
| citations | Yes | The citations, verbatim as you hold them. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses far more than the annotations: it never returns a near match, distinguishes statuses like `attested` from `not_in_corpus`, reports `date_mismatch`, returns stubs unless `include: ['text']` is passed, and distinguishes gazette citations from the tool's own URLs. This gives the agent a detailed behavioral model beyond readOnly/idempotent hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but nearly every sentence carries distinct operational guidance: accepted formats, result statuses, stub behavior, and date mismatch. It is front-loaded with the key instruction ('Call this BEFORE...'). A small amount of repetition around the text stub could be tightened, but the density is justified for a complex tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the full burden of explaining return semantics. It covers all major result statuses, evidence fields like `normalised_from`/`normalised_to`, `fundstelle`, `text_truncated`, `date_mismatch`, and even warns against verifying quotations against stubs. Nothing essential for correct invocation appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real value: it clarifies citations are taken 'verbatim' and 'in the form you already hold it,' and it explains the `include` behavior in depth, including that `'text'` returns full text rather than a 300-character stub. That goes beyond the schema's own parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Ground a batch of German legal citations against the corpus.' It further narrows scope by listing accepted citation kinds and explicitly declaring 'Call this BEFORE stating any citation you did not read here,' which sets it apart from sibling search/retrieval tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger ('Call this BEFORE stating any citation you did not read here') and explains how to handle each outcome, e.g., 'attested is not a failure... you may state that the decision exists.' It does not name sibling tools or explicitly say when not to use it, but the usage context is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearch statutes and case lawARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | German query. Keywords, a citation, or a full question. | |
| limit | No | ||
| scope | No | 'all' (default) searches both. Narrow only when you know which corpus answers. | all |
| include_repealed | No | Include repealed (aufgehobene) provisions. Off by default; turn it on when researching an older state of the law. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds genuine behavioral context beyond that: results anchored at best-matching Randnummer (#...rd_51), the cross-land by_jurisdiction roll-up, and which Länder hold full text. No rate-limit or auth notes, but for a read-only search tool this is a strong value-add.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long and multi-paragraph with inline examples, but the density is justified by the tool's complexity (hybrid search, dual corpora, cross-jurisdiction behavior). The most important constraint — query both corpora — is front-loaded, and the 'CROSS-LAND COMPARISON' heading aids scannability. It earns its length, though it could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining return structure, and it does: jurisdiction-labelled rows, the by_jurisdiction roll-up, and Randnummer anchoring for quoting paragraphs. The only gap is pagination behavior for the limit parameter — no indication of whether results are paged or how to page through. Minor given the overall completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema coverage at 75%, the description substantially enriches the q parameter by explaining the German-language requirement ('write raw umlauts, they are handled'), the lexical-vs-semantic split, and the scope semantics in depth. It clarifies the misleading nature of scope='norms' far beyond the schema's 'Narrow only when you know which corpus answers.' This materially compensates for any schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Search') over two distinct resources (federal/Land statutes and court decisions) and precisely characterizes the dual search semantics (lexical with concept pinning for norms, semantic for cases). It clearly distinguishes itself from siblings like getNorm (single-norm retrieval) and listCasePassages (case passages), so an agent knows exactly which tool does broad cross-corpus discovery.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs 'Search both unless you have a reason not to' and gives the concrete failure mode for narrowing too early (the 'Verzugspauschale' example showing why scope='norms' returns nothing when a term of art never appears in the governing statute). It also tells the agent when to flip include_repealed (researching an older state of the law) and recommends natural-language shape for case law.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
- First observed
getChanges - First observed
getCoverage - First observed
getNorm - First observed
listCasePassages - First observed
listCitedAuthorities - First observed
listCitingDecisions - First observed
listNormVersions - First observed
resolveIdentifiers - First observed
search
Related MCP Connectors
German law via Ansvar Gateway. Cited, OAuth + paid tier.
Verified, citable German & EU law for any LLM. Daily updates from official sources, hosted in DE.
Verified, citable German & EU law for any LLM. Daily updates from official sources, hosted in DE.
German Handelsregister + Austrian Firmenbuch for AI agents: master data, financials & ratios.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceCite-grade German legal-text infrastructure for LLM agents, providing access to federal, Länder, and EU laws with cryptographic provenance.2Apache 2.0
- AlicenseNot gradedqualityBmaintenanceProvides read-only access to current German federal law, supporting legislation search, provision retrieval, and citation handling.Apache 2.0
- AlicenseNot gradedqualityFmaintenanceEnables querying over 6,800 German federal statutes, case law, and legislative preparatory works with verbatim source text. Integrates EU law cross-references and provides citation validation and legal stance building.65 npm22Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables querying 6,870 German federal statutes, case law, and legislative preparatory works directly from AI assistants and MCP-compatible clients.65 npm4Apache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.