DMV Transit
com.dmvtransit/transitdmvtransit.comstreamable-httpv1.0.0Scanned
Unofficial DC, Maryland and Virginia transit: trips, Metro, buses, rail, fares and alerts.
18 tools: 2 do something that can't be undone, 4 change things and 12 only read.
- Reads private data · 1
- Reads text others write · 18
- Can send data out · 0
- 3 findings
Anlyon alternative
6 of these tools change something. Run those as governed actions.
Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.
Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.
Import an OpenAPI spec →Tools
Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.
18 tools
Can't be undone 2Claude Code: ask
how_to_payHow to pay to ride one agency.Reads text others write1 finding
Why it is in this group
- The name "how_to_pay" says "pay": a word that usually means money moves, which cannot be taken back.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Findings
- Warn
The server marks "how_to_pay" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "how_to_pay" says "pay": a word that usually means money moves, which cannot be taken back.
Description, as the server wrote it 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.
Annotations the server declares
- title: How to pay
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
transfers_atRoutes 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.Reads text others write1 finding
Why it is in this group
- The name "transfers_at" says "transfer": a word for a change that another call does not undo.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Findings
- Warn
The server marks "transfers_at" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "transfers_at" says "transfer": a word for a change that another call does not undo.
Description, as the server wrote it 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.
Annotations the server declares
- title: Transfers at a stop
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
Changes things 4Claude Code: ask
estimate_trip_costEstimate 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.Reads text others writeNo 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.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote 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.
Annotations the server declares
- title: Trip cost estimate
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
find_stops_nearStops and stations within walking distance of a place, across all agencies.Reads text others write1 finding
Why it is in this group
- The name "find_stops_near" says "find": a word for reading.
- The description's first verb is "stop": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Findings
- Warn
The server marks "find_stops_near" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "find_stops_near" says "find": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Stops near a place
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
plan_connectionAdvise 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.Reads text others writeNo 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.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Connections between agencies
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
plan_tripReal 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;…Reads text others writeNo 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.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Plan a trip
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
Only reads 12Show 12 read-only tools
geocode_addressFind where a street address, hotel, attraction or other place is, in the DC, Maryland and Northern Virginia area.Reads text others writeNo findings
Why it is in this group
- The description's first verb is "find": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Find an address or place
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_elevator_escalator_statusElevators and escalators currently out of service, optionally for one station.Reads text others writeNo findings
Why it is in this group
- The name "get_elevator_escalator_status" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Metro elevators and escalators
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_fareStation-to-station Metrorail fare.Reads text others writeNo findings
Why it is in this group
- The name "get_fare" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Metro fare
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_guideFull text of the primary guide for a topic: new_rider, visitor, payment, fares, accessibility, safety, or maps.Reads text others writeNo findings
Why it is in this group
- The name "get_guide" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Rider guide
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_metro_routeHow to ride Metrorail between two stations: which line(s), where to change trains, which direction ("toward ..."), number of stops, and the fare.Reads text others writeNo findings
Why it is in this group
- The name "get_metro_route" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Metro route between stations
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_rider_reportsRecent reports from other RIDERS (crowdsourced on this site): delays, crowding, broken elevators, tips.Reads text others writeNo findings
Why it is in this group
- The name "get_rider_reports" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Rider reports
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_routeOne route from an agency's GTFS schedule: days and hours of service, typical frequency, endpoints, fare, and any live disruptions on it.Reads text others writeNo findings
Why it is in this group
- The name "get_route" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Bus or train route
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_service_alertsLive service disruptions: WMATA incidents (Metrorail, Metrobus, elevators) and agencies' GTFS-realtime alerts (detours, closed stops, missed trips).Reads text others writeNo findings
Why it is in this group
- The name "get_service_alerts" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Service alerts
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_station_infoLines served, address, parking availability, transfers, and entrances for a station (accepts a name like "Gallery Place" or a code like "B01").Reads text others writeNo findings
Why it is in this group
- The name "get_station_info" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Metro station details
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
list_agenciesEvery 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/paymen…Reads text others writeNo findings
Why it is in this group
- The name "list_agencies" says "list": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Transit agencies
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
list_topicsList content categories with document counts and data freshness.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "list_topics" says "list": a word for reading.
What it can reach
- private-dataThe description's first sentence says "list" and "document": it reads documents.
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Rider guide topics
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
search_transit_infoFull-text search of the agencies' web pages: fares, how to pay, accessibility, safety, rules, new-rider/visitor guides, and service-change notices.Reads text others writeNo findings
Why it is in this group
- The name "search_transit_info" says "search": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- untrusted-inputThe description's first sentence says "web": it reads web pages, which anyone can write.
Description, as the server wrote it 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.
Annotations the server declares
- title: Search the agencies' rider pages
- 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.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
No private-data, untrusted-input, outbound path in this server alone: no tool is tagged outbound.
- Reads private data1
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write18
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out0
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Findings
Matches of fixed checks, with the text they matched.
- Warnfind_stops_near
The server marks "find_stops_near" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "find_stops_near" says "find": a word for reading.
- Warntransfers_at
The server marks "transfers_at" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "transfers_at" says "transfer": a word for a change that another call does not undo.
- Warnhow_to_pay
The server marks "how_to_pay" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "how_to_pay" says "pay": a word that usually means money moves, which cannot be taken back.
History
Changes to its tool definitions and to its remote endpoint, newest first.
No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.
Install
Pinned to version 1.0.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http transit https://dmvtransit.com/mcpclaude mcp add --transport http transit https://dmvtransit.com/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__transit__search_transit_info",
"mcp__transit__get_service_alerts",
"mcp__transit__get_rider_reports",
"mcp__transit__get_elevator_escalator_status",
"mcp__transit__get_station_info",
"mcp__transit__get_fare",
"mcp__transit__geocode_address",
"mcp__transit__get_metro_route",
"mcp__transit__list_topics",
"mcp__transit__get_guide",
"mcp__transit__list_agencies",
"mcp__transit__get_route"
],
"ask": [
"mcp__transit__plan_trip",
"mcp__transit__find_stops_near",
"mcp__transit__transfers_at",
"mcp__transit__how_to_pay",
"mcp__transit__plan_connection",
"mcp__transit__estimate_trip_cost"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as transit. Review it before you use it.
Capability tags behind 18 rules
- mcp__transit__search_transit_info untrusted-input
- mcp__transit__get_service_alerts untrusted-input
- mcp__transit__get_rider_reports untrusted-input
- mcp__transit__get_elevator_escalator_status untrusted-input
- mcp__transit__get_station_info untrusted-input
- mcp__transit__get_fare untrusted-input
- mcp__transit__geocode_address untrusted-input
- mcp__transit__plan_trip untrusted-input
- mcp__transit__get_metro_route untrusted-input
- mcp__transit__list_topics private-data, untrusted-input
- mcp__transit__get_guide untrusted-input
- mcp__transit__list_agencies untrusted-input
- mcp__transit__find_stops_near untrusted-input
- mcp__transit__get_route untrusted-input
- mcp__transit__transfers_at untrusted-input
- mcp__transit__how_to_pay untrusted-input
- mcp__transit__plan_connection untrusted-input
- mcp__transit__estimate_trip_cost untrusted-input
Pin
Keep the decision: fail CI when the tools change, follow every change, or show a badge.
Pin in CI
Fail a build when the tools you reviewed are not the tools the server serves today.
curl -s "https://anlyon.dev/api/v1/servers/com.dmvtransit/transit/verify?hash=15f41963568b8554a252dc67bf9f6daa5d129b90106601fbd07ae8774962ff98" | jq -e '.changed == false'Pinned hash 15f41963568b, from Nov 3, 2026, 16:18 UTC.
Watch
Get told when its tools change: a new tool, a new description, a new class.
https://anlyon.dev/servers/com.dmvtransit/transit/changes.xmlAn Atom feed. Works in any feed reader or Slack's RSS app.
Badge
[](https://anlyon.dev/servers/com.dmvtransit/transit)Source: MCP Registry · repository. Synced Nov 3, 2026, 16:17 UTC.