Für Partner von Hessen Tourismus

MCP-Server Hessens Tourismusdaten direkt in Ihrem KI-Assistenten

Sehenswürdigkeiten, Veranstaltungen, Wander- und Radtouren, Gastronomie und Unterkünfte — gepflegt im Content Hub Hessen, täglich aktualisiert. Ihr Assistent kann sie direkt abfragen und beantwortet damit Fragen Ihrer Gäste, statt zu raten.

Was ist das?

Eine genormte Steckdose für KI-Assistenten. Sie verbinden Ihren Assistenten einmal mit unserer Datenquelle — danach kann er Fragen dazu beantworten.

Ihr Assistentz. B. ClaudeDie Schnittstellegenormt, per MCPDer DatenbestandContent Hub Hessen
Keine Programmierkenntnisse nötig

Die Verbindung wird in den Einstellungen Ihres Assistenten eingetragen — eine Adresse, ein Zugangsschlüssel, fertig. Rechnen Sie mit zehn Minuten.

Sie fragen in normaler Sprache

Sie stellen Ihre Frage wie immer. Der Assistent entscheidet selbst, welche Daten er dafür braucht, holt sie und formuliert die Antwort.

25.482
Datensätze
17
Arten von Inhalten
10
Destinationen
06.10.2026, 13:15
zuletzt abgeglichen

Was Sie fragen können

Vier Beispiele. Die Trefferzahlen und die gezeigten Daten stammen aus echten Abfragen — nichts davon ist erfunden.

„Welche leichten Touren unter 10 km gibt es in Nordhessen?“
398 passende Datensätze, davon die ersten:
  • Terrainkurweg K1: Thermalquellenweg · 4.2 km, leicht
  • Terrainkurweg K2: Prinzenweg · 7.5 km, leicht
  • Willingen Loipe Stryck (1) · 3.1 km, leicht
„Was ist im Oktober 2026 in Marburg los?“
58 passende Datensätze, davon die ersten:
  • Queer leben in Marburg · 01.10.2026 · Marburg
  • Nineteen Echoes · 01.10.2026 · Marburg
  • Tina Teubner · 02.10.2026 · Marburg
„Welche Sehenswürdigkeiten liegen im Umkreis von 15 km um unser Haus in Wiesbaden?“
53 passende Datensätze, davon die ersten:
  • Altes Rathaus · Wiesbaden · 0.19 km entfernt
  • RöRth Studio · Wiesbaden · 0.19 km entfernt
  • Marktbrunnen · Wiesbaden · 0.2 km entfernt
„Welche barrierefreien Angebote gibt es im Lahntal?“
165 passende Datensätze, davon die ersten:
  • Kursaalgebäude · Bad Ems · Bauwerk, Familie, Barrierefrei
  • Bottega - Tapas und mehr · Marburg · Kulinarisch, Gruppen, Außengastronomie
  • Shaky Shake Lingelgasse · Marburg · Kulinarisch, Lieferservice, Außengastronomie

Gezeigt sind die Daten, die die Schnittstelle liefert. Wie Ihr Assistent daraus eine Antwort formuliert, entscheidet er selbst — das hängt vom jeweiligen Assistenten ab und nicht von uns. Stand der Beispiele: 16. September 2026.

Was Sie brauchen

  • Einen KI-Assistenten, der Connectors unterstützt
    Claude oder ChatGPT — beide sind mit diesem Zugang erprobt, in der Web-Anwendung ebenso wie als Programm auf dem Rechner. Andere Assistenten, die eigene Konnektoren mit Zugangsschlüssel erlauben, funktionieren nach demselben Muster.
  • Einen Zugangsschlüssel von uns
    Den beantragen Sie unten. Wir prüfen jede Anfrage und melden uns.
  • Etwa zehn Minuten
    Für die einmalige Einrichtung. Danach fragen Sie einfach.

Einrichtung

