Skip to main content
Glama

Open Legal Data (Germany)

Server Details

German court decisions (Rechtsprechung) and laws (Gesetze) with citation graph and citation checks.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over the last 24 hours
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
openlegaldata/oldp
GitHub Stars
160
ChatGPT
–
Claude
–

TDQS

A4.1/5.0

Scored across 19 tools

Disambiguation4/5

The set is carefully partitioned: filter_cases vs search_cases, search_cases vs search_laws vs search_legal, and get_cases_for_law vs get_citing_cases vs get_case_references are each explicitly contrasted in their descriptions, including guidance on when to prefer one over another. The main residual ambiguity is the pair get_server_instructions ("Always call first") and get_platform_info ("Call this first"), plus the several citation-lookup tools that an agent could still pick wrongly without reading carefully.

Naming Consistency4/5

Nearly every name follows a predictable snake_case verb_noun pattern (get_case, list_courts, search_laws, validate_citation, submit_feedback), with resource-oriented prefixes that group logically. The only deviations are whoami (no verb_noun form) and get_server_instructions sitting oddly among data-retrieval get_* tools, but these are minor.

Tool Count4/5

At 19 tools this is on the heavy side, but the domain genuinely spans four resource families (cases, laws, courts, citations) plus auth/budget/feedback, and each tool maps to a distinct operation. Nothing looks like filler; a slightly leaner surface (e.g. merging the two 'call first' tools) would be ideal.

Completeness4/5

Coverage is strong across the lifecycle: discovery (list_courts, list_law_books, get_platform_info), retrieval (get_case with snippet pagination, get_law_section), relationship traversal (references, citing, similar, cases-for-law), aggregation (statistics), and verification (validate_citation). The main gap is that there is no way to enumerate the sections of a law book or browse a court's docket directly — agents must go through search/filter rather than a listing endpoint.

Available Tools

19 tools
filter_casesFilter court decisionsA
Read-onlyIdempotent
Inspect

Structured filtering of court cases using the database.

    Unlike search_cases (which uses full-text search), this tool filters
    cases using exact database fields. Returns case metadata without
    full content.

    Args:
        court_id: Filter by court database ID.
        court_slug: Filter by court slug (e.g. "bgh").
        date_after: Cases from this date onward (YYYY-MM-DD).
        date_before: Cases up to this date (YYYY-MM-DD).
        file_number: Exact file number (Aktenzeichen).
        ecli: Exact ECLI identifier.
        decision_type: Decision type (e.g. "Urteil", "Beschluss").
        limit: Maximum results (default 20, max 50). Values above 50
            are clamped; the response then includes
            ``limit_clamped: true`` and the original ``requested_limit``.
        offset: Skip first N results for pagination (default 0).
    

Inputs: ecli, limit, offset, court_id, +5 more.

get_caseGet court decisionA
Read-onlyIdempotent
Inspect

Retrieve a court case by ID or slug.

    By default returns the case metadata and the complete, untruncated
    ``content`` as plain text (HTML tags removed, entities decoded,
    whitespace normalized; one line per paragraph, Randnummern as line
    prefix). To read a long decision piece by piece, request a snippet
    with ``offset`` and/or ``length``; both count characters of that
    plain text. In snippet mode ``content`` is omitted and a ``snippet``
    object is returned:
    ``text``, ``offset``, ``length``, ``total_length``, ``has_more`` and
    ``next_offset``. Pass ``next_offset`` as ``offset`` to continue
    reading until ``has_more`` is false.

    Args:
        case_id: Case database ID.
        slug: Case URL slug.
        offset: Start position in plain-text characters (default 0).
        length: Number of plain-text characters to return. 0 (default)
            means "until the end". Leave both at 0 for the full content.
        full_text: Deprecated and ignored (content is never truncated).
            Passing it adds a ``deprecation_warnings`` entry to the
            response.
    

Inputs: slug, length, offset, case_id, +1 more.

get_case_referencesGet references in a decisionA
Read-onlyIdempotent
Inspect

Get forward references FROM a case (what this case cites).

    Returns all laws and cases that the given case references in its
    text. Useful for understanding the legal basis of a decision.

    Args:
        case_id: The database ID of the case.
    

Inputs: case_id (required).

get_cases_for_lawFind decisions citing a lawA
Read-onlyIdempotent
Inspect

