Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

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

PYPI · SWISS-ROAD-MOBILITY-MCP · SCANNED SEP 20

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

−15 this week 63 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security50
  • Malware scan not yet available for this package.Unverified
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
  • 1 of 32 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency35
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
  • License check failed: the license (MIT License) isn't a recognized OSI-approved license. See how to fix → Fail
  • Actively maintained (last published 51 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability74
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 3334 tokens (~208/item across 16 items; 15 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management83
  • Stability observed for 25 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage71
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 0% of tool parameters carry a description.Fail
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 15 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 17 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Install

How do I install the io.github.malkreide/swiss-road-mobility-mcp server?

io.github.malkreide/swiss-road-mobility-mcp runs locally as a PyPI package, launched with uvx swiss-road-mobility-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · swiss-road-mobility-mcp

# add to Claude Code
claude mcp add malkreide-swiss-road-mobility-mcp -- uvx swiss-road-mobility-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "malkreide-swiss-road-mobility-mcp": {
      "command": "uvx",
      "args": [
        "swiss-road-mobility-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "malkreide-swiss-road-mobility-mcp": {
      "command": "uvx",
      "args": [
        "swiss-road-mobility-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add malkreide-swiss-road-mobility-mcp -- uvx swiss-road-mobility-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "malkreide-swiss-road-mobility-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "swiss-road-mobility-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add malkreide-swiss-road-mobility-mcp --command uvx --arg swiss-road-mobility-mcp
# ~/.hermes/config.yaml
mcp_servers:
  malkreide-swiss-road-mobility-mcp:
    command: "uvx"
    args: ["swiss-road-mobility-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "malkreide-swiss-road-mobility-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "swiss-road-mobility-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add malkreide-swiss-road-mobility-mcp -t stdio -c uvx -a swiss-road-mobility-mcp
// mcp.json
{
  "mcpServers": {
    "malkreide-swiss-road-mobility-mcp": {
      "command": "uvx",
      "args": [
        "swiss-road-mobility-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 20 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.

  • 19 Sept 26 −3
    • Stability: pass → 0.80 functional
  • 18 Sept 26 0
    • Stability: 0.97 → pass security
  • 17 Sept 26 −14
    • Malware scan: pass → unverified security
  • 15 Sept 26 +16
    • Malware scan: unverified → pass security
  • 14 Sept 26 −15
    • Malware scan: pass → unverified security
  • 13 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.

  • 12 Sept 26 +12
    • Malware scan: unverified → pass security
    • Stability: pass → 0.80 functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Analysed pypi/swiss-road-mobility-mcp@0.5.4

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem pypi

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 32 packages
Packages resolved 32
No linked repository 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 15 exposed · ~2,868 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
road_charger_status ~91

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).

NameTypeReqDescription
paramsyes

Structured output declared, but exposes no named fields.

No examples provided.

road_check_status ~51

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.

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

road_classify_road ~347

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.

NameTypeReqDescription
paramsyes

Structured output declared, but exposes no named fields.

No examples provided.

road_counter_sites ~187

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.)

NameTypeReqDescription
paramsyes

Structured output declared, but exposes no named fields.

No examples provided.

road_find_charger ~126

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.

NameTypeReqDescription
paramsyes

Structured output declared, but exposes no named fields.

No examples provided.

road_find_sharing ~127

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.

NameTypeReqDescription
paramsyes

Structured output declared, but exposes no named fields.

No examples provided.

road_geocode_address ~258

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)

NameTypeReqDescription
paramsyes

Structured output declared, but exposes no named fields.

No examples provided.

road_mobility_snapshot ~264

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.

NameTypeReqDescription
paramsyes

Structured output declared, but exposes no named fields.

No examples provided.

road_multimodal_plan ~322

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

NameTypeReqDescription
paramsyes

Structured output declared, but exposes no named fields.

No examples provided.

road_park_rail ~126

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.

NameTypeReqDescription
paramsyes

Structured output declared, but exposes no named fields.

No examples provided.

road_reverse_geocode ~209

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.

NameTypeReqDescription
paramsyes

Structured output declared, but exposes no named fields.

No examples provided.

road_search_sharing ~76

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.

NameTypeReqDescription
paramsyes

Structured output declared, but exposes no named fields.

No examples provided.

road_sharing_providers ~76

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.

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

road_traffic_counters ~342

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

NameTypeReqDescription
paramsyes

Structured output declared, but exposes no named fields.

No examples provided.

road_traffic_situations ~266

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

NameTypeReqDescription
paramsyes

Structured output declared, but exposes no named fields.

No examples provided.

Common questions

What is the io.github.malkreide/swiss-road-mobility-mcp server?

io.github.malkreide/swiss-road-mobility-mcp is listed in the public MCP registry as io.github.malkreide/swiss-road-mobility-mcp. GBFS shared mobility, EV charging, DATEX II traffic, Park & Rail. This page covers its PyPI package (swiss-road-mobility-mcp).

Is the io.github.malkreide/swiss-road-mobility-mcp server safe to use?

io.github.malkreide/swiss-road-mobility-mcp scores 63 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.malkreide/swiss-road-mobility-mcp server expose?

io.github.malkreide/swiss-road-mobility-mcp exposes 15 tools: road_find_sharing, road_search_sharing, road_sharing_providers, road_find_charger, road_charger_status, and 10 more. Their descriptions and schemas cost roughly 2,868 tokens of context every time the server is loaded.

Is the io.github.malkreide/swiss-road-mobility-mcp server still maintained?

io.github.malkreide/swiss-road-mobility-mcp is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.