Moscow Transport MCP

An MCP server that fuses three transit sources, Mosgortrans, the Moscow region RNIS system and Yandex Transport, reconciling arrival predictions

  • 0 ★ on the repository
  • Last commit
  • MIT
MCP server

Extended access

Why this level

  • Runs a Python server that polls the Mosgortrans, RNIS and Yandex Transport APIs
  • Yandex Transport needs a session CSRF token and session id that you obtain yourself
All reasons and checks
Russian stack

zavorateam/moscow-transport-mcp

Install

Manual install

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

Install dependencies in a virtual environment.

Access and checks

How we review

Extended accessThe tool runs code or makes network calls and only reads external data.

  • Runs a Python server that polls the Mosgortrans, RNIS and Yandex Transport APIs
  • Yandex Transport needs a session CSRF token and session id that you obtain yourself

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 schedule

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

Limitations

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.

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.

Discussion

No questions or reviews yet.

Russian stack

An MCP server for Yandex Maps: forward and reverse geocoding and static map rendering with placemarks

MCP serverExtended access17Repository stars
Russian stack

An MCP server for pre-project land analysis: Rosreestr boundaries, Yandex geocoding and maps, infrastructure and geometry

MCP serverExtended access4Repository stars
Russian stack

MCP server for Rosreestr and NSPD data: property objects by cadastral number, GeoJSON geometry, batch lookups

MCP serverExtended access5Repository stars
Russian stack

A remote MCP with pay-per-call USDC pricing: INN company checks, Runet search, Russian Post tracking, CBR and MOEX rates

MCP serverBroad access1Repository stars
Russian stack

Monorepo of Yandex MCP servers: Direct, Metrica, Webmaster, Wordstat, Tracker, 360, Maps, SpeechKit, YandexGPT and AppMetrica

MCP serverBroad access14Repository stars

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.

README badge

Report a problem