# Transit MCP

> Real-time DC Metro and NYC Subway arrivals, alerts, stations, and DC buses. Read-only, no login.

- name: com.transitmcp/transit-mcp
- version: 6.0.0
- connection class: unknown (unknown)
- trust: 74/100
- quality: 96/100 (new)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.transitmcp%2Ftransit-mcp
- tools: https://api.protogrid.dev/v1/servers/com.transitmcp%2Ftransit-mcp/tools

**Not classified yet.** The remote endpoints have not been probed successfully, or the listing has nothing to connect to.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "transit-mcp": {
      "type": "http",
      "url": "https://transitmcp.com/mcp"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 27
- freshness: 100
- provenance: 85
- drivers: +repository +dns-namespace +website -unreachable(1 failures) +updated-3d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 96/100 (new)

### protocol: 100 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- pass `protocol.list_ttl`: tool list is cacheable (ttlMs 86400000)

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 93 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 1 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 18 of 18 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 4,501 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: n/a (weight 15)

- n/a `stability.changes`, `stability.rug_pull`: tool history recorded for 3 of the 7 days needed

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 18, about 4,501 tokens to load them all
- tool set hash: 0973938d7401bbd27dab88a259bb2b3e
- tools last changed: 2026-10-20T09:53:09.280Z
- badge: [![protogrid quality](https://protogrid.dev/badge/com.transitmcp/transit-mcp.svg)](https://protogrid.dev/servers/com.transitmcp/transit-mcp)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-20 `get_departures` changed (description, inputSchema, outputSchema)
  - before: Find what leaves a stop next, the first service or last service in a bounded window. Pass a stopRef from find_transit, or a stop name with its coverage (one station complex resolves directly; different same-named stations return candidates). A station covers its whole complex, e.g. every line at Times Sq-42 St; a platform ref covers that platform. Returns dated trip references for get_vehicle_status. Use plan_trip for journeys; departures cannot establish a route or connection.
  - after: Find what leaves a stop next, the first service or last service in a bounded window. Pass a stopRef from find_transit, or a stop name with its coverage (one station complex resolves directly; different same-named stations return candidates). A station covers its whole complex, e.g. every line at Times Sq-42 St; a platform ref covers that platform. Pass toStop or toStopRef for the next trips from here that stop at a destination, each with its arrival time there. Returns dated trip references for get_vehicle_status. For a journey with a change use plan_trip (with routes where needed): departures alone cannot prove a connection.
- 2026-10-20 `plan_trip` changed (description, inputSchema, outputSchema)
  - before: Plan an origin-to-destination journey when find_transit reports available coverage with planning enabled. Returns up to three independently validated itineraries and resolves named endpoints together; departure defaults to now. The whole journey must finish within windowSeconds (default two hours): if none is found for a long trip, retry with a larger window. Each transit leg carries a tripInstanceRef; pass it to get_vehicle_status to see where that train is now. For a wheelchair user or anyone avoiding stairs, set accessibility: "step_free": journeys then board, alight and change only at platforms step-free from the street per the agency (partial stations by direction), avoiding stations cut off by a current elevator outage; in-station changes between such platforms are taken as step-free. It refuses with ACCESSIBILITY_UNAVAILABLE when no current elevator report exists and ENDPOINT_NOT_STEP_FREE when an endpoint has no step-free platform now (get_service_status lists the outages). Never assemble or repair journeys from get_departures.
  - after: Plan an origin-to-destination journey. Returns up to three independently validated itineraries and resolves named endpoints together; departure defaults to now. When no itinerary is possible (planning withheld, as in SF Bay; a search too large; or nothing found, such as a bus trip) it returns routeHints: lines near each end and direct lines serving both. Call again with routes (the lines you would ride, from routeHints or your own knowledge) to plan along only those lines, which works wherever schedules exist. Present only returned itineraries as confirmed. The whole journey must finish within windowSeconds (default two hours): if none is found for a long trip, retry with a larger window. Each transit leg carries a tripInstanceRef; pass it to get_vehicle_status to see where that train is now. For a wheelchair user or anyone avoiding stairs, set accessibility: "step_free": journeys then board, alight and change only at platforms step-free from the street per the agency (partial stations by direction), avoiding stations cut off by a current elevator outage; in-station changes between such platforms are taken as step-free. It refuses with ACCESSIBILITY_UNAVAILABLE when no current elevator report exists and ENDPOINT_NOT_STEP_FREE when an endpoint has no step-free platform now (get_service_status lists the outages). Never present a journey pieced together from get_departures as confirmed; check it here with routes.
- 2026-10-20 `get_vehicle_status` changed (outputSchema)
- 2026-10-20 `get_service_status` changed (description, outputSchema)
  - before: Check disruptions, delays, closures, accessibility alerts or revalidate a chosen itinerary without replacing it. Scope by coverage or an agency, route, stop or dated trip reference. Aggregate scopes include canonical service in the next 24 hours. Use get_vehicle_status for an observed vehicle location.
  - after: Check disruptions, delays, closures, elevator and escalator outages, or revalidate a chosen itinerary without replacing it. Scope by coverage or an agency, route, stop or dated trip reference; a station covers its complex. Aggregate scopes include canonical service in the next 24 hours. equipment lists elevator/escalator outages: accessiblePath marks the step-free route, blocksStepFree marks stations step-free plan_trip avoids, and alternativeRoute is the agency's way around. Use get_vehicle_status for an observed vehicle location.
- 2026-10-20 `get_departures` changed (outputSchema)
- 2026-10-20 `plan_trip` changed (description, inputSchema, outputSchema)
  - before: Plan an origin-to-destination journey when find_transit reports available coverage with planning enabled. Returns up to three independently validated itineraries and resolves named endpoints together; departure defaults to now. The whole journey must finish within windowSeconds (default two hours): if none is found for a long trip, retry with a larger window. Each transit leg carries a tripInstanceRef; pass it to get_vehicle_status to see where that train is now. Never assemble or repair journeys from get_departures.
  - after: Plan an origin-to-destination journey when find_transit reports available coverage with planning enabled. Returns up to three independently validated itineraries and resolves named endpoints together; departure defaults to now. The whole journey must finish within windowSeconds (default two hours): if none is found for a long trip, retry with a larger window. Each transit leg carries a tripInstanceRef; pass it to get_vehicle_status to see where that train is now. For a wheelchair user or anyone avoiding stairs, set accessibility: "step_free": journeys then board, alight and change only at platforms step-free from the street per the agency (partial stations by direction), avoiding stations cut off by a current elevator outage; in-station changes between such platforms are taken as step-free. It refuses with ACCESSIBILITY_UNAVAILABLE when no current elevator report exists and ENDPOINT_NOT_STEP_FREE when an endpoint has no step-free platform now (get_service_status lists the outages). Never assemble or repair journeys from get_departures.
- 2026-10-20 `find_transit` changed (outputSchema)
- 2026-10-19 `get_vehicle_status` changed (title, description, inputSchema, outputSchema, annotations) **meaning changed**
  - before: Locate an observed vehicle on a dated trip or list observed vehicles on a route. Requires a dated trip-instance or route reference, never a bare train number or stop. Use find_transit to resolve identity and get_departures for approaching service.
  - after: Where observed trains are right now. Pass a route ref to list its trains, a dated trip ref (from get_departures or a plan_trip leg) to find that train, or a station (stopRef, or a name with coverage) to see trains stopped at or heading to it; a station covers its whole complex. Each train reports the stop it is at or heading to (stopStatus), the stop it last served, and its destination. Coordinates are the vehicle's own when the agency sends them (DC); otherwise a stopped train is placed at its station and a moving one has none. Never pass a bare train number: use find_transit.
- 2026-10-19 `get_departures` changed (description)
  - before: Find what leaves a stop next, the first service or last service in a bounded window. Pass a stopRef from find_transit, or a stop name with its coverage (one station complex resolves directly; different same-named stations return candidates). Returns dated trip references for get_vehicle_status. Use plan_trip for journeys; departures cannot establish a route or connection.
  - after: Find what leaves a stop next, the first service or last service in a bounded window. Pass a stopRef from find_transit, or a stop name with its coverage (one station complex resolves directly; different same-named stations return candidates). A station covers its whole complex, e.g. every line at Times Sq-42 St; a platform ref covers that platform. Returns dated trip references for get_vehicle_status. Use plan_trip for journeys; departures cannot establish a route or connection.
- 2026-10-19 `plan_trip` changed (description)
  - before: Plan an origin-to-destination journey when find_transit reports available coverage with planning enabled. Returns up to three independently validated itineraries and resolves named endpoints together; departure defaults to now. Never assemble or repair journeys from get_departures.
  - after: Plan an origin-to-destination journey when find_transit reports available coverage with planning enabled. Returns up to three independently validated itineraries and resolves named endpoints together; departure defaults to now. The whole journey must finish within windowSeconds (default two hours): if none is found for a long trip, retry with a larger window. Each transit leg carries a tripInstanceRef; pass it to get_vehicle_status to see where that train is now. Never assemble or repair journeys from get_departures.

Full history: https://api.protogrid.dev/v1/servers/com.transitmcp%2Ftransit-mcp/changes

## Remotes

- https://transitmcp.com/mcp (streamable-http, auth none, reachable false, uptime30d 0.9230769)

## Packages

_none_

## Tools (18)

- `find_transit`: Resolve a coverage, agency, route, station, stop, or a currently observed train number (where vehicle data exists); inspect an exact reference or nearby coordinates. Context ranks candidates without selecting identity. No general address geocoding. Use plan_trip for journeys.
- `get_all_stations`: Get the complete list of transit stations with coordinates for one city. Large result; prefer search_stations or get_stations_by_line when looking for specific stations.
- `get_bus_positions`: Get real-time positions of DC Metro buses, optionally filtered by route.
- `get_bus_predictions`: Get real-time bus arrival predictions for a DC Metro bus stop.
- `get_bus_routes`: Get all DC Metro bus routes with route IDs and descriptions.
- `get_bus_stops`: Get DC Metro bus stops. Returns all stops or filters by lat/lon/radius.
- `get_departures`: Find what leaves a stop next, the first service or last service in a bounded window. Pass a stopRef from find_transit, or a stop name with its coverage (one station complex resolves directly; different same-named stations return candidates). A station covers its whole complex, e.g. every line at Times Sq-42 St; a platform ref covers that platform. Pass toStop or toStopRef for the next trips from here that stop at a destination, each with its arrival time there. Returns dated trip references for get_vehicle_status. For a journey with a change use plan_trip (with routes where needed): departures alone cannot prove a connection.
- `get_elevator_incidents`: Get current elevator and escalator outages. DC Metro only.
- `get_incidents`: Get current transit incidents and service advisories for DC Metro or NYC Subway.
- `get_route_info`: Get detailed information about a transit route including service patterns. NYC Subway only.
- `get_service_status`: Check disruptions, delays, closures, elevator and escalator outages, or revalidate a chosen itinerary without replacing it. Scope by coverage or an agency, route, stop or dated trip reference; a station covers its complex. Aggregate scopes include canonical service in the next 24 hours. equipment lists elevator/escalator outages: accessiblePath marks the step-free route, blocksStepFree marks stations step-free plan_trip avoids, and alternativeRoute is the agency's way around. Use get_vehicle_status for an observed vehicle location.
- `get_station_predictions`: Get real-time train arrival predictions for a transit station. Supports DC Metro and NYC Subway. Accepts a station name or an exact station ID; if a name matches several stations, the result lists the candidates to choose from.
- `get_stations_by_line`: Get all stations on a specific transit line. Supports DC Metro and NYC Subway.
- `get_station_transfers`: Get transfer connections and nearby stations from a transit station. NYC Subway only.
- `get_train_positions`: Get real-time positions of all trains on the DC Metro system.
- `get_vehicle_status`: Where observed trains are right now. Pass a route ref to list its trains, a dated trip ref (from get_departures or a plan_trip leg) to find that train, or a station (stopRef, or a name with coverage) to see trains stopped at or heading to it; a station covers its whole complex. Each train reports the stop it is at or heading to (stopStatus), the stop it last served, and its destination. Coordinates are the vehicle's own when the agency sends them (DC); otherwise a stopped train is placed at its station and a moving one has none. Never pass a bare train number: use find_transit.
- `plan_trip`: Plan an origin-to-destination journey. Returns up to three independently validated itineraries and resolves named endpoints together; departure defaults to now. When no itinerary is possible (planning withheld, as in SF Bay; a search too large; or nothing found, such as a bus trip) it returns routeHints: lines near each end and direct lines serving both. Call again with routes (the lines you would ride, from routeHints or your own knowledge) to plan along only those lines, which works wherever schedules exist. Present only returned itineraries as confirmed. The whole journey must finish within windowSeconds (default two hours): if none is found for a long trip, retry with a larger window. Each transit leg carries a tripInstanceRef; pass it to get_vehicle_status to see where that train is now. For a wheelchair user or anyone avoiding stairs, set accessibility: "step_free": journeys then board, alight and change only at platforms step-free from the street per the agency (partial stations by direction), avoiding stations cut off by a current elevator outage; in-station changes between such platforms are taken as step-free. It refuses with ACCESSIBILITY_UNAVAILABLE when no current elevator report exists and ENDPOINT_NOT_STEP_FREE when an endpoint has no step-free platform now (get_service_status lists the outages). Never present a journey pieced together from get_departures as confirmed; check it here with routes.
- `search_stations`: Search for transit stations by name or code. Supports DC Metro and NYC Subway.
