Every tool is read-only and returns structured content plus serialized JSON text for older clients. Station-name tools search first, and ambiguous matches can trigger MCP elicitation where the client supports it.
Trip planning and departures
All three regions serve the five global tools: find_transit, plan_trip, get_departures, get_service_status, and get_vehicle_status. Trips are planned from each agency's published timetable with live predictions applied, and every itinerary is checked by an independent validator before it is returned.
get_departures takes a station name or a reference. A name for one place covers all its stations: a complex such as Times Sq-42 St, stations a short walk apart, or a well-known place such as Penn Station or SFO. Different places that share a name, like the several 86 St stations, come back as a question to ask the rider; plan_trip instead returns the best trip from each, labelled. NYC departures include rerouted trains and trains missing from the timetable, marked as observed.
Step-free travel: plan_trip with accessibility: "step_free" only boards, alights and changes at platforms reachable without stairs and avoids stations cut off by a current elevator outage. get_service_status lists elevator and escalator outages for a station, line or city, marking which are on the step-free path and which block it. Station access comes from WMATA's GTFS and MTA's station list, including stations accessible in one direction only.
New York also covers the Long Island Rail Road, Metro-North and NYC buses, and Washington covers Metrobus. Journeys use every mode, buses included, and change between lines on foot at stations such as Penn Station, Grand Central and Atlantic Terminal; LIRR and Metro-North departures show the track.
Guided planning: if plan_trip can’t find a journey on its own, it returns routeHints, the lines near each end and the direct lines that serve both. Pick the lines you’d ride and call it again with up to four of them in routes. The server finds the actual trips, stops, transfers and walks on those lines and validates them like any other itinerary. Each itinerary comes with plain steps (walk here, ride this, get off there) for reading out to a rider.
Next train from A to B: get_departures with toStop lists only the trips that go on to that stop, each with its arrival time there.
Station search: find_transit ranks stations ahead of street stops and rail ahead of bus, says what each candidate is (station, platform or street stop, modes, lines), and knows a few reviewed place names such as SFO, Union Square, Penn Station, Grand Central and Dulles.
Names work the way people type them. “King Street” finds King St-Old Town, “42nd Street Times Square” finds Times Sq-42 St, small misspellings still land, and DC stations answer to WMATA’s published names (“Chinatown”, “Convention Center”). Leave out coverage and a name is searched in every region; call find_transit with no arguments to list the regions. When nothing matches, suggestions lists the closest names; they are never treated as a match.
Times a rider sees are in the agency’s local time with its offset, such as 18:32-04:00. A first question after a quiet spell still gets live data: the server fetches the agency’s feed for that stop and answers from it.
get_vehicle_status shows where trains are on a line, on a dated trip, or at a station. Each train reports its train ID, the station it is stopped at or heading to, the station it last served, and its destination; find_transit resolves a train ID to that train's trip. DC trains carry GPS coordinates; MTA reports stations rather than coordinates, so an NYC train between stations has none rather than a guessed position.
Results say whether they are realtime, scheduled_only, or unavailable, with source timestamps and reasons. Never piece a journey together from departure boards; use plan_trip. The Transit Board enhancement covers only the 13 legacy tools.