Skip to main content
Glama

🚇 Metro MCP

Сервер Model Context Protocol для транспортных систем США (метро DC и метро Нью-Йорка)

MCP Metro MCP Cloudflare Workers OAuth 2.1 License

Единый удалённый сервер Model Context Protocol (MCP), поддерживающий несколько транспортных систем США. В настоящее время поддерживаются метро Вашингтона (WMATA) и метро Нью-Йорка (MTA). Создан для бесшовной интеграции с MCP-совместимыми клиентами, такими как Claude Desktop, Cursor, Codex, и любым клиентом, поддерживающим Streamable HTTP MCP-серверы.

Быстрые ссылки: Быстрый стартЧто вы можете делатьTransit BoardРазвёртываниеИнтеграция с клиентами


Что вы можете делать

Задавайте вопросы на естественном языке о метро DC или метро Нью-Йорка в Claude Desktop или любом MCP-совместимом клиенте:

🚆 Информация о транспорте в реальном времени

Вашингтон, округ Колумбия:

  • «Когда следующий поезд Красной линии на станции Dupont Circle?»

  • «Какие автобусные маршруты доступны?»

  • «Найди автобусные остановки рядом с Dupont Circle»

  • «Где сейчас все автобусы 30N?»

  • «Когда следующий автобус на остановке 1001195?»

  • «Покажи все поезда, которые сейчас работают в системе метро»

  • «Есть ли задержки на Синей линии прямо сейчас?»

  • «Все ли лифты работают на станции Union Station?»

Нью-Йорк:

  • «Когда следующий поезд 1 на Таймс-сквер?»

  • «Есть ли задержки на линии A/C?»

  • «Какие поезда прибывают на Grand Central?»

  • «Что такое поезд A и куда он идёт?»

  • «До каких ближайших станций я могу дойти пешком от Таймс-сквер?»

  • «Сколько времени занимает переход между платформами Таймс-сквер?»

🗺️ Информация о станциях и навигация

Вашингтон, округ Колумбия:

  • «Где находится станция метро Smithsonian?»

  • «Покажи все станции на Зелёной линии»

Нью-Йорк:

  • «Где находится станция Union Square?»

  • «Покажи все 496 станций метро Нью-Йорка»

  • «Какие станции соединяются с Таймс-сквер?»

  • «Объясни разницу между экспресс- и локальными поездами»

♿ Доступность

Вашингтон, округ Колумбия (отключения лифтов):

  • «Есть ли отключения лифтов между здесь и National Airport?»

  • «На каких станциях метро DC сейчас работают лифты?»

🔔 Мониторинг обслуживания

Оба города:

  • «Есть ли задержки транспорта прямо сейчас в Нью-Йорке?»

  • «Работает ли Оранжевая линия метро DC нормально?»

  • «Сравни качество обслуживания между метро DC и метро Нью-Йорка»

📊 Информация о системе

Вашингтон, округ Колумбия:

  • Полный список всех станций метро с координатами

  • Информация обо всех шести линиях метро (Red, Blue, Orange, Silver, Green, Yellow)

Нью-Йорк:

  • Полное покрытие: Все 496 станций метро Нью-Йорка с координатами

  • Информация о переходах: Время перехода между связанными станциями (87 станций с переходами)

  • Описания маршрутов: Детальные схемы обслуживания для всех 29 маршрутов (экспресс против локальных, часы работы)

  • Ясность платформ: Объясняет направленные платформы (например, «127N» = северное направление на Таймс-сквер)


Related MCP server: marta-mcp

Быстрый старт

Использование публичного сервера

Самый быстрый способ начать — использовать размещённый экземпляр:

  1. Откройте ваш MCP-клиент

  2. Добавьте этот URL: https://metro-mcp.anuragd.me/mcp

  3. Нажмите «Подключиться» и авторизуйтесь через GitHub

  4. Начните задавать вопросы о метро DC или метро Нью-Йорка

