Skip to content

Transit MCP

by transitmcp.com · remote · no sign-in to list tools · v6.0.0 · published by com.transitmcp

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

Changes · 2

18 tools: 2 change things and 16 only read.

Scanned Oct 21, 2026

1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http transit https://transitmcp.com/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • The server marks "find_transit" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "find_transit" says "find": a word for reading.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

18 tools

Changes things 2Claude Code: ask
  • find_transitCall with no arguments (or only `coverage`) to list the regions served and what each supports.1 finding

    Why it is in this group

    • The name "find_transit" says "find": a word for reading.
    • The description's first verb is "call": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "find_transit" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "find_transit" says "find": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Call with no arguments (or only `coverage`) to list the regions served and what each supports. Without a coverage, a name is searched in every region. If nothing matches, suggestions lists the closest names (not matches). 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. Candidates come best first (exact names and well-known place names such as SFO, then stations, then rail before bus), and each stop says what it is: stopType (station, platform or street stop), modes and the lines serving it, so you can pick the one the rider means. No general address geocoding. Use plan_trip for journeys.

    Annotations the server declares

    • title: Find transit entities
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • plan_tripPlan an origin-to-destination journey.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Plan an origin-to-destination journey. Returns up to three independently validated itineraries (the fastest, then other lines) and resolves named endpoints together; departure defaults to now. The search covers every line of the coverage, buses included. When no itinerary is possible (planning unavailable, a search too large, or nothing found) 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.

    Annotations the server declares

    • title: Plan a transit journey
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
Only reads 16Claude Code: allow
  • get_all_stationsGet the complete list of transit stations with coordinates for one city.No findings

    Why it is in this group

    • The name "get_all_stations" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: All stations
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_bus_positionsGet real-time positions of DC Metro buses, optionally filtered by route.No findings

    Why it is in this group

    • The name "get_bus_positions" says "get": a word for reading.
    Description, as the server wrote it
    Get real-time positions of DC Metro buses, optionally filtered by route.

    Annotations the server declares

    • title: Live bus positions
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_bus_predictionsGet real-time bus arrival predictions for a DC Metro bus stop.No findings

    Why it is in this group

    • The name "get_bus_predictions" says "get": a word for reading.
    Description, as the server wrote it
    Get real-time bus arrival predictions for a DC Metro bus stop.

    Annotations the server declares

    • title: Bus arrival predictions
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_bus_routesGet all DC Metro bus routes with route IDs and descriptions.No findings

    Why it is in this group

    • The name "get_bus_routes" says "get": a word for reading.
    Description, as the server wrote it
    Get all DC Metro bus routes with route IDs and descriptions.

    Annotations the server declares

    • title: All bus routes
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_bus_stopsGet DC Metro bus stops.No findings

    Why it is in this group

    • The name "get_bus_stops" says "get": a word for reading.
    Description, as the server wrote it
    Get DC Metro bus stops. Returns all stops or filters by lat/lon/radius.

    Annotations the server declares

    • title: Bus stops
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_departuresFind what leaves a stop next, the first service or last service in a bounded window.No findings

    Why it is in this group

    • The name "get_departures" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Departures at a stop
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_elevator_incidentsGet current elevator and escalator outages.No findings

    Why it is in this group

    • The name "get_elevator_incidents" says "get": a word for reading.
    Description, as the server wrote it
    Get current elevator and escalator outages. DC Metro only.

    Annotations the server declares

    • title: Elevator outages
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_incidentsGet current transit incidents and service advisories for DC Metro or NYC Subway.No findings

    Why it is in this group

    • The name "get_incidents" says "get": a word for reading.
    Description, as the server wrote it
    Get current transit incidents and service advisories for DC Metro or NYC Subway.

    Annotations the server declares

    • title: Service incidents
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_route_infoGet detailed information about a transit route including service patterns.No findings

    Why it is in this group

    • The name "get_route_info" says "get": a word for reading.
    Description, as the server wrote it
    Get detailed information about a transit route including service patterns. NYC Subway only.

    Annotations the server declares

    • title: Route information
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_service_statusCheck disruptions, delays, closures, elevator and escalator outages, or revalidate a chosen itinerary without replacing it.No findings

    Why it is in this group

    • The name "get_service_status" says "get": a word for reading.
    Description, as the server wrote it
    Check disruptions, delays, closures, elevator and escalator outages, or revalidate a chosen itinerary without replacing it. Scope by coverage, a station name with its coverage (stop), 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.

    Annotations the server declares

    • title: Transit service status
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_station_predictionsGet real-time train arrival predictions for a transit station.No findings

    Why it is in this group

    • The name "get_station_predictions" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Train arrival predictions
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_station_transfersGet transfer connections and nearby stations from a transit station.No findings

    Why it is in this group

    • The name "get_station_transfers" says "get": a word for reading.
    Description, as the server wrote it
    Get transfer connections and nearby stations from a transit station. NYC Subway only.

    Annotations the server declares

    • title: Station transfers
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_stations_by_lineGet all stations on a specific transit line.No findings

    Why it is in this group

    • The name "get_stations_by_line" says "get": a word for reading.
    Description, as the server wrote it
    Get all stations on a specific transit line. Supports DC Metro and NYC Subway.

    Annotations the server declares

    • title: Stations on a line
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_train_positionsGet real-time positions of all trains on the DC Metro system.No findings

    Why it is in this group

    • The name "get_train_positions" says "get": a word for reading.
    Description, as the server wrote it
    Get real-time positions of all trains on the DC Metro system.

    Annotations the server declares

    • title: Live train positions
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_vehicle_statusWhere observed trains are right now.No findings

    Why it is in this group

    • The name "get_vehicle_status" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Where trains are now
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • search_stationsSearch for transit stations by name or code.No findings

    Why it is in this group

    • The name "search_stations" says "search": a word for reading.
    Description, as the server wrote it
    Search for transit stations by name or code. Supports DC Metro and NYC Subway.

    Annotations the server declares

    • title: Search stations
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 6.0.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http transit https://transitmcp.com/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__transit__get_station_predictions",
      "mcp__transit__search_stations",
      "mcp__transit__get_stations_by_line",
      "mcp__transit__get_all_stations",
      "mcp__transit__get_station_transfers",
      "mcp__transit__get_incidents",
      "mcp__transit__get_elevator_incidents",
      "mcp__transit__get_bus_predictions",
      "mcp__transit__get_bus_routes",
      "mcp__transit__get_bus_stops",
      "mcp__transit__get_bus_positions",
      "mcp__transit__get_train_positions",
      "mcp__transit__get_route_info",
      "mcp__transit__get_departures",
      "mcp__transit__get_service_status",
      "mcp__transit__get_vehicle_status"
    ],
    "ask": [
      "mcp__transit__find_transit",
      "mcp__transit__plan_trip"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as transit. Review it before you use it.