Skip to main content
Glama

🚇 Metro MCP

Servidor del Protocolo de Contexto de Modelo para sistemas de tránsito de EE. UU. (Metro de DC y Metro de Nueva York)

MCP Metro MCP Cloudflare Workers OAuth 2.1 Licencia

Un servidor unificado remoto del Protocolo de Contexto de Modelo (MCP) que admite múltiples sistemas de tránsito de EE. UU. Actualmente admite el Metro de Washington DC (WMATA) y el Metro de Nueva York (MTA). Diseñado para una integración perfecta con clientes compatibles con MCP como Claude Desktop, Cursor, Codex y cualquier cliente que admita servidores MCP HTTP Streamable.

Enlaces rápidos: Inicio rápidoLo que puedes hacerTransit BoardDespliegueIntegración con clientes MCP


Lo que puedes hacer

Haz preguntas en lenguaje natural sobre el Metro de DC o el Metro de Nueva York en Claude Desktop o en cualquier cliente compatible con MCP:

🚆 Información de tránsito en tiempo real

Washington DC:

  • "¿Cuándo es el próximo tren de la Línea Roja en Dupont Circle?"

  • "¿Qué rutas de autobús están disponibles?"

  • "Encuentra paradas de autobús cerca de Dupont Circle"

  • "¿Dónde están todos los autobuses 30N ahora mismo?"

  • "¿Cuándo es el próximo autobús en la parada 1001195?"

  • "Muéstrame todos los trenes que están circulando actualmente en el sistema Metro"

  • "¿Hay retrasos en la Línea Azul ahora mismo?"

  • "¿Están funcionando todos los ascensores en Union Station?"

Nueva York:

  • "¿Cuándo es el próximo tren 1 en Times Square?"

  • "¿Hay retrasos en la línea A/C?"

  • "¿Qué trenes llegan a Grand Central?"

  • "¿Qué es el tren A y a dónde va?"

  • "¿A qué estaciones cercanas puedo caminar desde Times Square?"

  • "¿Cuánto tiempo se tarda en caminar entre los andenes de Times Square?"

🗺️ Información de estaciones y navegación

Washington DC:

  • "¿Dónde está la estación Smithsonian del Metro?"

  • "Muéstrame todas las estaciones de la Línea Verde"

Nueva York:

  • "¿Dónde está la estación Union Square?"

  • "Muéstrame las 496 estaciones del Metro de Nueva York"

  • "¿Qué estaciones conectan con Times Square?"

  • "Explica la diferencia entre trenes expresos y locales"

♿ Accesibilidad

Washington DC (interrupciones de ascensores):

  • "¿Hay alguna interrupción de ascensores entre aquí y el Aeropuerto Nacional?"

  • "¿Qué estaciones del Metro de DC tienen ascensores funcionando ahora mismo?"

🔔 Monitoreo de servicio

Ambas ciudades:

  • "¿Hay retrasos de tránsito ahora mismo en Nueva York?"

  • "¿Está funcionando normalmente la Línea Naranja del Metro de DC?"

  • "Compara la calidad del servicio entre el Metro de DC y el Metro de Nueva York"

📊 Información del sistema

Washington DC:

  • Lista completa de todas las estaciones del Metro con coordenadas

  • Información sobre las seis líneas del Metro (Roja, Azul, Naranja, Plateada, Verde, Amarilla)

Nueva York:

  • Cobertura completa: Las 496 estaciones del Metro de Nueva York con coordenadas

  • Información de transbordos: Tiempos de caminata entre estaciones conectadas (87 estaciones con transbordos)

  • Descripciones de rutas: Patrones de servicio detallados para las 29 rutas (expreso vs. local, horarios de operación)

  • Claridad de andenes: Explica los andenes direccionales (por ejemplo, "127N" = dirección norte en Times Square)


Related MCP server: marta-mcp

Inicio rápido

Usar el servidor público

La forma más rápida de empezar es usar la instancia alojada:

  1. Abre tu cliente MCP

  2. Añade esta URL: https://metro-mcp.anuragd.me/mcp

  3. Haz clic en "Conectar" y autoriza mediante GitHub

  4. Empieza a hacer preguntas sobre el Metro de DC o el Metro de Nueva York

Desplegar el tuyo propio

¿Quieres ejecutar tu propia instancia? Consulta la sección Despliegue a continuación.


Despliegue

Requisitos previos

Configuración del entorno

