Skip to main content
Glama

Look Up Provision by Citation

legal_lookup
Read-onlyIdempotent

Retrieve a specific legal provision by citation (e.g. '§ 823 BGB', 'Art. 6 DSGVO', '§ 280 Abs. 1 BGB'), or a court decision by Aktenzeichen or ECLI (e.g. 'VII ZR 184/14', 'BGH VII ZR 184/14', 'C-184/14', 'ECLI:DE:BGH:2017:050117BVIIZR184.14.0'). Citation order is flexible — '§ 9 DSGVO', 'DSGVO Art. 9', 'Artikel 9 DSGVO' all resolve correctly. is_exact_match reports whether the citation was matched exactly; non-exact results can be a semantic fallback, the first section of an annex, or an uncertain decision match. The result hint explains which case applies; found=true alone does not prove citation identity. Provision text is reassembled where available; content_truncated and the result hint identify incomplete text and its continuation. An ambiguous provision returns found=false with stored candidates and citation_forms: complete citations that select each printing, including a source occurrence where required. Select an EUR-Lex article reprint with its quoted complete key, e.g. '"Art. 45 (2)" reg_2013_153'. An unquoted paragraph qualifier does not select a printing. Quote a complete stored document-part key when its title contains article references; the quoted key takes precedence over coordinates within that title. A decision lookup returns its lead section (Leitsatz); further sections are reachable via legal_get_toc or legal_get_context on the returned norm_id. Where an abbreviation names laws of several legal orders and neither the scope nor the cited provision decides, the result is found=false with reason='ambiguous_jurisdiction' and one candidate per law, each with the legal_lookup arguments that resolve exactly it; also_exists_in on a hit lists the other laws the abbreviation names.

Input Schema

