Skip to main content
Glama

DRGSystem — German medical coding catalogs

Krankenhäuser durchsuchen

kh_search
Read-onlyIdempotent

Durchsucht das Krankenhausverzeichnis nach Institutionskennzeichen (IK), Name oder Ort. Die Treffer stehen in 'items'; Anschrift und Kontaktdaten liefert kh_get zum einzelnen Haus.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
yearNoKatalogjahr (z. B. 2026). Leer lassen für das aktuellste verfügbare Jahr.
limitNoMaximale Anzahl Treffer, 1 bis 100. Standard 25.
queryYesSuchbegriff: Institutionskennzeichen (IK), Name des Krankenhauses oder Ort (z. B. 'Charité', 'Leipzig').

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
yearNoKatalogjahr, aus dem alle Daten dieser Antwort stammen.
focusNoDer abgefragte Kode mit allen Detaildaten. Null bei einer Suche und beim Katalog-Einstieg (leerer Kode).
itemsNoDie Kodeliste der Antwort: bei einer Abfrage die direkt untergeordneten Kodes von 'focus' (bzw. die oberste Ebene bei leerem Kode), bei einer Suche die Treffer.
parentsNoÜbergeordnete Kodes von 'focus' als Pfad von der obersten Ebene abwärts (Brotkrumen). Leer bei einer Suche und beim Katalog-Einstieg.
interpretationNoNur bei einer Suche: wie die Suche die Anfrage gelesen hat. Null außerhalb der Suche.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • removedOutput schema / properties / focus / properties / descriptionHighlight
      Removed value: -{
      -  "description": "Nur für die Trefferhervorhebung im Web-Katalog: Gewicht je Zeichen von 'description' — wie wörtlich die Suchanfrage das jeweilige Wort getroffen hat. 1,00 das Wort selbst, 0,75 eine Wortform oder ein Präfix, 0,50 ein Bestandteil eines zusammengesetzten Wortes, 0,25 ein Synonym oder ein korrigierter Tippfehler. Null, wenn die Anfrage diesen Text nicht berührt hat. Über MCP immer null.",
      -  "items": {
      -    "type": "number"
      -  },
      -  "type": [
      -    "array",
      -    "null"
      -  ]
      -}
    • removedOutput schema / properties / focus / properties / matchedTermHighlight
      Removed value: -{
      -  "description": "Nur für die Trefferhervorhebung im Web-Katalog: Gewicht je Zeichen von 'matchedTerm', gleiche Skala wie 'descriptionHighlight'. Über MCP immer null.",
      -  "items": {
      -    "type": "number"
      -  },
      -  "type": [
      -    "array",
      -    "null"
      -  ]
      -}
    • removedOutput schema / properties / items / items / properties / descriptionHighlight
      Removed value: -{
      -  "description": "Nur für die Trefferhervorhebung im Web-Katalog: Gewicht je Zeichen von 'description' — wie wörtlich die Suchanfrage das jeweilige Wort getroffen hat. 1,00 das Wort selbst, 0,75 eine Wortform oder ein Präfix, 0,50 ein Bestandteil eines zusammengesetzten Wortes, 0,25 ein Synonym oder ein korrigierter Tippfehler. Null, wenn die Anfrage diesen Text nicht berührt hat. Über MCP immer null.",
      -  "items": {
      -    "type": "number"
      -  },
      -  "type": [
      -    "array",
      -    "null"
      -  ]
      -}
    • removedOutput schema / properties / items / items / properties / matchedTermHighlight
      Removed value: -{
      -  "description": "Nur für die Trefferhervorhebung im Web-Katalog: Gewicht je Zeichen von 'matchedTerm', gleiche Skala wie 'descriptionHighlight'. Über MCP immer null.",
      -  "items": {
      -    "type": "number"
      -  },
      -  "type": [
      -    "array",
      -    "null"
      -  ]
      -}
  2. Changed15 schema fields changed
    • addedOutput schema / properties / focus / properties / beds
      Added value: +{
      +  "description": "Aufgestellte Betten über alle Standorte.",
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / focus / properties / departments
      Added value: +{
      +  "description": "Fachabteilungen über alle Standorte zusammengezählt, absteigend nach Betten.",
      +  "items": {
      +    "$ref": "#/properties/focus/properties/sites/items/properties/departments/items"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / focus / properties / districtCode / description
      Previous value: -"Amtlicher Kreisschlüssel (Landkreis oder kreisfreie Stadt)."New value: +"Amtlicher Kreisschlüssel (Landkreis oder kreisfreie Stadt), ohne Länderschlüssel."
    • addedOutput schema / properties / focus / properties / einrichtungsTyp
      Added value: +{
      +  "description": "Art der Zulassung: 'Hochschulklinik', 'Plankrankenhaus', 'Versorgungsvertrag' (§ 108 Nr. 3 SGB V), 'OhneVersorgungsvertrag' oder 'Bundeswehrkrankenhaus'.",
      +  "enum": [
      +    "Hochschulklinik",
      +    "Plankrankenhaus",
      +    "Versorgungsvertrag",
      +    "OhneVersorgungsvertrag",
      +    "Bundeswehrkrankenhaus",
      +    null
      +  ],
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / focus / properties / hospitalName / description
      Previous value: -"Name des Krankenhauses laut Verzeichnis."New value: +"Name des Krankenhauses im Krankenhausverzeichnis; kann vom Namen in der IK-Liste ('description') abweichen."
    • addedOutput schema / properties / focus / properties / krankenkasse
      Added value: +{
      +  "description": "Krankenkasse, die für das Krankenhaus nach § 6a KHEntgG meldet (in der Regel die AOK).",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / focus / properties / notfallstufe
      Added value: +{
      +  "description": "Höchste Stufe der allgemeinen Notfallversorgung über alle Standorte.",
      +  "enum": [
      +    "Keine",
      +    "Basis",
      +    "Erweitert",
      +    "Umfassend",
      +    null
      +  ],
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / focus / properties / sites
      Added value: +{
      +  "description": "Standorte mit Anschrift, Betten, Notfallstufe und Fachabteilungen, absteigend nach Betten.",
      +  "items": {
      +    "properties": {
      +      "beds": {
      +        "description": "Jahresdurchschnittlich aufgestellte Betten. 0 bei einer reinen Tages- oder Nachtklinik.",
      +        "type": "integer"
      +      },
      +      "city": {
      +        "description": "Ort.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "departments": {
      +        "description": "Fachabteilungen nach § 301 SGB V mit aufgestellten Betten, absteigend nach Betten. Nur Hauptfachabteilungen mit vollstationären Betten.",
      +        "items": {
      +          "properties": {
      +            "beds": {
      +              "description": "Aufgestellte Betten.",
      +              "type": "integer"
      +            },
      +            "key": {
      +              "description": "Fachabteilungsschlüssel nach § 301 SGB V, vierstellig (z. B. '0100' Innere Medizin).",
      +              "type": "string"
      +            },
      +            "name": {
      +              "description": "Bezeichnung der Fachabteilung.",
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "siteCount": {
      +              "description": "An wie vielen Standorten des Hauses die Fachabteilung Betten hat (nur in der Summe über das Haus; beim Standort 1).",
      +              "type": "integer"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "districtName": {
      +        "description": "Landkreis bzw. kreisfreie Stadt.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "email": {
      +        "description": "E-Mail-Adresse.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "houseNumber": {
      +        "description": "Hausnummer.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "municipalityKey": {
      +        "description": "Amtlicher Gemeindeschlüssel, achtstellig.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "name": {
      +        "description": "Name des Standorts.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "notfallModule": {
      +        "description": "Module der speziellen Notfallversorgung, an denen der Standort teilnimmt: 'Schwerverletzte', 'Kinder', 'Spezialversorgung', 'Schlaganfall', 'Herz' (Durchblutungsstörungen am Herzen).",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "notfallstufe": {
      +        "description": "Stufe der allgemeinen stationären Notfallversorgung nach § 136c Abs. 4 SGB V (G-BA-Notfallstufen): 'Keine', 'Basis' (Stufe 1), 'Erweitert' (Stufe 2), 'Umfassend' (Stufe 3). Null, wenn nicht angegeben.",
      +        "enum": [
      +          "Keine",
      +          "Basis",
      +          "Erweitert",
      +          "Umfassend",
      +          null
      +        ],
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "phone": {
      +        "description": "Telefonnummer.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "postalCode": {
      +        "description": "Postleitzahl.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "street": {
      +        "description": "Straße der Anschrift, ohne Hausnummer.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "website": {
      +        "description": "Internetadresse.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / focus / properties / sources
      Added value: +{
      +  "description": "Stand der Quellen.",
      +  "properties": {
      +    "ikListeStand": {
      +      "description": "Stand der InEK-Liste der Institutionskennzeichen mit der meldenden Krankenkasse.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "verzeichnisStand": {
      +      "description": "Stichtag des Krankenhausverzeichnisses der Statistischen Ämter, aus dem Anschrift, Träger, Standorte, Betten und Notfallstufen stammen.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / focus / properties / street / description
      Previous value: -"Straße der Anschrift, ohne Hausnummer."New value: +"Straße der Anschrift des Hauptstandorts (des bettenstärksten), ohne Hausnummer."
    • addedOutput schema / properties / focus / properties / traegerArt
      Added value: +{
      +  "description": "Art des Trägers: 'Oeffentlich', 'Freigemeinnuetzig' oder 'Privat'.",
      +  "enum": [
      +    "Oeffentlich",
      +    "Freigemeinnuetzig",
      +    "Privat",
      +    null
      +  ],
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / focus / properties / zuordnung
      Added value: +{
      +  "description": "Wie das Institutionskennzeichen dem Krankenhausverzeichnis zugeordnet ist: 'Krankenhaus' = ein ganzes Haus mit allen Standorten, 'Standort' = ein einzelner Standort eines Hauses (z. B. nach einer Fusion), 'Keine' = kein sicherer Eintrag gefunden — dann fehlen Anschrift, Betten und Standorte. Die Verbindung beruht auf dem Namen, denn das Verzeichnis führt kein IK.",
      +  "enum": [
      +    "Keine",
      +    "Krankenhaus",
      +    "Standort"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / items / items / properties / beds
      Added value: +{
      +  "description": "Aufgestellte Betten über alle Standorte.",
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / items / items / properties / notfallstufe
      Added value: +{
      +  "description": "Höchste Stufe der allgemeinen Notfallversorgung über alle Standorte.",
      +  "enum": [
      +    "Keine",
      +    "Basis",
      +    "Erweitert",
      +    "Umfassend",
      +    null
      +  ],
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / items / items / properties / siteCount
      Added value: +{
      +  "description": "Anzahl der Standorte laut Krankenhausverzeichnis.",
      +  "type": "integer"
      +}
  3. Changed17 schema fields changed
    • changedOutput schema / properties / focus / properties / descriptionHighlight / description
      Previous value: -"Nur für die Trefferhervorhebung im Web-Katalog: Gewicht je Zeichen von 'description'. Über MCP immer null."New value: +"Nur für die Trefferhervorhebung im Web-Katalog: Gewicht je Zeichen von 'description' — wie wörtlich die Suchanfrage das jeweilige Wort getroffen hat. 1,00 das Wort selbst, 0,75 eine Wortform oder ein Präfix, 0,50 ein Bestandteil eines zusammengesetzten Wortes, 0,25 ein Synonym oder ein korrigierter Tippfehler. Null, wenn die Anfrage diesen Text nicht berührt hat. Über MCP immer null."
    • addedOutput schema / properties / focus / properties / groupCode
      Added value: +{
      +  "description": "Nur bei einer Suche: die Rubrik, unter der die Suche diesen Treffer einordnet — beim ICD die dreistellige Kategorie, beim OPS der vierstellige Kode. Die Liste bleibt flach; wer mag, gruppiert danach. Null außerhalb der Suche.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / focus / properties / isGroupHeader
      Added value: +{
      +  "description": "Nur bei einer Suche: True, wenn diese Zeile die Rubrik selbst ist und die folgenden Zeilen mit gleichem 'groupCode' ihre Kodes sind.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / focus / properties / isSemanticMatch
      Added value: +{
      +  "description": "Nur bei einer Suche: True, wenn kein Wort der Anfrage diesen Kode erreicht hat und er über die Bedeutung gefunden wurde. Dann gibt es nichts hervorzuheben.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / focus / properties / matchedTerm
      Added value: +{
      +  "description": "Nur bei einer Suche: die Formulierung, über die der Treffer gefunden wurde, wenn sie etwas sagt, was 'description' nicht sagt — etwa der Eintrag des Alphabetischen Verzeichnisses, unter dem der Kode nachgewiesen ist. Null, wenn der Treffer sich aus der Bezeichnung selbst erklärt.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / focus / properties / matchedTermHighlight
      Added value: +{
      +  "description": "Nur für die Trefferhervorhebung im Web-Katalog: Gewicht je Zeichen von 'matchedTerm', gleiche Skala wie 'descriptionHighlight'. Über MCP immer null.",
      +  "items": {
      +    "type": "number"
      +  },
      +  "type": [
      +    "array",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / focus / properties / treeDepth / description
      Previous value: -"Nur wenn die Liste ein aufgeklapptes Teilbaum-Listing ist: Tiefe dieser Zeile innerhalb der Liste (0 = direkt unter dem abgefragten Kode, 1 = dessen Kind usw.). Null bedeutet, dass die Zeilen der Liste in keinem Über-/Unterordnungsverhältnis zueinander stehen — etwa bei einer Suche."New value: +"Nur wenn die Liste ein aufgeklapptes Teilbaum-Listing ist: Tiefe dieser Zeile innerhalb der Liste (0 = direkt unter dem abgefragten Kode, 1 = dessen Kind usw.). Bei einer Suche null — dort sagt 'groupCode', wohin eine Zeile gehört, und die Gliederung entsteht durch Blöcke statt durch Einrückung."
    • addedOutput schema / properties / interpretation
      Added value: +{
      +  "description": "Nur bei einer Suche: wie die Suche die Anfrage gelesen hat. Null außerhalb der Suche.",
      +  "properties": {
      +    "detectedCode": {
      +      "description": "Im Suchtext erkannte Schlüsselnummer, normalisiert (z. B. 'I219', '5820'). Null, wenn die Anfrage nur Text war.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "expandedTerms": {
      +      "description": "Aufgelöste Abkürzungen, mit denen zusätzlich gesucht wurde — etwa 'KHK' auch als 'Koronare Herzkrankheit'.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "usedSemanticSearch": {
      +      "description": "True, wenn die Wortsuche keinen sicheren Treffer hatte und zusätzlich nach Bedeutung gesucht wurde.",
      +      "type": "boolean"
      +    }
      +  },
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / items / items / properties / city
      Added value: +{
      +  "description": "Ort der Anschrift.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / items / items / properties / descriptionHighlight / description
      Previous value: -"Nur für die Trefferhervorhebung im Web-Katalog: Gewicht je Zeichen von 'description'. Über MCP immer null."New value: +"Nur für die Trefferhervorhebung im Web-Katalog: Gewicht je Zeichen von 'description' — wie wörtlich die Suchanfrage das jeweilige Wort getroffen hat. 1,00 das Wort selbst, 0,75 eine Wortform oder ein Präfix, 0,50 ein Bestandteil eines zusammengesetzten Wortes, 0,25 ein Synonym oder ein korrigierter Tippfehler. Null, wenn die Anfrage diesen Text nicht berührt hat. Über MCP immer null."
    • addedOutput schema / properties / items / items / properties / groupCode
      Added value: +{
      +  "description": "Nur bei einer Suche: die Rubrik, unter der die Suche diesen Treffer einordnet — beim ICD die dreistellige Kategorie, beim OPS der vierstellige Kode. Die Liste bleibt flach; wer mag, gruppiert danach. Null außerhalb der Suche.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / items / items / properties / isGroupHeader
      Added value: +{
      +  "description": "Nur bei einer Suche: True, wenn diese Zeile die Rubrik selbst ist und die folgenden Zeilen mit gleichem 'groupCode' ihre Kodes sind.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / items / items / properties / isSemanticMatch
      Added value: +{
      +  "description": "Nur bei einer Suche: True, wenn kein Wort der Anfrage diesen Kode erreicht hat und er über die Bedeutung gefunden wurde. Dann gibt es nichts hervorzuheben.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / items / items / properties / matchedTerm
      Added value: +{
      +  "description": "Nur bei einer Suche: die Formulierung, über die der Treffer gefunden wurde, wenn sie etwas sagt, was 'description' nicht sagt — etwa der Eintrag des Alphabetischen Verzeichnisses, unter dem der Kode nachgewiesen ist. Null, wenn der Treffer sich aus der Bezeichnung selbst erklärt.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / items / items / properties / matchedTermHighlight
      Added value: +{
      +  "description": "Nur für die Trefferhervorhebung im Web-Katalog: Gewicht je Zeichen von 'matchedTerm', gleiche Skala wie 'descriptionHighlight'. Über MCP immer null.",
      +  "items": {
      +    "type": "number"
      +  },
      +  "type": [
      +    "array",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / items / items / properties / postalCode
      Added value: +{
      +  "description": "Postleitzahl der Anschrift.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / items / items / properties / treeDepth / description
      Previous value: -"Nur wenn die Liste ein aufgeklapptes Teilbaum-Listing ist: Tiefe dieser Zeile innerhalb der Liste (0 = direkt unter dem abgefragten Kode, 1 = dessen Kind usw.). Null bedeutet, dass die Zeilen der Liste in keinem Über-/Unterordnungsverhältnis zueinander stehen — etwa bei einer Suche."New value: +"Nur wenn die Liste ein aufgeklapptes Teilbaum-Listing ist: Tiefe dieser Zeile innerhalb der Liste (0 = direkt unter dem abgefragten Kode, 1 = dessen Kind usw.). Bei einer Suche null — dort sagt 'groupCode', wohin eine Zeile gehört, und die Gliederung entsteht durch Blöcke statt durch Einrückung."
  4. First observed

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint. The description adds that results are in 'items' and that address/contact details are not included here but come from kh_get, which is useful behavioral context beyond the annotations. It does not contradict annotations.

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

Conciseness5/5

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

Two concise sentences: the first states the search scope, the second explains the output and points to kh_get for details. No wasted words, and the main purpose is front-loaded.

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?

Given the output schema exists (so return values are covered elsewhere) and the annotations cover safety/idempotency, the description provides the essential behavioral guidance: what the search covers, where results appear, and which tool to use for details. Nothing an agent needs 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.

Parameters3/5

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

Schema description coverage is 100%, so all parameters (query, year, limit) are already documented. The description adds no extra parameter semantics—it only restates what query can contain (already in the schema). Baseline 3 is appropriate because the schema does the heavy lifting.

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?

The description clearly states the tool searches the hospital directory by IK, name, or location, and specifies the resource and search criteria. It distinguishes itself from sibling search tools (e.g., atc_search, icd10_search) by naming the domain (Krankenhausverzeichnis) and the companion tool kh_get, so an agent can immediately select it.

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?

It explicitly says when to use the tool (to search hospitals) and provides an alternative: for address and contact data, use kh_get. This is a clear when/alternative instruction, effectively telling the agent that this tool returns only list items, not full details.

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.

Resources