Instala exactamente lo que registra bun.lock:

bun install --frozen-lockfile

Para el desarrollo local, crea una aplicación OAuth de GitHub dedicada cuyo callback sea exactamente http://localhost:8787/callback. Luego copia la plantilla canónica .dev.vars.example, reemplaza cada marcador replace-with-... y arranca Wrangler:

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

Mantén juntos el origen http://localhost:8787 de la plantilla, las listas de permitidos de host/origen localhost, el callback y los valores ENVIRONMENT=development. En el modo local predeterminado de Wrangler, el enlace OAUTH_KV configurado usa almacenamiento local no productivo bajo .wrangler; no lee ni escribe el espacio de nombres de producción o vista previa desplegado. No añadas --remote para el desarrollo local normal.

Crea un espacio de nombres de Proveedor OAuth para cada entorno desplegado y coloca su ID en el enlace OAUTH_KV correspondiente:

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

La producción y la vista previa también deben usar aplicaciones OAuth de GitHub distintas. Configura cada callback como ${MCP_PUBLIC_ORIGIN}/callback; nunca reutilices la aplicación de producción o el OAuth KV para la vista previa. Cada entorno establece:

  • MCP_PUBLIC_ORIGIN, MCP_ALLOWED_HOSTNAMES y MCP_ALLOWED_ORIGIN_HOSTNAMES

  • OAUTH_REDIRECT_URI y el GITHUB_CLIENT_ID público de GitHub del entorno

  • ENVIRONMENT (production, preview o development)

  • OAUTH_KV, apuntando al espacio de nombres dedicado del entorno

Establece los secretos de producción de forma interactiva. MCP_REQUEST_STATE_KEY es una clave estable específica del entorno de 32 bytes o más, utilizada solo para el estado MRTR firmado. JWT_SECRET permanece temporalmente para el puente heredado de audiencia /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

Establece los mismos cuatro nombres de secretos de forma independiente para la vista previa; los entornos Wrangler con nombre no heredan los secretos de producción:

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 debe incluir tanto nodejs_compat como global_fetch_strictly_public. Valida ambas formas antes de cualquier despliegue aprobado:

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

Integración con clientes MCP

Claude

Usa el endpoint canónico HTTP Streamable en Claude Code:

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

Luego abre /mcp, selecciona metro-mcp y completa el inicio de sesión y el consentimiento de GitHub. Los usuarios de Claude.ai/Desktop pueden añadir la misma URL como conector personalizado remoto donde su plan y la política del espacio de trabajo lo permitan.

Codex

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

El mcp-config.json incluido muestra la configuración genérica equivalente de HTTP remoto. Los tokens de acceso y actualización permanecen en el almacén de credenciales del cliente; no los pegues en la configuración del proyecto.

Compatibilidad de transporte

  • Las solicitudes MCP 2026-07-28 no tienen estado y no requieren initialize.

  • Las herramientas, recursos y avisos ordinarios siguen disponibles para clientes MCP 2025 sin estado.

  • POST /sse y OPTIONS /sse son alias de URL reescritos a /mcp canónico antes de la autorización.

  • El HTTP+SSE heredado se elimina. GET y DELETE en /sse o /mcp, las URL de mensajes de sesión y /sse/ devuelven 405.

  • La audiencia y el descubrimiento de OAuth siempre usan https://metro-mcp.anuragd.me/mcp; /sse nunca es un recurso OAuth.

Endpoints OAuth

El Proveedor OAuth de Workers implementa OAuth 2.1 con PKCE:

  • Descubrimiento: /.well-known/oauth-authorization-server

  • Registro: CIMD primero, con /register como respaldo temporal de Registro Dinámico de Clientes

  • Autorización: /authorize (integración OAuth de GitHub)

  • Token: /token (intercambio de código de autorización con verificación PKCE)

  • Callback: /callback (callback OAuth de GitHub)

Los clientes reciben una pantalla de consentimiento explícita de transit:read. Los permisos están vinculados al recurso canónico /mcp; los tokens de acceso duran como máximo 60 minutos, los tokens de actualización duran como máximo 30 días y rotan al usarse, y los tokens de portador se aceptan solo en el encabezado Authorization. El respaldo de DCR se retira el 2027-06-30.

La versión 5.0 requiere reautorización para tokens sin audiencia, tokens vinculados a /sse y clientes registrados en el antiguo almacén DCR. Los JWT heredados compatibles vinculados a /mcp dejan de funcionar en la fecha anterior entre su caducidad incorporada y 2026-11-30T00:00:00Z.