So verbinden Sie Ihren Assistenten — in Claude und in ChatGPT. Beide Wege brauchen keine Kommandozeile. Suchen Sie sich die Spalte aus, die zu Ihnen passt.

In Claude

Einstellungen → Connectors. In einer Organisation macht das die Administratorin oder der Administrator einmal für alle.

  1. „Add custom connector“ wählen
    Und als Adresse eintragen:https://hessenexplorer.travel-commerce.de/api/mcp
  2. Authentication auf „None“ stellen
    Das klingt widersprüchlich, ist aber richtig: Der Zugang läuft nicht über eine Anmeldung, sondern über den Schlüssel im nächsten Schritt.
  3. Unter „Request headers“ den Schlüssel eintragen
    Als Name authorization wählen, als Wert Ihren Schlüssel mit vorangestelltem Bearer und einem Leerzeichen:Bearer mcp_IHR-SCHLÜSSEL
    Hier gehört „Bearer“ davor. Claude fragt nach dem vollständigen Wert der Kopfzeile, nicht nach dem Schlüssel allein. Ohne das Wort und das Leerzeichen dahinter wird der Zugang abgelehnt — auch wenn der Schlüssel stimmt.
  4. Speichern
    Danach schalten Sie den Connector im Gespräch über das Plus-Zeichen zu und können loslegen.

In ChatGPT

Über die Einstellungen einen eigenen Konnektor anlegen. Es öffnet sich der Dialog „Neues Plugin“.

  1. Namen vergeben
    Zum Beispiel Hessen Content Hub. Unter diesem Namen taucht der Zugang später im Gespräch auf. Symbol und Beschreibung sind freiwillig.
  2. Verbindung eintragen
    Die Umschaltung auf Server URL stehen lassen (nicht „Tunnel“) und dort eintragen:https://hessenexplorer.travel-commerce.de/api/mcpDas Beispiel im leeren Feld endet auf /sse. Das ist nur ein Platzhalter — tragen Sie die Adresse oben vollständig so ein, wie sie hier steht.
  3. Authentifizierung einstellen
    Bei Authentifizierung den Eintrag Zugriffstoken/API-Schlüssel wählen, bei Header-Schema den Eintrag Bearer.
  4. Hinweis bestätigen und „Erstellen“
    ChatGPT weist darauf hin, dass eigene MCP-Server nicht von OpenAI geprüft sind. Setzen Sie das Häkchen bei Ich verstehe und ich möchte fortfahren; erst danach lässt sich Erstellen anklicken.
  5. Erst jetzt den Schlüssel eingeben
    Es öffnet sich ein zweiter Dialog mit dem Feld Zugriffstoken oder API-Schlüssel eingeben. Dort Ihren Schlüssel eintragen und verbinden:mcp_IHR-SCHLÜSSEL
    Hier gehört „Bearer“ ausdrücklich NICHT davor. Das haben Sie im Schritt zuvor schon als Header-Schema ausgewählt; ChatGPT setzt es selbst davor. Wer es trotzdem mitschreibt, sendet es doppelt und wird abgelehnt.
In Claude fehlt der Abschnitt „Request headers“

Dann ist diese Eingabemöglichkeit für Ihr Konto noch nicht freigeschaltet — sie befindet sich bei Anthropic in der Erprobung und ist nicht für jede Organisation verfügbar. In ChatGPT gibt es diese Einschränkung nicht; der oben beschriebene Weg steht dort jedem Konto offen. Für Claude gibt es einen zweiten Weg, der immer funktioniert, aber einmalig eine Kommandozeile braucht:

npx mcp-remote https://hessenexplorer.travel-commerce.de/api/mcp --header "Authorization: Bearer mcp_IHR-SCHLÜSSEL"

Unter Windows PowerShell ist curl übrigens ein anderer Befehl als der gleichnamige aus Anleitungen im Netz. Wenn eine Zeile dort nicht funktioniert, schreiben Sie curl.exe.

