Skip to main content
Glama

Search Legal Documents

legal_search
Read-onlyIdempotent

Search legal documents across jurisdictions (DE federal, EU, Bavaria, North Rhine-Westphalia, Saxony) using hybrid semantic + keyword search. Returns ranked results with content snippets, not full text.

Suitable for topic questions and case facts when the relevant provision or decision is not yet known. A known citation is resolved by legal_lookup; several known citations by legal_lookup_batch. Natural-language questions using the documents' terminology usually rank better than keyword lists or doctrinal labels, e.g. 'Wann verjährt ein Schadensersatzanspruch?' or 'Wie sind mehrdeutige Vertragsklauseln auszulegen?'. Ranking indicates textual relevance, not legal applicability or exhaustive coverage. document_kind separates norms from case-law: the three norm subtypes ('statute'/'regulation'/'directive') form one filter class — any of them admits all three, so an EU regulation or directive is never hidden by a reflexive 'statute'. 'decision' restricts to court decisions and drops every norm before ranking, so it can hide the statute that answers a rule question. Without a document_kind filter, norms, case law and guidance can rank together, subject to other filters. This supports mixed questions (norm + its case-law application) and unclear German-vs-EU scope (e.g. data protection: BDSG vs DSGVO). Legislative materials are excluded by default and require explicit scope. A statute law_abbreviation combined with a decision scope ('decision', a decision source_type, court or decision_type) yields an empty set, because decisions carry file-number identifiers, not statute abbreviations; cited_norm filters decisions by the provision they cite. legal://filter_values documents the per-value definitions and the disambiguation list. law_abbreviation and source_type restrict the law and source respectively; when omitted, they add no restriction. Without jurisdiction and language the account's scope applies, named in jurisdiction_scope. legal://rechtsrahmen lists which law governs which domain (EU vs national, substantive vs procedural).

Common mix-ups (which law governs):

  • Procedural law by jurisdiction: ZPO (zivilrecht), STPO (strafrecht), VWGO (verwaltungsrecht), ARBGG (arbeitsrecht), SGG (sozialrecht), BVERFGG (verfassungsrecht), FAMFG (familienrecht)

  • AO, ESTG, KSTG, USTG, FGO: AO=procedure, EStG/KStG/UStG=substantive

  • VVG, BGB: Insurance rescission → BGB §§ 812ff, not VVG

  • VERSAUSGLG, FAMFG: VersAusglG=substantive, FamFG=procedure

  • APOG, AMG: ApoG=operation, AMG=drug approval

  • WEHRPFLG, SG: WPflG=conscription, SG=soldiers

  • AGG, BETRVG: AGG=anti-discrimination, BetrVG=works council

Input Schema