Разверните свой собственный

Хотите запустить собственный экземпляр? Смотрите раздел Развёртывание ниже.


Развёртывание

Предварительные требования

  • Ключ API WMATA (обязательно)

  • Аккаунт Cloudflare (бесплатный тариф работает)

  • Bun для управления пакетами

  • Node.js для Wrangler и пула Workerd Vitest; Bun остаётся единственным менеджером пакетов и владельцем lockfile

  • GitHub OAuth App (для аутентификации)

Настройка окружения

Установите ровно то, что записано в bun.lock:

bun install --frozen-lockfile

Для локальной разработки создайте отдельный GitHub OAuth App, чей callback должен быть точно http://localhost:8787/callback. Затем скопируйте канонический шаблон .dev.vars.example, замените каждый заполнитель replace-with-... и запустите Wrangler:

cp .dev.vars.example .dev.vars
bun run dev

Держите вместе origin http://localhost:8787 из шаблона, списки разрешённых хостов/origin localhost, callback и значения ENVIRONMENT=development. В режиме локального запуска Wrangler по умолчанию настроенная привязка OAUTH_KV использует локальное непроизводственное хранилище в .wrangler; она не читает и не записывает развёрнутое производственное или preview-пространство имён. Не добавляйте --remote для обычной локальной разработки.

Создайте одно пространство имён OAuth Provider для каждого развёрнутого окружения и поместите его ID в соответствующую привязку OAUTH_KV:

bunx wrangler kv namespace create OAUTH_KV
bunx wrangler kv namespace create OAUTH_KV_preview

Производственная среда и preview также должны использовать отдельные GitHub OAuth-приложения. Настройте каждый callback как ${MCP_PUBLIC_ORIGIN}/callback; никогда не используйте производственное приложение или OAuth KV для preview. Каждое окружение задаёт:

  • MCP_PUBLIC_ORIGIN, MCP_ALLOWED_HOSTNAMES и MCP_ALLOWED_ORIGIN_HOSTNAMES

  • OAUTH_REDIRECT_URI и публичный GitHub GITHUB_CLIENT_ID окружения

  • ENVIRONMENT (production, preview или development)

  • OAUTH_KV, указывающий на выделенное пространство имён окружения

Устанавливайте производственные секреты в интерактивном режиме. MCP_REQUEST_STATE_KEY — это стабильный, специфичный для окружения ключ длиной не менее 32 байт, используемый только для подписанного состояния MRTR. JWT_SECRET остаётся временно для моста с устаревшей аудиторией /mcp.

bunx wrangler secret put MCP_REQUEST_STATE_KEY
bunx wrangler secret put GITHUB_CLIENT_SECRET
bunx wrangler secret put WMATA_API_KEY
bunx wrangler secret put JWT_SECRET

Установите те же четыре имени секретов независимо для preview; именованные окружения Wrangler не наследуют производственные секреты:

bunx wrangler secret put MCP_REQUEST_STATE_KEY --env preview
bunx wrangler secret put GITHUB_CLIENT_SECRET --env preview
bunx wrangler secret put WMATA_API_KEY --env preview
bunx wrangler secret put JWT_SECRET --env preview

Wrangler должен включать как nodejs_compat, так и global_fetch_strictly_public. Проверьте обе формы перед любым одобренным развёртыванием:

bunx wrangler deploy --dry-run --outdir /tmp/metro-mcp-production
bunx wrangler deploy --dry-run --env preview --outdir /tmp/metro-mcp-preview

Интеграция с MCP-клиентами

Claude

Используйте каноническую конечную точку Streamable HTTP в Claude Code:

claude mcp add --transport http metro-mcp https://metro-mcp.anuragd.me/mcp

Затем откройте /mcp, выберите metro-mcp и завершите вход через GitHub и согласие. Пользователи Claude.ai/Desktop могут добавить тот же URL как удалённый пользовательский коннектор, если это разрешено их тарифным планом и политикой рабочего пространства.

