Estonian Transport MCP
An MCP server for Estonian public transport — timetables, trip planning, stop search, and real-time vehicle tracking.
Tools
| Tool | Description |
|---|---|
search_stops |
Search for stops by name (e.g. "Viru", "Balti jaam") |
get_departures |
Get upcoming departures from a stop, with real-time predictions |
plan_trip |
Plan a trip between two coordinates with date/time options |
nearby_stops |
Find stops within a radius of a location |
get_route |
Get route details including all stop patterns |
get_trip_stops |
Get full schedule of a specific trip — all stops with arrival/departure times |
tallinn_vehicles |
Real-time GPS positions of Tallinn buses, trams, and trolleybuses |
Prerequisites
This server runs via uvx, a zero-install Python package runner. Install uv first:
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# or via Homebrew
brew install uv
No other setup needed — uvx automatically downloads dependencies on first run.
Usage
Claude Code
Add to your MCP settings (.claude/settings.json or project-level .mcp.json):
{
"mcpServers": {
"estonian-transport": {
"command": "uvx",
"args": ["estonian-transport-mcp"]
}
}
}
Claude Desktop
Config file location:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Add to the mcpServers section:
{
"mcpServers": {
"estonian-transport": {
"command": "uvx",
"args": ["estonian-transport-mcp"]
}
}
}
Note: Claude Desktop may not find
uvxin its PATH. If the server fails to start, replace"uvx"with the full path. Find it by runningwhich uvxin your terminal, then use that path:{ "mcpServers": { "estonian-transport": { "command": "/Users/yourname/.local/bin/uvx", "args": ["estonian-transport-mcp"] } } }
Restart Claude Desktop after saving the config.
Remote server (HTTP)
Run as an HTTP server for remote access (e.g. from claude.ai/code on mobile):
estonian-transport-mcp --transport streamable-http --port 8000
Then connect to it from any MCP client using the URL http://your-server:8000/mcp.
Example deployment with systemd on a VPS:
[Unit]
Description=Estonian Transport MCP
After=network.target
[Service]
ExecStart=/home/user/.local/bin/estonian-transport-mcp --transport streamable-http --port 8000
Restart=always
User=user
[Install]
WantedBy=multi-user.target
Manual testing
# stdio mode (default)
uvx estonian-transport-mcp
# HTTP mode
uvx estonian-transport-mcp --transport streamable-http --port 8000
Test interactively with the MCP Inspector:
npx @modelcontextprotocol/inspector uvx estonian-transport-mcp
Data Sources & APIs
Peatus.ee — OpenTripPlanner GraphQL API
- Endpoint:
https://api.peatus.ee/routing/v1/routers/estonia/index/graphql - Protocol: GraphQL over HTTP POST
- Authentication: None (open access)
- Maintained by: Transpordiamet (Estonian Transport Administration)
- Coverage: All Estonian public transport — buses, trams, trolleybuses, trains, and ferries nationwide
- Data: Stop search, departure times, trip planning, route patterns, real-time arrival predictions
- Based on: OpenTripPlanner with Digitransit
- Underlying data: National GTFS feed consolidated from all Estonian transport operators
Used by tools: search_stops, get_departures, plan_trip, nearby_stops, get_route
Tallinn Transport — Real-Time Vehicle GPS
- Endpoint:
https://transport.tallinn.ee/gps.txt - Protocol: Plain-text CSV over HTTP GET
- Authentication: None (open access)
- Update frequency: ~10 seconds
- Coverage: Tallinn city only — buses, trams, and trolleybuses operated by TLT (Tallinna Linnatransport)
- Data: Vehicle type, line number, GPS coordinates (WGS84 microdegrees), heading, vehicle ID, destination
- Format: Each line is one vehicle:
type,line,lon,lat,,heading,vehicle_id,status,unknown,destination- Vehicle types:
1= trolleybus,2= bus,3= tram - Coordinates: integer microdegrees (divide by 1,000,000 for decimal degrees)
- Heading
999= unknown
- Vehicle types:
Used by tools: tallinn_vehicles
Tech Stack
- Python with FastMCP (
mcp[cli]) - httpx for async HTTP requests
- Transport: stdio (standard MCP transport for local integrations)
Metadata
Release files for estonian-transport-mcp 1.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| estonian_transport_mcp-1.4.0.tar.gz | 102.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| estonian_transport_mcp-1.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 114.9 kB
Release files / estonian_transport_mcp-1.4.0.tar.gz
| Download URL | estonian_transport_mcp-1.4.0.tar.gz |
|---|---|
| Size | 102.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
34c5a41b483a45ff99b4c805f3bdf783332011c1190068d6a01e230deb4965b6
|
|
BLAKE2b-256 checksum How to use checksums |
b4283b2fef9cf05a3bbe9d5b69ff46b52534083ffe8bec9005c683500172fb4e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / estonian_transport_mcp-1.4.0-py3-none-any.whl
| Download URL | estonian_transport_mcp-1.4.0-py3-none-any.whl |
|---|---|
| Size | 12.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1e95000f7baac4f3d15b5e867b6fe9eaa1ec7fa08f451d5bd095165480d13caf
|
|
BLAKE2b-256 checksum How to use checksums |
705d982bf548cc8f25f7f56f4c28f6037ae55191983d217dc55fbb6d01a9ca36
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|