Ciudades compatibles

El servidor admite actualmente estos sistemas de tránsito:

Ciudad

Sistema

Datos en tiempo real

Alertas de servicio

Estado de ascensores

Washington DC

WMATA (Metro)

Nueva York

MTA (Metro)

Herramientas MCP disponibles

El servidor expone las siguientes herramientas a través del protocolo MCP:

Herramienta

Descripción

Ciudades compatibles

get_station_predictions

Obtén predicciones de llegada de trenes en tiempo real para una estación

DC, NYC

search_stations

Busca estaciones por nombre o código

DC, NYC

get_stations_by_line

Obtén todas las estaciones de una línea específica

DC, NYC

get_incidents

Consulta las interrupciones y avisos de servicio actuales

DC, NYC

get_all_stations

Obtén una lista completa de todas las estaciones con coordenadas

DC, NYC

get_station_transfers 🆕

Obtén conexiones de transbordo y tiempos de caminata entre estaciones cercanas

Solo NYC

get_route_info 🆕

Obtén información detallada de la ruta (expreso/local, patrones de servicio, horarios)

Solo NYC

get_elevator_incidents

Encuentra interrupciones de ascensores y escaleras mecánicas

Solo DC

get_bus_predictions

Obtén predicciones de llegada de autobuses en tiempo real (ID de parada de 7 dígitos)

Solo DC

get_bus_routes

Obtén la lista de todas las rutas de autobús disponibles

Solo DC

get_bus_stops

Busca paradas de autobús por ubicación u obtén todas las paradas

Solo DC

get_bus_positions

Obtén las posiciones en vivo de todos los autobuses (opcionalmente filtrar por ruta)

Solo DC

get_train_positions

Obtén las posiciones en vivo de todos los trenes del sistema

Solo DC

Total: 13 herramientas MCP (11 principales + 2 nuevas específicas de NYC)

MCP Apps: Transit Board

Las 13 herramientas anteriores hacen referencia a una única MCP App Transit Board autocontenida. Un host compatible con Apps puede representar cada resultado como una vista dedicada de llegadas, servicio, estación/red, ruta o vehículo. Los hosts sin soporte de Apps reciben el mismo texto de respaldo content y el contrato structuredContent; la mejora no añade herramientas ni cambia las llamadas de tránsito.

La aplicación compilada está confirmada en public/apps/transit-board.html. Ese recurso público contiene solo código de aplicación: no incluye ningún resultado de tránsito, identidad, token, secreto o valor de configuración. La vista en sandbox no realiza ninguna solicitud de red directa del navegador, no usa almacenamiento del navegador y no solicita permisos del navegador. La actualización es la única interacción con el servidor y pasa a través del host a la herramienta permitida de origen con sus argumentos originales.

Compila y ejecuta la suite de aceptación local determinista de Apps con:

bun run build:apps
bun run test:apps

Consulta docs/mcp-apps-verification.md para conocer el límite exacto del host, las trece asignaciones de vistas, la cobertura de Chromium y la distinción entre la representación de Apps y la aceptación del cliente de respaldo. Para esta versión, Codex valida el descubrimiento de MCP y los resultados de herramientas ordinarias como cliente de respaldo; no se afirma la representación de Apps en línea en Codex.

Detalles técnicos

Protocolo MCP

  • Versión: MCP 2026-07-28, con compatibilidad estándar sin estado de MCP 2025

  • Transporte: Streamable HTTP sin estado a través de un servidor SDK v2 nuevo para cada solicitud. Se admiten respuestas JSON y SSE con ámbito de solicitud; no se anuncian sesiones de protocolo, reanudabilidad ni push del servidor.

  • Autenticación: El Proveedor OAuth de Cloudflare Workers gestiona el descubrimiento, la validación CIMD/DCR, PKCE, identificadores de emisor RFC 9207, vinculación de recursos RFC 8707, metadatos de recursos protegidos RFC 9728, rotación de refresco, revocación y almacenamiento de tokens del Proveedor.

  • Forma de los resultados de las herramientas: Cada herramienta emite structuredContent (objeto tipado que coincide con outputSchema) junto con el content[0].text heredado (JSON serializado) para compatibilidad hacia atrás.

  • Anotaciones de herramientas: Cada herramienta declara readOnlyHint, idempotentHint, openWorldHint para que los clientes puedan mostrar acciones seguras.

  • Capacidades expuestas:

    • tools — 13 herramientas de consulta de tránsito (DC + NYC)

    • resources — tres plantillas de URI transit:// (estaciones, rutas, incidentes)

    • prompts — tres plantillas predefinidas (service-briefing, commute-planner, accessibility-check)

    • Entrada MRTR — los clientes modernos reciben input_required para estaciones ambiguas; los clientes MCP 2025 reciben guía de reintento determinista con IDs de estación exactos

    • Notificaciones de progreso: se emiten para get_all_stations cuando el cliente opta por ello mediante params._meta.progressToken