Find all cases that cite a specific law section.

    Returns cases that reference the given statute section in their
    text. Useful for understanding how courts interpret a specific
    provision. To narrow the citing set by keyword, court, or date,
    use ``search_cases(query=..., cited_law_book=..., cited_law_section=...)``
    instead.

    Args:
        book_code: Law book code (e.g. "BGB", "StGB").
        section: Section identifier (e.g. "823").
        law_id: Direct law database ID (alternative to book_code+section).
        sort: "date" (default, newest first) or "most_cited" — the
            latter surfaces the landmark decisions interpreting this
            provision (most-cited first).
        limit: Maximum results (default 20, max 50). Values above 50 are
            clamped; the response then includes ``limit_clamped: true``
            and the original ``requested_limit``.
    

Inputs: sort, limit, law_id, section, +1 more.

get_case_statisticsGet court decision statisticsA
Read-onlyIdempotent
Inspect

Get aggregated case statistics.

    Returns case counts grouped by time period, optionally filtered
    by court, state, or jurisdiction.

    Args:
        court_id: Filter by court ID.
        state: Filter by state name or slug.
        jurisdiction: Filter by jurisdiction. Accepts the English
            shortcuts ("ordinary", "labor", …) or the stored German
            values ("Ordentliche Gerichtsbarkeit", …).
        date_after: Count cases from this date (YYYY-MM-DD, default: 1 year ago).
        date_before: Count cases up to this date (YYYY-MM-DD, default: today).
        group_by: Time grouping: "month" (default) or "year".

    Returns an ``{"error": ...}`` payload (instead of silently zero
    results) when an unknown court_id, state, jurisdiction, group_by,
    or malformed date is supplied — the previous behavior swallowed
    bad inputs as ``total: 0`` and was the dangerous failure mode
    called out in the MCP audit.
    

Inputs: state, court_id, group_by, date_after, +2 more.

get_citing_casesFind decisions citing a decisionA
Read-onlyIdempotent
Inspect

Get reverse references TO a case (cases that cite this case).

    Find all cases that reference the given case in their text.
    Useful for understanding the impact and precedent value of a
    decision. To narrow the citing set by keyword, court, or date,
    use ``search_cases(query=..., cited_case_id=case_id)`` instead.

    Args:
        case_id: The database ID of the cited case.
        sort: "date" (default, newest first) or "most_cited" (the most
            influential citing cases first).
        limit: Maximum results (default 20, max 50). Values above 50 are
            clamped; the response then includes ``limit_clamped: true``
            and the original ``requested_limit``.
    

Inputs: case_id (required), sort, limit.

get_courtGet court detailsA
Read-onlyIdempotent
Inspect

Get detailed information about a specific court.

    Look up a court by ID, slug, or code. Returns full details including
    address, contact information, and case count.

    Args:
        court_id: Court database ID.
        slug: Court slug (e.g. "ag-berlin-charlottenburg").
        code: Court ECLI code (e.g. "AGBCHAR").
    

Inputs: code, slug, court_id.

get_law_sectionGet law sectionA
Read-onlyIdempotent
Inspect

Get the full text of a specific law section.

    Retrieve law text by book code and section number, or by law ID.
    For example, get_law_section(book_code="BGB", section="823") returns
    the text of section 823 of the German Civil Code.

    By default the complete, untruncated ``content`` is returned as plain
    text (HTML tags removed, entities decoded, whitespace normalized; one
    line per paragraph or list item). Set ``offset`` and/or ``length`` to
    get a ``snippet`` of that plain text instead (see get_case for the
    snippet fields and pagination via ``next_offset``).

    Args:
        book_code: Law book code (e.g. "BGB", "StGB", "GG").
        section: Section identifier. Accepts bare numbers ("823",
            "20", "16a") or prefixed forms ("§ 823", "§823",
            "Art. 14", "Art 14", "Artikel 1"). The prefix spelling
            does not have to match the book: "Art. 20", "Artikel 20"
            and "20" all find Art 20 GG. Only exact sections match,
            never a longer number that contains the input. The
            ``section`` field on the response is whatever the DB
            stores, which differs by book convention: BGB / StGB /
            ZPO etc. store ``§ N`` (e.g. ``"§ 823"``), article-based
            books store e.g. ``"Art 1"`` (GG) or ``"Art. 6"``
            (DSGVO).
        law_id: Direct law database ID (alternative to book_code+section).
        offset: Start position in plain-text characters (default 0).
        length: Number of plain-text characters to return. 0 (default)
            means "until the end". Leave both at 0 for the full content.
    

Inputs: law_id, length, offset, section, +1 more.

get_platform_infoGet platform coverageA
Read-onlyIdempotent
Inspect

Get OLDP platform coverage summary.

Returns an overview of the data available on the Open Legal Data Platform, including counts of cases, laws, courts, and references. Call this first to understand what data you can search and retrieve.