NameRequiredDescriptionDefault
citationYesFull citation string, e.g. '§ 823 BGB' or 'VII ZR 184/14'
languageNoDocument language: 'de' (documents in German, of every legal order in the scope) or 'en' (currently EDPB/EDSA data-protection guidance only). Omitted, the account's document language applies ('de' unless the account sets another). DE and EN are separate corpora — a document published in both languages has one entry per language under the same abbreviation. 'en' selects the English corpus regardless of the answer language; 'edsa' is published mostly in English.
source_typeNoSource the cited law or decision must come from: 'gii', 'eurlex', 'eurlex_caselaw', 'rechtsprechung', 'bverfge', 'bverwg', 'bgh', 'bpatg', 'sachsen_rechtsprechung', 'nrw_rechtsprechung', 'bayern_gesetze', 'nrw_gesetze', 'verwaltungsvorschriften', 'edsa', 'dsk' or 'gesetzesmaterialien'. An abbreviation names one law per source, so the source selects exactly one law — also between federal and state law, which 'de' covers together. Omitted, every source answers. Note: 'edsa' is published mostly in English: language='en' covers the full set, the German corpus only the translated documents.
jurisdictionNoLegal orders the cited law or decision must belong to, one or more: 'de' (all German law — federal AND state), 'eu', 'de_by', 'de_nw', 'de_sn'. A value matches its own family only: 'de' adds no EU law. Omitted, every legal order answers, and where an abbreviation names laws of several (e.g. 'EUV': a German Verordnung and the EU Treaty), the account's legal order decides; jurisdiction_scope names it. Set, nothing outside it answers: a not_found then lists in also_exists_in where the cited law exists.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / source_type / anyOf
      Previous value: -[
      -  {
      -    "enum": [
      -      "bayern_gesetze",
      -      "bverfge",
      -      "bverwg",
      -      "dsk",
      -      "edsa",
      -      "eurlex",
      -      "eurlex_caselaw",
      -      "gesetzesmaterialien",
      -      "gii",
      -      "nrw_gesetze",
      -      "nrw_rechtsprechung",
      -      "rechtsprechung",
      -      "sachsen_rechtsprechung",
      -      "verwaltungsvorschriften"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "bayern_gesetze",
      +      "bgh",
      +      "bpatg",
      +      "bverfge",
      +      "bverwg",
      +      "dsk",
      +      "edsa",
      +      "eurlex",
      +      "eurlex_caselaw",
      +      "gesetzesmaterialien",
      +      "gii",
      +      "nrw_gesetze",
      +      "nrw_rechtsprechung",
      +      "rechtsprechung",
      +      "sachsen_rechtsprechung",
      +      "verwaltungsvorschriften"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / source_type / description
      Previous value: -"Source the cited law or decision must come from: 'gii', 'eurlex', 'eurlex_caselaw', 'rechtsprechung', 'bverfge', 'bverwg', 'sachsen_rechtsprechung', 'nrw_rechtsprechung', 'bayern_gesetze', 'nrw_gesetze', 'verwaltungsvorschriften', 'edsa', 'dsk' or 'gesetzesmaterialien'. An abbreviation names one law per source, so the source selects exactly one law — also between federal and state law, which 'de' covers together. Omitted, every source answers. Note: 'edsa' is published mostly in English: language='en' covers the full set, the German corpus only the translated documents."New value: +"Source the cited law or decision must come from: 'gii', 'eurlex', 'eurlex_caselaw', 'rechtsprechung', 'bverfge', 'bverwg', 'bgh', 'bpatg', 'sachsen_rechtsprechung', 'nrw_rechtsprechung', 'bayern_gesetze', 'nrw_gesetze', 'verwaltungsvorschriften', 'edsa', 'dsk' or 'gesetzesmaterialien'. An abbreviation names one law per source, so the source selects exactly one law — also between federal and state law, which 'de' covers together. Omitted, every source answers. Note: 'edsa' is published mostly in English: language='en' covers the full set, the German corpus only the translated documents."
  2. Changed4 schema fields changed
    • addedInput schema / properties / jurisdiction
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "description": "Jurisdiction of the legal document.",
      +        "enum": [
      +          "de",
      +          "eu",
      +          "de_by",
      +          "de_sn",
      +          "de_nw"
      +        ],
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Legal orders the cited law or decision must belong to, one or more: 'de' (all German law — federal AND state), 'eu', 'de_by', 'de_nw', 'de_sn'. A value matches its own family only: 'de' adds no EU law. Omitted, every legal order answers, and where an abbreviation names laws of several (e.g. 'EUV': a German Verordnung and the EU Treaty), the account's legal order decides; jurisdiction_scope names it. Set, nothing outside it answers: a not_found then lists in also_exists_in where the cited law exists."
      +}
    • addedInput schema / properties / source_type
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "bayern_gesetze",
      +        "bverfge",
      +        "bverwg",
      +        "dsk",
      +        "edsa",
      +        "eurlex",
      +        "eurlex_caselaw",
      +        "gesetzesmaterialien",
      +        "gii",
      +        "nrw_gesetze",
      +        "nrw_rechtsprechung",
      +        "rechtsprechung",
      +        "sachsen_rechtsprechung",
      +        "verwaltungsvorschriften"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Source the cited law or decision must come from: 'gii', 'eurlex', 'eurlex_caselaw', 'rechtsprechung', 'bverfge', 'bverwg', 'sachsen_rechtsprechung', 'nrw_rechtsprechung', 'bayern_gesetze', 'nrw_gesetze', 'verwaltungsvorschriften', 'edsa', 'dsk' or 'gesetzesmaterialien'. An abbreviation names one law per source, so the source selects exactly one law — also between federal and state law, which 'de' covers together. Omitted, every source answers. Note: 'edsa' is published mostly in English: language='en' covers the full set, the German corpus only the translated documents."
      +}
    • removedOutput schema / additionalProperties
      Removed value: -true
    • addedOutput schema / anyOf
      Added value: +[
      +  {
      +    "additionalProperties": true,
      +    "allOf": [
      +      {
      +        "if": {
      +          "properties": {
      +            "reason": {
      +              "enum": [
      +                "ambiguous_abbreviation",
      +                "ambiguous_jurisdiction"
      +              ]
      +            }
      +          },
      +          "required": [
      +            "reason"
      +          ]
      +        },
      +        "then": {
      +          "properties": {
      +            "candidates": {
      +              "items": {
      +                "properties": {
      +                  "arguments": {
      +                    "properties": {
      +                      "citation": {
      +                        "type": "string"
      +                      },
      +                      "language": {
      +                        "type": "string"
      +                      },
      +                      "source_type": {
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "citation",
      +                      "source_type",
      +                      "language"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  "jurisdiction": {
      +                    "type": "string"
      +                  },
      +                  "law_abbreviation": {
      +                    "type": "string"
      +                  },
      +                  "source_type": {
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "law_abbreviation",
      +                  "source_type",
      +                  "jurisdiction",
      +                  "arguments"
      +                ],
      +                "type": "object"
      +              },
      +              "type": "array"
      +            }
      +          },
      +          "required": [
      +            "candidates",
      +            "candidate_count",
      +            "hint"
      +          ]
      +        }
      +      }
      +    ],
      +    "properties": {
      +      "also_exists_in": {
      +        "items": {
      +          "properties": {
      +            "jurisdiction": {
      +              "type": "string"
      +            },
      +            "law_abbreviation": {
      +              "type": "string"
      +            },
      +            "source_type": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "law_abbreviation",
      +            "source_type",
      +            "jurisdiction"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "candidate_count": {
      +        "type": "integer"
      +      },
      +      "citation": {
      +        "type": "string"
      +      },
      +      "found": {
      +        "type": "boolean"
      +      },
      +      "hint": {
      +        "type": "string"
      +      },
      +      "jurisdiction_scope": {
      +        "properties": {
      +          "jurisdictions": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "language": {
      +            "type": "string"
      +          },
      +          "source": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "jurisdictions",
      +          "language",
      +          "source"
      +        ],
      +        "type": "object"
      +      },
      +      "reason": {
      +        "enum": [
      +          "unparseable_citation",
      +          "not_found",
      +          "ambiguous_abbreviation",
      +          "ambiguous_jurisdiction",
      +          "ambiguous_provision"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "found",
      +      "jurisdiction_scope"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "required": [
      +      "notice"
      +    ],
      +    "type": "object"
      +  }
      +]
  3. Changed1 schema field changed
    • changedInput schema / properties / language / description
      Previous value: -"Document language: 'de' (German-language documents from German and EU sources) or 'en' (currently EDPB/EDSA data-protection guidance only). Omitted, the account's document language applies ('de' unless the account sets another). DE and EN are separate corpora — a document published in both languages has one entry per language under the same abbreviation. 'en' selects the English corpus regardless of the answer language; 'edsa' is published mostly in English."New value: +"Document language: 'de' (documents in German, of every legal order in the scope) or 'en' (currently EDPB/EDSA data-protection guidance only). Omitted, the account's document language applies ('de' unless the account sets another). DE and EN are separate corpora — a document published in both languages has one entry per language under the same abbreviation. 'en' selects the English corpus regardless of the answer language; 'edsa' is published mostly in English."
  4. Changed1 schema field changed
    • changedInput schema / properties / language / description
      Previous value: -"Document language: 'de' (default, German-language documents from German and EU sources) or 'en' (currently EDPB/EDSA data-protection guidance only). DE and EN are separate corpora — a document published in both languages has one entry per language under the same abbreviation. 'en' selects the English corpus regardless of the answer language; 'edsa' is published mostly in English."New value: +"Document language: 'de' (German-language documents from German and EU sources) or 'en' (currently EDPB/EDSA data-protection guidance only). Omitted, the account's document language applies ('de' unless the account sets another). DE and EN are separate corpora — a document published in both languages has one entry per language under the same abbreviation. 'en' selects the English corpus regardless of the answer language; 'edsa' is published mostly in English."
  5. Changed2 schema fields changed
    • changedInput schema / properties / language / anyOf
      Previous value: -[
      -  {
      -    "description": "Content language of legal documents.\n\nUses StrEnum so values compare equal to plain strings for\nseamless PostgreSQL/Qdrant compatibility.",
      -    "enum": [
      -      "de",
      -      "en"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "description": "Document language, independent of the language of the answer.",
      +    "enum": [
      +      "de",
      +      "en"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / language / description
      Previous value: -"Corpus language: 'de' (default — the full German + EU corpus) or 'en' (English-language corpus: currently EDPB/EDSA data-protection guidance only; much smaller than 'de'). DE and EN are separate corpora — a document published in both languages has one entry per language under the same abbreviation. 'en' selects the English corpus regardless of the answer language; 'edsa' is published mostly in English."New value: +"Document language: 'de' (default, German-language documents from German and EU sources) or 'en' (currently EDPB/EDSA data-protection guidance only). DE and EN are separate corpora — a document published in both languages has one entry per language under the same abbreviation. 'en' selects the English corpus regardless of the answer language; 'edsa' is published mostly in English."
  6. Changed1 schema field changed
    • changedInput schema / properties / language / description
      Previous value: -"Corpus language: 'de' (default — the full German + EU corpus) or 'en' (English-language corpus: currently EDPB/EDSA data-protection guidance only; much smaller than 'de'). DE and EN are separate corpora — a document published in both languages has one entry per language under the same abbreviation. Set 'en' only when the user explicitly works in English or asks for the English version."New value: +"Corpus language: 'de' (default — the full German + EU corpus) or 'en' (English-language corpus: currently EDPB/EDSA data-protection guidance only; much smaller than 'de'). DE and EN are separate corpora — a document published in both languages has one entry per language under the same abbreviation. 'en' selects the English corpus regardless of the answer language; 'edsa' is published mostly in English."
  7. First observed

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations: it explains is_exact_match semantics, warns that found=true alone does not prove identity, describes truncated text (content_truncated), ambiguous results (found=false with candidates), and the ambiguous_jurisdiction reason with per-candidate resolving arguments. This is exactly the behavioral disclosure an agent needs.

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

Conciseness3/5

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

The opening citation examples are well front-loaded, but the remainder is a dense run-on block with no paragraphing, mixing edge cases (EUR-Lex reprints, Annex sections, jurisdiction ambiguity) into one wall of text. Some content duplicates the schema's language/source_type descriptions, so not every sentence earns its place.

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 an output schema present and annotations covering the safety profile, the description supplies everything else an agent needs: input formats, resolution behavior, ambiguity handling, and follow-up tool routing. Nothing required to call it correctly is missing.

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

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents citation, language, source_type and jurisdiction. The description adds real operational meaning for the citation parameter (quoting rules, precedence of stored keys, unquoted qualifiers not selecting a printing), but largely restates the language/source_type corpora distinctions already in the schema.

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

Purpose5/5

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

States a precise verb and resource: retrieve a specific legal provision by citation, or a court decision by Aktenzeichen/ECLI, with concrete examples for each. The scope (single provision/decision lookup) and the sibling relationships (legal_get_toc, legal_get_context for further sections) are made explicit, so an agent can distinguish it from legal_search or legal_lookup_batch.

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?

Gives clear routing for follow-on needs ('further sections are reachable via legal_get_toc or legal_get_context on the returned norm_id') and detailed conditions for ambiguous cases, quoting stored keys, and jurisdiction ambiguity. It does not explicitly contrast with legal_search or legal_lookup_batch, so the alternative-selection guidance is strong but not complete.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.