Metro MCP
🚇 Metro MCP
Сервер Model Context Protocol для транспортных систем США (метро DC и метро Нью-Йорка)
Единый удалённый сервер 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
Быстрый старт
Использование публичного сервера
Самый быстрый способ начать — использовать размещённый экземпляр:
Откройте ваш MCP-клиент
Добавьте этот URL:
https://metro-mcp.anuragd.me/mcpНажмите «Подключиться» и авторизуйтесь через GitHub
Начните задавать вопросы о метро 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_HOSTNAMESOAUTH_REDIRECT_URIи публичный GitHubGITHUB_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 previewWrangler должен включать как 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:
Инструмент | Описание | Поддерживаемые города |
| Получить прогнозы прибытия поездов в реальном времени для станции | DC, NYC |
| Поиск станций по названию или коду | DC, NYC |
| Получить все станции на конкретной линии | DC, NYC |
| Проверить текущие сбои в работе и предупреждения | DC, NYC |
| Получить полный список всех станций с координатами | DC, NYC |
| Получить пересадочные соединения и время перехода между ближайшими станциями | Только NYC |
| Получить подробную информацию о маршруте (экспресс/локальный, схемы обслуживания, часы) | Только NYC |
| Найти отключения лифтов и эскалаторов | Только DC |
| Получить прогнозы прибытия автобусов в реальном времени (7-значный ID остановки) | Только DC |
| Получить список всех доступных автобусных маршрутов | Только DC |
| Поиск автобусных остановок по местоположению или получение всех остановок | Только DC |
| Получить живые позиции всех автобусов (опционально фильтр по маршруту) | Только DC |
| Получить живые позиции всех поездов в системе | Только 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.
Сделано с ❤️ для сообщества метро Вашингтона, округ Колумбия
This server cannot be installed
Maintenance
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
- AlicenseNot gradedqualityBmaintenanceMCP server that provides tools for querying live transit data (stops, departures, routes, vehicles, alerts) from any WP GTFS Pro site, enabling AI assistants to answer rider questions.14GPL 2.0
- AlicenseAqualityAmaintenanceMCP server for Atlanta MARTA real-time transit data, enabling queries about train arrivals and bus positions via natural language.4MIT
- AlicenseNot gradedqualityBmaintenanceMCP server for Japanese public transit journey planning with interactive map UI, enabling station search, route planning, and departure lookups via natural language.MIT
- FlicenseNot gradedqualityCmaintenanceAn MCP server that provides real-time Hong Kong public transport ETA information.
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)
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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