Codex

codex mcp add metro-mcp --url https://metro-mcp.anuragd.me/mcp
codex mcp login metro-mcp --scopes transit:read

Проверенный в репозитории mcp-config.json показывает эквивалентную общую конфигурацию удалённого HTTP. Токены доступа и обновления остаются в хранилище учётных данных клиента; не вставляйте их в конфигурацию проекта.

Совместимость транспорта

  • Запросы MCP 2026-07-28 не сохраняют состояние и не требуют initialize.

  • Обычные инструменты, ресурсы и подсказки остаются доступными для клиентов MCP 2025 без состояния.

  • POST /sse и OPTIONS /sse — это псевдонимы URL, переписываемые на канонический /mcp перед авторизацией.

  • Устаревший HTTP+SSE удалён. GET и DELETE на /sse или /mcp, URL сообщений сеанса и /sse/ возвращают 405.

  • Аудитория OAuth и обнаружение всегда используют https://metro-mcp.anuragd.me/mcp; /sse никогда не является ресурсом OAuth.

Конечные точки OAuth

Провайдер OAuth Workers реализует OAuth 2.1 с PKCE:

  • Обнаружение: /.well-known/oauth-authorization-server

  • Регистрация: сначала CIMD, с /register как временным запасным вариантом Dynamic Client Registration

  • Авторизация: /authorize (интеграция GitHub OAuth)

  • Токен: /token (обмен кода авторизации с проверкой PKCE)

  • Callback: /callback (обратный вызов GitHub OAuth)

Клиенты получают явный экран согласия transit:read. Гранты привязаны к каноническому ресурсу /mcp; токены доступа действуют не более 60 минут, токены обновления — не более 30 дней и ротируются при использовании, а токены-носители принимаются только в заголовке Authorization. Запасной вариант DCR прекращает действие 2027-06-30.

Версия 5.0 требует повторной авторизации для токенов без аудитории, токенов, привязанных к /sse, и клиентов, зарегистрированных в старом хранилище DCR. Существующие совместимые устаревшие JWT, привязанные к /mcp, перестают работать в более ранний из сроков: встроенный срок действия или 2026-11-30T00:00:00Z.

Поддерживаемые города

Сервер в настоящее время поддерживает следующие транспортные системы:

Город

Система

Данные в реальном времени

Оповещения о работе

Статус лифтов

Вашингтон, округ Колумбия

WMATA (метро)

Нью-Йорк

MTA (метро)

Доступные MCP-инструменты

Сервер предоставляет следующие инструменты через протокол MCP:

Инструмент

Описание

Поддерживаемые города

get_station_predictions

Получить прогнозы прибытия поездов в реальном времени для станции

DC, NYC

search_stations

Поиск станций по названию или коду

DC, NYC

get_stations_by_line

Получить все станции на конкретной линии

DC, NYC

get_incidents

Проверить текущие сбои в работе и предупреждения

DC, NYC

get_all_stations

Получить полный список всех станций с координатами

DC, NYC

get_station_transfers 🆕

Получить пересадочные соединения и время перехода между ближайшими станциями

Только NYC

get_route_info 🆕

Получить подробную информацию о маршруте (экспресс/локальный, схемы обслуживания, часы)

Только NYC

get_elevator_incidents

Найти отключения лифтов и эскалаторов

Только DC

get_bus_predictions

Получить прогнозы прибытия автобусов в реальном времени (7-значный ID остановки)

Только DC

get_bus_routes

Получить список всех доступных автобусных маршрутов

Только DC

get_bus_stops

Поиск автобусных остановок по местоположению или получение всех остановок

Только DC

get_bus_positions

Получить живые позиции всех автобусов (опционально фильтр по маршруту)

Только DC

get_train_positions

Получить живые позиции всех поездов в системе

Только DC

Всего: 13 MCP-инструментов (11 основных + 2 новых инструмента для NYC)