Inputs: no named parameters.

get_server_instructionsGet server instructionsA
Read-onlyIdempotent
Inspect

Return MCP server instructions (if any). Always call first.

Inputs: no named parameters.

get_similar_casesFind similar court decisionsA
Read-onlyIdempotent
Inspect

Find court cases textually similar to a given case.

    Seeds an Elasticsearch "more like this" query with the full text of
    the given case and returns the most similar OTHER cases, ranked by
    similarity. Useful for comparative research: once you have one
    on-point decision, surface neighbouring case law without crafting a
    keyword query. For keyword- or citation-scoped neighbours instead,
    use search_cases.

    Args:
        case_id: The database ID of the seed case.
        limit: Maximum results (default 10, max 50). Values above 50 are
            clamped; the response then includes ``limit_clamped: true``
            and the original ``requested_limit``.
    

Inputs: case_id (required), limit.

list_courtsList courtsA
Read-onlyIdempotent
Inspect

Browse and filter German courts.

    Returns a list of courts matching the given filters. Use this to
    discover which courts are available before searching for cases.

    Args:
        court_type: Filter by court type code (e.g. "AG", "LG", "OLG",
            "BGH", "VG", "OVG", "BVerwG", "ArbG", "LAG", "BAG").
        state: Filter by state name or slug (e.g. "Berlin", "bayern").
        jurisdiction: Filter by jurisdiction. Accepts the English
            shortcuts "ordinary", "administrative", "labor", "social",
            "fiscal", "constitutional" or the stored German values
            ("Arbeitsgerichtsbarkeit", …). The Bundespatentgericht
            (BPatG) belongs to ``ordinary``; there is no separate
            patent-jurisdiction category — filter on
            ``court_type="BPatG"`` if you specifically want patent
            cases.
        level_of_appeal: Filter by court level. Accepts the English
            shortcuts "local", "regional", "high", "federal" or the
            stored German values ("Amtsgericht", …).
        search: Search court names and aliases.
        limit: Maximum results to return (default 50, max 100). Values
            above 100 are clamped; the response then includes
            ``limit_clamped: true`` and the original ``requested_limit``.
    

Inputs: limit, state, search, court_type, +2 more.

list_law_booksList law booksA
Read-onlyIdempotent
Inspect

List available German law books (e.g. BGB, StGB, GG).

    Returns law books with their codes, titles, and section counts.
    Use this to discover what legislation is available before searching
    for specific law sections.

    Args:
        latest_only: Only show latest revisions (default True).
        search: Search book codes and titles.
        limit: Maximum results (default 50, max 200). Values above 200
            are clamped; the response then includes
            ``limit_clamped: true`` and the original ``requested_limit``.
    

Inputs: limit, search, latest_only.

search_casesSearch court decisionsA
Read-onlyIdempotent
Inspect

Full-text search for German court cases via Elasticsearch.

    Returns matching cases with highlighted snippets. Does NOT return
    full case text - use get_case to retrieve complete content.

    The citation filters compose with ``query`` so you can answer
    "cases citing § 823 BGB that mention 'Mietrecht'" in one call —
    pass ``query="Mietrecht"`` together with ``cited_law_book="bgb"``
    and ``cited_law_section="823"``. For "give me ALL citing cases"
    without keyword refinement, prefer the dedicated
    ``get_cases_for_law`` / ``get_citing_cases`` tools.
    ``cited_case_id`` is mutually exclusive with the law citation
    filter — if both are supplied, the law filter wins.

    Args:
        query: Search query text (supports Lucene syntax).
        court_code: Filter by court code (e.g. "BGH", "BVerfG").
        start_date: Filter cases from this date (YYYY-MM-DD).
        end_date: Filter cases up to this date (YYYY-MM-DD).
        decision_type: Filter by decision type (e.g. "Urteil", "Beschluss").
        cited_law_book: Restrict to cases citing a law from this
            book slug (e.g. "bgb"). Requires ``cited_law_section``.
        cited_law_section: Restrict to cases citing this law section
            slug (e.g. "823"). Requires ``cited_law_book``.
        cited_case_id: Restrict to cases citing the case with this id.
        sort: Result order — "relevance" (default), "date" (newest
            first), or "most_cited" (most-cited first, for finding
            landmark precedent). The response echoes the applied
            ``sort``; any other value returns an error. Each result
            carries ``citing_cases_count`` so you can see how often it
            is cited. With relevance sort each result also carries
            ``match_quality`` ("high"/"medium"/"low" relative to the
            top hit) so you can tell where relevance drops off; it is
            left out for "date" and "most_cited", where the score is
            not the ranking signal.
        limit: Maximum results (default 10, max 50). Values above 50 are
            clamped; the response then includes ``limit_clamped: true``
            and the original ``requested_limit``.
    