Am einfachsten: melden Sie sich bei uns. Wir richten es gemeinsam mit Ihnen ein.

Zugang beantragen

Wir prüfen jede Anfrage und melden uns bei Ihnen. Der Zugang ist für Partner von Hessen Tourismus kostenfrei.

Ein bis zwei Sätze genügen. Das hilft uns einzuschätzen, ob wir Ihnen weiterhelfen können.
Einrichtung

Wir speichern Ihre Angaben ausschliesslich zur Bearbeitung dieser Anfrage sowie Ihre IP-Adresse zur Abwehr von Missbrauch. Eine Weitergabe an Dritte erfolgt nicht. Hinweis für die Redaktion: Dieser Absatz ist ein Platzhalter und vor der Veröffentlichung rechtlich zu prüfen und um Rechtsgrundlage, Speicherdauer und die Verweise auf Datenschutzerklärung und Impressum zu ergänzen.

Technische Dokumentation

Für alle, die die Schnittstelle selbst ansprechen wollen. Werkzeuge, Parameter und Beispiele stammen unmittelbar aus dem laufenden Server.

Endpunkt

Streamable HTTP, zustandslos, ausschliesslich lesend. Der Zugang läuft über die Kopfzeile Authorization: Bearer <schlüssel>.

https://hessenexplorer.travel-commerce.de/api/mcp

Die fünf Werkzeuge

Ein Suchwerkzeug für alle Inhaltsarten statt eines je Art — der Datentyp ist ein Filter wie jeder andere. Dazu Auskunft über den Bestand, Nachschlagen gültiger Filterwerte, Abruf ganzer Datensätze und Auszählung.

hessen_describe_datasetDatenbestand beschreiben

Überblick über den Datenbestand: Umfang, vorkommende Datentypen mit deutschem Label, Destinationen mit Mittelpunkt für Umkreissuchen, Sprachabdeckung und Aktualität. Vor der ersten Suche aufrufen. Die gelieferten Werte von "types" und "destinations" sind genau die, die hessen_search als Filter akzeptiert — damit entfällt das Raten von Filterwerten. Alle Zahlen sind bei jedem Aufruf frisch gemessen. Abgelaufene und abgesagte Veranstaltungen zählen hier, in hessen_search und in hessen_aggregate standardmässig nicht mit; wie viele das sind, steht in "notes". Die Suche zeigt sie auf Wunsch, hessen_get_records liefert sie per ID immer.

Parameter
NameTypBedeutung
sectionsListe von stringWelche Abschnitte geliefert werden. Ohne Angabe: alle fünf.Werte: overview, types, destinations, languages, freshness

* Pflichtangabe

Beispiel
{
  "name": "hessen_describe_dataset",
  "arguments": {
    "sections": [
      "overview",
      "types"
    ]
  }
}
Antwort (2.1 KB, hier gekürzt):
{
  "notes": [
    "4489 abgelaufene und 4 abgesagte Veranstaltungen sind in allen Zahlen dieses Servers ausgeblendet.",
    "24 Veranstaltungen tragen ein Startdatum vor 2020. Sie werden nicht gefiltert — der Wert steht so im Quellsystem.",
    "1566 sichtbare Datensätze haben keine Koordinate und fehlen daher in jeder Umkreis- und Kartenausschnittsuche (1216 ohne Angabe in der Quelle, 338 mit der unbrauchbaren Angabe 0°/0°, 12 ausserhalb des gültigen Werteberei …"
  ],
  "overview": {
    "total_records": 22480,
    "visible_records": 17987,
    "hidden_expired_events": 4489,
    "hidden_cancelled_events": 4,
    "with_coordinates": 16421,
    "with_image": 10956,
    "with_city": 14500,
    "without_coordinates": {
      "total": 1566,
      "source_had_none": 1216,
      "source_had_null_island": 338,
      "source_out_of_range": 12
    },
    "event_date_range": {
      "earliest_date": "1980-01-01",
      "latest_date": "2028-01-29",
      "implausible_before_2020": 24
    }
  },
  "types": [
    {
      "value": "PointOfInterest",
      "count": 5325,
      "label": "Sehenswürdigkeit"
    },
    {
      "value": "FoodEstablishmentLodgingBusiness",
      "count": 3479,
      "label": "Gastro/Unterkunft"
    },
    {
      "value": "Event",
      "count": 2950,
      "label": "Veranstaltung"
    },
    "… 14 weitere"
  ]
}

