About
Kharkiv Subway Route Planner (WIP!) (mostly vibecoded)
README
Telegram-бот, CLI та MCP-сервер для планування маршрутів у Харківському метрополітені.
Особливості
Харківський метрополітен
- 3 лінії метро: Холодногірсько-заводська, Салтівська, Олексіївська
- 3 пересадки: Майдан Конституції ↔ Історичний музей, Спортивна ↔ Метробудівників, Університет ↔ Держпром
- Розклад: Окремий для буднів та вихідних
Функціонал
Local-first: Локальна БД, працює офлайн
Час пересадки: 3 хвилини
Мови: Українська та англійська
Альтернативні назви: Старі та скорочені назви станцій
- Героїв праці: Салтівська
- Проспект Гагаріна: Левада
- Пушкінська: Ярослава Мудрого
- 23: 23 Серпня
- Барабашова: Академіка Барабашова
- Бекетова: Архітектора Бекетова
- Ботсад: Ботанічний сад
- Гагаріна: Левада
- Масельського: Ім. О.С. Масельського
- Павлова: Академіка Павлова
- Палац: Палац спорту
- ХТЗ: Тракторний завод
Пакунки
Проєкт організовано як монорепозиторій з окремими пакунками для різних інтерфейсів. Всі пакунки вимагають Python >= 3.11.
kharkiv-metro-core
Ядро системи — бібліотека з базовою логікою.
Відповідальність:
- Моделі даних (станції, лінії, маршрути)
- Граф метрополітену та алгоритми пошуку шляху
- Робота з базою даних SQLite
- Парсинг розкладу з metro.kharkiv.ua
- Конфігурація XDG
Залежності: beautifulsoup4, requests, toml, tzdata
kharkiv-metro-cli
Консольний інтерфейс для планування маршрутів у терміналі.
Особливості:
- Кольоровий вивід таблиць через Rich
- JSON та табличні формати виводу
- Конфігурація через TOML
Залежності: click, rich, kharkiv-metro-core
Команда: metro
kharkiv-metro-bot
Telegram-бот з інтерактивним інтерфейсом.
Особливості:
- Інтерактивний вибір станцій через кнопки
- Нагадування про вихід на потрібній станції
- Підтримка української та англійської мов (TODO)
Залежності: aiogram, python-dotenv, kharkiv-metro-core
Команда: metro-bot
kharkiv-metro-mcp
MCP-сервер для інтеграції з AI-асистентами (OpenCode, Claude Desktop тощо).
Доступні інструменти:
get_route— пошук маршрутуget_schedule— розклад станціїlist_stations— список станційfind_station— пошук станції за назвою
Залежності: mcp, kharkiv-metro-core
Команда: metro-mcp
Запуск та ініціалізація бази даних
Проєкт використовує uv, наступні команди виконуються через uv run metro.
Ініціалізація
metro scrape --init-db
Розклади парсяться з https://www.metro.kharkiv.ua/ і зберігаються окремо для буднів та вихідних.
Консольний інтерфейс (CLI)
# За замовчуванням - з поточного часу
metro route "Холодна гора" "Студентська"
# З конкретним часом
metro route "Холодна гора" "Студентська" --time "08:30"
# З виведенням у JSON
metro route "Холодна гора" "Студентська" --output json
# Англійською мовою
metro route "Kholodna Hora" "Studentska" --lang en
# Компактний вивід (тільки ключові станції: початок, пересадки, кінець)
metro route "Холодна гора" "Студентська" --compact
# Повний вивід (всі станції) - якщо в конфігу compact=true
metro config set preferences.route.compact true
metro route "Холодна гора" "Студентська" --compact
Перегляд розкладу
# Розклад станції
metro schedule "Майдан Конституції"
# З конкретним напрямком
metro schedule "Майдан Конституції" --direction "Індустріальна"
# У вихідні
metro schedule "Майдан Конституції" --day-type weekend
Список станцій
# Всі станції
metro stations
# Тільки одна лінія
metro stations --line saltivska
# Або коротше
metro stations -l s # "k", "o"
Конфігурація
Конфіг зберігається в XDG директоріях:
- Linux:
~/.config/kharkiv-metro-rp/config.toml - macOS:
~/Library/Application Support/kharkiv-metro-rp/config.toml - Windows:
%APPDATA%\kharkiv-metro-rp\config.toml
База даних:
- Linux:
~/.local/share/kharkiv-metro-rp/metro.db - macOS:
~/Library/Application Support/kharkiv-metro-rp/metro.db - Windows:
%LOCALAPPDATA%\kharkiv-metro-rp\metro.db
База аналітики (для збереження між редеплоями використовуйте ANALYTICS_DB_PATH):
- Linux:
~/.local/share/kharkiv-metro-rp/analytics.db - macOS:
~/Library/Application Support/kharkiv-metro-rp/analytics.db - Windows:
%LOCALAPPDATA%\kharkiv-metro-rp\analytics.db
config.toml - повна специфікація
[database] - налаштування бази даних
| Опція | Тип | За замовчуванням | Опис |
|---|---|---|---|
auto |
boolean | true |
true - використовувати XDG директорію, false - використовувати path |
path |
string | null |
Абсолютний шлях до бази даних (використовується якщо auto = false). Підтримує ~ (домашня директорія) |
[preferences] - загальні налаштування
| Опція | Тип | За замовчуванням | Можливі значення | Опис |
|---|---|---|---|---|
language |
string | "ua" |
"ua", "en" |
Мова станцій за замовчуванням |
output_format |
string | "table" |
"table", "json" |
Формат виводу за замовчуванням для stations та schedule команд |
[preferences.route] - налаштування маршрутів
| Опція | Тип | За замовчуванням | Можливі значення | Опис |
|---|---|---|---|---|
format |
string | "full" |
"full", "simple", "json" |
Формат виводу маршруту: full=детальна таблиця, simple=компактний inline, json=JSON |
compact |
boolean | false |
true, false |
true - показувати тільки ключові станції (початок, пересадки, кінець), false - всі станції. Працює з форматами full та simple |
[scraper] - налаштування парсера сайту
| Опція | Тип | За замовчуванням | Опис |
|---|---|---|---|
timeout |
integer | 30 |
Таймаут HTTP запитів в секундах |
user_agent |
string | "kharkiv-metro-rp/1.0" |
User-Agent для HTTP запитів |
Повний приклад config.toml
[database]
auto = false
path = "~/Documents/kharkiv_metro.db"
[preferences]
language = "ua"
output_format = "table"
[preferences.route]
format = "full"
compact = false
[scraper]
timeout = 30
user_agent = "kharkiv-metro-rp/1.0"
Команди управління конфігом
- Команда
metro config setпрацює для будь-якої опції з config.toml за шаблономsection.key value. Тип значення визначається автоматично (string, boolean, integer). - Команда
metro config openвідкриває конфіг у системному редакторі:- Linux: використовує
xdg-openабо$EDITOR(fallback: nano) - macOS: використовує
open - Windows: використовує
start
- Linux: використовує
# Кастомна база даних
metro --db-path /tmp/test.db route "Холодна гора" "Студентська"
# Кастомний конфіг
metro --config ./my-config.toml route "Холодна гора" "Студентська"
Змінні оточення
| Змінна | Опис | Приклад |
|---|---|---|
DB_PATH |
Шлях до основної бази даних метро | /app/data/metro.db |
ANALYTICS_DB_PATH |
Шлях до бази аналітики (для persistent зберігання між редеплоями) | /app/data/analytics.db |
BOT_TOKEN |
Токен Telegram бота | 123456:ABC-DEF... |
TZ |
Часовий пояс | Europe/Kyiv |
Telegram-бот
Інтерактивний Telegram бот для пошуку маршрутів з нагадуваннями про станції.
Запуск бота
# Встановіть змінні оточення
export BOT_TOKEN="your_bot_token_here"
export DB_PATH="/path/to/metro.db" # Опціонально, за замовчуванням XDG
export ANALYTICS_DB_PATH="/path/to/analytics.db" # Опціонально, для persistent зберігання
export TZ="Europe/Kyiv" # Опціонально, часовий пояс
# Запуск
uv run python -m kharkiv_metro_rp.bot.main
Команди бота
/start— Початок роботи та головне меню
/about— Інформація про бота
Функціонал
Пошук маршруту:
- Інтерактивний вибір лінії та станції відправлення/призначення
- Вибір часу відправлення: зараз, +-10/20 хв, або власний час
- Вибір типу дня: будній/вихідний
- Розрахунок часу прибуття з урахуванням розкладу
Нагадування:
- Можливість створити нагадування перед виходом на потрібній станції
- Автоматична пропозиція нагадувань для довгих ліній (2+ станцій)
Розгортання на Railway
Бот підтримує розгортання на Railway. Необхідні змінні оточення:
BOT_TOKEN— токен бота від @BotFatherDB_PATH— шлях до бази даних (наприклад,/app/data/metro.db)TZ— часовий пояс (Europe/Kyiv)ANALYTICS_DB_PATH— шлях до бази аналітики (для persistent зберігання, наприклад,/app/data/analytics.db)
MCP Server
Запуск MCP сервера для інтеграції з AI-агентами:
OpenCode
Передбачає:
- Наявність
uvу$PATH - Локальний репозиторій
git clone https://github.com/beauloxe/kharkiv-metro-rp.git /foo/bar/, де/foo/bar/- приклад директорії.
"mcp": {
"metro-kh": {
"enabled": true,
"type": "local",
"command": [
"uv", "run",
"--directory", "/foo/bar/kharkiv-metro-rp",
"python", "-m", "kharkiv_metro_rp.mcp.server"
],
}
}
Доступні інструменти
get_route- пошук маршруту між станціямиget_schedule- отримання розкладу станціїlist_stations- список всіх станційfind_station- пошук станції за назвою
Структура проєкту
metropoliten/
├── src/metropoliten/
│ ├── core/ # Ядро системи
│ │ ├── models.py # Моделі даних
│ │ ├── graph.py # Граф метро
│ │ └── router.py # Алгоритми маршрутизації
│ ├── data/ # Робота з даними
│ │ ├── database.py # SQLite база
│ │ ├── scraper.py # Парсер сайту metro.kharkiv.ua
│ │ └── initializer.py # Ініціалізація бази
│ ├── cli/ # CLI інтерфейс
│ │ └── main.py # Команди
│ ├── mcp/ # MCP сервер
│ │ └── server.py # Сервер
│ └── config.py # XDG конфігурація
└── data/
└── metro.db # База даних (legacy, тепер в XDG)
TODO
- Правильна транслітерація та назви станцій
- Доопрацювати парсер
- Переклад усіх полів
- Уніфікація виводу, аргументів
-
Переписати весь цей ШІ слопЗробити повний рефактор
Дисклеймер
Цей проєкт не пов'язаний з КП «Харківський метрополітен» і не надає жодних гарантій. Користуючись цим проєктом, Ви несете відповідальність за належне планування маршрутів.
Для повної інформації ознайомтесь з умовами ліцензії MIT.
Installing Kharkiv Metro Rp
This server has no published package — it is built from source. Open the repository and follow its README.
▸ github.com/beauloxe/kharkiv-metro-rpFAQ
Is Kharkiv Metro Rp MCP free?
Yes, Kharkiv Metro Rp MCP is free — one-click install via Unyly at no cost.
Does Kharkiv Metro Rp need an API key?
No, Kharkiv Metro Rp runs without API keys or environment variables.
Is Kharkiv Metro Rp hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install Kharkiv Metro Rp in Claude Desktop, Claude Code or Cursor?
Open Kharkiv Metro Rp on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
GitHub
PRs, issues, code search, CI status
by GitHubFilesystem
Secure file operations with configurable access controls.
Memory
Knowledge graph-based persistent memory system.
Template MCP Server
A CLI tool to create a new Model Context Protocol server project with TypeScript support, dual transport options, and an extensible structure
by mcpdotdirectCompare Kharkiv Metro Rp with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All development MCPs