Inputs: query (required), sort, limit, end_date, +6 more.

search_lawsSearch lawsA
Read-onlyIdempotent
Inspect

Full-text search across law sections via Elasticsearch.

    Returns matching law sections with highlighted snippets. Does NOT
    return full text - use get_law_section to retrieve the complete
    content of a specific section.

    Args:
        query: Search query text (supports Lucene syntax).
        book_code: Optional filter by law book code (e.g. "BGB").
        limit: Maximum results (default 10, max 50). Values above 50 are
            clamped; the response then includes ``limit_clamped: true``
            and the original ``requested_limit``.
    

Inputs: query (required), limit, book_code.

submit_feedbackSend feedback to OLDPAInspect

Send feedback about OLDP or this MCP server to the OLDP team.

    Use this to report bugs (wrong results, errors, broken tools),
    problems with the legal data (missing or wrong decisions, laws or
    references), or to request features. Only submit feedback the user
    wants to send or has agreed to; do not include personal data or
    confidential case details. Requires a signed-in connection (OAuth or
    API token); anonymous calls return an error with a sign-up link.

    Args:
        category: One of ``feature_request``, ``bug_report``,
            ``data_issue`` or ``other``.
        message: The feedback itself, in English or German
            (20-5000 characters). For bugs, describe what you did, what
            you expected and what happened instead.
        subject: Optional one-line summary (max 200 characters).
        context: Optional technical context (max 2000 characters), e.g.
            the tool name and arguments involved, case IDs, ECLI or law
            references.

    Returns:
        ``{"submitted": true, ...}`` on success, otherwise ``{"error": ...}``.
    

Inputs: message (required), category (required), context, subject.

validate_citationValidate legal citationA
Read-onlyIdempotent
Inspect

Check if a legal citation exists in the OLDP database.

    Validates Aktenzeichen (file numbers), ECLI identifiers, or
    paragraph references (e.g. "§ 823 BGB"). Use this to verify
    citations before presenting them to users.

    Args:
        citation: The citation to validate (e.g. "VI ZR 123/22",
            "ECLI:DE:BGH:2023:...", "§ 823 BGB").
        citation_type: Type hint: "auto" (default), "file_number",
            "ecli", or "law_reference".
    

Inputs: citation (required), citation_type.

whoamiShow connection and rate limitA
Read-onlyIdempotent
Inspect

Show who you are connected as and your remaining request budget.

    Call this before a long task to check how many requests are left,
    or to learn how to get a larger budget. Every HTTP request to the
    MCP server counts against the budget, including this call; once
    nothing is left, requests (this one too) are rejected with HTTP 429
    until the window frees up. Returns:

    - ``authenticated``: whether the connection is signed in.
    - ``user``: ``username`` and ``profile_complete``, or null.
    - ``auth_method``: ``oauth``, ``api_token``, ``legacy_token`` or
      ``session``; null when anonymous.
    - ``rate_limit``: ``tier`` (``anonymous``, ``registered``,
      ``enriched`` or ``custom``), ``bucket`` (``shared`` when all
      anonymous users of this connector share one budget, ``ip`` or
      ``user``), ``limit`` per ``window_seconds``, ``used``,
      ``remaining``, and ``retry_after_seconds`` once nothing is left.
      Signed-in users share one budget between MCP and the REST API.
    - ``upgrade``: how to get a larger budget (``action``, ``url``,
      ``limit``, ``message``), or null. Pass the ``message`` and
      ``url`` on to the user when the budget is too small for the task.
    

Inputs: no named parameters.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      B
      maintenance
      Enables users to search enacted German statutes and case law across first-instance, appellate, and supreme/constitutional courts, retrieve full documents as Markdown, and verify statutory and case citations against official registries.
      6
      MIT
    • F
      license
      Not graded
      quality
      D
      maintenance
      Verifiable German, Austrian, Swiss and EU law: resolve citations to the wording in force, verify the citations a model produced against the official source, and walk the citation graph.
      -
    • A
      license
      A
      quality
      C
      maintenance
      Enables AI agents to query German federal and state statutes, court decisions, and citation graphs, grounding citations, retrieving provision texts and versions, and understanding coverage limits through read-only tools.
      9
      1
      AGPL 3.0
    Try in Browser

    Glama MCP Gateway

    Add one secure layer between your agents and this server.