hessen_lookup_valuesGültige Filterwerte nachschlagen

Liefert die gültigen Werte eines Filters mit Trefferzahlen — für type, destination, city, category und organizer. Statt einen Ortsnamen oder eine Kategorie zu raten und bei null Treffern im Dunkeln zu stehen: hier nachsehen, welche Werte es gibt. "q" sucht unscharf, findet also auch Teilnamen ("Homburg" → "Bad Homburg vor der Höhe") und Tippfehler. Bei "city" und "destination" kommt ein Mittelpunkt aus den echten Koordinaten des Bestands mit, samt Angabe, auf wie vielen Datensätzen er beruht — damit lässt sich filters.near füllen, ohne zu geocodieren. Kategorien werden als lesbares Label geliefert; genau dieses Label gehört in filters.category.

Parameter
NameTypBedeutung
field*stringWelcher Filter. Die gelieferten Werte sind genau die, die hessen_search akzeptiert.Werte: type, destination, city, category, organizer
qstringSucheinschränkung. Teiltreffer und Tippfehler werden über Trigramm-Ähnlichkeit gefunden.
limitintegerWie viele Werte, 1 bis 50, voreingestellt 20.
include_audience_tagsbooleanNur bei field="category": die 15 Zielgruppen-Tags ("ZG …") mitliefern. Voreingestellt aus.

* Pflichtangabe

Beispiel
{
  "name": "hessen_lookup_values",
  "arguments": {
    "field": "city",
    "q": "Homburg",
    "limit": 3
  }
}
Antwort (0.8 KB, hier gekürzt):
{
  "field": "city",
  "values": [
    {
      "value": "Homberg (Efze)",
      "label": "Homberg (Efze)",
      "count": 99,
      "center_based_on": 99,
      "center": {
        "lat": 51.01828,
        "lon": 9.41134
      }
    },
    {
      "value": "Naumburg",
      "label": "Naumburg",
      "count": 75,
      "center_based_on": 75,
      "center": {
        "lat": 51.23557,
        "lon": 9.17466
      }
    },
    {
      "value": "Homberg (Ohm)",
      "label": "Homberg (Ohm)",
      "count": 39,
      "center_based_on": 39,
      "center": {
        "lat": 50.7294,
        "lon": 8.99851
      }
    }
  ],
  "returned": 3,
  "total_matching": 7,
  "notes": [
    "7 Werte passen insgesamt, 3 sind hier aufgeführt. Mit \"q\" einschränken oder \"limit\" erhöhen (höchstens 50)."
  ]
}

hessen_searchIm Bestand suchen

Sucht im Content Hub von Hessen Tourismus — Sehenswürdigkeiten, Veranstaltungen, Touren, Gastronomie, Unterkünfte, Infrastruktur und mehr in EINEM Tool. Der Datentyp ist ein Filter, keine eigene Funktion; "was kann ich in Fulda machen" ist damit eine einzige Anfrage. Der Bestand folgt den zehn Tourismusdestinationen, nicht der Landesgrenze: Wo eine Reiseregion darüber hinausreicht, liegen einzelne Orte in Nachbarbundesländern. Ein Aufruf ohne jeden Parameter ist ausdrücklich erlaubt und sinnvoll: er liefert den Gesamtbestand mit Facetten über Typ, Destination, Ort und Kategorie — die beste Grundlage, um gezielt zu verfeinern, statt Filterwerte zu raten. "total_count" ist exakt und zählt die ganze Treffermenge, nicht nur die gelieferte Seite. Geblättert wird über "next_cursor"; Filter und Sortierung müssen dabei unverändert bleiben. Unbekannte Filterwerte werden abgelehnt statt stillschweigend zu einer leeren Liste zu führen, und die Ablehnung nennt Vorschläge. Abgelaufene und abgesagte Veranstaltungen sind standardmässig ausgeblendet (filters.include_past_events / include_cancelled_events zeigen sie); wie viele es sind, steht immer in "notes". Für Einzelheiten zu einzelnen Treffern hessen_get_records benutzen, statt hier auf "detailed" umzuschalten — das spart rund zwei Drittel der Antwortgrösse.

