← Back to search

io.github.malkreide/swiss-transport-mcp

malkreide Scanned 25d ago

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

C
72.6 / 100

Versions

0.3.3latest
first seen Jun 30, 2026
PermissionsTool SafetyAuthAnnotationsCode QualityStabilitySpecVuln HistoryAuthorTransparencyCommunity

Tools 11

transport_search_stop
annotations: none low

Search for Swiss public transport stops and stations by name. Searches across all Swiss public transport stops (train stations, tram/bus stops, boat stations). Returns stop IDs needed for transport_departures and transport_trip_plan. Returns: Matching stops with id, name, coordinates, and transport modes.

params SearchStopInput
transport_nearby_stops
annotations: none low

Find public transport stops near a geographic location. Useful for finding stops near a school, address, or point of interest. Swiss coordinates only (lat 45–48.5, lon 5.5–10.8). Returns: Nearby stops with id, name, coordinates, and distance info.

params SearchStopByCoordInput
transport_departures
annotations: none low

Get upcoming departures or arrivals at a Swiss public transport stop. Shows real-time information including delays when available. Like a digital departure board at a train station. Use transport_search_stop first to get the stop_id. Returns: Departures with line, destination, scheduled time, real-time time, delay, and platform.

ctx Context params DeparturesInput
transport_trip_plan
annotations: none low

Plan a journey between two locations in Switzerland. Works like the SBB app: enter origin and destination (stop IDs or place names), get multiple trip options with transfers, durations, and transport modes. For best results, use stop IDs from transport_search_stop. Place names (addresses) also work but may be slower. Returns: Trip options, each with legs (individual journey segments), total duration, number of transfers, and transport modes used.

ctx Context params TripPlanInput
transport_search_datasets
annotations: none low

Search the Swiss transport open data catalog (~90 datasets). Find datasets about timetables, real-time data, GTFS feeds, accessibility info, traffic counters, and more from opentransportdata.swiss. Returns: Matching datasets with name, description, formats, and download URLs.

params DatasetSearchInput
transport_get_dataset
annotations: none low

Get full details of a specific transport dataset. Returns metadata, description, all available resources (files/APIs) with download URLs and formats. Use transport_search_datasets first to find the dataset ID. Returns: Full dataset metadata, resources with URLs, and format info.

params DatasetDetailInput
get_transport_disruptions
annotations: none low

Aktuelle Störungsmeldungen im Schweizer öffentlichen Verkehr abrufen. Liefert Informationen zu Zugausfällen, Verspätungen, Gleisänderungen, Streckensperrungen und anderen Betriebsstörungen. Args: filter_text: Suchbegriff zum Filtern (z.B. "Zürich", "S-Bahn", "IC 1", "Bern-Thun"). Leer = alle Störungen. language: Sprache der Meldungen. DE (Deutsch), FR (Französisch), IT (Italienisch), EN (Englisch). max_results: Maximale Anzahl Ergebnisse (1-50). Standard: 15. Beispiele: - Alle aktuellen Störungen: get_transport_disruptions() - Störungen in Zürich: get_transport_disruptions(filter_text="Zürich") - S-Bahn Störungen: get_transport_disruptions(filter_text="S-Bahn") - Strecke prüfen: get_transport_disruptions(filter_text="Bern")

language str filter_text str max_results int
get_train_occupancy
annotations: none low

Auslastungsprognose für Schweizer Züge abrufen. Zeigt, wie voll ein bestimmter Zug voraussichtlich sein wird, aufgeteilt nach 1. und 2. Klasse pro Streckenabschnitt. Auslastungsstufen: wenig belegt, mässig belegt, nur Stehplätze. Zwei Abfragemodi: 1. Nach Zugnummer: train_number + operator angeben 2. Nach Strecke: departure_station + arrival_station angeben Args: train_number: Zugnummer (z.B. "1009", "IC 708"). Zugtyp-Präfixe werden automatisch entfernt. departure_station: Abfahrtsort für Streckensuche (z.B. "Zürich HB") arrival_station: Ankunftsort für Streckensuche (z.B. "Bern") operation_date: Betriebstag YYYY-MM-DD (Standard: heute). Prognosen sind bis 3 Monate voraus verfügbar. operator: Betreiber-Code. "11"=SBB, "33"=BLS, "65"=Thurbo, "82"=SOB. Beispiele: - Bestimmter Zug: get_train_occupancy(train_number="1009") - BLS-Zug: get_train_occupancy(train_number="2806", operator="33") - Strecke: get_train_occupancy(departure_station="Zürich HB", arrival_station="Bern")

operator str train_number str operation_date str arrival_station str departure_station str
get_ticket_price
annotations: none low

Ticketpreise für eine ÖV-Verbindung in der Schweiz abfragen. Berechnet den Fahrpreis für eine Verbindung inklusive Routeninformation. Zeigt reguläre Tarife an. Rabatte (Halbtax, GA) sind möglicherweise nicht vollständig berücksichtigt. Args: origin: Abfahrtsort (z.B. "Zürich HB", "Wädenswil", "Bern") destination: Ankunftsort (z.B. "Bern", "Luzern", "Basel SBB") departure_time: Abfahrtszeit im Format YYYY-MM-DDTHH:MM (z.B. "2026-03-01T08:00"). Standard: jetzt. travel_class: Reiseklasse. "first" = 1. Klasse, "second" = 2. Klasse. Beispiele: - Einfache Preisabfrage: get_ticket_price(origin="Zürich HB", destination="Bern") - Mit Zeitangabe: get_ticket_price(origin="Wädenswil", destination="Luzern", departure_time="2026-03-01T08:00") - 1. Klasse: get_ticket_price(origin="Basel SBB", destination="Genf", travel_class="first") Hinweis: Für verbindliche Preise immer sbb.ch oder den Schalter konsultieren.