MCP Apps: Transit Board

Все 13 инструментов выше ссылаются на один автономный MCP App Transit Board. Хост, поддерживающий Apps, может отображать каждый результат в виде отдельного представления прибытия, обслуживания, станции/сети, маршрута или транспортного средства. Хосты без поддержки Apps получают тот же текстовый запасной вариант content и контракт structuredContent; улучшение не добавляет инструментов и не изменяет транзитные вызовы.

Скомпилированное приложение зафиксировано в public/apps/transit-board.html. Этот публичный ресурс содержит только код приложения: никакие результаты транзита, идентификационные данные, токены, секреты или значения конфигурации в него не встроены. Песочница не выполняет прямых сетевых запросов из браузера, не использует браузерное хранилище и не запрашивает разрешений браузера. Обновление — единственное взаимодействие с сервером, и оно идёт через хост к исходному разрешённому инструменту с его исходными аргументами.

Соберите и запустите детерминированный локальный набор приёмочных тестов Apps с помощью:

bun run build:apps
bun run test:apps

Смотрите docs/mcp-apps-verification.md для точной границы хоста, всех тринадцати сопоставлений представлений, покрытия Chromium и различия между рендерингом Apps и приёмкой запасного клиента. В этом выпуске Codex проверяет обнаружение MCP и обычные результаты инструментов как запасной клиент; встроенный рендеринг Apps в Codex не заявляется.

Технические детали

Протокол MCP

  • Версия: MCP 2026-07-28, с обычной совместимостью со stateless-режимом MCP 2025

  • Транспорт: Stateless Streamable HTTP через новый сервер SDK v2 для каждого запроса. Поддерживаются JSON и ответы SSE в рамках запроса; сессии протокола, возобновляемость и серверный push не рекламируются.

  • Аутентификация: Cloudflare Workers OAuth Provider отвечает за обнаружение, проверку CIMD/DCR, PKCE, идентификаторы издателя RFC 9207, привязку ресурсов RFC 8707, метаданные защищённого ресурса RFC 9728, ротацию refresh-токенов, отзыв и хранение токенов провайдера.

  • Форма результата инструментов: Каждый инструмент выдаёт structuredContent (типизированный объект, соответствующий outputSchema) наряду с устаревшим content[0].text (сериализованный JSON) для обратной совместимости.

  • Аннотации инструментов: Каждый инструмент объявляет readOnlyHint, idempotentHint, openWorldHint, чтобы клиенты могли отображать безопасные действия.

  • Предоставляемые возможности:

    • tools — 13 инструментов запросов транзита (DC + NYC)

    • resources — три URI-шаблона transit:// (станции, маршруты, инциденты)

    • prompts — три готовых шаблона (service-briefing, commute-planner, accessibility-check)

    • Ввод MRTR — современные клиенты получают input_required для неоднозначных станций; клиенты MCP 2025 получают детерминированные рекомендации по повторной попытке с точными идентификаторами станций

    • Уведомления о ходе выполнения: отправляются для get_all_stations, когда клиент соглашается через params._meta.progressToken

Транзитные API

WMATA (метро DC):

Сервер взаимодействует с официальными REST API WMATA. Подробности см. в документации разработчика WMATA:

  • Прогнозы по станциям: информация о прибытии поездов в реальном времени

  • Информация о станциях: названия, коды и местоположения станций

  • Инциденты: сбои в обслуживании и уведомления

  • Отключения лифтов и эскалаторов: информация о доступности

MTA (метро Нью-Йорка):

Сервер использует GTFS-Realtime каналы MTA. Публичные конечные точки API (без ключа API):

  • Каналы реального времени: формат Protocol Buffers с интервалом обновления 30 секунд

  • 8 отдельных каналов: охватывают все линии метро (1-7, A/C/E, B/D/F/M и т. д.)

  • Расширения NYCT: идентификаторы поездов, назначения путей и информация о направлении

  • Уведомления об обслуживании: встроены в сущности предупреждений GTFS-Realtime

