Moscow Transport MCP
An MCP server that fuses three transit sources, Mosgortrans, the Moscow region RNIS system and Yandex Transport, reconciling arrival predictions
Low risk
We rate an entry low when it mostly gives the agent instructions and reference material.
Why this level
- Only reads public transit data and performs no actions on the user's behalf
Install
Manual install
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtInstall dependencies in a virtual environment.
This is third-party code. Review the repository files before installing.
What it does
The server works both as an MCP over stdio and as a FastAPI REST API, combining Moscow and Moscow region passenger transit data from three independent sources: the official Mosgortrans stop_v2 and qr-stop API with a local registry of over 12,500 stops, the Moscow region's RNIS system with direct access to vehicle telemetry, and Yandex Transport via its Masstransit API. Eight tools cover searching stops by name, coordinates or bounding box, live arrival boards, precise ETA for a specific bus with source reconciliation, searching vehicles on the map by filters like air conditioning or low floor, route details, a vehicle dossier by plate number, and system status. The server picks the correct platform at multi-platform stops and reconciles official arrival times against a vehicle's actual position, without dropping data when some fields are missing.
Who it is for. For developers of transit and logistics apps in Moscow and the region who want one reliable source instead of juggling three different APIs.
Good fit when
- You need a live stop board that accounts for a bus's actual position, not just the schedule
- You need to search stops and buses across both Moscow and the region without switching sources
- You need a precise ETA for a specific route with operator data reconciled against GPS
Not a fit when
- You need transit outside Moscow and the Moscow region: the server narrowly covers just this area
- You do not want to configure the Yandex Transport integration via session parameters: some .env fields come from the internal Masstransit API rather than a public key
Example request
Show me the live board for the Metromost stop and tell me when bus 110 will actually arrive, not just per scheduleLimitations
The Yandex Transport integration uses the internal Masstransit API via session parameters (a CSRF token, session id) rather than a public key; these values must be obtained and refreshed manually and can expire. Per the author's own notes, the project needs further work: the Roadmap section explicitly calls the current transport_service.py implementation inefficient across all three sources. The local Moscow stop registry must be downloaded separately with the download_stops.sh script.
How to disable. Remove the server from your MCP client config and stop the server.py process if it runs separately.
MCP
- Transport
- stdio, http
- Authentication
- not required
| Environment variables | |
|---|---|
| STOPS_GEOJSON_PATH required | Path to the local Moscow stop registry, downloaded via download_stops.sh |
| RNIS_BASE_URL | Base URL for the Moscow region RNIS system |
| YANDEX_CSRF_TOKEN secret | Session CSRF token for Yandex's internal Masstransit API, optional |
| YANDEX_SESSION_ID secret | Session identifier for the Yandex Transport integration, optional |
Security check
- Only reads public transit data and performs no actions on the user's behalf
README in short
The detailed Russian README describes the three-source reconciliation architecture with a diagram, explains smart platform selection at multi-platform stops, seamless merging of Moscow and region registries, and a non-destructive data policy when fields are missing. It gives a table of eight tools with REST endpoints, .env configuration for all three sources, run instructions as MCP and as REST, setup for Claude Desktop, Cursor and Windsurf, curl examples, and a testing section with 156 unit tests and 36 end-to-end scenarios via agent_test.py. It ends with the author honestly noting plans to rework transport_service.py. MIT license.
FAQ
Does the server work without the Yandex Transport integration?
Yes, the README marks that integration optional; the other two sources, Mosgortrans and the Moscow region RNIS, work independently.
Can it be used as a plain REST API instead of just MCP?
Yes, the same server.py can run with the --http flag as a FastAPI server with Swagger docs at /docs.
Related
166 skills for scientific work: bioinformatics, cheminformatics, clinical data, geospatial analysis and 100+ databases
Google's open-source MCP server for databases: ready tools for Postgres, MySQL, BigQuery, Spanner and more, plus custom tools in tools.yaml
Official Hugging Face skills: Hub operations via the hf CLI, datasets, model training, Spaces, evals and deployment
A visualization language for agents and an MCP server: neat charts from a simple semantic spec