mcpbeat Sign in

MobilityMCP MCP Server

answering

MobilityMCP is answering right now. Last checked 12 min ago. It exposes 29 tools.

Public transport in Germany (ÖPNV, Fahrplan): journeys, departures, disruptions, nearby sharing.

Uptime history 47 days of history · worst day 96%
47 days agonow
100.0%
Uptime 24h
91 of 91 checks
29
Tools
read from the server
424 ms
Response time
average over 24h
OAuth sign-in
Access
streamable-http

What changed 120

Every tool that appeared, vanished or quietly changed what it asks for. Recorded since 24 September 2026. No other catalogue keeps this.

7 Nov 2 tool descriptions were rewritten connections, departures
5 Nov 8 tools changed the parameters they ask for connections, departures, journey_map_image and 5 more
5 Nov 4 tool descriptions were rewritten connections, departures, reverse_geocode and 1 more
5 Nov 4 tools disappeared buy_ticket, list_active_tickets, ticket_control_view and 1 more
31 Oct 6 tools changed the parameters they ask for buy_ticket, connections, journey_map_image and 3 more
31 Oct a tool description was rewritten2 times that day connections
29 Oct a tool description was rewritten ticket_offers
28 Oct 8 tool descriptions were rewritten buy_ticket, connections, list_active_tickets and 5 more
28 Oct 7 tools changed the parameters they ask for buy_ticket, connections, journey_map_image and 4 more
24 Oct 4 tools changed the parameters they ask for connections, journey_map_image, show_connections and 1 more
and 75 more, back to 24 September 2026

Tools have disappeared from this server

A tool that vanishes takes a piece of your agent with it, and the change arrives silently. Watch this server and every such change lands in your inbox.

Three servers free · no card

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 12 min ago.

run in your terminal
claude mcp add mobility --transport http https://ai.projektionisten.eu/mmcp
Settings → Connectors → Add custom connector, then paste this address
https://ai.projektionisten.eu/mmcp
~/.codex/config.toml
[mcp_servers.mobility]
url = "https://ai.projektionisten.eu/mmcp"
.cursor/mcp.json
{
  "mcpServers": {
    "mobility": {
      "url": "https://ai.projektionisten.eu/mmcp"
    }
  }
}
.vscode/mcp.json
{
  "servers": {
    "mobility": {
      "type": "http",
      "url": "https://ai.projektionisten.eu/mmcp"
    }
  }
}

This endpoint answered with an authorization challenge. The server is running, and it signs you in through your browser: there is no API key to paste.

Available tools 29

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

