mcpField
R
rozklad-mcp

rozklad-mcp

Remote
github.com/ContentWritercoMaps & Travel34Updated 5d ago
Repository

About rozklad-mcp

rozklad-mcp is an MCP server for travelers and AI clients looking up public transport in Poland, covering trains, buses, and transit in about 25 cities. It handles transfers, live delays, rail disruptions, weather warnings, and selected rail fares.

Key features

  1. 01Search train and bus connections with transfers
  2. 02Check station departures and arrivals
  3. 03View train delays and disruptions along a route
  4. 04Find nearby stations and stops
  5. 05Get weather warnings and selected fares
  6. 06Query journeys and data sources through the CLI

Use cases

  1. 01Plan intercity train and bus trips in Poland
  2. 02Check current departures and platform information
  3. 03Inspect route delays, cancellations, and diversions
  4. 04Estimate fares for supported rail services

MCP support

The MCP server exposes tools for journey planning, departures, trip details, stop lookup, rail disruptions, weather warnings, and data sources. Clients can connect through its public Streamable HTTP endpoint or a local installation.

Configuration

Remote servers need no local install. Pick your client, then copy the config or install in one click.

Endpointhttps://rozklad.compabase.com/mcp
Copy install command
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.

Packages
npmrozklad-mcp0.4.1

Tools

Details

From the project README

rozkład-mcp 🚆🚌

Rozkład jazdy PKP, PKS i komunikacji miejskiej dla Twojego asystenta AI.
Serwer MCP: wyszukiwarka połączeń z przesiadkami, odjazdy, opóźnienia na żywo i ceny biletów – w Claude, ChatGPT, Cursorze, VS Code i każdym kliencie MCP.

npm MCP Registry CI Licencja MIT Bez klucza API

Animacja: użytkownik pyta asystenta AI, jak dojechać ze Zbąszynia do Kórnika; asystent korzysta z rozklad-mcp i podaje pociąg IC, przejście na dworzec autobusowy i autobus PKS z godzinami i ceną

Podłącz w 30 sekund · Przykładowe pytania · Instalacja lokalna · English

Wszystkie pociągi w Polsce (PKP Intercity, Polregio, Koleje Mazowieckie, SKM, Koleje Śląskie, Dolnośląskie, Wielkopolskie, Małopolskie, ŁKA, Arriva…), autobusy PKS, FlixBus i komunikacja miejska ~25 miast w jednej wyszukiwarce połączeń. Bez klucza API, bez rejestracji, za darmo – tylko otwarte dane przewoźników i zarządców.

Przykładowe pytania
  • „Jak dostanę się jutro na 9:00 z Wrocławia do Zakopanego?”
  • „Czym najszybciej z Gdyni Orłowo na Politechnikę Gdańską?”
  • „Ile kosztuje IC z Poznania do Warszawy w piątek po 16:00?”
  • „Co odjeżdża teraz z przystanku Kraków Rondo Mogilskie?”
  • „Którędy jedzie Podhalanin i ile ma opóźnienia?”
  • „Mam pociąg o 18:36 z Poznania Głównego – o której autobus z Niepruszewa, żeby zdążyć?”

Co potrafi

NarzędzieDo czego
plan_journeyPołączenia A → B z przesiadkami pociąg ↔ autobus, „wyjazd po” albo „przyjazd do”, limit przesiadek, wybór środków transportu. Miejsce = stacja, całe miasto („Kraków”) albo współrzędne.
departuresTablica odjazdów/przyjazdów z peronami i opóźnieniami; filtr „tylko w kierunku Poznania”.
trip_detailsCały przebieg pociągu (po numerze: 3510, IC 3510, nazwie: Podhalanin albo ref) z opóźnieniem na każdej stacji, odwołaniami i objazdami.
find_stops / nearby_stopsWyszukiwanie stacji (literówki i brak polskich znaków OK) oraz przystanków w pobliżu punktu.
rail_disruptionsUtrudnienia na kolei z PKP PLK: zamknięcia torów, komunikacja zastępcza (ZKA), odwołania, awarie, ograniczenia prędkości – oficjalne komunikaty PKP PLK. Pociągi objęte utrudnieniem są oznaczone ⚠ także w plan_journey, departures i trip_details. Na publicznym serwerze włączone; lokalnie wymaga darmowego klucza PLK.
weather_warningsOstrzeżenia IMGW (burze, wiatr, oblodzenie, upał, śnieg) i powodziowe dla powiatu danego miejsca; plan_journey sam dodaje ostrzeżenia dla startu i celu podróży.
data_sourcesJakie dane są załadowane, do kiedy ważne, licencje i wymagane atrybucje.

