transport-gzm
This server provides live public transit information for the GZM (Silesian Metropolis) area as MCP tools, letting AI agents query vehicle positions, trip updates, arrivals, and alerts.
Check feed health and age (
health) – distinguish 'no data' from 'upstream down'.Get current feed counts (
feed_summary) – number of vehicles, trips, and alerts.List live vehicle positions (
vehicles) – filter by route or stop; also get a single vehicle by ID (vehicle_by_id).View trip updates (
trip_updates) – predicted arrival times, delays, and stop skips, filterable by route/stop/trip.Get upcoming arrivals at a stop (
next_arrivals) – departure-board style, sorted by predicted time with minutes from now.List active service alerts (
alerts) – planned works, delays, detours; inspect individual alerts viaalert_by_id.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@transport-gzm next arrivals at stop Katowice Dworzec"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
transport_gzm
MCP server wrapping the GTFS-RT live transit feed for GZM (Górnośląsko-Zagłębiowska Metropolia) — the Silesian Metropolis public transport operator in Poland.
Provides a small, focused set of tools so AI agents can answer questions like:
"What buses/trams are currently running on route X?"
"Is vehicle Y delayed? Where is it right now?"
"What alerts are currently active (delays, disruptions, works)?"
"When does the next departure of line 6 arrive at stop Z?"
How it works
GZM publishes a public GTFS-RT feed at
https://gtfsrt.transportgzm.pl:5443/gtfsrt/gzm (no auth, CC-BY licensed).
It exposes three logical sub-feeds:
Path | Content |
| full bundle (all three sub-feeds) |
| live GPS positions of every vehicle |
| arrival-time deltas and stop-skips |
| service alerts (works, delays, etc.) |
This server fetches the protobuf, decodes it, and exposes it as 9 tools that return JSON-friendly structures sized for LLM context windows.
Static GTFS join (why it matters)
The GZM GTFS-RT feed is minimal: trip descriptors carry only a trip_id
(no route_id), and stop-time updates carry only relative delays — no
absolute times and no stop_id. To answer "which line is this bus" or
"when does the next tram leave stop X", the server additionally loads:
Static GTFS — daily mirror at
github.com/TransportGZM-GTFS-mirror/TransportGZM-GTFS-extended-ver(same id space as the RT feed; verified). Downloaded once and cached forGZM_STATIC_TTL_HOURS(default 24 h).SDIP live departures — GZM's own passenger-information system behind
rj.transportgzm.pl, which powers the real departure boards. The stop directory (/api/v2/stops/data/, ~7 150 poles) is coordinate-matched to GTFS stops at load time.
Related MCP server: PTV Transit MCP Server
Quick start
Run with Docker (recommended)
docker run -i --rm ghcr.io/wiktor102/transport-gzm:latestWire it into your MCP client (Claude Desktop, opencode, …):
{
"mcpServers": {
"transport-gzm": {
"command": "docker",
"args": ["run", "-i", "--rm", "ghcr.io/wiktor102/transport-gzm:latest"]
}
}
}Run from source
pip install -e .
transport-gzm…or with uv:
uv run --with mcp[cli] --with gtfs-realtime-bindings --with httpx \
python -m transport_gzm.serverTools
Tool | Purpose |
| Check feed availability + report feed age |
| Counts of vehicles, trips, alerts currently in the feed |
| Search/filter live vehicle positions (by route, stop) |
| Get a single vehicle's current position |
| Arrival predictions; filter by route, stop, or trip |
| Live departure board per stop (GZM SDIP, minutes) |
| Find stops by name → |
| Active service alerts (works, delays, detours) |
| One alert by id |
See docs/tools.md for full parameter documentation and
output schemas.
Configuration
Env var | Default | Purpose |
|
| Override the base URL |
|
| HTTP timeout in seconds |
|
| In-process feed cache TTL in seconds |
|
| Default cap for |
|
| Default cap for |
|
| Default cap for |
|
| Outgoing UA |
| GitHub mirror ZIP of the extended GTFS | Static schedule source (must share the RT trip-id space) |
|
| SDIP stop directory |
|
| Live departures board base URL |
|
| How long to cache the static GTFS index |
|
| Max distance for rj→GTFS stop matching |
|
|
|
License
MIT. GTFS-RT data © Górnośląsko-Zagłębiowska Metropolia, CC-BY 4.0.
Available Tools
8 toolsalert_by_idA
Get a single alert by entity id (e.g. from a previous alerts() result).
Inputs: alert_id (required).
alertsA
List active service alerts (planned works, delays, detours, stop closures). Use this for 'is the tram line broken?', 'any works today?', 'why is my bus late?'.
Inputs: limit, stop_id, route_id.
feed_summaryA
Get the current counts of vehicles, trip updates and alerts in the live feed. Cheap; does not return full payloads.
Inputs: no named parameters.
healthA
Check whether the GZM live transit feed is reachable and report how old it is. Call this first if a query seems to return empty results — it can distinguish 'no vehicles right now' from 'upstream is down'.
Inputs: no named parameters.
next_arrivalsA
Get upcoming arrivals at a specific stop, across all routes, sorted by predicted arrival time. Equivalent to a digital departure board. Returns the 'minutes_from_now' field already computed for you.
Inputs: stop_id (required), limit, route_id.
trip_updatesA
List live trip updates: scheduled vs predicted arrival times and any stop-skips. Use this for 'is line 6 delayed', 'what time does the next bus arrive', or 'is stop X skipped'.
Inputs: limit, stop_id, trip_id, route_id.
vehicle_by_idA
Get a single vehicle's current position by its vehicle id or label (e.g. fleet number painted on the bus, or the entity id from a previous vehicles() call).
Inputs: vehicle_id (required).
vehiclesA
List live vehicle positions (buses, trams, trains) currently running. Use this when the user asks 'what's running', 'where is line X', or 'find a bus to Y'. Returns up to limit vehicles, newest first by timestamp.
Inputs: limit, stop_id, route_id.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 8 tools
Each tool has a distinct purpose: alerts vs alert_by_id, vehicles vs vehicle_by_id, next_arrivals for stop-specific predictions, trip_updates for delay info, feed_summary for metadata, and health for system status. No two tools overlap in functionality.
Tools follow a clear pattern: plural names for list operations (alerts, vehicles, trip_updates) and 'by_id' for single items (alert_by_id, vehicle_by_id). feed_summary and health are unique but descriptive. next_arrivals deviates slightly but remains intuitive.
With 8 tools, the server is well-scoped for a transit data API. It covers all necessary operations without redundancy or bloat, making it efficient for agents to navigate.
The tool set covers core real-time transit data: vehicle positions, alerts, trip updates, stop arrivals, and system health. Missing static data like route or stop listings, but for live monitoring, it is sufficiently complete.
Maintenance
Related MCP Connectors
Geocoding, routing, isochrones, traffic, weather, and place search for AI agents. 19 MCP tools.
Mobility, geocoding and nearby urban services for AI agents.
Belgian trains for AI agents: live journeys, departures, delays, disruptions. Free, no key.
Travel tools for AI agents: plan and edit real trips, search stays and tours, import travel videos.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to query Prague's public transit departures, air quality, parking availability, and other city data via the Golemio open data API.1227 PyPIGPL 3.0
- AlicenseAqualityDmaintenanceExposes Victoria's public transport (PTV) GTFS timetable data as MCP tools, allowing LLMs to answer natural-language questions about routes, stops, and departure times.4MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to access real-time public transport data for Moscow and the Moscow region, aggregating and reconciling information from multiple sources. Provides tools for finding stops, live arrival boards, vehicle tracking, route details, and ETA calculations.MIT

transcapi-mcpofficial
AlicenseAqualityBmaintenanceConnects AI assistants to live public transport data across Great Britain, enabling searches for stops and stations, real-time bus and rail departures, live vehicle positions, service disruptions, and door-to-door journey planning. All tools are read-only and require an API key.1029 PyPIMIT