widget
widget_probe_g0
**Sprosse g0 der Form-Leiter, die Kontrolle** — die Ansicht in der Form eines Endpunkts dieses Hauses, der bei einem Wirt mit Ansichten nachweislich zeichnet: ein einziger Eintrag im Inhaltstyp der Anwendungserweiterung, eine Adresse mit Datei-Endung, beide Zeiger auf dieselbe Adresse, eine gefüllte Rahmen-Richtlinie mit dem eigenen Host, keine Bildschirm-Beschreibung daneben. Wird schon sie nicht gezeichnet, liegt der Unterschied außerhalb von allem, was verglichen wurde. Diagnose-Werkzeug des Entwicklungsstands: die Sprossen g0 bis g4 der Reihe nach aufrufen; die erste, die NICHT gezeichnet wird, benennt die Eigenschaft, auf die es ankam. Die Sprosse trägt keine Fahrplan-Daten.
widget_probe_g1
**Sprosse g1 der Form-Leiter** — Sprosse g0, und als einziger Unterschied endet die Adresse der Ansicht nicht auf `.html`, so wie die Adressen dieses Endpunkts es nicht tun. Wird g0 gezeichnet und g1 nicht, war die Endung die Ursache. Diagnose-Werkzeug des Entwicklungsstands; die Sprosse trägt keine Fahrplan-Daten.
widget_probe_g2
**Sprosse g2 der Form-Leiter** — Sprosse g0, und als einziger Unterschied steht ein zweiter Eintrag derselben Ansicht in der Liste, im zweiten Inhaltstyp, wie dieser Endpunkt seine Ansichten listet. Wird g0 gezeichnet und g2 nicht, stört den Wirt der zweite Eintrag selbst. Diagnose-Werkzeug des Entwicklungsstands; die Sprosse trägt keine Fahrplan-Daten.
widget_probe_g3
**Sprosse g3 der Form-Leiter** — Sprosse g0, und als einziger Unterschied sind die beiden Rahmen-Richtlinien leer, wie sie es an den Ansichten dieses Endpunkts sind, die nichts nachladen. Wird g0 gezeichnet und g3 nicht, liest der Wirt eine leere Liste nicht als „nichts nötig". Diagnose-Werkzeug des Entwicklungsstands; die Sprosse trägt keine Fahrplan-Daten.
widget_probe_g4
**Sprosse g4 der Form-Leiter** — Sprosse g0, und als einziger Unterschied nennen die beiden Zeiger verschiedene Adressen, wie die Zeiger dieses Endpunkts es heute tun. Wird g0 gezeichnet und g4 nicht, folgt der Wirt einem Zeiger, dessen Adresse er nicht einhängen kann. Diagnose-Werkzeug des Entwicklungsstands; die Sprosse trägt keine Fahrplan-Daten.
widget_probe_r0
**Sprosse r0 der Anmelde-Leiter, die Kontrolle** — dieselbe Ansicht wie auf allen Sprossen dieser Leiter, angemeldet wie zu dem Zeitpunkt, an dem kein Wirt mehr gezeichnet hat: der Standard-Zeiger auf die Erweiterungs-Adresse, der flache Zeiger auf die gezeichnete Adresse, beide Einträge gelistet, beide unter demselben Namen. Wird sie gezeichnet, liegt es an keiner der drei Eigenschaften, die diese Leiter durchspielt. Diagnose-Werkzeug des Entwicklungsstands: die Sprossen r0 bis r3 der Reihe nach aufrufen; die erste gezeichnete benennt die Eigenschaft, auf die es ankam. Die Sprosse trägt keine Fahrplan-Daten.
widget_probe_r1
**Sprosse r1 der Anmelde-Leiter** — Sprosse r0, und als einziger Unterschied zeigt auch der Standard-Zeiger auf die Adresse, die im gezeichneten Inhaltstyp ausgeliefert wird. Zeichnet r1 und r0 nicht, war der Zeiger die Ursache. Diagnose-Werkzeug des Entwicklungsstands; die Sprosse trägt keine Fahrplan-Daten.
widget_probe_r2
**Sprosse r2 der Anmelde-Leiter** — Sprosse r0, und als einziger Unterschied trägt jeder der beiden Einträge einen eigenen Namen. Zeichnet r2 und r0 nicht, hat der Wirt seine Ressourcen-Liste über den Namen entdoppelt und dabei einen der beiden Einträge verloren. Diagnose-Werkzeug des Entwicklungsstands; die Sprosse trägt keine Fahrplan-Daten.
widget_probe_r3
**Sprosse r3 der Anmelde-Leiter** — die Anmeldung, unter der zuletzt nachweislich gezeichnet wurde: ein einziger Eintrag, im gezeichneten Inhaltstyp, und beide Zeiger darauf. Zeichnet r3 als einzige, stört den Wirt der zweite Eintrag selbst — und nicht sein Name und nicht der Zeiger. Diagnose-Werkzeug des Entwicklungsstands; die Sprosse trägt keine Fahrplan-Daten.
widget_probe_v0
**Sprosse 0 der Mount-Leiter** — das leerste Dokument, das dieser Endpunkt ausliefern kann: eine Beschriftung und der Pflicht-Handschlag in einem klassischen Skript, ohne Modul, ohne Bündel, ohne Schaltfläche, ohne Netz. Wird sie gezeichnet, ist an der Auslieferung der Ansichten nichts kaputt und die Ursache kommt mit einer höheren Sprosse dazu; wird sie es nicht, liegt es an keinem Inhalt. Diagnose-Werkzeug des Entwicklungsstands: die Sprossen 0 bis 4 der Reihe nach aufrufen, die erste nicht gezeichnete benennt den Baustein.
widget_probe_v1
**Sprosse 1 der Mount-Leiter** — Sprosse 0 und eine Schaltfläche, die den Wirt um Vollbild bittet, weiterhin aus einem klassischen Skript. Trennt „das Dokument tut etwas" von der Bauart, in der es das tut. Diagnose-Werkzeug des Entwicklungsstands; die Sprosse trägt keine Fahrplan-Daten.
widget_probe_v2
**Sprosse 2 der Mount-Leiter** — dasselbe Dokument wie Sprosse 1, Zeichen für Zeichen dasselbe Skript, nur als inline ES-Modul ausgeliefert statt als klassisches Skript. Das ist die einzige Bauart-Eigenschaft, die die echten Ansichten dieses Endpunkts mit einem vergleichbaren, gezeichneten Endpunkt nicht teilen. Diagnose-Werkzeug des Entwicklungsstands; die Sprosse trägt keine Fahrplan-Daten.
widget_probe_v3
**Sprosse 3 der Mount-Leiter** — dieselbe Schaltfläche wie Sprosse 2, diesmal als React-Komponente aus dem Bündler dieses Projekts und in der Dokument-Form, die alle echten Ansichten dieses Endpunkts haben. Trennt unsere Bauart von der Anwendung, die sonst darauf steht. Diagnose-Werkzeug des Entwicklungsstands; die Sprosse trägt keine Fahrplan-Daten.
widget_probe_v4
**Sprosse 4 der Mount-Leiter, die Kontrolle** — die bestehende Abfahrtstafel dieses Endpunkts, unverändert, aber ohne Daten und darum als leere Tafel. Sie ist die Ansicht, um die es geht: was sie von Sprosse 3 trennt, ist die Anwendung selbst, nicht mehr die Bauart darunter. **Ruft keinen Fahrplan ab und zeigt keine Abfahrten** — wer Abfahrten braucht, nimmt `show_departures`. Diagnose-Werkzeug des Entwicklungsstands.
show
show_connections
**Der Vordereingang für jede Verbindungsfrage eines Menschen**, auch wenn er nur nach Zeiten fragt: plant die Fahrt wie `connections` und liefert sie zusätzlich als Ansicht aus, die ein Wirt mit Ansichten dem Nutzer zeigt — je Verbindung eine Karte mit Zeiten, Dauer, Umstiegen und Echtzeit-Lage. **Beantwortest du einem Menschen eine Verbindungsfrage, ruf dies statt `connections`**, das für Ergebnisse ist, die du weiterverarbeitest. **Pflicht sind BEIDE Endpunkte**, wie dort: `origin_id` UND `destination_id` — oder die vier Koordinaten-Felder; `render_payload` entfällt. Die Verlässlichkeit der Umstiege nur auf Wunsch, wie dort: `change_reliability: true` oder `max_miss_risk`. Carsharing nur auf Wunsch, wie dort: `car:sharing` in `access_modes`/`egress_modes`, ein Stationsauto dazu mit `stay_minutes`. Der Antwort-Text ist der von `connections` — Abfahrt und Ankunft aus `departs`/`arrives`, nach einem Fußweg die erste Fahrt aus `firstRide`; die Rohdaten daneben tragen nur die Felder, die die Ansicht zeichnet, in Ortszeit wie der Text, ihr Kartenverlauf davon im `_meta`. **Anleitung**: `get_usage_guide` mit `tool='connections'`. **Anti-Fab**: Linien, Zeiten, Halte und Gleise ausschließlich aus dem Output dieses Aufrufs.
show_connections_slim
**Dieselbe Verbindungs-Ansicht wie `show_connections`, nur schlank ausgeliefert**: das Kartenwerk lädt die Ansicht als Skript, statt es mitzubringen. **Nimm dies nur, wenn ausdrücklich nach der schlanken Auslieferung gefragt wird** — sonst `show_connections`. Sonst unverändert: plant die Fahrt wie `connections` und liefert sie zusätzlich als Ansicht aus. **Pflicht sind BEIDE Endpunkte**, wie dort: `origin_id` UND `destination_id` — oder die vier Koordinaten-Felder; `render_payload` entfällt. Die Verlässlichkeit der Umstiege nur auf Wunsch, wie dort: `change_reliability: true` oder `max_miss_risk`. Carsharing nur auf Wunsch, wie dort: `car:sharing` in `access_modes`/`egress_modes`, ein Stationsauto dazu mit `stay_minutes`. Der Antwort-Text ist der von `connections` — Abfahrt und Ankunft aus `departs`/`arrives`, nach einem Fußweg die erste Fahrt aus `firstRide`; die Rohdaten daneben tragen nur die Felder, die die Ansicht zeichnet, in Ortszeit wie der Text, ihr Kartenverlauf davon im `_meta`. **Anleitung**: `get_usage_guide` mit `tool='connections'`. **Anti-Fab**: Linien, Zeiten, Halte und Gleise ausschließlich aus dem Output dieses Aufrufs.
show_departures
**Der Vordereingang für jede Abfahrtsfrage eines Menschen**: liest die Tafel einer Haltestelle wie `departures` und liefert sie zusätzlich als Ansicht aus, die ein Wirt mit Ansichten dem Nutzer zeigt — je Abfahrt Linie, Ziel, Gleis/Steig, Zeit und Echtzeit-Lage. **Beantwortest du einem Menschen eine Abfahrtsfrage, ruf dies statt `departures`**, das für Ergebnisse ist, die du weiterverarbeitest. **Pflicht ist die Halte-Id**, wie dort: `id` — eine Id aus `resolve_location`, kein Haltestellen-Name; `render_payload` entfällt. Der Antwort-Text ist der von `departures`; die Rohdaten daneben tragen nur die Felder, die die Ansicht zeichnet. **Anleitung**: `get_usage_guide` mit `tool='departures'`. **Anti-Fab**: Linien, Ziele, Zeiten und Gleise ausschließlich aus dem Output dieses Aufrufs.
connections
connections
Plant ÖPNV-Verbindungen von A nach B in Deutschland, Österreich, der Schweiz und Südtirol (Echtzeit in Deutschland, der Schweiz und Südtirols Bussen; sonst Fahrplan), Fernrouten eingeschlossen — **als Daten, für Ergebnisse, die du weiterverarbeitest**. Steht `show_connections` in deinem Werkzeug-Satz, ist das der Vordereingang für die Frage eines Menschen. Für „wie komme ich von X nach Y" kommt die Auskunft aus diesen Werkzeugen. **Pflicht sind BEIDE Endpunkte**: `origin_id` UND `destination_id` aus einer Ortsauflösung, mit `origin_type`/`destination_type` — ODER `origin_lat`+`origin_lon`+`destination_lat`+`destination_lon`; ein NAME in einem Id-Feld ist ein Argument-Fehler. **Optional**: `time` (ohne Versatz MEZ/MESZ), `is_arrival_time`; `via_id` bzw. `via_lat`+`via_lon` mit `via_type`, oder bis zu vier `vias` (`through`/`stopover`); `not_via`, `no_change_at`; je Ende `access_modes`/`egress_modes` (`only`/`prefer`); `cancelled` (`include`/`mark`); die hart einschränkenden Filter `modes`, `only_lines`/`exclude_lines`, `submodes_allow`/`submodes_deny`, `max_transfers`, `max_walk_minutes`/`max_walk_meters`, `max_walk_from_origin`/`max_walk_to_destination` (1–5000 m), `walk_speed`, `accessibility_profile` (stufenfrei `WheelchairRobust`/`WalkerComfort`/`PramComfort`, dazu `accessibility_unknown`: `refuse`/`admit`; Fußweg-Hinweise in `walkNotes`, auch mit `VisuallyImpaired`), `include_rental_bike`, `bike_carriage` (`true`/`allow_unknown`), `prefer_flat`, `mobility_profile`, `taxi_pickup` (`door`/`rank`); `verbosity`, `limit`, `render_payload`. **Zeiten**: `departs`/`arrives` an Verbindung und Abschnitt, Ortszeit (Echtzeit: `departsExpected`/`arrivesExpected`); beginnt sie zu Fuß, steht die erste Fahrt in `firstRide`. **Höhenmeter**: nur Fuß-/Rad-Abschnitte tragen `ascentInMeters`/`descentInMeters`. **Durchbindung**: `staySeated: true` an einem Abschnitt heißt, der Fahrgast bleibt aus dem vorigen sitzen — kein Umstieg, also auch keinen zählen. Fehlt das Feld, ist nichts gesagt; nie selbst herleiten. **Flug**: `mot.type` `air`, Linie = Flugnummer, Halte = Flughäfen; ohne Flüge `submodes_deny: ['flug']`. **Bestellung**: eine Fahrt nur auf Bestellung trägt `booking` (wer, bis wann, wie) — Frist und Weg mit ihr nennen; „Ruftaxi" nur bei `Pflicht`. **Rad-Tempo**: Bei einer Radfahrt setzt `cycling_profile` das Tempo des Fahrers und damit die gemeldete Dauer — `family` bei kleinen Kindern, `ebike` bei E-Bike/Pedelec; sonst weglassen (= `normal`). **Fahrradmitnahme**: Geht es um ein Rad, sprich je Abschnitt `bikeCarriageConditions` aus (Bedingungen des Verbunds zur Abfahrtszeit); `bikesAllowed`/`bikeCarriageNote` sind nur die Grundregel, `bikeCarriageCoverage` die Wissensgrenze. **Barrierefreiheit je Halt**: `accessibilityBoarding`/`accessibilityAlighting` am Ein-/Ausstiegs-Halt einer Fahrt gelten nur dort, nie für Zwischenhalte, andere Fahrten oder die ganze Verbindung. **Unbekannt**: `unknown` dort bzw. in `bikeCarriage` ist weder barrierefrei noch Rad erlaubt. **Genannter Wunsch**: Nennt jemand, was ihn stört ("nicht in der Innenstadt parken"), hol die Option, die das löst, als EIGENEN Aufruf (`mobility_profile`) und empfiehl sie aus ihrem Nutzen — mit dem Nachteil, den die Antwort ihr gibt. **Carsharing nur auf Wunsch** (Carsharing, Leihauto, stadtmobil, Stadtflitzer): dann `car:sharing` in `access_modes` (zum ersten Halt) bzw. `egress_modes` (vom letzten); ein Stationsauto nur hin und zurück, mit `stay_minutes` (Aufenthalt am Ziel) neben `car:sharing` — ohne ihn erscheint es nicht; den Rückweg sagt `roundTrip`. **Umstiege nur auf Wunsch**: `change_reliability: true` nur bei Fragen nach sicheren Umstiegen, Puffer, „was, wenn der Zug zu spät ist" (ja: „mit sicherem Umstieg"; nein: „A nach B um 16:30", „wie oft umsteigen?" — die Zahl der Umstiege sagt jede Antwort); dann sagt `change` am Abschnitt, wie oft der Umstieg klappt, `reliability` das Risiko der Verbindung. `max_miss_risk` (Anteil 0–1, `0.1` = 10 %) fragt das ebenso ab und stellt neben eine Verbindung darüber die verlässlichere Alternative. **Nicht umgesetzt**: was `not_considered` nennt, blieb unberücksichtigt — nie als erfüllt ausgeben; `broken_journeys` fahren nicht. **Namen** in `lang` (Vorgabe `'de'`), der Name vor Ort daneben in `localName` — „Meran (Merano)". **Anleitung**: `get_usage_guide` mit `tool='connections'` — lies sie, bevor du filterst. **Anti-Fab**: Linien, Zeiten, Halte, Anlagen, Gleise und Umstiegs-Chancen ausschließlich aus dem Output dieses Aufrufs.
departures
departures
Abfahrten oder Ankünfte für EINE Haltestelle — **als Daten, für Ergebnisse, die du weiterverarbeitest**. Steht `show_departures` in deinem Werkzeug-Satz, ist das der Vordereingang für die Frage eines Menschen. Für „wann fährt von X", „letzte Stadtbahn von X" kommt die Auskunft aus diesen Werkzeugen; für eine A→B-Frage aus `connections`. **Pflicht** ist eine konkrete Stop-`id` aus einer vorhergehenden Ortsauflösung (z.B. `'de:03241:57'`); ein Haltestellen-NAME in `id` ist ein Argument-Fehler, keine leere Tafel. **Optional**: `time` (ohne Versatz MEZ/MESZ) und `is_arrival_time`; `modes` (Flüge `['air']`, ohne sie `['transit']`); `direction` (Halt-Name, in dessen Richtung gefahren wird) bzw. für eine weiche Angabe `target_bearing` mit `bearing_tolerance`; `lines` (Linie oder Linie@Richtung, wie die Tafel sie an `mot.line.direction.ids` nennt); `arrival_departure`; ein Fenster `time_range_seconds` mit `last_of_window`; und für den Umfang `verbosity`, `limit` sowie `render_payload`. Für „letzte Bahn heute", „erste S-Bahn morgen" statt der Tafel `first_last`: je Linie und Richtung erste und letzte Fahrt des Tages (`time` wählt den Tag). Für „hat X einen Aufzug zur U-Bahn?" statt der Tafel `facilities`: Aufzüge, Rolltreppen, Rampen des Halts. `modes`, `lines` und `direction` schränken hart ein. **Eine leere Tafel ist keine Auskunft**: blieb sie mit `['tram']` („Straßenbahn") leer, mit `['tram','subway']` nachfassen — sonst ohne den Filter. **Bestellung**: eine Abfahrt nur auf Bestellung trägt `booking` (wer, bis wann, wie) — Frist und Weg mit ihr nennen; „Ruftaxi" nur bei `Pflicht`. **Namen** in `lang` (Vorgabe `'de'`), der Name vor Ort daneben in `localName` — „Meran (Merano)". **Anleitung**: `get_usage_guide` mit `tool='departures'` — erste und letzte Fahrt, Aufzüge, die Echtzeit-, Ausfall- und Zitier-Felder. **Anti-Fab**: Linien, Richtungen, Zeiten, Gleise, Verspätung, Ausfall und Aufzüge ausschließlich aus dem Output dieses Aufrufs.
disruptions
disruptions
Aktuelle Störungen, Baustellen und Liniensperrungen im ÖPNV. Für „gibt es Störungen", „Ausfälle in X" ist dieses Werkzeug die Auskunft. **Datenlage — wichtig**: Störungsmeldungen liegen derzeit für Niedersachsen, Bremen, Hamburg und die Schweiz vor; nur dort ist eine leere Antwort eine Entwarnung. (Verbindungen und Abfahrten sind davon nicht betroffen — die gelten für Deutschland, Österreich, die Schweiz und Südtirol.) Eine leere Antwort ist deshalb nur dann eine Entwarnung, wenn das Feld `coverage` sie als solche ausweist; außerhalb der abgedeckten Gebiete heißt sie, dass du es nicht weißt. **Keine Pflicht-Args** — ohne Filter kommen die aktiven Meldungen, gekappt auf `limit`. Optional: `line` (Liniennummer/-token, z.B. `'6'`, `'U3'`) und `stop` (Haltestellen-Name) verknüpfen UND; `area` (Stadt/Gemeinde) bestimmt das `coverage` und sortiert die unverorteten Meldungen — es unterdrückt sie nicht: die kommen getrennt in `unplaced` zurück, auch ohne `area`. Nenne nur Filter, die der Nutzer wirklich nannte. **Format**: kompakter Einrück-Text (TOON), kein JSON; die Schreibweise steht in der Anleitung. **Anleitung**: `get_usage_guide` mit `tool='disruptions'` — die sieben `coverage`-Werte, die beiden Listen, die Felder einer Meldung und woran eine gekappte Antwort zu erkennen ist. **Anti-Fab**: nur zurückgegebene Meldungen nennen; eine Meldung ohne betroffene Linie und ohne betroffenen Halt ist eine allgemeine Störung und wird keiner Linie zugeschrieben, eine Meldung aus `unplaced` keinem Ort.
journey
journey_map_image
**Der Vordereingang für eine Verbindungsfrage in einem Client, der keine Ansicht zeichnet, aber Bilder zeigt** (z.B. eine Kommandozeile): plant die Fahrt wie `connections` und liefert zusätzlich EIN Kartenbild des Verlaufs — die Fahrt auf die echten Gleise und Straßen gelegt, mit der Herkunftsangabe der Kartendaten im Bild. **Zeichnet dein Client Ansichten (MCP-Apps/Widgets), nimm `show_connections`**; brauchst du die Daten zum Weiterverarbeiten, `connections`. **Pflicht sind BEIDE Endpunkte**, wie dort: `origin_id` UND `destination_id` — oder die vier Koordinaten-Felder; `render_payload` entfällt. **Optional** ist `index`: die wievielte Verbindung der Antwort gezeichnet wird, ab 0, ohne Angabe die erste. Der Antwort-Text ist der von `connections`; daneben steht das Bild und ein Satz dazu, welche Verbindung es zeigt. Der ganze Verlauf ist in EINER Farbe gezeichnet — eine Linie im Bild ist also kein Verkehrsmittel. Gibt es zu einem Bein keinen Verlauf, kommt kein Bild, und der Satz daneben sagt warum; die Fahrtdaten stehen dann unverändert im Text. **Anleitung**: `get_usage_guide` mit `tool='connections'`. **Anti-Fab**: Linien, Zeiten, Halte und Gleise ausschließlich aus dem Text dieses Aufrufs — **nie aus dem Bild abgelesen**.
line
line_course
Linienverlauf: die Halte-Folge einer ÖPNV-LINIE und ihre gezeichnete Strecke für die Karte — „wo fährt die Y entlang", „welche X-Linien gibt es". Für Linien-Fragen ist dieses Werkzeug die Auskunft. **Pflicht ist EINES**: `query` — Name/Nummer, wie ein Mensch sie schreibt (`'Heide-Shuttle'`, `'HS 2'`); ODER `id` aus einer früheren Antwort = GENAU EINE Linie. Sonst frag nach. **Optional**: `area` — der Ort, in dem die Linie fährt (`'Hannover'`; Dutzende Linien heißen `'100'`), `limit` (Default 8), `render_payload`, `format`. **Die Antwort**: je Fahrtrichtung ein Verlauf mit `headsign`, den `halts` als Namen und `pathOnMap` — der Strecke im Text, auf max. ~50 m vereinfacht; volle Auflösung: `render_payload: true`. **Mehrdeutig**: meint die Frage mehr Linien als eine Antwort ganz liest, kommt statt `lines` die Liste `candidates` (Nummer, Betreiber, Id) — ungezeichnet; dann den Ort erfragen oder mit `id` nachfassen. **Grenzen**: `geometryDegraded: true` heißt Luftlinien-Kette statt Straßenverlauf, `note` sagt es. Je Richtung EIN Fahrtmuster; ist `patternsTotal` größer, fährt sie üblicherweise so. `matchedTotal` über der Zahl der Linien heißt Ausschnitt. Unbekannter Ort: `note` sagt es, nichts wurde eingegrenzt. **Nicht dafür**: A→B (`connections`), Abfahrten (`departures`), Störungen (`disruptions`). **Anleitung**: `get_usage_guide` mit `tool='line_course'`. **Anti-Fab**: Linien, Halte, Reihenfolge, Strecke nur aus diesem Aufruf; findet sich keine, sag das.
link
link_datetime
Löst eine Zeit-Nennung in einen absoluten ISO-8601-Zeitpunkt auf — „morgen früh", „heute Abend um 18 Uhr", „in zwei Stunden", „um 8:30". Auch „jetzt"/„now"/„aktuell" wird aufgelöst: nutze das als kanonische Quelle für die aktuelle Zeit, statt dir selbst ein Datum auszudenken. Das Ergebnis (`candidates[].datetime_range.start`) geht direkt als `connections.time` bzw. `departures.time` weiter. Nennt der Nutzer bereits eine vollständige ISO-8601-Zeit mit Offset, ist kein Aufruf nötig. **Pflicht**: `text` — die Nennung, so wie der Nutzer sie schrieb. **Optional**: `lang` (`'de'` Default, `'en'`, `'fr'`) und `tz` (IANA-Name; ohne ihn wird die Lokalzeit als `Europe/Berlin` gelesen und als korrekter UTC-Instant zurückgegeben). **Was zurückkommt**: EIN Zeitpunkt, kein Fenster — `start` und `end` sind derselbe Instant. Eine nicht auflösbare Phrase liefert `candidates: []`; dann nachfragen, statt selbst zu rechnen. **Anleitung**: `get_usage_guide` mit `tool='link_datetime'` — insbesondere, auf welche Stunde eine vage Tageszeit fällt und was dann zu tun ist. **Anti-Fab**: Datum und Uhrzeit sind Fakten wie eine Liniennummer und stammen aus diesem Werkzeug — kein selbst-erfundenes Datum, keine eigene Datums-Arithmetik. Returns `candidates[].datetime_range:{start,end}`.
live
live_vehicles
Zeigt die Fahrzeuge, die im Umkreis eines Punktes gerade unterwegs sind — je Fahrzeug die Linie und ihre Position, mit Fahrtrichtung, soweit die Quelle sie kennt. **Pflicht sind `longitude` und `latitude`** (WGS84, Längengrad zuerst) — Koordinaten aus `search_place`, `nearby`, `reverse_geocode` oder `resolve_location`, kein Ortsname. **Optional** ist `radius_km`: der Umkreis in Kilometern, ohne Angabe 2, höchstens 10. Die Antwort trägt `recordedAt` — den Zeitpunkt der Aufnahme —, `vehicles` mit `line`, `lon`, `lat`, `placement` und, wo die Quelle sie kennt, `bearing`: die Fahrtrichtung in Grad ab Nord im Uhrzeigersinn, 0 bis 360; je Fahrzeug `dataSource`, die Quelle des Fahrplans seiner Fahrt, und `realtimeNone`, wo keine Echtzeit-Quelle die Fahrt kennt; dazu `attribution`, die Namensnennungen, die zu zeigen sind, wo die Positionen gezeigt werden. **Eine Position ist aus Fahrplan und Echtzeit gerechnet (`placement` `estimated`) oder von einer Quelle geortet (`measured`), und sie veraltet in Sekunden**: nenne sie nie ohne den Stand aus `recordedAt`, und nimm keine Position aus einem früheren Aufruf. Abgedeckt ist, was die Fahrplanauskunft kennt; wo sie nichts unterwegs weiß, ist die Aufnahme leer. Eine fehlgeschlagene Antwort heißt „nicht abrufbar", nicht „dort fährt nichts". **Anti-Fab**: Linien und Positionen ausschließlich aus dem Output dieses Aufrufs.
nearby
nearby
Findet Haltestellen, POIs und Adressen im Radius um eine KOORDINATE (Schwerpunkt Hannover/Niedersachsen) — „was ist in der Nähe von <lat,lon>", „welche Haltestellen liegen um diesen Punkt". Liegt nur ein Name vor, kommt erst eine Auflösung: `search_place` für eine Stadt oder Region, sonst die Ortsauflösung. **Pflicht**: `latitude`, `longitude`, `radius_m`. **Optional**: `limit` (Default 10); `node_types` — EIN String, mehrere Arten mit Komma: `'stop'`, `'address'`, `'poi'`, die Sharing-Angebote `'bike_rental'`, `'scooter_rental'`, `'car_sharing'`, `'taxi_stand'`, die Abstellanlagen `'park_and_ride'`, `'bike_and_ride'`, in Südtirol Ladesäulen `'charging_station'` und fahrende Taxis `'taxi'`, oder `'any'` (`'stop,bike_rental'`); `include_mots` (legt die bedienenden Linien über die Haltestellen-Treffer); `only_available` (nur Sharing-Treffer, Ladesäulen und Taxis, die gerade als frei gemeldet sind — UNBEKANNTE Verfügbarkeit gilt nicht als frei). **Format**: kompakter Einrück-Text (TOON), kein JSON. **Anleitung**: `get_usage_guide` mit `tool='nearby'` — die Werte im Einzelnen, was `'any'` nicht abdeckt, und was ein Treffer trägt (`category`, `modality`, `parking`, `charging`, `taxi`, `contactInfo`). **Anti-Fab**: nur die zurückgegebenen Namen, Typen, Distanzen und Verfügbarkeiten nennen; fehlt ein Feld, war es in der Quelle nicht getaggt — Öffnungszeiten und Preise stehen hier NICHT.
place
search_place
Löst den NAMEN einer Stadt, Region oder eines Bezirks in Koordinaten und OSM-Ids auf — der erste Schritt, wenn ein GEBIET verortet werden muss („was kann ich in <REGION> unternehmen", „wie ist das Wetter in <CITY>"). **Für eine HALTESTELLE ist dieses Werkzeug fast immer falsch**: es kennt Gebiete, keine Bahnsteige — auf einen Bahnhofs-Namen antwortet es mit keinem Ort, und die Id, die es liefert, ist eine OSM-Id und keine fahrbare Halte-Id. **Trägt die Anfrage `Bahnhof`, `Hauptbahnhof`, `Hbf` oder `Bf`, gehört sie an die Ortsauflösung** — „Köln Hauptbahnhof" und „Hannover Bahnhof" also dorthin: hier antworten beide mit einer leeren Liste. Dasselbe für Adresse und POI — alles, was Start, Ziel oder Abfahrtsort einer Fahrt sein kann; eine Stadt als Fahrt-Endpunkt („von Hannover nach Celle") ebenfalls. Von einer Koordinate zurück zum Namen geht `reverse_geocode`, die Umgebung einer Koordinate listet `nearby`. **Pflicht**: `name`. **Optional**: `lang` (derzeit ohne Wirkung). **`score`**: 1 = derselbe Name, ab 0,5 als ganzes Wort; liegt der erste Treffer darunter, trägt er den Namen nicht (Namensvetter, oder der Ort unter eigenem Namen: „Luxemburg" → `Luxembourg`) — Koordinate prüfen, sonst Ortsauflösung. **Anleitung**: `get_usage_guide` mit `tool='search_place'` — Abgrenzung, Ketten, `score`, mehrdeutige Namen. **Anti-Fab**: nur die zurückgegebenen Namen und Ids nutzen, keine Bauch-Geographie.
resolve
resolve_location
Löst Freitext in die Id auf, mit der gefahren wird — die Haltestelle, die Adresse oder den POI hinter „von <X> nach <Y>", „erzähl mir was über <POI>". Wo Routing, Abfahrtstafel oder POI-Steckbrief eine Id brauchen, steht es davor — auch wenn der Nutzer die Stadt dazu nennt („Hauptbahnhof Hannover"). Ein GEBIET (Stadt/Region) verortet `search_place`. **Pflicht**: `query` — nur der Name: `'Kelsterbach Bahnhof'`, NICHT `'für Kelsterbach Bahnhof'`. Wegzulassen sind `für`, `vom`, `von`, `nach`, `bis`; ein führendes `am`/`an`/`in`/`zur`/`auf` bleibt stehen — so heißen echte Halte („Am Wehrhahn"). **Optional**: `lat`/`lon` (Ranking-Bias), `limit`, `node_types` (`'stop'`/`'address'`/`'poi'`/`'any'`, mehrere mit Komma in EINEM String; eine andere Art ist ein Argument-Fehler), `city_station` (Query = ganze Stadt → deren (Haupt-)Bahnhof). **Art-Wort in `node_types`, nicht in den Namen**: „Haltestelle X" → `'stop'`, „Adresse X" → `'address'`, „POI X"/„Sehenswürdigkeit X" → `'poi'`, `query` je ohne das Wort. **A→B: zweimal rufen** — Start, Ziel. Jeder Treffer trägt `type` und `location`; NUR ein `stop` hat eine fahrbare DH-Id, nie eine erfinden. Ein `stop` nennt in `modes`, was dort hält (`['tram','bus']`) — so ist „die Stadtbahn-Haltestelle" unter Namensvettern zu erkennen. Nennt `name` den Ort in der Sprache der Frage, steht der Name vor Ort in `localName`. **Anleitung**: `get_usage_guide` — Abgrenzung, Argumente, Rangfolge. **Anti-Fab**: nur die Treffer aus dem Output dieses Aufrufs verwenden.
reverse
reverse_geocode
Benennt, was an einer KOORDINATE liegt — die Orte, in denen sie liegt („was liegt bei <lat,lon>"), mit `level` eine bestimmte Ebene davon, mit `level='street'` die nächste Adresse oder Straße (der Lookup für eine GPS-Startposition). **Abgrenzung**: den Weg zurück (Name → Koordinate und OSM-Ids) geht `search_place`, die fahrbare Halte-Id liefert die Ortsauflösung, und `nearby` listet auf, was UM eine Koordinate liegt, statt den Punkt selbst zu benennen. **Pflicht**: `lat` und `lon` — geschrieben auch `latitude`/`longitude`, so wie `nearby` die Koordinate nimmt; je Aufruf nur eine der beiden Schreibweisen. **Optional**: `radius_m` (Reichweite der nächsten Adresse in METERN, Default 500, höchstens 5000; ein Ort, IN dem die Koordinate liegt, hat Abstand 0 und ist immer dabei), `limit` (Höchstzahl Treffer, Default 10, Maximum 50) und `level` — `'place'` (Default: alle Orte an der Koordinate, kleinster zuerst), `'city'` (die Stadt/Gemeinde), `'suburb'` (der Stadt- oder Ortsteil) oder `'street'`. Kennt die Karte die gewünschte Ebene hier nicht, antwortet die nächst-gröbere, erkennbar am `place_type`; ein unbekannter Wert wirkt wie `'place'`. **Anleitung**: `get_usage_guide` mit `tool='reverse_geocode'`. **Anti-Fab**: nur die zurückgegebenen Orts- und Straßen-Namen verwenden, einschließlich der Hausnummer aus der Karte — nie eine erfinden.
usage
get_usage_guide
Die ausführliche Anleitung zu den Werkzeugen dieses Katalogs: wofür ein Werkzeug da ist, wogegen es abzugrenzen ist, was seine Argumente bewirken, was zurückkommt und was daraus zitiert werden darf. Die `description` eines Werkzeugs ist die Kurzform, dieser Text die vollständige. **Optional** `tool` — der Name genau eines Werkzeugs, dessen Abschnitt du lesen willst; weggelassen kommt die ganze Anleitung. Lies den Abschnitt eines Werkzeugs, bevor du dessen Filter setzt oder ein leeres Ergebnis als Antwort weitergibst. **Der Abruf ohne `tool` ist teuer**: er bringt die Abschnitte ALLER Werkzeuge dieses Katalogs auf einmal, ein Vielfaches eines einzelnen. Setze `tool`, sobald feststeht, um welches Werkzeug es geht; ohne Argument nur für den Überblick über den ganzen Katalog.

Tools removed

Tools this server used to expose. Anything built against them stopped working on the day they went.

buy_ticket
removed 6 Nov 2026
list_active_tickets
removed 6 Nov 2026
ticket_control_view
removed 6 Nov 2026
ticket_offers
removed 6 Nov 2026

Endpoints

URLTransportStateLatencyChecked
https://ai.projektionisten.eu/mmcp streamable-http sign-in 151 ms 12 min ago

Alternatives to MobilityMCP

same job, measured the same way
Rhein-Ruhr Fahrplan MCP
by marcproe

Public transit data for the Rhein-Ruhr region: live departures, trips, disruptions, GTFS schedules.

150 installs/wk local only
PTV MCP by UnClick
by malamutemayhem

Melbourne / Victoria public transport timetables, departures, and disruptions (PTV). By UnClick.

63 installs/wk local only
SL – Stockholm public transport
by hashtagsmile

Stockholm public transport (SL): live departures, trips to addresses with exits, disruptions.

4 tools answering
Ns MCP
by mrfentmen

NS Dutch Railways API: departures, stations, journeys, disruptions, fares.

51 installs/wk local only
TransCAPI
by transcapi

UK and Ireland transport: live buses and trains, journey planning, rail fares, disruptions.

152 installs/wk local only
Transport Nsw
by pipeworx-io

Transport for NSW MCP — journey planning, live departures, service alerts and commuter car-park…

263 installs/wk 48 tools answering
Swiss Transport MCP
by malkreide

OJP 2.0 journey planning, SIRI-SX disruptions, occupancy, fares, train formation

122 installs/wk local only
Faceabot Rail Belgium (SNCB/NMBS)
by faceabot

Belgian trains for AI agents: live journeys, departures, delays, disruptions. Free, no key.

5 tools answering

MobilityMCP — questions

Answers built from our own checks of this server.

What can MobilityMCP do?
It exposes 29 tools, read directly from the server on our last check. Among them: connections, departures, disruptions, get_usage_guide, journey_map_image, line_course and 23 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
What is MobilityMCP mostly used for?
Its tools cluster around widget and show. That is what this server is built to work with — the grouping comes from the actual tool names, not from a category we assigned.
Is MobilityMCP working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 91 of 91 checks got a reply (100.0%), average response time 424 ms. The bar chart above shows every period we have measured.
Did MobilityMCP ever remove tools?
Yes. buy_ticket, list_active_tickets, ticket_control_view, ticket_offers are no longer exposed — we recorded the date each one disappeared. A tool vanishing usually means a breaking change for anything that depended on it.
How do I connect MobilityMCP?
Copy the ready config from this page. We generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each in the form that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address. You sign in through your browser once and the client keeps the session: no key to copy, and it refuses anonymous clients.
How do you sign in to MobilityMCP?
No API key is involved. MobilityMCP answers our knock with an OAuth challenge, so you authorise it once in your browser and the client keeps the session. That is also why we see no tool list: it will not describe itself to an anonymous client, and that is the server working as intended, not a fault.
How fast is MobilityMCP?
It answers our handshake in 424 ms on average, which is faster than 30% of all working MCP servers we measure. The comparison comes from our own checks across the whole registry, every 15 minutes.