Pokrycie (domyślnie): wszyscy przewoźnicy kolejowi koordynowani przez PKP PLK – PKP Intercity, Polregio, Koleje Mazowieckie, SKM Trójmiasto, SKM Warszawa, Koleje Śląskie, Dolnośląskie, Wielkopolskie, Małopolskie, ŁKA, Arriva, RegioJet, Leo Express – plus WKD, PKS Poznań, PKS Kalisz i przewoźnicy kaliscy, Sindbad, Kombus, FlixBus/FlixTrain (połączenia z i do Polski). Komunikacja miejska ~25 miast (Warszawa, Kraków, Łódź, Poznań, Trójmiasto, GZM, Szczecin, Lublin, Białystok, Bydgoszcz, Legnica…) – na publicznym serwerze włączona, lokalnie opcjonalna. Przystanki miejskie wyszukasz z nazwą miasta: „Kraków Rondo Mogilskie”, „Warszawa Politechnika”. Pełna lista: feeds/feeds.json.

Opóźnienia na żywo: wszystkie pociągi (dane PKP PLK) oraz komunikacja miejska Krakowa, Poznania, Gdańska i Szczecina (GTFS-Realtime). Utrudnienia na kolei (awarie, zamknięcia torów, komunikacja zastępcza, odwołania) prosto z Otwartych Danych Kolejowych PKP PLK – na publicznym serwerze działają od razu; lokalnie po ustawieniu darmowego klucza ROZKLAD_PLK_API_KEY.

Ceny: plan_journey podaje cenę z oficjalnego cennika przewoźnika dla PKP Intercity (TLK/IC według odległości po torze, EIC/EIP według par stacji) oraz Polregio, Kolei Mazowieckich, Śląskich, Dolnośląskich, Małopolskich, ŁKA i Arrivy (bilet normalny, 2. klasa, według odległości). Gdy odległość wypada blisko granicy przedziału cennika, podajemy widełki, np. 68–69 zł – przebieg toru w danych różni się od odległości taryfowej o kilka km. To cena maksymalna biletu normalnego (bez ulg i promocji); w sprzedaży często jest niższa – rabaty PKP IC, taryfy wojewódzkie (np. Taryfa Pomorska, Małopolska) i oferty przewoźników. Cenniki są informacją publiczną wykorzystywaną na podstawie art. 5 ustawy o otwartych danych. Aktualizacja: npm run build-fares -- <cennik.pdf> <url> <obowiązuje-od> (PKP IC) i python3 scripts/build-regional-fares.py (przewoźnicy regionalni). Dokładna cena i bilet: przy każdym połączeniu kolejowym plan_journey podaje link do wyszukiwarki Koleo (sprzedaje bilety wszystkich przewoźników kolejowych) z tą samą trasą i godziną – tam widać aktualną cenę z promocjami i można kupić bilet. Serwer nie pobiera cen ze sklepów przewoźników (nie ma do tego otwartego API, a automatyczne odpytywanie sklepów łamałoby ich regulaminy). Agent z przeglądarką (np. Claude in Chrome albo Playwright MCP) może jednak otworzyć ten link na Twoją prośbę i odczytać cenę – tak, jak zrobiłbyś to sam. Brak cen: komunikacja miejska, autobusy, SKM, Koleje Wielkopolskie (nie znaleźliśmy aktualnego cennika) – PR mile widziane.

Najszybciej: publiczny serwer (bez instalacji)

Adres MCP: https://rozklad.compabase.com/mcp (Streamable HTTP, bez logowania, limit 60 zapytań/min na IP).

  • Claude (web/desktop): Ustawienia → Connectors → Add custom connector → wklej adres.
  • ChatGPT: Settings → Connectors (tryb deweloperski) → dodaj serwer MCP z tym adresem.
  • Claude Code: claude mcp add --transport http rozklad https://rozklad.compabase.com/mcp
  • Cursor / VS Code: {"mcpServers": {"rozklad": {"url": "https://rozklad.compabase.com/mcp"}}}

Serwer hostuje Compabase pro publico bono, ze wszystkimi feedami (pociągi, PKS, FlixBus, komunikacja miejska). Przy intensywnym użyciu uruchom lokalnie (niżej).

Prywatność: publiczny serwer liczy wyłącznie zagregowane statystyki dzienne – ile razy użyto każdego narzędzia, z jakim skutkiem (np. „nie znaleziono miejsca”), nazwy klientów MCP i liczbę unikalnych użytkowników (sól zmieniana codziennie, trzymana tylko w pamięci). Nie zapisujemy adresów IP, współrzędnych ani tras. Podgląd: /stats.

Instalacja lokalna

