← Back to search

io.github.malkreide/swiss-road-mobility-mcp

malkreide Scanned 18d ago

GBFS shared mobility, EV charging, DATEX II traffic, Park & Rail

D
56.6 / 100

Versions

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

Tools 15

road_find_sharing
annotations: none low

Find shared mobility vehicles and stations near a location in Switzerland. Searches for bikes, e-bikes, e-scooters, cars, and other shared vehicles within a radius around GPS coordinates. Returns real-time availability data from sharedmobility.ch. Like checking a mobility app: "What sharing options are near me?" Data source: sharedmobility.ch (Swiss Federal Office of Energy). No API key required – completely open data! Returns: JSON with nearby vehicles/stations, grouped by type, with availability status and booking app links.

params FindSharingInput
road_search_sharing
annotations: none low

Search for shared mobility stations by name or address. Full-text search across all Swiss shared mobility stations. Useful when you know the station name but not the coordinates. Example: "Find all PubliBike stations near 'Bahnhof'" Returns: JSON with matching stations, their locations, and availability.

params SearchSharingInput
road_sharing_providers
annotations: none low

List all shared mobility providers operating in Switzerland. Shows which companies offer shared bikes, e-scooters, cars etc., what vehicle types they have, and links to their booking apps. Like checking the "About" page of a mobility platform. Returns: JSON with all providers, their vehicle types, and app links.

road_find_charger
annotations: none low

Find EV charging stations near a location in Switzerland. Searches ich-tanke-strom.ch data for nearby charging stations with real-time availability, plug types, and charging power. Like the "nearest charger" feature in an electric car's navigation. Data source: ich-tanke-strom.ch (Swiss Federal Office of Energy). No API key required – completely open data! Returns: JSON with nearby charging stations sorted by distance, including real-time status (free/occupied), plug types, charging power (kW), and operator information.

ctx Context params FindChargerInput
road_charger_status
annotations: none low

Check real-time availability of EV charging stations. Can check specific stations by ID, or get overall statistics for ALL charging points in Switzerland. Use road_find_charger first to get station IDs, then use this tool to check their current status. Returns: JSON with real-time status per station, or overall statistics (how many free/occupied/out of service).

params ChargerStatusInput
road_check_status
annotations: none low

Check the health of all road mobility data sources. Tests connectivity to sharedmobility.ch and ich-tanke-strom.ch. Useful for diagnosing connection issues. Returns: JSON with status of each API endpoint.

ctx Context
road_traffic_situations
annotations: none low

Get current Swiss traffic events: accidents, roadworks, congestion. Fetches real-time traffic messages from ASTRA's DATEX II platform. Data is updated live by Swiss Traffic Management Center (VMZ-CH), cantonal police, and road operation units. Complements Phase 1: While road_find_sharing shows WHERE vehicles are available, this tool shows WHY a road is currently blocked. REQUIRES: OPENTRANSPORTDATA_API_KEY environment variable. Free registration: https://api-manager.opentransportdata.swiss Data source: ASTRA VMZ-CH via opentransportdata.swiss (DATEX II v2.3). Cache TTL: 2 minutes (real-time updates). Returns: JSON with list of traffic situations, each containing: - id: Situation identifier - records: List of situation records with: - category: Event type (accident/roadwork/congestion/etc.) - validity_status: active/revoked - start_time / end_time: Validity period - severity: highest/high/medium/low/lowest - description: Human-readable text (German preferred) - creation_time: When situation was created

params TrafficSituationsInput
road_traffic_counters
annotations: none low