NameRequiredDescriptionDefault
courtNoFilter by court: BGH, BVerwG, BFH, BAG, BSG, BVerfG, BPatG, GmSOGB, Sächsisches OVG, Oberverwaltungsgericht NRW, Oberlandesgericht Düsseldorf, Oberlandesgericht Hamm, Oberlandesgericht Köln, Landesarbeitsgericht Düsseldorf, Landesarbeitsgericht Hamm, Landesarbeitsgericht Köln, Landessozialgericht NRW, Finanzgericht Düsseldorf, Finanzgericht Köln, Finanzgericht Münster, Verfassungsgerichtshof NRW, EuGH, EuG.
queryYesNatural-language question or case facts, e.g. 'Wann verjährt ein Schadensersatzanspruch?'. Terms used in the relevant legal documents help retrieval.
top_kNoNumber of results to return (default 5).
chapterNoNarrows to one chapter/section within a law; reduces recall. Only meaningful together with law_abbreviation.
date_toNoInclude results until this date (YYYY-MM-DD).
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.
date_fromNoInclude results from this date onwards (YYYY-MM-DD).
cited_normNoRestrict results to court decisions that verifiably cite this provision (citation-graph filter, e.g. '§ 573 BGB' or 'Art. 6 DSGVO'). With a case-specific query — e.g. query='Eigenbedarfskündigung Härtefall hohes Alter', cited_norm='§ 573 BGB' — citing candidates are ranked by relevance to the query. A citation does not establish applicability to the facts. legal_find_citing_decisions yields the unranked inventory, newest first. Matching is paragraph-level (Abs./Satz/Nr. are ignored). Only court decisions carry citations, so this filter implicitly restricts to case law — no document_kind needed. For an EU directive both the directive article ('Art. 9 Richtlinie 2011/83/EU') and the national transposition norm ('§ 355 BGB') are valid filters: the directive article matches EU case law (EuGH/EuG) and German decisions citing it directly (richtlinienkonforme Auslegung), while the transposition norm matches the larger body of German decisions applying the transposed rule. The transposition norm covers everyday German case law, the directive article EU-level interpretation. EU regulations (DSGVO, MDR) are cited directly.
source_typeNoFilter by source: 'gii' (German federal laws like BGB, StGB), 'eurlex' (EU legislation, including regulations like DSGVO/DSA, directives and treaties), 'eurlex_caselaw' (EU court decisions, EuGH/EuG), 'rechtsprechung' (federal court decisions, 2010 onwards), 'bverfge' (BVerfG leading decisions from the official reporter BVerfGE, up to 2009 — the reported slice, not every BVerfG decision of that era), 'bverwg' (BVerwG judgments (Urteile) up to 2009), 'bgh' (BGH decisions 2000 to 2009), 'bpatg' (BPatG decisions 2000 to 2009, mostly trademark and patent appeals), 'sachsen_rechtsprechung' (Saxon OVG decisions), 'nrw_rechtsprechung' (NRW higher-court decisions: OVG/OLG/LAG/LSG/FG/VerfGH), 'bayern_gesetze' (Bavaria), 'nrw_gesetze' (North Rhine-Westphalia), 'verwaltungsvorschriften' (federal administrative regulations, e.g. TA Luft, BMGVwV), 'edsa' (EDPB/EDSA data-protection guidance — soft law, not enacted norms; mostly English, see the language parameter), 'dsk' (Datenschutzkonferenz guidance: Orientierungshilfen, Kurzpapiere, Beschlüsse — the German supervisory authorities' reading of GDPR/BDSG), 'gesetzesmaterialien' (legislative materials — Gesetzesbegründung from Bundestag Drucksachen, the legislator's intent behind a federal norm; the corpus includes draft bills that never became law. Materials are opt-in: they appear with this value or document_kind='explanatory_memorandum', not in an unfiltered search). Empty = no source filter.
jurisdictionNoJurisdictions to search, one or more: 'de' (all German law — matches federal AND state law, incl. Staatsverträge like the Medienstaatsvertrag), 'eu' (EU), 'de_by' (Bavaria only), 'de_nw' (North Rhine-Westphalia only), 'de_sn' (Saxony only — Saxon state law is not in the corpus, so this matches Saxon court decisions). A value matches its own family only: 'de' adds no EU law, ['de', 'eu'] covers both; source_type='gii' restricts to federal statutes. Omitted, the account's legal order applies — for a German account German and EU law — and jurisdiction_scope names it.
decision_typeNoFilter by decision type: 'Urteil' or 'Beschluss'.
document_kindNoFilter by document class: the three norm subtypes 'statute', 'regulation' and 'directive' form ONE filter class — any of them admits all three, so they need not be told apart, and an EU regulation or directive is never hidden by a reflexive 'statute'. Three values discriminate: 'decision' restricts to court case-law (how a norm is applied), 'guidance' restricts to supervisory-authority soft law (EDPB/EDSA and Datenschutzkonferenz — authoritative readings of the GDPR/BDSG, not enacted norms and not binding), and 'explanatory_memorandum' restricts to legislative materials (Gesetzesbegründung / BT-Drucksachen — the legislator's intent behind a norm; ratio legis, purpose of an amendment). Materials are opt-in: reachable via this value, source_type='gesetzesmaterialien', or legal_get_materials for one provision, not in an unfiltered search. Empty = no document-class filter: norms, case law and guidance can rank together, subject to other filters. legal://filter_values documents the per-value definitions and disambiguation.
law_abbreviationNoRestrict to the named document, e.g. 'bgb', 'dsgvo'. A statute abbreviation does not select decisions citing that statute; cited_norm selects those decisions. Omitted or null = no law filter.

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: -"Filter by source: 'gii' (German federal laws like BGB, StGB), 'eurlex' (EU legislation, including regulations like DSGVO/DSA, directives and treaties), 'eurlex_caselaw' (EU court decisions, EuGH/EuG), 'rechtsprechung' (federal court decisions, 2010 onwards), 'bverfge' (BVerfG leading decisions from the official reporter BVerfGE, up to 2009 — the reported slice, not every BVerfG decision of that era), 'bverwg' (BVerwG judgments (Urteile) up to 2009), 'sachsen_rechtsprechung' (Saxon OVG decisions), 'nrw_rechtsprechung' (NRW higher-court decisions: OVG/OLG/LAG/LSG/FG/VerfGH), 'bayern_gesetze' (Bavaria), 'nrw_gesetze' (North Rhine-Westphalia), 'verwaltungsvorschriften' (federal administrative regulations, e.g. TA Luft, BMGVwV), 'edsa' (EDPB/EDSA data-protection guidance — soft law, not enacted norms; mostly English, see the language parameter), 'dsk' (Datenschutzkonferenz guidance: Orientierungshilfen, Kurzpapiere, Beschlüsse — the German supervisory authorities' reading of GDPR/BDSG), 'gesetzesmaterialien' (legislative materials — Gesetzesbegründung from Bundestag Drucksachen, the legislator's intent behind a federal norm; the corpus includes draft bills that never became law. Materials are opt-in: they appear with this value or document_kind='explanatory_memorandum', not in an unfiltered search). Empty = no source filter."New value: +"Filter by source: 'gii' (German federal laws like BGB, StGB), 'eurlex' (EU legislation, including regulations like DSGVO/DSA, directives and treaties), 'eurlex_caselaw' (EU court decisions, EuGH/EuG), 'rechtsprechung' (federal court decisions, 2010 onwards), 'bverfge' (BVerfG leading decisions from the official reporter BVerfGE, up to 2009 — the reported slice, not every BVerfG decision of that era), 'bverwg' (BVerwG judgments (Urteile) up to 2009), 'bgh' (BGH decisions 2000 to 2009), 'bpatg' (BPatG decisions 2000 to 2009, mostly trademark and patent appeals), 'sachsen_rechtsprechung' (Saxon OVG decisions), 'nrw_rechtsprechung' (NRW higher-court decisions: OVG/OLG/LAG/LSG/FG/VerfGH), 'bayern_gesetze' (Bavaria), 'nrw_gesetze' (North Rhine-Westphalia), 'verwaltungsvorschriften' (federal administrative regulations, e.g. TA Luft, BMGVwV), 'edsa' (EDPB/EDSA data-protection guidance — soft law, not enacted norms; mostly English, see the language parameter), 'dsk' (Datenschutzkonferenz guidance: Orientierungshilfen, Kurzpapiere, Beschlüsse — the German supervisory authorities' reading of GDPR/BDSG), 'gesetzesmaterialien' (legislative materials — Gesetzesbegründung from Bundestag Drucksachen, the legislator's intent behind a federal norm; the corpus includes draft bills that never became law. Materials are opt-in: they appear with this value or document_kind='explanatory_memorandum', not in an unfiltered search). Empty = no source filter."
  2. Changed3 schema fields changed
    • changedInput schema / properties / jurisdiction / anyOf
      Previous value: -[
      -  {
      -    "description": "Jurisdiction of the legal document.",
      -    "enum": [
      -      "de",
      -      "eu",
      -      "de_by",
      -      "de_sn",
      -      "de_nw"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "description": "Jurisdiction of the legal document.",
      +      "enum": [
      +        "de",
      +        "eu",
      +        "de_by",
      +        "de_sn",
      +        "de_nw"
      +      ],
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / jurisdiction / description
      Previous value: -"Filter by jurisdiction: 'de' (all German law — matches federal AND state law, incl. Staatsverträge like the Medienstaatsvertrag), 'eu' (EU), 'de_by' (Bavaria only), 'de_nw' (North Rhine-Westphalia only), 'de_sn' (Saxony only — Saxon state law is not in the corpus, so this matches Saxon court decisions). 'de' includes state law; source_type='gii' restricts to federal statutes. Empty = no jurisdiction filter."New value: +"Jurisdictions to search, one or more: 'de' (all German law — matches federal AND state law, incl. Staatsverträge like the Medienstaatsvertrag), 'eu' (EU), 'de_by' (Bavaria only), 'de_nw' (North Rhine-Westphalia only), 'de_sn' (Saxony only — Saxon state law is not in the corpus, so this matches Saxon court decisions). A value matches its own family only: 'de' adds no EU law, ['de', 'eu'] covers both; source_type='gii' restricts to federal statutes. Omitted, the account's legal order applies — for a German account German and EU law — and jurisdiction_scope names it."
    • 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."
  3. Changed2 schema fields 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."
    • changedInput schema / properties / law_abbreviation / anyOf
      Previous value: -[
      -  {
      -    "maxLength": 128,
      -    "minLength": 1,
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 512,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  4. Changed14 schema fields changed
    • changedInput schema / properties / chapter / description
      Previous value: -"Filter by chapter/section within a law. Rarely needed — can reduce recall. Only useful with law_abbreviation."New value: +"Narrows to one chapter/section within a law; reduces recall. Only meaningful together with law_abbreviation."
    • changedInput schema / properties / cited_norm / description
      Previous value: -"Restrict results to court decisions that verifiably cite this provision (citation-graph filter, e.g. '§ 573 BGB' or 'Art. 6 DSGVO'). Combine with a case-specific query — e.g. query='Eigenbedarfskündigung Härtefall hohes Alter', cited_norm='§ 573 BGB' — to get decisions that both apply the provision AND match the facts of the case. It yields the case law for a specific provision and question; legal_find_citing_decisions yields the unranked inventory, newest first. Matching is paragraph-level (Abs./Satz/Nr. are ignored). Only court decisions carry citations, so this filter implicitly restricts to case law — no document_kind needed. For an EU directive both the directive article ('Art. 9 Richtlinie 2011/83/EU') and the national transposition norm ('§ 355 BGB') are valid filters: the directive article matches EU case law (EuGH/EuG) and German decisions citing it directly (richtlinienkonforme Auslegung), while the transposition norm matches the larger body of German decisions applying the transposed rule. The transposition norm covers everyday German case law, the directive article EU-level interpretation; a plain legal_search on the topic reveals the transposition norm when it is unknown. EU regulations (DSGVO, MDR) are cited directly."New value: +"Restrict results to court decisions that verifiably cite this provision (citation-graph filter, e.g. '§ 573 BGB' or 'Art. 6 DSGVO'). With a case-specific query — e.g. query='Eigenbedarfskündigung Härtefall hohes Alter', cited_norm='§ 573 BGB' — citing candidates are ranked by relevance to the query. A citation does not establish applicability to the facts. legal_find_citing_decisions yields the unranked inventory, newest first. Matching is paragraph-level (Abs./Satz/Nr. are ignored). Only court decisions carry citations, so this filter implicitly restricts to case law — no document_kind needed. For an EU directive both the directive article ('Art. 9 Richtlinie 2011/83/EU') and the national transposition norm ('§ 355 BGB') are valid filters: the directive article matches EU case law (EuGH/EuG) and German decisions citing it directly (richtlinienkonforme Auslegung), while the transposition norm matches the larger body of German decisions applying the transposed rule. The transposition norm covers everyday German case law, the directive article EU-level interpretation. EU regulations (DSGVO, MDR) are cited directly."
    • changedInput schema / properties / court / anyOf
      Previous value: -[
      -  {
      -    "description": "Courts available as search filter.\n\nValues match the ``extra.gericht`` Qdrant payload field used by\nboth Rechtsprechung-im-Internet (German federal courts) and\nEUR-Lex case law (EU courts).",
      -    "enum": [
      -      "BGH",
      -      "BVerfG",
      -      "BVerwG",
      -      "BFH",
      -      "BAG",
      -      "BSG",
      -      "BPatG",
      -      "GmSOGB",
      -      "Sächsisches OVG",
      -      "Oberverwaltungsgericht NRW",
      -      "Oberlandesgericht Düsseldorf",
      -      "Oberlandesgericht Hamm",
      -      "Oberlandesgericht Köln",
      -      "Landesarbeitsgericht Düsseldorf",
      -      "Landesarbeitsgericht Hamm",
      -      "Landesarbeitsgericht Köln",
      -      "Landessozialgericht NRW",
      -      "Finanzgericht Düsseldorf",
      -      "Finanzgericht Köln",
      -      "Finanzgericht Münster",
      -      "Verfassungsgerichtshof NRW",
      -      "EuGH",
      -      "EuG"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "description": "German federal and state courts and EU courts available as search filters.",
      +    "enum": [
      +      "BGH",
      +      "BVerfG",
      +      "BVerwG",
      +      "BFH",
      +      "BAG",
      +      "BSG",
      +      "BPatG",
      +      "GmSOGB",
      +      "Sächsisches OVG",
      +      "Oberverwaltungsgericht NRW",
      +      "Oberlandesgericht Düsseldorf",
      +      "Oberlandesgericht Hamm",
      +      "Oberlandesgericht Köln",
      +      "Landesarbeitsgericht Düsseldorf",
      +      "Landesarbeitsgericht Hamm",
      +      "Landesarbeitsgericht Köln",
      +      "Landessozialgericht NRW",
      +      "Finanzgericht Düsseldorf",
      +      "Finanzgericht Köln",
      +      "Finanzgericht Münster",
      +      "Verfassungsgerichtshof NRW",
      +      "EuGH",
      +      "EuG"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / decision_type / anyOf
      Previous value: -[
      -  {
      -    "description": "Decision types available as search filter.\n\nValues match the ``doktyp`` field in Rechtsprechung-im-Internet XML\nand the Qdrant payload ``decision_type`` field.\n\nNote: ``Gerichtsbescheid`` exists in the XML but is intentionally\nexcluded from the filter enum — it is rare and not useful as a\nuser-facing filter.  The parser handles it internally.",
      -    "enum": [
      -      "Urteil",
      -      "Beschluss"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "description": "Type of court decision: judgment (Urteil) or order (Beschluss).",
      +    "enum": [
      +      "Urteil",
      +      "Beschluss"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / document_kind / anyOf
      Previous value: -[
      -  {
      -    "description": "Legal document type classification.\n\nUses StrEnum so values compare equal to plain strings for\nseamless PostgreSQL/Qdrant compatibility.",
      -    "enum": [
      -      "statute",
      -      "regulation",
      -      "directive",
      -      "decision",
      -      "explanatory_memorandum",
      -      "guidance"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "description": "Document class: legislation, court decisions, legislative materials or guidance.",
      +    "enum": [
      +      "statute",
      +      "regulation",
      +      "directive",
      +      "decision",
      +      "explanatory_memorandum",
      +      "guidance"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / document_kind / description
      Previous value: -"Filter by document class: the three norm subtypes 'statute', 'regulation' and 'directive' form ONE filter class — any of them admits all three, so you cannot (and need not) tell them apart, and an EU regulation or directive is never hidden by a reflexive 'statute'. Three values discriminate: 'decision' restricts to court case-law (how a norm is applied), 'guidance' restricts to supervisory-authority soft law (EDPB/EDSA and Datenschutzkonferenz — authoritative readings of the GDPR/BDSG, not enacted norms and not binding), and 'explanatory_memorandum' restricts to legislative materials (Gesetzesbegründung / BT-Drucksachen — the legislator's intent behind a norm; ratio legis, purpose of an amendment). Materials are opt-in: reachable via this value, source_type='gesetzesmaterialien', or legal_get_materials for one provision, not in an unfiltered search. Leave empty for mixed questions. legal://filter_values documents the per-value definitions and disambiguation."New value: +"Filter by document class: the three norm subtypes 'statute', 'regulation' and 'directive' form ONE filter class — any of them admits all three, so they need not be told apart, and an EU regulation or directive is never hidden by a reflexive 'statute'. Three values discriminate: 'decision' restricts to court case-law (how a norm is applied), 'guidance' restricts to supervisory-authority soft law (EDPB/EDSA and Datenschutzkonferenz — authoritative readings of the GDPR/BDSG, not enacted norms and not binding), and 'explanatory_memorandum' restricts to legislative materials (Gesetzesbegründung / BT-Drucksachen — the legislator's intent behind a norm; ratio legis, purpose of an amendment). Materials are opt-in: reachable via this value, source_type='gesetzesmaterialien', or legal_get_materials for one provision, not in an unfiltered search. Empty = no document-class filter: norms, case law and guidance can rank together, subject to other filters. legal://filter_values documents the per-value definitions and disambiguation."
    • changedInput schema / properties / jurisdiction / anyOf
      Previous value: -[
      -  {
      -    "description": "Legal jurisdiction identifiers.\n\nUses StrEnum so values compare equal to plain strings for\nseamless PostgreSQL/Qdrant compatibility.",
      -    "enum": [
      -      "de",
      -      "eu",
      -      "de_by",
      -      "de_sn",
      -      "de_nw"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "description": "Jurisdiction of the legal document.",
      +    "enum": [
      +      "de",
      +      "eu",
      +      "de_by",
      +      "de_sn",
      +      "de_nw"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / jurisdiction / description
      Previous value: -"Filter by jurisdiction: 'de' (all German law — matches federal AND state law, incl. Staatsverträge like the Medienstaatsvertrag), 'eu' (EU), 'de_by' (Bavaria only), 'de_nw' (North Rhine-Westphalia only), 'de_sn' (Saxony only — Saxon state law is not in the corpus, so this matches Saxon court decisions). 'de' includes state law; source_type='gii' restricts to federal statutes. Leave empty for cross-jurisdiction search."New value: +"Filter by jurisdiction: 'de' (all German law — matches federal AND state law, incl. Staatsverträge like the Medienstaatsvertrag), 'eu' (EU), 'de_by' (Bavaria only), 'de_nw' (North Rhine-Westphalia only), 'de_sn' (Saxony only — Saxon state law is not in the corpus, so this matches Saxon court decisions). 'de' includes state law; source_type='gii' restricts to federal statutes. Empty = no jurisdiction filter."
    • 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."
    • changedInput schema / properties / law_abbreviation / description
      Previous value: -"Filter by law abbreviation, e.g. 'bgb', 'dsgvo'. Leave empty for thematic questions."New value: +"Restrict to the named document, e.g. 'bgb', 'dsgvo'. A statute abbreviation does not select decisions citing that statute; cited_norm selects those decisions. Omitted or null = no law filter."
    • changedInput schema / properties / query / description
      Previous value: -"Search query as a natural sentence using statutory language (not keywords or doctrinal terms)."New value: +"Natural-language question or case facts, e.g. 'Wann verjährt ein Schadensersatzanspruch?'. Terms used in the relevant legal documents help retrieval."
    • changedInput schema / properties / source_type / anyOf
      Previous value: -[
      -  {
      -    "description": "Known legal document source types.\n\nUses StrEnum so values compare equal to plain strings\n(e.g. ``SourceType.GII == \"gii\"``), which keeps Qdrant\npayloads and PostgreSQL columns compatible without conversion.",
      -    "enum": [
      -      "gii",
      -      "eurlex",
      -      "eurlex_caselaw",
      -      "rechtsprechung",
      -      "sachsen_rechtsprechung",
      -      "sachsen_gesetze",
      -      "bayern_gesetze",
      -      "nrw_gesetze",
      -      "nrw_rechtsprechung",
      -      "gesetzesmaterialien",
      -      "edsa",
      -      "bverfge",
      -      "bverwg",
      -      "verwaltungsvorschriften",
      -      "dsk"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New 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"
      +  }
      +]
    • changedInput schema / properties / source_type / description
      Previous value: -"Filter by source: 'gii' (German federal laws like BGB, StGB), 'eurlex' (EU regulations like DSGVO, DSA), 'eurlex_caselaw' (EU court decisions, EuGH/EuG), 'rechtsprechung' (federal court decisions, 2010 onwards), 'bverfge' (BVerfG leading decisions from the official reporter BVerfGE, up to 2009 — the reported slice, not every BVerfG decision of that era), 'bverwg' (BVerwG judgments (Urteile) up to 2009), 'sachsen_rechtsprechung' (Saxon OVG decisions), 'nrw_rechtsprechung' (NRW higher-court decisions: OVG/OLG/LAG/LSG/FG/VerfGH), 'bayern_gesetze' (Bavaria), 'nrw_gesetze' (North Rhine-Westphalia), 'verwaltungsvorschriften' (federal administrative regulations, e.g. TA Luft, BMGVwV), 'edsa' (EDPB/EDSA data-protection guidance — soft law, not enacted norms; mostly English, see the language parameter), 'dsk' (Datenschutzkonferenz guidance: Orientierungshilfen, Kurzpapiere, Beschlüsse — the German supervisory authorities' reading of GDPR/BDSG), 'gesetzesmaterialien' (legislative materials — Gesetzesbegründung from Bundestag Drucksachen, the legislator's intent behind a federal norm; the corpus includes draft bills that never became law. Materials are opt-in: they appear with this value or document_kind='explanatory_memorandum', not in an unfiltered search). Leave empty for cross-source search."New value: +"Filter by source: 'gii' (German federal laws like BGB, StGB), 'eurlex' (EU legislation, including regulations like DSGVO/DSA, directives and treaties), 'eurlex_caselaw' (EU court decisions, EuGH/EuG), 'rechtsprechung' (federal court decisions, 2010 onwards), 'bverfge' (BVerfG leading decisions from the official reporter BVerfGE, up to 2009 — the reported slice, not every BVerfG decision of that era), 'bverwg' (BVerwG judgments (Urteile) up to 2009), 'sachsen_rechtsprechung' (Saxon OVG decisions), 'nrw_rechtsprechung' (NRW higher-court decisions: OVG/OLG/LAG/LSG/FG/VerfGH), 'bayern_gesetze' (Bavaria), 'nrw_gesetze' (North Rhine-Westphalia), 'verwaltungsvorschriften' (federal administrative regulations, e.g. TA Luft, BMGVwV), 'edsa' (EDPB/EDSA data-protection guidance — soft law, not enacted norms; mostly English, see the language parameter), 'dsk' (Datenschutzkonferenz guidance: Orientierungshilfen, Kurzpapiere, Beschlüsse — the German supervisory authorities' reading of GDPR/BDSG), 'gesetzesmaterialien' (legislative materials — Gesetzesbegründung from Bundestag Drucksachen, the legislator's intent behind a federal norm; the corpus includes draft bills that never became law. Materials are opt-in: they appear with this value or document_kind='explanatory_memorandum', not in an unfiltered search). Empty = no source filter."
  5. Changed5 schema fields changed
    • changedInput schema / properties / cited_norm / description
      Previous value: -"Restrict results to court decisions that verifiably cite this provision (citation-graph filter, e.g. '§ 573 BGB' or 'Art. 6 DSGVO'). Combine with a case-specific query — e.g. query='Eigenbedarfskündigung Härtefall hohes Alter', cited_norm='§ 573 BGB' — to get decisions that both apply the provision AND match the facts of the case. This is the preferred way to find case law for a specific provision and a specific question. Matching is paragraph-level (Abs./Satz/Nr. are ignored). Only court decisions carry citations, so this filter implicitly restricts to case law — no document_kind needed. For the raw citation inventory of a provision (newest first), use legal_find_citing_decisions instead. For an EU directive both the directive article ('Art. 9 Richtlinie 2011/83/EU') and the national transposition norm ('§ 355 BGB') are valid filters: the directive article matches EU case law (EuGH/EuG) and German decisions citing it directly (richtlinienkonforme Auslegung), while the transposition norm matches the larger body of German decisions applying the transposed rule. Prefer the transposition norm for everyday German case law, the directive article for EU-level interpretation; run a plain legal_search first if you do not know the transposition norm. EU regulations (DSGVO, MDR) are cited directly."New value: +"Restrict results to court decisions that verifiably cite this provision (citation-graph filter, e.g. '§ 573 BGB' or 'Art. 6 DSGVO'). Combine with a case-specific query — e.g. query='Eigenbedarfskündigung Härtefall hohes Alter', cited_norm='§ 573 BGB' — to get decisions that both apply the provision AND match the facts of the case. It yields the case law for a specific provision and question; legal_find_citing_decisions yields the unranked inventory, newest first. Matching is paragraph-level (Abs./Satz/Nr. are ignored). Only court decisions carry citations, so this filter implicitly restricts to case law — no document_kind needed. For an EU directive both the directive article ('Art. 9 Richtlinie 2011/83/EU') and the national transposition norm ('§ 355 BGB') are valid filters: the directive article matches EU case law (EuGH/EuG) and German decisions citing it directly (richtlinienkonforme Auslegung), while the transposition norm matches the larger body of German decisions applying the transposed rule. The transposition norm covers everyday German case law, the directive article EU-level interpretation; a plain legal_search on the topic reveals the transposition norm when it is unknown. EU regulations (DSGVO, MDR) are cited directly."
    • changedInput schema / properties / document_kind / description
      Previous value: -"Filter by document class: the three norm subtypes 'statute', 'regulation' and 'directive' form ONE filter class — any of them admits all three, so you cannot (and need not) tell them apart, and an EU regulation or directive is never hidden by a reflexive 'statute'. Three values discriminate: 'decision' restricts to court case-law (prefer it for how-a-norm-is-applied questions), 'guidance' restricts to supervisory-authority soft law (EDPB/EDSA and Datenschutzkonferenz — authoritative readings of the GDPR/BDSG, not enacted norms and not binding), and 'explanatory_memorandum' restricts to legislative materials (Gesetzesbegründung / BT-Drucksachen — the legislator's intent behind a norm; prefer it for ratio-legis or purpose-of-an-amendment questions). Materials are opt-in: an unfiltered search never returns them — set this value (or source_type='gesetzesmaterialien') to search them, or use legal_get_materials for a specific provision. Leave empty for mixed questions. See legal://filter_values for the per-value definitions and disambiguation."New value: +"Filter by document class: the three norm subtypes 'statute', 'regulation' and 'directive' form ONE filter class — any of them admits all three, so you cannot (and need not) tell them apart, and an EU regulation or directive is never hidden by a reflexive 'statute'. Three values discriminate: 'decision' restricts to court case-law (how a norm is applied), 'guidance' restricts to supervisory-authority soft law (EDPB/EDSA and Datenschutzkonferenz — authoritative readings of the GDPR/BDSG, not enacted norms and not binding), and 'explanatory_memorandum' restricts to legislative materials (Gesetzesbegründung / BT-Drucksachen — the legislator's intent behind a norm; ratio legis, purpose of an amendment). Materials are opt-in: reachable via this value, source_type='gesetzesmaterialien', or legal_get_materials for one provision, not in an unfiltered search. Leave empty for mixed questions. legal://filter_values documents the per-value definitions and disambiguation."
    • changedInput schema / properties / jurisdiction / description
      Previous value: -"Filter by jurisdiction: 'de' (all German law — matches federal AND state law, incl. Staatsverträge like the Medienstaatsvertrag), 'eu' (EU), 'de_by' (Bavaria only), 'de_nw' (North Rhine-Westphalia only), 'de_sn' (Saxony only). For federal statutes ONLY, use source_type='gii' instead. Leave empty for cross-jurisdiction search."New value: +"Filter by jurisdiction: 'de' (all German law — matches federal AND state law, incl. Staatsverträge like the Medienstaatsvertrag), 'eu' (EU), 'de_by' (Bavaria only), 'de_nw' (North Rhine-Westphalia only), 'de_sn' (Saxony only — Saxon state law is not in the corpus, so this matches Saxon court decisions). 'de' includes state law; source_type='gii' restricts to federal statutes. Leave empty for cross-jurisdiction search."
    • 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."
    • changedInput schema / properties / source_type / description
      Previous value: -"Filter by source: 'gii' (German federal laws like BGB, StGB), 'eurlex' (EU regulations like DSGVO, DSA), 'eurlex_caselaw' (EU court decisions, EuGH/EuG), 'rechtsprechung' (federal court decisions, 2010 onwards), 'bverfge' (BVerfG leading decisions from the official reporter BVerfGE, up to 2009 — the reported slice, not every BVerfG decision of that era), 'bverwg' (BVerwG judgments (Urteile) up to 2009), 'sachsen_rechtsprechung' (Saxon OVG decisions), 'nrw_rechtsprechung' (NRW higher-court decisions: OVG/OLG/LAG/LSG/FG/VerfGH), 'bayern_gesetze' (Bavaria), 'nrw_gesetze' (North Rhine-Westphalia), 'verwaltungsvorschriften' (federal administrative regulations, e.g. TA Luft, BMGVwV), 'edsa' (EDPB/EDSA data-protection guidance — soft law, not enacted norms; mostly English, see the language parameter), 'dsk' (Datenschutzkonferenz guidance: Orientierungshilfen, Kurzpapiere, Beschlüsse — the German supervisory authorities' reading of GDPR/BDSG), 'gesetzesmaterialien' (legislative materials — Gesetzesbegründung from Bundestag Drucksachen, the legislator's intent behind a federal norm; the corpus includes draft bills that never became law. Materials appear ONLY when explicitly requested via this value or document_kind='explanatory_memorandum' — an unfiltered search never returns them). Leave empty for cross-source search."New value: +"Filter by source: 'gii' (German federal laws like BGB, StGB), 'eurlex' (EU regulations like DSGVO, DSA), 'eurlex_caselaw' (EU court decisions, EuGH/EuG), 'rechtsprechung' (federal court decisions, 2010 onwards), 'bverfge' (BVerfG leading decisions from the official reporter BVerfGE, up to 2009 — the reported slice, not every BVerfG decision of that era), 'bverwg' (BVerwG judgments (Urteile) up to 2009), 'sachsen_rechtsprechung' (Saxon OVG decisions), 'nrw_rechtsprechung' (NRW higher-court decisions: OVG/OLG/LAG/LSG/FG/VerfGH), 'bayern_gesetze' (Bavaria), 'nrw_gesetze' (North Rhine-Westphalia), 'verwaltungsvorschriften' (federal administrative regulations, e.g. TA Luft, BMGVwV), 'edsa' (EDPB/EDSA data-protection guidance — soft law, not enacted norms; mostly English, see the language parameter), 'dsk' (Datenschutzkonferenz guidance: Orientierungshilfen, Kurzpapiere, Beschlüsse — the German supervisory authorities' reading of GDPR/BDSG), 'gesetzesmaterialien' (legislative materials — Gesetzesbegründung from Bundestag Drucksachen, the legislator's intent behind a federal norm; the corpus includes draft bills that never became law. Materials are opt-in: they appear with this value or document_kind='explanatory_memorandum', not in an unfiltered search). Leave empty for cross-source search."
  6. First observed

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description adds substantial behavior beyond that: ranking reflects textual relevance not legal applicability, document_kind filter-class collapsing, decision scopes dropping norms before ranking, and legislative materials being opt-in by default. Only return-format detail is thin, but an output schema exists.

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?

Core purpose and the lookup-vs-search routing are front-loaded and well organized, but the phrasing is dense and repetitive in places (document_kind, source_type and matter opt-in semantics are restated three times). The 'Common mix-ups (which law governs)' block is legal domain knowledge that is only loosely tied to invoking this specific tool and could be pushed to a resource.

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?

For a 13-parameter tool with an output schema and rich annotations, the description supplies everything an agent needs: query strategy, filter interactions, default scope behavior (jurisdiction_scope), empty-result traps, and pointers to legal://filter_values and legal://rechtsrahmen. Return values are delegated to the output schema, which is appropriate.

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 goes well past it: it explains the norm-subtype filter class, the empty-set combination of law_abbreviation with decision scope, how cited_norm differs from law_abbreviation, citation-graph matching at paragraph level, jurisdiction family matching, and per-value source_type definitions.

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 specific verb (search), resource (legal documents) and scope (DE federal, EU, Bavaria, NRW, Saxony) with the retrieval method (hybrid semantic + keyword) and output shape (ranked snippets, not full text). It explicitly distinguishes itself from siblings: known citations go to legal_lookup / legal_lookup_batch, and citation inventories to legal_find_citing_decisions.

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

Usage Guidelines5/5

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

Gives concrete when-to-use conditions ('topic questions and case facts when the relevant provision or decision is not yet known') and names the alternatives for the known-citation case. It also advises on query formulation (natural language beats keyword lists) and warns which filter combinations produce empty sets, which is directly actionable selection guidance.

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.