Server data from the Official MCP Registry
GBFS shared mobility, EV charging, DATEX II traffic, Park & Rail
GBFS shared mobility, EV charging, DATEX II traffic, Park & Rail
Valid MCP server (1 strong, 3 medium validity signals). No known CVEs in dependencies. Package registry verified. Imported from the Official MCP Registry.
3 files analyzed Β· 1 issue found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Add this to your MCP configuration file:
{
"mcpServers": {
"io-github-malkreide-swiss-road-mobility-mcp": {
"args": [
"swiss-road-mobility-mcp"
],
"command": "uvx"
}
}
}From the project's GitHub README.
π¨π Part of the Swiss Public Data MCP Portfolio
MCP Server for Swiss road mobility β shared vehicles, EV charging, traffic alerts, Park & Rail, and multimodal trip planning
swiss-road-mobility-mcp provides AI-native access to Swiss road and mobility data sources:
| Source | Data | API | Auth |
|---|---|---|---|
| sharedmobility.ch | Bikes, e-scooters, cars (GBFS) | REST/JSON | None |
| ich-tanke-strom.ch | EV charging stations | GeoJSON | None |
| opentransportdata.swiss | Traffic events, counting stations | DATEX II / SOAP+XML | Free key |
| data.sbb.ch | Park & Rail facilities | REST/JSON (Opendatasoft) | None |
| transport.opendata.ch | Public transport connections | REST/JSON | None |
| geo.admin.ch | Address geocoding, road classification | REST/JSON | None |
If the Swiss Transport MCP is the GA pass for rail, this server is the vignette + Park & Rail card + sharing subscription for the road β together they paint the complete multimodal picture of Swiss mobility.
Anchor demo query: "I'm in Dietikon with my car. I need to get to Bern. Where can I park? Which train should I take?"
road_mobility_snapshot β aggregated mobility overview for any locationroad_multimodal_plan β car + Park & Rail + public transport in one plan# Clone the repository
git clone https://github.com/malkreide/swiss-road-mobility-mcp.git
cd swiss-road-mobility-mcp
# Install
pip install -e .
# or with uv:
uv pip install -e .
Or with uvx (no permanent installation):
uvx swiss-road-mobility-mcp
# stdio (for Claude Desktop)
swiss-road-mobility-mcp
# or:
python -m swiss_road_mobility_mcp.server
# SSE (for cloud / Render.com)
MCP_TRANSPORT=sse MCP_PORT=8001 swiss-road-mobility-mcp
Try it immediately in Claude Desktop:
"Show me everything mobility-related at Zurich HB." "Find shared bikes near Bern Bahnhof." "Where can I charge my EV near Lucerne?"
β More use cases by audience β
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"swiss-road-mobility": {
"command": "uvx",
"args": ["swiss-road-mobility-mcp"],
"env": {
"OPENTRANSPORTDATA_API_KEY": "<your-token>"
}
}
}
}
Or with python:
{
"mcpServers": {
"swiss-road-mobility": {
"command": "python",
"args": ["-m", "swiss_road_mobility_mcp.server"],
"env": {
"OPENTRANSPORTDATA_API_KEY": "<your-token>"
}
}
}
}
Shared mobility, EV charging, Park & Rail, and the multimodal planner work without an
OPENTRANSPORTDATA_API_KEY. The key is only required for the DATEX II traffic tools.
Config file locations:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonFor use via claude.ai in the browser (e.g. on managed workstations without local software):
Render.com (recommended):
MCP_TRANSPORT=sse MCP_PORT=8001 swiss-road-mobility-mcphttps://your-app.onrender.com/sseA public SSE endpoint is reachable by anyone. To protect it (and your upstream API quota), configure these environment variables on the host:
| Variable | Effect |
|---|---|
MCP_AUTH_TOKEN | When set, every SSE request must send Authorization: Bearer <token>. Unset = unauthenticated (the server logs a loud warning at startup). Strongly recommended for any public deployment. |
MCP_RATE_LIMIT | Max requests per client IP per window (default 60, 0 disables). |
MCP_RATE_WINDOW | Window length in seconds (default 60). |
ALLOWED_ORIGINS | Comma-separated CORS origins for browser clients (default *). |
The local stdio transport needs none of this β it runs in the user's trusted context.
| Variable | Effect |
|---|---|
MCP_LOG_LEVEL | Log level: DEBUG / INFO (default) / WARNING / ERROR. |
MCP_LOG_FORMAT | text (default) or json for structured logs. All logs go to stderr. |
MCP_TRACING_ENABLED | true enables OpenTelemetry tracing (off by default). |
OTEL_EXPORTER_OTLP_ENDPOINT | OTLP collector URL; setting it also enables tracing. Standard OTEL_* vars are honoured by the SDK. |
Tracing needs the optional extra: pip install 'swiss-road-mobility-mcp[tracing]'.
Once enabled, every upstream API call is traced automatically (httpx
instrumentation) and SSE requests get server spans with W3C trace-context
propagation.
| Tool | Description | Cache |
|---|---|---|
road_find_sharing | Shared mobility nearby (bikes, e-scooters, cars) | 60s |
road_search_sharing | Search sharing stations by name | 5min |
road_sharing_providers | All sharing providers in Switzerland | 1h |
road_find_charger | EV charging stations nearby | 5min |
road_charger_status | Real-time availability of charging stations | 1min |
road_check_status | Server & API health check | - |
| Tool | Description | Cache |
|---|---|---|
road_traffic_situations | Accidents, roadworks, congestion from ASTRA/VMZ-CH | 2min |
road_traffic_counters | Vehicles/h + km/h at counting stations near a position | 1min |
road_counter_sites | List counting stations nearby | 24h |
| Tool | Description | Cache |
|---|---|---|
road_park_rail | Find SBB Park+Rail facilities nearby | 5min |
road_mobility_snapshot | Complete mobility overview for a location | - |
road_multimodal_plan | Plan car -> Park+Rail -> public transport -> destination | - |
| Tool | Description | Cache |
|---|---|---|
road_geocode_address | Swiss address -> GPS (official building address register) | - |
road_reverse_geocode | GPS -> official address with EGID/EGAID (GWR) | - |
road_classify_road | Road classification via swissTLM3D | - |
| Query | Tool |
|---|---|
| "Find shared bikes near Zurich HB" | road_find_sharing |
| "Where can I charge my EV near Bern?" | road_find_charger |
| "Any traffic incidents on the A1?" | road_traffic_situations |
| "Where can I park near Winterthur station?" | road_park_rail |
| "Plan my trip from Dietikon to Bern by car + train" | road_multimodal_plan |
export OPENTRANSPORTDATA_API_KEY=<your-token>
Without a key, the traffic tools return a descriptive error message including the exact registration link β no crash.
swiss_road_mobility_mcp/
βββ server.py # FastMCP server, 15 tools
βββ api_infrastructure.py # Rate limiter, cache, HTTP client, geo utilities
βββ shared_mobility.py # sharedmobility.ch
βββ ev_charging.py # ich-tanke-strom.ch
βββ traffic_situations.py # DATEX II traffic alerts (SOAP/XML)
βββ traffic_counters.py # DATEX II counting stations (SOAP/XML)
βββ park_rail.py # SBB Open Data Park & Rail
βββ multimodal.py # Snapshot + trip planner (cross-source)
βββ geo_admin.py # geo.admin.ch geocoding + road classification
| Source | Protocol | Coverage | Auth |
|---|---|---|---|
| sharedmobility.ch | REST/JSON (GBFS) | All CH sharing providers | None |
| ich-tanke-strom.ch | GeoJSON | All public EV chargers | None |
| opentransportdata.swiss | DATEX II / SOAP+XML | ASTRA traffic data | Free key |
| data.sbb.ch | REST/JSON (Opendatasoft) | SBB Park & Rail | None |
| transport.opendata.ch | REST/JSON | Public transport schedules | None |
| geo.admin.ch | REST/JSON | Official addresses, roads | None |
In-depth docs: docs/ARCHITECTURE.md (MCP primitives,
tool namespacing, use-case catalogue, phase roadmap) Β·
docs/SECURITY.md (credential model, egress allow-list, auth,
MCP conformance table) Β·
docs/OPERATIONS.md (resource limits, restart policy, health).
swiss-road-mobility-mcp/
βββ src/swiss_road_mobility_mcp/
β βββ __init__.py # Package
β βββ server.py # FastMCP server, 15 tools
β βββ api_infrastructure.py # Rate limiter, cache, HTTP client
β βββ shared_mobility.py # Shared vehicles
β βββ ev_charging.py # EV charging stations
β βββ traffic_situations.py # Traffic events
β βββ traffic_counters.py # Vehicle counting
β βββ park_rail.py # Park & Rail
β βββ multimodal.py # Snapshot + trip planning
β βββ geo_admin.py # Geocoding + roads
βββ tests/
β βββ test_integration.py # Live API tests
β βββ test_phase3.py # Park & Rail + multimodal tests
βββ .github/workflows/ci.yml # GitHub Actions (Python 3.11/3.12/3.13)
βββ pyproject.toml
βββ CHANGELOG.md
βββ CONTRIBUTING.md # Contribution guide (English)
βββ CONTRIBUTING.de.md # Contribution guide (German)
βββ SECURITY.md # Security policy (English)
βββ SECURITY.de.md # Security policy (German)
βββ LICENSE
βββ README.md # This file (English)
βββ README.de.md # German version
sharedmobility.ch API does not enforce strict radius filtering; vehicles slightly outside the specified radius may appear# All tests
pytest tests/ -v
# Quick check (without pytest)
python tests/test_phase3.py
See CHANGELOG.md
See CONTRIBUTING.md
See SECURITY.md for the security posture and vulnerability reporting.
MIT License β see LICENSE
Hayal Oezkan Β· malkreide
Be the first to review this server!
by Modelcontextprotocol Β· Developer Tools
Read, search, and manipulate Git repositories programmatically
by Modelcontextprotocol Β· Developer Tools
Web content fetching and conversion for efficient LLM usage
by Toleno Β· Developer Tools
Toleno Network MCP Server β Manage your Toleno mining account with Claude AI using natural language.