Parameter
NameTypBedeutung
querystringVolltext über Titel und Beschreibung, Präfixsuche je Wort. Leer lassen ist erlaubt und liefert den gefilterten Gesamtbestand mit Facetten.
filtersobjectFelder: type, destination, city, postal_code, organizer, category, category_match, language, has_image, has_coordinates, near, bbox, event, trail, include_past_events, include_cancelled_events
sortstring"id": Stabile technische Reihenfolge. Voreinstellung, weil sie immer anwendbar ist. "relevance": Volltext-Relevanz. Verlangt "query". "distance": Entfernung zum Punkt aus "near". Verlangt filters.near. "event_date": Startdatum aufsteigend. Datensätze ohne Datum stehen am Ende. "recently_updated": Zuletzt geändert zuerst. Datensätze ohne Änderungsdatum stehen am Ende.Werte: id, relevance, distance, event_date, recently_updated
paginationobjectFelder: limit, cursor
outputobjectFelder: response_format, fields, include_facets

* Pflichtangabe

Beispiel
{
  "name": "hessen_search",
  "arguments": {
    "query": "Burg",
    "filters": {
      "destination": [
        "taunus"
      ]
    },
    "pagination": {
      "limit": 2
    }
  }
}
Antwort (1.6 KB, hier gekürzt):
{
  "total_count": 61,
  "returned": 2,
  "has_more": true,
  "next_cursor": "eyJzIjoiaWQiLCJrIjpbImVfMTAwMDM4NzUwLWh1YmVyIiwiZV8xMDAwMzg3NTAtaHViZXIiXSwiaCI6IjE0VW90MDRYV21KSyJ9",
  "truncated": false,
  "applied_filters": {
    "destination": [
      "taunus"
    ]
  },
  "sort": "id",
  "notes": [],
  "facets": {
    "type": [
      {
        "value": "PointOfInterest",
        "count": 43
      },
      {
        "value": "Trail",
        "count": 8
      },
      {
        "value": "Event",
        "count": 5
      },
      "… 1 weitere"
    ],
    "destination": [
      {
        "value": "taunus",
        "count": 61
      }
    ],
    "city": [
      {
        "value": "Kronberg im Taunus",
        "count": 12
      },
      {
        "value": "Eppstein",
        "count": 10
      },
      {
        "value": "Königstein im Taunus",
        "count": 7
      },
      "… 5 weitere"
    ],
    "category": [
      {
        "value": "Burg",
        "count": 26
      },
      {
        "value": "Bauwerk",
        "count": 20
      },
      {
        "value": "Interessantes in der Natur",
        "count": 15
      },
      "… 5 weitere"
    ]
  },
  "results": [
    {
      "id": "e_100038737-huber",
      "type": "FoodEstablishmentLodgingBusiness",
      "title": "Restaurant-Café-Pension Zum Feldbergblick",
      "city": "Schmitten - Hunoldstal",
      "destination": "taunus"
    },
    {
      "id": "e_100038750-huber",
      "type": "FoodEstablishmentLodgingBusiness",
      "title": "Restaurant Bürgerklause",
      "city": "Glashütten",
      "destination": "taunus"
    }
  ]
}

hessen_get_recordsDatensätze im Detail holen