Potrzebujesz Node.js ≥ 20. Zanim paczka trafi na npm, zamiast rozklad-mcp w poleceniach poniżej użyj github:ContentWriterco/rozklad-mcp (np. npx -y github:ContentWriterco/rozklad-mcp). Pierwsze uruchomienie pobiera ~40 MB rozkładów (potem cache i automatyczne odświeżanie co 12 h).

Claude Desktop

Settings → Developer → Edit Config i dopisz:

{
  "mcpServers": {
    "rozklad": {
      "command": "npx",
      "args": ["-y", "rozklad-mcp"]
    }
  }
}
Claude Code
claude mcp add rozklad --scope user -- npx -y rozklad-mcp
Cursor / Windsurf

~/.cursor/mcp.json (Windsurf: ~/.codeium/windsurf/mcp_config.json) – ten sam JSON co dla Claude Desktop.

VS Code (Copilot)

.vscode/mcp.json:

{ "servers": { "rozklad": { "type": "stdio", "command": "npx", "args": ["-y", "rozklad-mcp"] } } }
OpenAI Codex CLI

~/.codex/config.toml:

[mcp_servers.rozklad]
command = "npx"
args = ["-y", "rozklad-mcp"]
tool_timeout_sec = 120
Zdalnie (HTTP) – ChatGPT, agenci w chmurze, n8n
npx -y rozklad-mcp --http --port 3000 --host 0.0.0.0
# endpoint: http://twoj-serwer:3000/mcp   (Streamable HTTP, bezstanowy)   health: /health

albo Docker:

docker build -t rozklad-mcp .
docker run -p 3000:3000 -v rozklad-cache:/data rozklad-mcp
Z kodu źródłowego
git clone https://github.com/ContentWriterco/rozklad-mcp && cd rozklad-mcp
npm install && npm run build
node dist/index.js plan "Zbąszyń" "Kraków" --date jutro --time 7:00

Konfiguracja

Zmienne środowiskowe (w JSON-ie klienta: "env": { "ROZKLAD_FEEDS": "trains,regional,city:Poznań" }):

ZmiennaDomyślnieOpis
ROZKLAD_FEEDStrains,regionalGrupy (trains, regional/pks, city), pojedyncze feedy (warszawa), miasta (city:Kraków), regiony (region:wielkopolskie), all, wykluczenia (-sindbad).
ROZKLAD_EXTRA_FEEDS–Własne pliki GTFS: moj-pks=https://…/gtfs.zip;inny=https://…
ROZKLAD_FEEDS_FILE–Własny rejestr feedów (np. w forku dla jednego regionu).
ROZKLAD_MIN_TRANSFER4Minimalny czas przesiadki (min).
ROZKLAD_MAX_WALK_M500Maks. dojście pieszo między przystankami przy przesiadce.
ROZKLAD_REFRESH_HOURS12Jak często sprawdzać nowe rozkłady.
ROZKLAD_LIVE10 wyłącza opóźnienia na żywo.
ROZKLAD_CACHE_DIRcache systemuGdzie trzymać pobrane rozkłady.
ROZKLAD_PLK_API_KEY–Klucz Otwartych Danych Kolejowych PKP PLK – włącza utrudnienia i komunikację zastępczą.
ROZKLAD_CONN_CACHE_MB400Budżet pamięci na tablice połączeń dla kolejnych dni.
ROZKLAD_STATS–Tryb HTTP: 1 = anonimowe dzienne liczniki użycia pod /stats.

Pamięć: domyślny zestaw (pociągi + PKS) ≈ 300–500 MB RAM i ~10 s startu. Komunikacja miejska dużych miast jest cięższa (Warszawa ≈ +250 MB, wszystkie miasta razem ≈ 1,2 GB i ~70 s startu), dlatego lokalnie włączasz ją świadomie, np. trains,regional,city:Warszawa.

CLI (bez agenta)

rozklad-mcp plan "Warszawa" "Gdańsk" --date piątek --time 16:00
rozklad-mcp plan "Zbąszyń" "Gdańsk Główny" --time 9:00 --arrive-by
rozklad-mcp departures "Poznań Główny" --direction Wrocław --duration 180
rozklad-mcp trip "IC 3510" --date jutro
rozklad-mcp stops "szklarska"
rozklad-mcp sources

Skąd dane? (i dlaczego bez klucza)

Wszystko pochodzi z otwartych danych publikowanych przez przewoźników i zarządców (ponowne wykorzystywanie informacji sektora publicznego, Krajowy Punkt Dostępowy MMTIS):

Serwer nie scrapuje stron przewoźników. Odpowiedzi zawierają wymagane atrybucje źródeł. Dane bywają niekompletne (np. zmiany w ostatniej chwili, autobusowa komunikacja zastępcza) – przed ważną podróżą sprawdź u przewoźnika.

