
Swiss Road Mobility Mcp
io.github.malkreide由 GitHub 账号 malkreide 发布v0.6.1更新于 Oct 24, 2026
GBFS shared mobility, EV charging, DATEX II traffic, Park & Rail
概览
为助手提供瑞士道路交通出行数据:共享车辆、充电桩、交通事件、Park & Rail、地理编码与多式联运规划。
- 可以做什么
- 查找附近的共享单车、电动滑板车和汽车,按名称搜索共享站点,并列出瑞士共享出行运营商
- 定位电动汽车充电站并查询实时可用状态
- 读取交通事故、施工与拥堵信息,查询车辆计数站数据
- 查找 SBB Park & Rail 停车换乘设施,并规划汽车、停车换乘与公共交通的组合行程
- 对瑞士地址进行地理编码、将坐标反查为官方地址,并查询道路分类
- 生成某地点的出行概览快照,并检查服务器与 API 健康状态
- 适用场景
- 适合在瑞士自驾出行时查询停车、充电、共享车辆或路况信息,或把驾车与铁路换乘结合起来规划行程。也适用于询问某条高速公路的事故情况,或某个瑞士地址、车站周边的出行选择。
- 运行要求
- 本地 Python 3.11+ 进程,通常通过 uvx 或 pip 运行。多数工具无需密钥;DATEX II 交通类工具需要来自 opentransportdata.swiss 的 OPENTRANSPORTDATA_API_KEY。需要访问瑞士公共数据 API 的网络连接。可选的 HTTP/SSE 部署使用 MCP_AUTH_TOKEN、MCP_RATE_LIMIT 和 ALLOWED_ORIGINS。
安装
在 SourceWeft 中
- 打开 控制台中的 Swiss Road Mobility Mcp,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
🇨🇭 Part of the Swiss Public Data MCP Portfolio
🚗 Swiss Road & Mobility MCP Server
[Version] [License: MIT] [Python 3.11+] [MCP] [CI]
MCP Server for Swiss road mobility — shared vehicles, EV charging, traffic alerts, Park & Rail, and multimodal trip planning
Demo
[Demo: Claude using road_mobility_snapshot at Zürich HB]
Overview
swiss-road-mobility-mcp provides AI-native access to Swiss road and mobility data sources:
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?"
Features
- 15 tools across six data sources (Phase 1–4)
road_mobility_snapshot— aggregated mobility overview for any locationroad_multimodal_plan— car + Park & Rail + public transport in one plan- No API key required for 12 of 15 tools
- Dual transport — stdio (Claude Desktop) + SSE (cloud)
- Rate limiting + caching for all endpoints
Prerequisites
- Python 3.11+
- uv (recommended) or pip
Installation
Or with uvx (no permanent installation):
Quickstart
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 →
Configuration
Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
Or with python:
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:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Cloud Deployment (SSE for browser access)
For use via claude.ai in the browser (e.g. on managed workstations without local software):
Render.com (recommended):
- Push/fork the repository to GitHub
- On render.com: New Web Service -> connect GitHub repo
- Set start command:
MCP_TRANSPORT=http MCP_PORT=8001 swiss-road-mobility-mcp - In claude.ai under Settings -> MCP Servers, add
https://your-app.onrender.com/mcp— or.../ssefor a client that still speaks the SSE transport;httpserves both.
SSE security (SEC-009)
A public SSE endpoint is reachable by anyone. To protect it (and your upstream API quota), configure these environment variables on the host:
The local stdio transport needs none of this — it runs in the user's trusted context.
Observability (OBS-003 / OBS-006)
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.
Available Tools
Shared Mobility & EV Charging (no API key required)
Traffic (free API key required)
Park & Rail + Multimodal (no API key required)
Geography & Addresses — Phase 4 (no API key required)
Example Use Cases
API Key for Traffic Tools
- Register: https://api-manager.opentransportdata.swiss
- Create a new application -> subscribe to the "Strassenverkehr" API
- Copy the token
Without a key, the traffic tools return a descriptive error message including the exact registration link — no crash.
Architecture
Data Source Characteristics
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).
Project Structure
Known Limitations
- Shared Mobility: The
sharedmobility.chAPI does not enforce strict radius filtering; vehicles slightly outside the specified radius may appear - EV Charging: Station naming conventions vary between operators; some stations may appear without detailed names
- Traffic (DATEX II): Requires a free API key; without it, traffic tools return helpful error messages
- Park & Rail: SBB occasionally renames endpoints; the server includes a fallback chain
- Multimodal Planner: Response time depends on the slowest of the queried sources
MCP Protocol Version
This server speaks two protocol eras. The client's first request on a connection decides which one applies; a later claim from the other era is refused.
The era depends on the transport, not only on the request. An earlier
version of this section said "over the same endpoint", and that was wrong in a
way nothing caught: the modern single-exchange delivery lives behind
StreamableHTTPSessionManager, which only the Streamable HTTP app reaches.
The shipped transport was SSE, and SSE requires a session while a modern
request is session-less by construction.
MCP_TRANSPORT=http serves both: the SSE routes run next to /mcp rather than
being replaced, so an existing client does not break because the server gained
a revision. Containers (Dockerfile, docker-compose.yml, render.yaml) ship
http.
Both revisions are pinned in
tests/test_protocol_version.py and asserted
against the installed SDK, so a Dependabot bump of mcp cannot move either one
silently. Since that gate can only read SDK constants,
tests/test_spec_2026_07_28.py sits next to it
and measures the wire instead: a real 2026-07-28 envelope against the
assembled ASGI app, with the same envelope against SSE as the counter-control.
Note that the SDK's LATEST_PROTOCOL_VERSION is an alias for the modern
era, not for the handshake era — pinning against it alone would leave the era
that current clients actually negotiate free to drift.
Update policy. When the gate fails, do not edit the constant blindly: read
the spec changelog between the two revisions, verify the server still behaves,
then move the constant, this section, README.de.md and
CHANGELOG.md together.
Testing
Safety & Limits
- Read-only: All tools perform HTTP GET requests only — no data is written, modified, or deleted on any upstream system.
- No personal data: Location coordinates passed as tool inputs are not stored, logged, or forwarded beyond the immediate API request. API responses contain no PII — only vehicle counts, charger availability, traffic events, and geographic metadata.
- Rate limiting: The server enforces client-side rate limits (Shared Mobility: 30 req/60s; EV Charging: 10 req/60s) to protect upstream APIs. The DATEX II key is subject to opentransportdata.swiss fair-use terms.
- Caching: Responses are cached in-process (Sharing: 60s · EV: 5 min · Park+Rail: 5 min · Traffic: 1–2 min). Real-time data reflects the cache age, not necessarily the current second.
- Terms of service: Data is subject to the ToS of each upstream source — sharedmobility.ch, ich-tanke-strom.ch, opentransportdata.swiss, data.sbb.ch (CC BY), geo.admin.ch (BGDI).
- No guarantees: This server is an independent community project, not affiliated with SBB, ASTRA, sharedmobility.ch, or any API provider. Availability depends on upstream services.
Changelog
See CHANGELOG.md
Contributing
See CONTRIBUTING.md
Security
See SECURITY.md for the security posture and vulnerability reporting.
License
MIT License — see LICENSE
Author
Hayal Oezkan · malkreide
Credits & Related Projects
- sharedmobility.ch: sharedmobility.ch — Swiss shared mobility platform
- ich-tanke-strom.ch: ich-tanke-strom.ch — Swiss EV charging network
- ASTRA / opentransportdata.swiss: opentransportdata.swiss — Federal traffic data
- SBB Open Data: data.sbb.ch — Swiss Federal Railways
- geo.admin.ch: geo.admin.ch — Federal geospatial services
- Protocol: Model Context Protocol — Anthropic / Linux Foundation
- Related: swiss-transport-mcp — Public transport (trains, buses, trams)
- Related: zurich-opendata-mcp — 900+ datasets from the City of Zurich
- Portfolio: Swiss Public Data MCP Portfolio
Installation
Run via uv's uvx — no clone or manual install needed. Add to your MCP client config (mcpServers for Claude Desktop, Cursor and Windsurf; use a top-level servers key for VS Code in .vscode/mcp.json):
来源:README.md,提交 74460ff
工具
0版本历史
3- v0.6.1最新Oct 14, 2026
- v0.6.0Sep 27, 2026
- v0.5.4Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分