Get real-time vehicle counts and speeds at Swiss traffic measurement stations. Finds nearby counting stations and returns live traffic flow data: vehicles per hour (separated by light/heavy vehicles) and average speeds. Data is updated every minute by ASTRA and cantonal road authorities. This is the «digital tally counter» of Swiss roads – precise, live, distinguishing passenger cars from trucks. Use case: «How busy is the A1 near Zurich right now?» or «How much truck traffic passes through Lucerne hourly?» REQUIRES: OPENTRANSPORTDATA_API_KEY environment variable. Free registration: https://api-manager.opentransportdata.swiss Data source: ASTRA & cantonal authorities via opentransportdata.swiss (DATEX II). Cache TTL: Site table 24h (static) + measurements 1 minute (real-time). Returns: JSON with nearby counting stations and their current measurements: - site_id: Unique station identifier - name: Station name - distance_km: Distance from search center - latitude / longitude: Station coordinates - supplier: Data provider (ASTRA, Kanton ZH, etc.) - measurement_time: Timestamp of latest measurement - flow_light_vehicles_per_hour: Cars, motorcycles, buses - flow_heavy_vehicles_per_hour: Trucks, articulated lorries - flow_total_per_hour: Combined flow - avg_speed_light_kmh: Average speed of light vehicles - avg_speed_heavy_kmh: Average speed of heavy vehicles

params TrafficCountersInput
road_counter_sites
annotations: none low

List Swiss traffic counting stations near a location (without real-time data). Returns the measurement site metadata (name, coordinates, supplier) without fetching the live measurement data. Use this to discover available stations before querying road_traffic_counters. Site table is cached for 24 hours (rarely changes). REQUIRES: OPENTRANSPORTDATA_API_KEY environment variable. Free registration: https://api-manager.opentransportdata.swiss Returns: JSON with list of nearby counting stations: - id: DATEX II station identifier (use in road_traffic_counters) - name: Human-readable station name (German) - latitude / longitude: GPS coordinates - distance_km: Distance from your search location - supplier: Data provider (ASTRA, Kanton ZH, Kanton BE, etc.)

params CounterSitesInput
road_park_rail
annotations: none low

Find Park & Rail parking facilities near Swiss train stations. Returns SBB-operated Park & Rail lots with capacity and location. Phase 3 tool – the link between road and rail: «Park here, then take the train.» No API key required – completely open data! Data source: Open-Data-Plattform Mobilität Schweiz (opentransportdata.swiss, Park+Rail GeoJSON). Cache TTL: 5 minutes. Returns: JSON with nearby Park & Rail facilities sorted by distance, including total spaces and capacity by category.

params ParkRailNearbyInput
road_mobility_snapshot
annotations: none low

Get a complete mobility picture for any Swiss location in one call. Aggregates in parallel: - Shared vehicles nearby (bikes, e-scooters, cars) - EV charging stations - Park & Rail facilities at nearby train stations - Nearest train station (transport.opendata.ch) - Traffic situations if Phase 2 API key is configured (optional) This is the «mobility cockpit» – the control tower view. Instead of calling 5 different tools, get everything at once. Phase 3 cross-server tool: No extra API key needed beyond what Phase 2 already requires (and Phase 2 data is optional). Perfect for demos: «Show me everything mobility-related at [location].» Data sources: - sharedmobility.ch (no key) - ich-tanke-strom.ch (no key) - SBB Open Data / data.sbb.ch (no key) - transport.opendata.ch (no key) - opentransportdata.swiss DATEX II (optional, Phase 2 key) Returns: JSON with nearest_station, shared_mobility, ev_charging, park_rail, and optional traffic_situations – all for one location.

ctx Context params MobilitySnapshotInput
road_multimodal_plan
annotations: none low

Plan a multimodal trip: Drive → Park & Rail → Train → Destination. The «Holy Grail» of Phase 3: combines all data sources into a complete door-to-door multimodal route plan. Workflow (all in parallel where possible): 1. Find the nearest train station from your start location 2. Find Park & Rail facilities near the start (where to park your car) 3. Get public transport connections from nearest station to destination 4. Check shared mobility options at start for last-mile to station 5. Assemble everything into a step-by-step route plan Use case: «I'm in Dietikon with a car. I need to get to Bern. Where can I park? Which train should I take?» No API key required – uses: - SBB Open Data (Park & Rail) – free - transport.opendata.ch (PT connections) – free - sharedmobility.ch (sharing options) – free Data sources: - SBB Open Data Portal (data.sbb.ch) – Park & Rail - transport.opendata.ch – Journey planning - sharedmobility.ch – Sharing last mile Returns: JSON with: - nearest_station: Closest train station from start - recommended_park_rail: Best P+R option - plan_steps: Step-by-step multimodal route - all_ov_connections: All available PT connections - last_mile_sharing: Sharing options at start location