Brakuje Twojego PKS-u albo miasta? 🙋

To najprostszy i najcenniejszy sposób, żeby pomóc. Większość PKS-ów nie publikuje jeszcze danych – ale coraz więcej musi (rozporządzenie UE 2017/1926). Jeśli znasz link do pliku GTFS:

  1. dopisz wpis do feeds/feeds.json (szablon w CONTRIBUTING.md),
  2. npm run check-feeds – sprawdzi, czy link działa,
  3. otwórz Pull Request.

Nie programujesz? Otwórz zgłoszenie „Dodaj przewoźnika” z linkiem albo nazwą firmy – albo napisz do przewoźnika, żeby opublikował GTFS w KPD.

Szukamy pomocy: Wrocław (blokuje pobieranie automatyczne), Zielona Góra i Leszno (linki z KPD nie działają), Olsztyn, Częstochowa, PKS-y w całej Polsce, GTFS-Realtime kolejnych miast, aktualny cennik Kolei Wielkopolskich.

Jak to działa

  • GTFS (pociągi + autobusy + miasta) łączony w jedną sieć w pamięci; przystanki tej samej stacji grupowane, przystanki w promieniu 500 m łączone przejściem pieszym – stąd przesiadki pociąg ↔ PKS na dworcach.
  • Wyszukiwanie: Connection Scan Algorithm w wariancie wielokryterialnym (czas przyjazdu × liczba przesiadek) – kilkadziesiąt ms na zapytanie dla całej Polski.
  • Opóźnienia: JSON z danymi PKP PLK (pociągi) i GTFS-Realtime miast (własny dekoder protobuf, bez zależności), cache 60–90 s.
  • Zero natywnych zależności (działa na macOS/Windows/Linux/ARM), ~3 tys. linii TypeScriptu – łatwo zrozumieć i rozbudować.

Rozwój

npm install
npm test            # build + testy (bez internetu, na syntetycznej sieci)
npm run check-feeds # czy wszystkie linki w rejestrze działają
ROZKLAD_LOG=debug node dist/index.js plan "A" "B"

Pomysły na rozwój: taryfy wojewódzkie (Pomorska, Małopolska, Kujawsko-Pomorska) i ceny biletów miejskich, opóźnienia na żywo w wyszukiwaniu połączeń, mapy tras (shapes), utrwalony indeks dla szybszego startu.

Licencja

Kod: MIT. Dane: na licencjach źródeł – patrz data_sources i feeds/feeds.json. Projekt niezależny, niezwiązany z Grupą PKP ani przewoźnikami.


English

Animation: a user asks an AI assistant how to get from Zbąszyń to Kórnik; the assistant uses rozklad-mcp and answers with an IC train, a short walk and a PKS bus, with times and price

rozklad-mcp is an MCP server that gives AI assistants and agents Polish public transport timetables: every train in Poland (all carriers dispatched by PKP PLK – PKP Intercity, Polregio, Koleje Mazowieckie, SKM, regional railways), PKS/regional buses that publish open data, FlixBus/FlixTrain services to and from Poland, and urban transit in ~25 cities (Warsaw, Kraków, Łódź, Poznań, Gdańsk/Gdynia, Silesia GZM, Szczecin, Lublin, Białystok…).

  • plan_journey – multi-criteria connection scan with train ↔ bus ↔ tram transfers, depart-after / arrive-by, coordinates as endpoints, published price-list fares of PKP Intercity and regional rail carriers, plus a Koleo link with the exact current price and tickets
  • departures – live departure board with platforms and delays
  • trip_details – full route of a train or bus with live delays and cancellations (trains; city transit in Kraków, Poznań, Gdańsk, Szczecin)
  • rail_disruptions – official PKP PLK disruptions: failures, track closures, replacement buses, cancellations (affected trains are flagged ⚠ in all answers)
  • weather_warnings – official IMGW-PIB weather and flood warnings for the county of a place (also added to journeys automatically)
  • find_stops, nearby_stops, data_sources

Try it in 30 seconds: add https://rozklad.compabase.com/mcp as a custom connector in Claude or ChatGPT, or run claude mcp add --transport http rozklad https://rozklad.compabase.com/mcp. Locally: npx -y rozklad-mcp (stdio) in any MCP client, or --http for a Streamable HTTP endpoint. No API key – open GTFS data (PKP PLK via mkuran.pl, carriers' and cities' own feeds). Station names work with or without Polish diacritics; a bare town name means all of its stops.

Example prompts: "How do I get from Wrocław to Zakopane by 9 am tomorrow?", "What leaves Kraków Rondo Mogilskie now?", "How much is the IC from Poznań to Warsaw on Friday evening?"

Contributions of new feeds are very welcome – see CONTRIBUTING.md.

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.