Хостинг

  • Платформа: Cloudflare Workers

  • Статические ресурсы: public/ разворачивается через Cloudflare Workers Static Assets и привязывается как env.ASSETS; Worker сначала обрабатывает маршруты API/OAuth/MCP, затем делегирует запросы целевой страницы, документации, изображений и иконок привязке ресурсов.

  • Хранилище:

    • Специфическое для окружения Cloudflare KV OAUTH_KV — гранты, токены и регистрации OAuth Provider

    • Нет активного хранения сессий протокола. Старый экспорт MetroMcpAgent и исходная миграция v1 остаются неактивными исключительно для отката.

  • Среда выполнения: V8-изоляты с глобальным развёртыванием на периферии

Структура исходного кода

Кодовая база организована для поддержки транзита в нескольких городах с чётким разделением ответственности:

src/
├── index.ts              # Outer route normalization and Provider composition
├── public-handler.ts     # /info, OAuth UI, and static assets
├── route-normalizer.ts   # Exact /mcp admission and /sse URL alias
├── oauth/                # Provider configuration, GitHub consent, legacy bridge
├── mcp/                  # Stateless server factory, tools, resources, and prompts
├── mcp-agent.ts          # Inactive 4.x rollback class only
└── transit/              # WMATA and MTA clients with request cancellation

Ключевые архитектурные решения:

  • Абстракция транзита: общий интерфейс TransitAPIClient упрощает добавление новых городов (BART, MBTA и т. д.)

  • Маршрутизация по городам: один сервер обрабатывает все города через параметр city в вызовах инструментов MCP

  • Нормализованные ответы: все транзитные клиенты возвращают стандартизированные типы TransitStation, TransitPrediction и TransitIncident

  • Расширяемость: добавление нового города требует только реализации абстрактного класса клиента

Проверка и откат

Запустите полный локальный набор тестов с помощью bun run test. Аутентифицированный конформанс-раннер требует операторский кратковременный токен доступа Provider в переменных окружения процесса; он никогда не хранит токен и не передаёт его в аргументах командной строки:

export MCP_CONFORMANCE_TARGET_URL=https://metro-mcp-preview.anuragd.me/mcp
export MCP_CONFORMANCE_ALLOW_REMOTE=1
read -rsp 'Short-lived MCP token: ' MCP_CONFORMANCE_TOKEN && export MCP_CONFORMANCE_TOKEN
./scripts/run-conformance.sh
unset MCP_CONFORMANCE_TOKEN

См. docs/mcp-2026-verification.md для записи о приёмке основного протокола и docs/mcp-apps-verification.md для границы браузера Transit Board.

Откат восстанавливает предыдущую версию Worker и её предыдущие привязки. Не удаляйте исходное пространство имён Durable Object MetroMcpAgent и не добавляйте миграцию удаления в течение окна стабилизации; состояние сессии протокола является одноразовым, но сохранение класса и исходной миграции v1 обеспечивает возможность отката.

Откат Transit Board удаляет метаданные/ресурс Apps, исходный код браузера и зависимости сборки, оставляя транзитных провайдеров, OAuth, маршрутизацию, привязки и версию без изменений.

Участие

Вклад приветствуется! Не стесняйтесь:

  • Сообщать об ошибках или запрашивать функции через GitHub Issues

  • Отправлять pull request с улучшениями

  • Делиться отзывами о реализации MCP

Лицензия

Лицензия MIT — подробности см. в файле LICENSE.


Сделано с ❤️ для сообщества метро Вашингтона, округ Колумбия

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • SEPTA MCP — Philadelphia SEPTA real-time transit (www3.septa.org/api, keyless)

  • Amtrak MCP — live Amtrak train tracking via the community Amtraker API

  • MBTA MCP — Boston real-time transit via the MBTA v3 API (api-v3.mbta.com)

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Aarekaz/metro-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server