Unofficial DC, Maryland and Virginia transit: trips, Metro, buses, rail, fares and alerts.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Estimate the total fare for a cross-system trip: per-leg fares, how to pay each, and a total — noting each leg is usually a separate payment. Origin and destination can be addresses, places, stations or "lat,lon". Answer only from this tool's results: never add routes, hours, phone numbers, addresses or tips from memory. Unofficial tool, not affiliated with WMATA or any transit agency.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http transit https://dmvtransit.com/mcp
Estimate the total fare for a cross-system trip: per-leg fares, how to pay each, and a total — noting each leg is usually a separate payment. Origin and destination can be addresses, places, stations or "lat,lon". Answer only from this tool's results: never add routes, hours, phone numbers, addresses or tips from memory. Unofficial tool, not affiliated with WMATA or any transit agency.
| Argument | Type | Description |
|---|---|---|
| when | any | |
| origin* | string | |
| destination* | string | |
| rider_category | any |
{
"type": "object",
"title": "estimate_trip_costArguments",
"required": [
"origin",
"destination"
],
"properties": {
"when": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "When",
"default": null
},
"origin": {
"type": "string",
"title": "Origin"
},
"destination": {
"type": "string",
"title": "Destination"
},
"rider_category": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Rider Category",
"default": null
}
}
}Stops and stations within walking distance of a place, across all agencies. Args: place: A Metro station name, a stop name, or "lat,lon". radius_m: Search radius in meters (default 400). agency: Optional feed slug to restrict to (e.g. "dash", "vre", "wmata"). Answer only from this tool's results: never add routes, hours, phone numbers, addresses or tips from memory. Unofficial tool, not affiliated with WMATA or any transit agency.
| Argument | Type | Description |
|---|---|---|
| place* | string | |
| agency | any | |
| radius_m | integer |
{
"type": "object",
"title": "find_stops_nearArguments",
"required": [
"place"
],
"properties": {
"place": {
"type": "string",
"title": "Place"
},
"agency": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Agency",
"default": null
},
"radius_m": {
"type": "integer",
"title": "Radius M",
"default": 400
}
}
}Find where a street address, hotel, attraction or other place is, in the DC, Maryland and Northern Virginia area. Call this whenever a rider names a place that isn't plainly a station, before planning a trip from or to it. Check that the result is the place they meant, and ask them if several fit. Pass a result's `point` to plan_trip, plan_connection or find_stops_near. Args: query: What the rider said, e.g. "1717 E Capitol St SE" or "Capital Hilton". limit: Most results to return, 1 to 5. Answer only from this tool's results: never add routes, hours, phone numbers, addresses or tips from memory. Unofficial tool, not affiliated with WMATA or any transit agency.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| query* | string |
{
"type": "object",
"title": "geocode_addressArguments",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"title": "Limit",
"default": 5
},
"query": {
"type": "string",
"title": "Query"
}
}
}Elevators and escalators currently out of service, optionally for one station. Answer only from this tool's results: never add routes, hours, phone numbers, addresses or tips from memory. Unofficial tool, not affiliated with WMATA or any transit agency.
| Argument | Type | Description |
|---|---|---|
| station | any |
{
"type": "object",
"title": "get_elevator_escalator_statusArguments",
"properties": {
"station": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Station",
"default": null
}
}
}Station-to-station Metrorail fare. Args: origin: Origin station name or code. destination: Destination station name or code. rider_type: "regular"/"peak", "offpeak", or "senior"/"disabled"/"reduced". Answer only from this tool's results: never add routes, hours, phone numbers, addresses or tips from memory. Unofficial tool, not affiliated with WMATA or any transit agency.
| Argument | Type | Description |
|---|---|---|
| origin* | string | |
| rider_type | string | |
| destination* | string |
{
"type": "object",
"title": "get_fareArguments",
"required": [
"origin",
"destination"
],
"properties": {
"origin": {
"type": "string",
"title": "Origin"
},
"rider_type": {
"type": "string",
"title": "Rider Type",
"default": "regular"
},
"destination": {
"type": "string",
"title": "Destination"
}
}
}Full text of the primary guide for a topic: new_rider, visitor, payment, fares, accessibility, safety, or maps. Answer only from this tool's results: never add routes, hours, phone numbers, addresses or tips from memory. Unofficial tool, not affiliated with WMATA or any transit agency.
| Argument | Type | Description |
|---|---|---|
| topic* | string |
{
"type": "object",
"title": "get_guideArguments",
"required": [
"topic"
],
"properties": {
"topic": {
"type": "string",
"title": "Topic"
}
}
}How to ride Metrorail between two stations: which line(s), where to change trains, which direction ("toward ..."), number of stops, and the fare. Use this for EVERY Metrorail trip — never assume two stations share a line. Args: origin: Station name, code (e.g. "C10"), or airport name/code ("DCA", "Dulles"). destination: Station name, code, or airport name/code. Answer only from this tool's results: never add routes, hours, phone numbers, addresses or tips from memory. Unofficial tool, not affiliated with WMATA or any transit agency.
| Argument | Type | Description |
|---|---|---|
| origin* | string | |
| destination* | string |
{
"type": "object",
"title": "get_metro_routeArguments",
"required": [
"origin",
"destination"
],
"properties": {
"origin": {
"type": "string",
"title": "Origin"
},
"destination": {
"type": "string",
"title": "Destination"
}
}
}Recent reports from other RIDERS (crowdsourced on this site): delays, crowding, broken elevators, tips. Unverified and unofficial: always present them as "riders reported ...", with how long ago, never as agency information, and never let them replace the timetable or official alerts. Args: station: A station or stop name to filter by (matched loosely). line: A line or route to filter by, e.g. "Red Line", "D80", "MARC". days: How many days back to look (default 2, at most 30). Answer only from this tool's results: never add routes, hours, phone numbers, addresses or tips from memory. Unofficial tool, not affiliated with WMATA or any transit agency.
| Argument | Type | Description |
|---|---|---|
| days | integer | |
| line | any | |
| station | any |
{
"type": "object",
"title": "get_rider_reportsArguments",
"properties": {
"days": {
"type": "integer",
"title": "Days",
"default": 2
},
"line": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Line",
"default": null
},
"station": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Station",
"default": null
}
}
}One route from an agency's GTFS schedule: days and hours of service, typical frequency, endpoints, fare, and any live disruptions on it. Args: agency: Agency slug or name (e.g. "metrobus", "wmata" for Metrorail lines, "fairfax-connector", "OmniRide", "loudoun"). query: Route number or name (e.g. "A11", "Blue", "599", "Metro Express"). Answer only from this tool's results: never add routes, hours, phone numbers, addresses or tips from memory. Unofficial tool, not affiliated with WMATA or any transit agency.
| Argument | Type | Description |
|---|---|---|
| query* | string | |
| agency* | string |
{
"type": "object",
"title": "get_routeArguments",
"required": [
"agency",
"query"
],
"properties": {
"query": {
"type": "string",
"title": "Query"
},
"agency": {
"type": "string",
"title": "Agency"
}
}
}Live service disruptions: WMATA incidents (Metrorail, Metrobus, elevators) and agencies' GTFS-realtime alerts (detours, closed stops, missed trips). Args: line: Metrorail line code (RD, BL, YL, OR, GR, SV) or bus route number. station: Metrorail station name or code. mode: "rail", "bus", or "elevator_escalator". agency: Agency slug, e.g. "wmata", "metrobus", "fairfax-connector". Answer only from this tool's results: never add routes, hours, phone numbers, addresses or tips from memory. Unofficial tool, not affiliated with WMATA or any transit agency.
| Argument | Type | Description |
|---|---|---|
| line | any | |
| mode | any | |
| agency | any | |
| station | any |
{
"type": "object",
"title": "get_service_alertsArguments",
"properties": {
"line": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Line",
"default": null
},
"mode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Mode",
"default": null
},
"agency": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Agency",
"default": null
},
"station": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Station",
"default": null
}
}
}Lines served, address, parking availability, transfers, and entrances for a station (accepts a name like "Gallery Place" or a code like "B01"). Answer only from this tool's results: never add routes, hours, phone numbers, addresses or tips from memory. Unofficial tool, not affiliated with WMATA or any transit agency.
| Argument | Type | Description |
|---|---|---|
| station* | string |
{
"type": "object",
"title": "get_station_infoArguments",
"required": [
"station"
],
"properties": {
"station": {
"type": "string",
"title": "Station"
}
}
}How to pay to ride one agency. `fare_page_text` is the agency's own fare page (the source for prices, discounts and transfer rules); the other fields are a shorter hand-maintained summary that the fare page overrides. Args: agency: Agency slug or name (e.g. "vre", "dash", "omniride", "wmata", "metrobus"). Answer only from this tool's results: never add routes, hours, phone numbers, addresses or tips from memory. Unofficial tool, not affiliated with WMATA or any transit agency.
| Argument | Type | Description |
|---|---|---|
| agency* | string |
{
"type": "object",
"title": "how_to_payArguments",
"required": [
"agency"
],
"properties": {
"agency": {
"type": "string",
"title": "Agency"
}
}
}Every transit system in the region (WMATA + VRE, Virginia Breeze, Fairfax Connector, ART, DASH, CUE, Loudoun, OmniRide): mode, role, strengths, service area, a one-line fare/payment summary, and data freshness. Answer only from this tool's results: never add routes, hours, phone numbers, addresses or tips from memory. Unofficial tool, not affiliated with WMATA or any transit agency.
No arguments.
{
"type": "object",
"title": "list_agenciesArguments",
"properties": {}
}List content categories with document counts and data freshness. Answer only from this tool's results: never add routes, hours, phone numbers, addresses or tips from memory. Unofficial tool, not affiliated with WMATA or any transit agency.
No arguments.
{
"type": "object",
"title": "list_topicsArguments",
"properties": {}
}Advise on getting between two places across systems: which system for each leg, the transfer hub, WHICH DAYS/TIMES the connection works, and the fare + how to pay per leg. Guidance, not a booked itinerary. Args: origin: Address, place name, station, or "lat,lon". destination: Address, place name, station, or "lat,lon". when: Optional — a day ("sunday", "weekday") to check feasibility against. Answer only from this tool's results: never add routes, hours, phone numbers, addresses or tips from memory. Unofficial tool, not affiliated with WMATA or any transit agency.
| Argument | Type | Description |
|---|---|---|
| when | any | |
| origin* | string | |
| destination* | string |
{
"type": "object",
"title": "plan_connectionArguments",
"required": [
"origin",
"destination"
],
"properties": {
"when": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "When",
"default": null
},
"origin": {
"type": "string",
"title": "Origin"
},
"destination": {
"type": "string",
"title": "Destination"
}
}
}Real trip options from the agencies' timetables, like the site's map: trips leaving in the 3 hours after the given time from each agency's closest stops (up to about a mile's walk; the walking time is part of each option), direct trips first, one transfer only when needed, two transfers only when nothing simpler works, and transfers only between stops within 0.3 km. Options with short transfer waits (10 minutes or less) come first; a trip with a longer wait is offered only when nothing better works. Leaving now, times include live updates where agencies publish them; for a later time they are the timetable. At BWI, DCA and IAD a step gives the airport's own directions between the terminal and its rail station (BWI: the free shuttle) — pass those on. Tell the rider how much walking and waiting each option involves. Use this whenever a rider asks how to get somewhere at a particular time; use plan_connection for general "how would I get there" and which days it works. Args: origin: An address, landmark, station, or "lat,lon" (a `point` from geocode_address is best). destination: Same as origin. depart_at: When to leave, in local Eastern time, as "YYYY-MM-DDTHH:MM" (e.g. "2026-11-02T09:30"). Leave it out to leave now. Answer only from this tool's results: never add routes, hours, phone numbers, addresses or tips from memory. Unofficial tool, not affiliated with WMATA or any transit agency.
| Argument | Type | Description |
|---|---|---|
| origin* | string | |
| depart_at | any | |
| destination* | string |
Full-text search of the agencies' web pages: fares, how to pay, accessibility, safety, rules, new-rider/visitor guides, and service-change notices. NOT a source for routes, stops, schedules, hours or service days — use get_metro_route, plan_connection, get_route or transfers_at (GTFS schedule data) for those. Args: query: Natural-language search terms, e.g. "pay with phone" or "bringing a bike". category: Optional filter. One of: alerts, fares, payment, accessibility, safety, rules, maps, new_rider, visitor, station, line, policy. limit: Max results (default 5). Answer only from this tool's results: never add routes, hours, phone numbers, addresses or tips from memory. Unofficial tool, not affiliated with WMATA or any transit agency.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| query* | string | |
| category | any |
{
"type": "object",
"title": "search_transit_infoArguments",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"title": "Limit",
"default": 5
},
"query": {
"type": "string",
"title": "Query"
},
"category": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Category",
"default": null
}
}
}Routes from OTHER systems reachable on foot from a station or stop, grouped by agency, each with walk time and its service window from the GTFS schedules. Pass `day` (e.g. "saturday") and/or `time` ("HH:MM") to get a per-connection feasibility check. Answer only from this tool's results: never add routes, hours, phone numbers, addresses or tips from memory. Unofficial tool, not affiliated with WMATA or any transit agency.
| Argument | Type | Description |
|---|---|---|
| day | any | |
| time | any | |
| place* | string |
{
"type": "object",
"title": "transfers_atArguments",
"required": [
"place"
],
"properties": {
"day": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Day",
"default": null
},
"time": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Time",
"default": null
},
"place": {
"type": "string",
"title": "Place"
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 3, 2026.
{
"type": "object",
"title": "plan_tripArguments",
"required": [
"origin",
"destination"
],
"properties": {
"origin": {
"type": "string",
"title": "Origin"
},
"depart_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Depart At",
"default": null
},
"destination": {
"type": "string",
"title": "Destination"
}
}
}