Holt vollständige Einzelheiten zu bis zu 20 Datensätzen in EINEM Aufruf — die IDs kommen unverändert aus hessen_search. Voreingestellt kommen nur die Stammdaten. Was zusätzlich mitkommt, entscheidet "include": media, contact, opening_hours, amenities, offers, highlights, event, article, person, snow_conditions, destination_info, lodging, activity, trail_line, other_fields, raw. "other_fields" ist der Auffangblock und die eigentliche Zusage dieses Servers: er enthält JEDES Feld des Rohdatensatzes, das keiner der benannten Blöcke schon zeigt. Es gibt damit kein Feld im Content Hub, das über diese Schnittstelle unerreichbar wäre — auch keines, das erst künftig hinzukommt. "raw" und "trail_line" sind je Datensatz gross und deshalb auf 5 IDs je Aufruf begrenzt. Eine Tourenlinie wird auf höchstens 100 Stützpunkte ausgedünnt; dabei bleiben nur Originalpunkte stehen, es werden keine Zwischenpunkte berechnet, und wie stark ausgedünnt wurde, steht im Ergebnis.

Parameter
NameTypBedeutung
ids*Liste von string1 bis 20 Datensatz-IDs aus hessen_search. Mit "raw" oder "trail_line" höchstens 5.
includeListe von stringWelche Zusatzblöcke. Ohne Angabe kommen nur die Stammdaten. "other_fields" ist der generische Auffangblock: er enthält jedes Rohdatenfeld, das keiner der benannten Blöcke schon zeigt — damit ist nichts unerreichbar.Werte: media, contact, opening_hours, amenities, offers, highlights, event, article, person, snow_conditions, destination_info, lodging, activity, trail_line, other_fields, raw
response_formatstringSteuert nur die Langtexte. "detailed" (Voreinstellung) bringt zusätzlich teaser, description und weitere Beschreibungstexte; "concise" lässt genau diese weg (gemessen 2.670 statt 6.949 Byte für fünf Datensätze). Stammdaten und die über "include" angeforderten Blöcke sind in beiden Formaten identisch.Werte: concise, detailed

* Pflichtangabe