APIs de tránsito

WMATA (Metro de DC):

El servidor interactúa con las API REST oficiales de WMATA. Visite la documentación para desarrolladores de WMATA para más detalles:

  • Predicciones de estación: Información de llegada de trenes en tiempo real

  • Información de estación: Nombres, códigos y ubicaciones de estaciones

  • Incidentes: Interrupciones de servicio y avisos

  • Averías de ascensores/escaleras: Información de accesibilidad

MTA (Metro de NYC):

El servidor utiliza feeds GTFS-Realtime de la MTA. Puntos finales de API públicos (sin necesidad de clave API):

  • Feeds en tiempo real: Formato Protocol Buffers con intervalos de actualización de 30 segundos

  • 8 feeds separados: Cubren todas las líneas de metro (1-7, A/C/E, B/D/F/M, etc.)

  • Extensiones NYCT: IDs de trenes, asignaciones de vías e información de dirección

  • Alertas de servicio: Incrustadas en entidades de alerta GTFS-Realtime

Alojamiento

  • Plataforma: Cloudflare Workers

  • Activos estáticos: public/ se despliega a través de Cloudflare Workers Static Assets y se vincula como env.ASSETS; el Worker sirve primero las rutas de API/OAuth/MCP, luego delega las solicitudes de página de inicio, documentación, imágenes e iconos al enlace de activos.

  • Almacenamiento:

    • Cloudflare KV OAUTH_KV específico del entorno — concesiones, tokens y registros del Proveedor OAuth

    • Sin almacenamiento de sesión de protocolo activo. La exportación antigua MetroMcpAgent y la migración original v1 permanecen inactivas solo para reversión.

  • Runtime: Aislamientos V8 con despliegue global en el borde

Estructura del código fuente

El código base está organizado para soporte de tránsito multi-ciudad con una separación clara de responsabilidades:

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

Decisiones clave de arquitectura:

  • Abstracción de tránsito: La interfaz común TransitAPIClient permite agregar fácilmente nuevas ciudades (BART, MBTA, etc.)

  • Enrutamiento por ciudad: Un solo servidor maneja todas las ciudades mediante el parámetro city en las llamadas a herramientas MCP

  • Respuestas normalizadas: Todos los clientes de tránsito devuelven tipos estandarizados TransitStation, TransitPrediction y TransitIncident

  • Extensibilidad: Agregar una nueva ciudad solo requiere implementar la clase cliente abstracta

Verificación y reversión

Ejecute la suite local completa con bun run test. El ejecutor de conformidad autenticado requiere un token de acceso del Proveedor de corta duración obtenido por el operador en el entorno del proceso; nunca almacena el token ni lo coloca en argumentos de comando:

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

Consulte docs/mcp-2026-verification.md para el registro de aceptación del protocolo central y docs/mcp-apps-verification.md para el límite del navegador Transit Board.

La reversión restaura la versión anterior del Worker y sus enlaces anteriores. No elimine el espacio de nombres del Objeto Durable original MetroMcpAgent ni agregue una migración de eliminación durante la ventana de estabilización; el estado de la sesión del protocolo es desechable, pero conservar la clase y la migración original v1 mantiene posible la reversión.

Revertir Transit Board elimina los metadatos/recursos de Apps, el código fuente del navegador y las dependencias de compilación, dejando sin cambios los proveedores de tránsito, OAuth, enrutamiento, enlaces y la versión.

Contribuciones

¡Las contribuciones son bienvenidas! Siéntase libre de:

  • Reportar errores o solicitar funciones a través de GitHub Issues

  • Enviar solicitudes de extracción con mejoras

  • Compartir comentarios sobre la implementación de MCP

Licencia

Licencia MIT: consulte el archivo LICENSE para más detalles.


Hecho con ❤️ para la comunidad del Metro de Washington DC

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