ctx Context params MultimodalPlanInput
road_geocode_address
annotations: none low

Convert a Swiss address to GPS coordinates using the official federal address registry. Uses swisstopo's amtliches Gebäudeadressverzeichnis (GWR-based) – the authoritative Swiss federal building address register containing every officially registered address in Switzerland. Unlike general geocoders, this returns only verified, legally registered addresses. Every result has an EGAID (Eidgenössischer Adressidentifikator) and EGID (Gebäudeidentifikator) from the federal GWR register. Think of it as the «official digital postman»: if the address exists in Switzerland, it's here. If it's not here, it may not be officially registered. Phase 4 tool – no API key required! Data source: geo.admin.ch / swisstopo amtliches Gebäudeadressverzeichnis. Returns: JSON with matching addresses, each containing: - address: Full address string (e.g. «Bahnhofstrasse 1 8001 Zürich») - latitude / longitude: WGS84 coordinates - feature_id: ID in the federal address register - source: Layer ID (ch.swisstopo.amtliches-gebaeudeadressverzeichnis)

params GeocodeAddressInput
road_reverse_geocode
annotations: none low

Find the nearest official Swiss addresses for given GPS coordinates. Uses the federal building address register (amtliches Gebäudeadressverzeichnis) to identify the nearest registered building addresses to any point in Switzerland. Returns official GWR (Gebäude- und Wohnungsregister) data including: - EGID (Eidgenössischer Gebäudeidentifikator) – unique federal building ID - EGAID (Eidgenössischer Adressidentifikator) – unique federal address ID - Building category (residential / non-residential) - Official address status Especially useful for enriching mobility data: finding the exact legal address of a charging station, Park & Rail facility, or sharing station. Phase 4 tool – no API key required! Data source: geo.admin.ch / swisstopo amtliches Gebäudeadressverzeichnis (GWR). Returns: JSON with nearest official addresses including EGID/EGAID identifiers, municipality data, and building category.

params ReverseGeocodeInput
road_classify_road
annotations: none low

Classify roads at a location using the official Swiss topographic road network (swissTLM3D). The swissTLM3D is the authoritative federal road network dataset from swisstopo. It classifies every road in Switzerland by: Road type (Objektart): 🛣️ Autobahn · 🚗 Hauptstrasse · 🏘️ Nebenstrasse · 🚶 Weg/Pfad … Functional class (Verkehrsbedeutung): Hauptverbindungsstrasse · Verbindungsstrasse · Sammelstrasse · Zufahrtstrasse Surface (Belagsart): Hartbelag (Asphalt/Beton) · Weich-/Naturbelag Ownership (Eigentümer): Bund · Kanton · Gemeinde · Privat Access restriction (Verkehrsbeschränkung): Keine Beschränkung · Einsatzkräfte · Landwirtschaft · Fussgänger und Radfahrer · Kein öffentlicher Verkehr … Use cases: - «Is this a motorway or a local road?» - «Who maintains this road – canton or municipality?» - Enriching traffic counter data with official road classification Phase 4 tool – no API key required! Data source: geo.admin.ch / swisstopo swissTLM3D Strassen. Returns: JSON with road segments at the location, each containing: - road_name: Official road name (if assigned) - road_type: {code, label_de, label_en, emoji, network_importance} - surface, functional_class, ownership, access_restriction Plus a type_summary overview.

params ClassifyRoadInput

Permissions 4