Beispiel
{
  "name": "hessen_get_records",
  "arguments": {
    "ids": [
      "e_01600962-4f80-4de9-9b97-62d23807de69-feratel",
      "e_074d1ce7-af62-4a41-a84a-76547e23fc69-feratel"
    ],
    "include": [
      "contact",
      "opening_hours"
    ]
  }
}
Antwort (4.2 KB, hier gekürzt):
{
  "requested": 2,
  "returned": 2,
  "not_found": [],
  "truncated": false,
  "notes": [],
  "records": [
    {
      "id": "e_01600962-4f80-4de9-9b97-62d23807de69-feratel",
      "type": "PointOfInterest",
      "title": "Wendelgasse",
      "city": "Marburg",
      "postal_code": "35037",
      "region": null,
      "destination": "lahntal",
      "destination_name": "Lahntal",
      "coordinates": {
        "lat": 50.80885,
        "lon": 8.76852
      },
      "categories": [
        "Verkehrsbau",
        "Bauwerk",
        "Straßenbauanlage",
        "… 3 weitere"
      ],
      "languages": [
        "de",
        "en"
      ],
      "url": null,
      "author": "Marburg Stadt und Land Tourismus",
      "license": "https://creativecommons.org/licenses/by/4.0/de/",
      "image_url": "https://resc.deskline.net/images/RPT/1/565d4421-e6ed-4261-aafe-837063ffbc57/99/image.jpg",
      "image_count": 4,
      "is_expired": false,
      "updated_at": "2025-07-07T11:36:36Z",
      "teaser": null,
      "description": "Etwa auf halbem Wege zwischen Lahn und Landgrafenschloss liegt das nicht einmal 100 Meter lange Gässchen, das auf beiden Seiten von den in Marburg typischen Fachwerkhäusern gesäumt wird. Über die dazugehörige Wendeltrepp …",
      "contact": {
        "street": null,
        "country": "Deutschland",
        "phone": null,
        "fax": null,
        "email": null
      },
      "opening_hours": {
        "regular": [
          {
            "day": "Montag",
            "hours": [
              "00:00–00:00"
            ]
          },
          {
            "day": "Dienstag",
            "hours": [
              "00:00–00:00"
            ]
          },
          {
            "day": "Mittwoch",
            "hours": [
              "00:00–00:00"
            ]
          },
          "… 4 weitere"
        ]
      }
    },
    {
      "id": "e_074d1ce7-af62-4a41-a84a-76547e23fc69-feratel",
      "type": "PointOfInterest",
      "title": "Wasserscheide",
      "city": "Marburg",
      "postal_code": "35037",
      "region": null,
      "destination": "lahntal",
      "destination_name": "Lahntal",
      "coordinates": {
        "lat": 50.81085,
        "lon": 8.77044
      },
      "categories": [
        "ZG Kultur- und Landschaftsliebhaber (O)",
        "ZG Kultur- und Landschaftsliebhaber (R)",
        "ZG Städte-Genießer (O)",
        "… 3 weitere"
      ],
      "languages": [
        "de",
        "en"
      ],
      "url": null,
      "author": "Marburg Stadt und Land Tourismus",
      "license": "https://creativecommons.org/licenses/by/3.0/de/",
      "image_url": "https://resc.deskline.net/images/RPT/1/74b350d9-39df-4168-9ace-ec2a8cdd99cb/99/image.jpg",
      "image_count": 1,
      "is_expired": false,
      "updated_at": "2025-07-11T09:13:25Z",
      "teaser": null,
      "description": "An der Wasserscheide wurde \"Christian\", dem letzten Marburger Dienstmann 1988 ein Denkmal aus Bronze gesetzt. Die Geschichte der Wasserscheide indes reicht weit bis in das Mittelalter zurück. Im 13. Jahrhundert betrat hi …",
      "contact": {
        "street": "Wettergasse",
        "country": "Deutschland",
        "phone": null,
        "fax": null,
        "email": null
      },
      "opening_hours": {
        "regular": [
          {
            "day": "Montag",
            "hours": [
              "00:00–00:00"
            ]
          },
          {
            "day": "Dienstag",
            "hours": [
              "00:00–00:00"
            ]
          },
          {
            "day": "Mittwoch",
            "hours": [
              "00:00–00:00"
            ]
          },
          "… 4 weitere"
        ]
      }
    }
  ]
}

hessen_aggregateBestand auszählen

Zählt den Bestand über eine oder zwei Dimensionen — destination, type, city, category, trail_difficulty, event_month, organizer — mit denselben Filtern wie hessen_search. Für Fragen, die keine Trefferliste beantwortet: "Veranstaltungen pro Monat", "welche Destination hat die meisten Touren", "wo fehlen die Bilder". Ohne dieses Tool müsste man Treffer seitenweise durchblättern und selbst zählen, und jede Antwort wäre eine Schätzung. Metriken neben "count": with_image, with_coordinates und language_coverage (Zahl der Datensätze je Sprache). Zwei Dimensionen ergeben eine Kreuztabelle, höchstens 400 Zellen. Alle Zahlen sind exakt und beziehen sich auf denselben sichtbaren Bestand wie die Suche.

Parameter
NameTypBedeutung
group_by*Liste von stringEine oder zwei Dimensionen. Bei zwei entsteht eine Kreuztabelle.Werte: destination, type, city, category, trail_difficulty, event_month, organizer
metricsListe von stringVoreingestellt nur "count". "language_coverage" liefert je Zelle die Zahl der Datensätze pro Sprache.Werte: count, with_image, with_coordinates, language_coverage
filtersobjectDerselbe Filterblock wie bei hessen_search.Felder: type, destination, city, postal_code, organizer, category, category_match, language, has_image, has_coordinates, near, bbox, event, trail, include_past_events, include_cancelled_events
limitintegerHöchstzahl Zellen, 1 bis 400, voreingestellt 400.