origin str destination str travel_class str departure_time str
get_train_composition
annotations: none low

Zugzusammensetzung und Wagenreihung für einen Schweizer Zug abrufen. Zeigt die Wagenreihung, Klassen, Sektoren, Ausstattung (Rollstuhlplatz, Velohaken, Speisewagen, Familienzone) und Gleisbelegung an. Args: train_number: Zugnummer (z.B. "2806", "1009", "708"). Nur die Nummer, ohne Zugtyp-Präfix. railway_company: Eisenbahnunternehmen (EVU). Erlaubt: SBBP (SBB), BLSP (BLS), RhB (Rhätische Bahn), SOB (Südostbahn), THURBO, TPF, TRN, MBC, OeBB, VDBB, ZB. operation_date: Betriebstag YYYY-MM-DD. Standard: heute. Wichtig: Stop-based nur für HEUTE verfügbar. show_details: Detailgrad. "stop_based" = kompakt (empfohlen), "vehicle_based" = pro Fahrzeug, "full" = alles. Beispiele: - SBB-Zug: get_train_composition(train_number="1009") - BLS-Zug: get_train_composition(train_number="2806", railway_company="BLSP") - Detailliert: get_train_composition(train_number="708", show_details="vehicle_based") Typische Fragen, die damit beantwortet werden können: - "Hat der IC nach Bern einen Speisewagen?" - "Wo kann ich mit dem Rollstuhl einsteigen?" - "In welchem Sektor hält die 1. Klasse?" - "Gibt es Veloplätze im Zug?"

show_details str train_number str operation_date str railway_company str
check_transport_api_status
annotations: none low

Prüft den Verbindungsstatus aller konfigurierten Transport-APIs. Zeigt an, welche APIs verfügbar sind, ob die API-Keys gültig sind und ob die Dienste erreichbar sind.

Permissions 3

network medium
Server uses network capabilities via: httpx, urllib
filesystem low
Server uses filesystem capabilities via: open(), os, pathlib, tempfile
env_vars low
Server uses env_vars capabilities via: os.environ

Scan Findings 38

info
Sandbox failed to start for output poisoning scan output_poisoning · 100%
low
Tool 'transport_search_stop' has no annotations annotation_checker · 100%
low
Tool 'transport_nearby_stops' has no annotations annotation_checker · 100%
low
Tool 'transport_departures' has no annotations annotation_checker · 100%
low
Tool 'transport_trip_plan' has no annotations annotation_checker · 100%
low
Tool 'transport_search_datasets' has no annotations annotation_checker · 100%
low
Tool 'transport_get_dataset' has no annotations annotation_checker · 100%
low
Tool 'get_transport_disruptions' has no annotations annotation_checker · 100%
low
Tool 'get_train_occupancy' has no annotations annotation_checker · 100%
low
Tool 'get_ticket_price' has no annotations annotation_checker · 100%
low
Tool 'get_train_composition' has no annotations annotation_checker · 100%
low
Tool 'check_transport_api_status' has no annotations annotation_checker · 100%
info
Sandbox failed to start for behavioral verification behavioral_verifier · 100%
medium
Vulnerable dependency: httpx@0.27.0,<1.0.0 (GHSA-h8pj-cxx2-jfg2) dependency_analyzer · 95%
medium
Vulnerable dependency: httpx@0.27.0,<1.0.0 (PYSEC-2022-183) dependency_analyzer · 95%
medium
Vulnerable dependency: pydantic@2.0.0,<3.0.0 (GHSA-5jqp-qgf6-3pvh) dependency_analyzer · 95%
medium
Vulnerable dependency: pydantic@2.0.0,<3.0.0 (GHSA-mr82-8j83-vxmv) dependency_analyzer · 95%
medium
Vulnerable dependency: pydantic@2.0.0,<3.0.0 (PYSEC-2021-47) dependency_analyzer · 95%
medium
Vulnerable dependency: pydantic@2.0.0,<3.0.0 (PYSEC-2026-1812) dependency_analyzer · 95%
info
pyproject.toml metadata manifest_parser · 100%
info
Tool: transport_search_stop manifest_parser · 90%
info
Tool: transport_nearby_stops manifest_parser · 90%
info
Tool: transport_departures manifest_parser · 90%
info
Tool: transport_trip_plan manifest_parser · 90%
info
Tool: transport_search_datasets manifest_parser · 90%
info
Tool: transport_get_dataset manifest_parser · 90%
info
Tool: get_transport_disruptions manifest_parser · 90%
info
Tool: get_train_occupancy manifest_parser · 90%
info
Tool: get_ticket_price manifest_parser · 90%
info
Tool: get_train_composition manifest_parser · 90%
info
Tool: check_transport_api_status manifest_parser · 90%
info
Transport: streamable-http manifest_parser · 80%
info
Required env vars (8) manifest_parser · 80%
medium
Permission: network access detected permission_analyzer · 90%
low
Permission: filesystem access detected permission_analyzer · 80%
low
Permission: env_vars access detected permission_analyzer · 90%
info
No dependency files found for SBOM generation sbom_generator · 100%
medium
No build provenance detected (SLSA L0) slsa_assessor · 90%