network medium
Server uses network capabilities via: httpx, socket
filesystem low
Server uses filesystem capabilities via: open(), os, pathlib, shutil, tempfile
shell high
Server uses shell capabilities via: subprocess
env_vars low
Server uses env_vars capabilities via: os.environ

Scan Findings 48

low
Tool 'road_find_sharing' has no annotations annotation_checker · 100%
low
Tool 'road_search_sharing' has no annotations annotation_checker · 100%
low
Tool 'road_sharing_providers' has no annotations annotation_checker · 100%
low
Tool 'road_find_charger' has no annotations annotation_checker · 100%
low
Tool 'road_charger_status' has no annotations annotation_checker · 100%
low
Tool 'road_check_status' has no annotations annotation_checker · 100%
low
Tool 'road_traffic_situations' has no annotations annotation_checker · 100%
low
Tool 'road_traffic_counters' has no annotations annotation_checker · 100%
low
Tool 'road_counter_sites' has no annotations annotation_checker · 100%
low
Tool 'road_park_rail' has no annotations annotation_checker · 100%
low
Tool 'road_mobility_snapshot' has no annotations annotation_checker · 100%
low
Tool 'road_multimodal_plan' has no annotations annotation_checker · 100%
low
Tool 'road_geocode_address' has no annotations annotation_checker · 100%
low
Tool 'road_reverse_geocode' has no annotations annotation_checker · 100%
low
Tool 'road_classify_road' has no annotations annotation_checker · 100%
info
Sandbox failed to start for behavioral verification behavioral_verifier · 100%
medium
Vulnerable dependency: httpx@0.28.1,<1.0.0 (GHSA-h8pj-cxx2-jfg2) dependency_analyzer · 95%
medium
Vulnerable dependency: httpx@0.28.1,<1.0.0 (PYSEC-2022-183) dependency_analyzer · 95%
medium
Vulnerable dependency: pydantic@2.13.4,<3.0.0 (GHSA-5jqp-qgf6-3pvh) dependency_analyzer · 95%
medium
Vulnerable dependency: pydantic@2.13.4,<3.0.0 (GHSA-mr82-8j83-vxmv) dependency_analyzer · 95%
medium
Vulnerable dependency: pydantic@2.13.4,<3.0.0 (PYSEC-2021-47) dependency_analyzer · 95%
medium
Vulnerable dependency: pydantic@2.13.4,<3.0.0 (PYSEC-2026-1812) dependency_analyzer · 95%
info
pyproject.toml metadata manifest_parser · 100%
info
Tool: road_find_sharing manifest_parser · 90%
info
Tool: road_search_sharing manifest_parser · 90%
info
Tool: road_sharing_providers manifest_parser · 90%
info
Tool: road_find_charger manifest_parser · 90%
info
Tool: road_charger_status manifest_parser · 90%
info
Tool: road_check_status manifest_parser · 90%
info
Tool: road_traffic_situations manifest_parser · 90%
info
Tool: road_traffic_counters manifest_parser · 90%
info
Tool: road_counter_sites manifest_parser · 90%
info
Tool: road_park_rail manifest_parser · 90%
info
Tool: road_mobility_snapshot manifest_parser · 90%
info
Tool: road_multimodal_plan manifest_parser · 90%
info
Tool: road_geocode_address manifest_parser · 90%
info
Tool: road_reverse_geocode manifest_parser · 90%
info
Tool: road_classify_road manifest_parser · 90%
info
Transport: sse manifest_parser · 90%
info
Required env vars (20) manifest_parser · 80%
info
Sandbox failed to start for output poisoning scan output_poisoning · 100%
medium
Permission: network access detected permission_analyzer · 90%
low
Permission: filesystem access detected permission_analyzer · 90%
high
Permission: shell access detected permission_analyzer · 95%
low
Permission: env_vars access detected permission_analyzer · 90%
critical
Invisible Unicode characters in 'road_classify_road' poisoning · 92%
info
No dependency files found for SBOM generation sbom_generator · 100%
medium
No build provenance detected (SLSA L0) slsa_assessor · 90%