Skip to main content
Glama

Resolve legal citations

resolveIdentifiers
Read-onlyIdempotent

Grounds and disambiguates German legal citations against the corpus, normalizing them and flagging matches, ambiguities, or missing texts so you cite only verified sources.

Instructions

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. KEEP THEM IN: the court and the date are used to disambiguate. An Aktenzeichen is unique per court, not nationwide, and 21,021 dockets in this corpus are held by more than one decision, so 'OLG Bamberg, 4 U 120/24' resolves to Bamberg's decision where the bare '4 U 120/24' is ambiguous or lands on another court's. Where the string has to be rewritten to be read, the rewrite is reported back under normalised_from / normalised_to, never silently, and disambiguated_by says when it was YOUR court or date that picked the decision out. Where the court you named writes a suffix your citation dropped ('4 U 120/24 e'), the answer carries docket_completed with the full Aktenzeichen — cite that one.

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 or a court that does not match the decision the docket resolves to, the result carries date_mismatch / court_mismatch with the actual value. That is the hallucinated-citation case this tool exists for: cite what is actually there, not what you held — and a court_mismatch usually means this is not the decision you meant at all.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
includeNoOpt-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.
citationsYesThe citations, verbatim as you hold them.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv1.0.1

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, but the description adds substantial behavioral disclosure: normalization reporting (normalised_from/normalised_to), disambiguation via court/date, miss categories, date_mismatch/court_mismatch, docket_completed, fundstelle, and the 300-character stub danger. This far exceeds what annotations alone provide and contradicts nothing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but front-loaded with the most important rule, then organized into clear sections for citation kinds, outcome categories, fundstelle, text behavior, and mismatch flags. Most sentences carry distinct, decision-relevant information, though some length could be trimmed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 full burden of explaining return behavior, and it does so thoroughly: miss enumerations, disambiguation evidence, docket completion, gazette fundstelle, text truncation, and mismatch warnings are all covered. Minor omissions like batch-level atomicity do not undermine an agent's ability to call and interpret the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

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 critical parameter semantics: the court and date must be kept because Aktenzeichen are not unique nationwide, include values are opt-in with unknown values refused rather than ignored, and 'text' returns full text instead of the stub. It also gives concrete accepted citation formats, enriching both parameters well beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Ground a batch of German legal citations against the corpus,' naming a specific verb and resource, and it is clearly distinct from a bare search or retrieval tool. It enumerates accepted citation kinds, but it never explicitly names or contrasts sibling tools such as search or getNorm, so it stops short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit decision rule: 'Call this BEFORE stating any citation you did not read here.' It also explains how to interpret different miss outcomes (attested vs not_in_corpus) and what the agent may or must not do with them. However, it does not name alternative tools or state when to prefer a sibling, so exclusions are implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.