* Pflichtangabe

Beispiel
{
  "name": "hessen_aggregate",
  "arguments": {
    "group_by": [
      "destination"
    ],
    "metrics": [
      "count",
      "with_image"
    ],
    "limit": 4
  }
}
Antwort (0.9 KB, hier gekürzt):
{
  "group_by": [
    "destination"
  ],
  "metrics": [
    "count",
    "with_image"
  ],
  "cells": [
    {
      "destination": "nordhessen",
      "count": 4900,
      "with_image": 4101
    },
    {
      "destination": "lahntal",
      "count": 3285,
      "with_image": 2056
    },
    {
      "destination": "rhoen",
      "count": 2145,
      "with_image": 14
    },
    "… 1 weitere"
  ],
  "returned": 4,
  "total_cells": 11,
  "total_records": 17987,
  "applied_filters": {},
  "notes": [
    "Die Zelle mit dem Wert null bei destination zählt die Datensätze ohne Angabe in diesem Feld. Sie ist bewusst enthalten, weil ihre Grösse selbst eine Aussage ist.",
    "11 Zellen entstehen insgesamt, 4 sind hier aufgeführt. Enger filtern oder \"limit\" erhöhen."
  ]
}

Blättern, Sortieren, Antwortgrösse

Die Trefferzahl ist exakt. total_count zählt die ganze Treffermenge, nicht nur die gelieferte Seite und kein Sortierfenster.

Geblättert wird über next_cursor, nicht über einen Zähler. Filter und Sortierung müssen dabei unverändert bleiben; sonst wird der Cursor abgelehnt, statt eine Seite zu liefern, die zur vorigen nicht passt. Der Bestand ändert sich nächtlich — mit einem Zähler übersprängen Sie Datensätze oder bekämen sie doppelt.

Fünf Sortierungen: id (stabil, Voreinstellung), relevance (verlangt eine Volltextsuche), distance (verlangt einen Punkt), event_date und recently_updated.

Zwei Ausführlichkeiten. concise liefert das Nötige zur Auswahl, detailed zusätzlich Beschreibung, Adresse, Koordinaten und Kategorien — gemessen 151 gegen 670 Byte je Treffer. Einzelheiten zu ausgewählten Treffern holt man besser über hessen_get_records nach.

Wenn etwas nicht stimmt

Ein Fehler ist hier eine Antwortmöglichkeit und keine Sackgasse. Ein unbekannter Filterwert führt nicht zu einer leeren Trefferliste, sondern zu einer Ablehnung mit Vorschlägen — sonst liesse sich „falsch gefragt" nicht von „gibt es nicht" unterscheiden. Ein unbekannter Parametername kommt mit der vollständigen Liste der akzeptierten zurück. Und eine Zeitüberschreitung wird als solche benannt, statt wie null Treffer auszusehen.

{
  "error": "unbekannter_wert",
  "field": "filters.type",
  "value": "Museum",
  "message": "„Museum\" ist kein Datentyp, sondern eine Kategorie (im Bestand als „Museum\" mit 290 Datensätzen). Gemeint ist vermutlich filters.category: [\"Museum\"].",
  "valid_values_via": "hessen_lookup_values({field:'type'})"
}

Grenzen

Anfragen je Minute60 je Zugang, auf Wunsch anders eingestellt
Antwortgrössehöchstens 80 KB; wird gekürzt und sagt es in „notes"
Treffer je Seite1 bis 50, voreingestellt 20
Datensätze je Abrufbis zu 20 auf einmal, mit Rohdaten 5
Umkreisbis 50 km
Auswertungbis 400 Zellen

Werkzeuge, Parameter und Beispiele auf dieser Seite stammen unmittelbar aus dem laufenden Server, zuletzt abgerufen am 16. September 2026.