Transit MCP
Server Details
Trips, departures, alerts and vehicles for NYC, DC and the SF Bay Area.
- Status
- Healthy
- Uptime
- 100.0% over 22 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- Aarekaz/transit-mcp
- GitHub Stars
- 5
- Server Listing
- Metro MCP
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 18 tools
Several overlaps exist: get_station_predictions vs get_departures (both surface upcoming arrivals), get_train_positions vs get_vehicle_status (both report observed trains), and get_elevator_incidents vs get_service_status equipment output (both report outages). Descriptions are unusually thorough and do explain the intended boundaries (real-time rail only vs schedule-window departures, DC-wide vs scoped vehicle queries), but an agent can still plausibly pick the wrong one.
All names are snake_case and follow a verb_noun pattern (get_, find_, search_, plan_), which is highly predictable. Minor wobble in resource nouns: the same concept appears as 'train' in get_train_positions but 'vehicle' in get_vehicle_status, and 'station' ops use both search_ and find_transit.
18 tools is in the heavy range, and a few are redundant rather than additive (get_train_positions is largely subsumed by get_vehicle_status; get_elevator_incidents by get_service_status equipment). The breadth of multimodal, multi-agency coverage justifies many tools, but the surface is inflated by agency-specific specials.
Strong lifecycle coverage for read-only transit: name resolution, station/line/route discovery, real-time arrivals and vehicle positions, departures, journey planning with accessibility, and disruption reporting. Minor gaps: no general listing of NYC subway routes/lines (route info is single-route and NYC-only), and no fare or saved-trip operations, though agents can work around these via find_transit and plan_trip.
Available Tools
18 toolsfind_transitFind transit entitiesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Exact reference to inspect. | |
| limit | No | ||
| query | No | A name to search: station, stop, line, agency or train number. | |
| context | No | ||
| coverage | No | Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several. | |
| latitude | No | With longitude: stops near this point. | |
| longitude | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| asOf | Yes | |
| status | Yes | |
| reasons | Yes | |
| sources | Yes | |
| entities | Yes | |
| coverages | Yes | |
| candidates | Yes | |
| attribution | Yes | |
| suggestions | No | When no name matches: the closest stop names, not matches. Confirm one with the rider, or retry with the official station name. |
| clientCoordinates | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive), and the description adds substantial behavior beyond them: result ordering (exact names and well-known place names first, then stations, then rail before bus), the fact that suggestions are closest names rather than matches, that context only ranks without selecting identity, and what each stop result carries (stopType, modes, lines). That is exactly the disambiguation an agent needs for a search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It front-loads the no-argument listing behavior before the search semantics, which is the right order. Sentences are dense and a few constructions are awkward ('Context ranks candidates without selecting identity', 'Candidates come best first'), but nearly every clause adds usable information rather than restating the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, nested, open-world search tool with an output schema, this covers the hard parts: coverage selection, cross-region fallback, suggestion semantics, ranking, and result fields. Only pagination/limit behavior and the serviceDate concept are left uncovered, which are minor relative to what is explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 57%, so several parameters (limit, longitude, context.feed, context.serviceDate) carry no description. The prose compensates well for the important ones: it explains the coverage enum semantics, what ref and query each mean behaviorally, how context ranks, and that lat/long must be paired. `limit` and the sorting implications remain unexplained in both places.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource family: resolve/search coverage, agency, route, station, stop, or train number, plus inspect by exact ref or coordinates. It distinguishes itself from plan_trip and explicitly excludes address geocoding, so an agent can tell it apart from search_stations and the get_* siblings. The opening sentence is somewhat dense, but the scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete when-to-use guidance: call with no arguments to list regions, omit coverage to search all regions, use ref for exact inspection, use lat/long for nearby stops, and use plan_trip for journeys. It does not hand off to search_stations or get_stations_by_line explicitly, so routing against the closest siblings is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_all_stationsAll stationsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | Yes | |
| stations | Yes | |
| totalStations | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false) and openWorldHint, so the description's burden is lighter. It adds a meaningful non-structured trait — that the result set is large — which is exactly the behavioral context that steers tool selection. It stops short of quantifying size or noting any pagination/rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the primary purpose front-loaded and the disambiguation immediately after. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value detail is unnecessary, and annotations carry the safety profile. Scope, result size, and sibling routing are all covered; nothing needed to select or invoke the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but there is only one parameter and its enum values (dc, nyc) are self-explanatory in the schema. The phrase 'for one city' confirms the city scopes the result, adding modest meaning without describing the enum or any constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Get the complete list of transit stations') plus scope ('with coordinates for one city'), so the agent knows exactly what comes back. It also names two siblings (search_stations, get_stations_by_line) as the targeted alternatives, cleanly separating this bulk-list tool from them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing guidance: 'Large result; prefer search_stations or get_stations_by_line when looking for specific stations.' This gives both the condition (looking for specific stations) and the named alternatives, so no inference is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bus_positionsLive bus positionsARead-onlyIdempotentInspect
Get real-time positions of DC Metro buses, optionally filtered by route.
| Name | Required | Description | Default |
|---|---|---|---|
| routeId | No | Optional route ID filter (e.g., "30N"). Omit for all buses. |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | Yes | |
| buses | Yes | |
| totalBuses | Yes | |
| routeFilter | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered elsewhere. The description adds only the 'real-time' framing, with no detail on update cadence, staleness, or rate limits. Adequate but thin beyond the annotation baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence naming the resource, the data freshness, and the filter in that order. Nothing is redundant and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value shape need not be described, and the tool has only one optional parameter. What remains is a clear, if minimal, definition for a simple read-only lookup; only the lack of sibling routing keeps it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single routeId parameter is fully documented in the schema, so the baseline is 3. The description's mention of an optional route filter matches the schema without adding format, syntax, or fallback detail (e.g., case sensitivity or invalid-route behavior).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get real-time positions of DC Metro buses') with a clear scope and an optional filter. It implicitly distinguishes itself from get_train_positions and get_vehicle_positions via the 'bus' mode, but never names those siblings explicitly, so the differentiation is inferential rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'optionally filtered by route' implies usage context (omit the filter for the full fleet), but there is no explicit when-to-use guidance, no exclusions, and no routing to alternatives such as get_bus_predictions or get_vehicle_positions. Usage is implied rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bus_predictionsBus arrival predictionsARead-onlyIdempotentInspect
Get real-time bus arrival predictions for a DC Metro bus stop.
| Name | Required | Description | Default |
|---|---|---|---|
| stopId | Yes | DC Metro 7-digit regional bus stop ID (e.g., "1001195") |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | Yes | |
| stopId | Yes | |
| predictions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false. The description adds only that predictions are real-time; it does not discuss freshness, update cadence, or rate limits, though an output schema exists for return values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single clear sentence with the core purpose front-loaded and no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only prediction tool, the description, rich schema, annotations, and output schema together provide enough context for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single stopId parameter is fully documented in the schema with format and example. The description adds no additional parameter meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: getting real-time bus arrival predictions for a DC Metro bus stop. It distinguishes bus predictions from train/station predictions through the word "bus," though it does not explicitly name sibling alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by "for a DC Metro bus stop," but the description does not state when to use this tool versus get_station_predictions, get_departures, or get_bus_positions. No exclusions or alternative-routing guidance are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bus_routesAll bus routesARead-onlyIdempotentInspect
Get all DC Metro bus routes with route IDs and descriptions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| city | Yes | |
| routes | Yes | |
| totalRoutes | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered by structured fields. The description confirms the read-only listing scope but adds no extra behavioral context such as result size, rate limits, or freshness, which is acceptable for a trivial no-arg read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the resource and scope front-loaded and no filler. Nothing can be trimmed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-argument listing tool with a full output schema and rich annotations, the description covers everything needed to call it correctly. Only a routing hint toward get_route_info for per-route detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. The mention of returned fields is harmless even though an output schema exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (Get), resource (DC Metro bus routes), scope (all), and the payload fields (route IDs and descriptions). The 'DC Metro' qualifier implicitly separates it from get_sfbay_routes in the sibling list, though no sibling is named directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this versus get_route_info (single-route detail) or get_sfbay_routes (other agency). The word 'all' implies the bulk-listing role, but the agent must infer it rather than being told.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bus_stopsBus stopsARead-onlyIdempotentInspect
Get DC Metro bus stops. Returns all stops or filters by lat/lon/radius.
| Name | Required | Description | Default |
|---|---|---|---|
| radius | No | Search radius in meters | |
| latitude | No | Center latitude for geographic search | |
| longitude | No | Center longitude for geographic search |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | Yes | |
| stops | Yes | |
| totalStops | Yes | |
| searchLocation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so safety is covered. The description adds the useful default behavior (returns everything when unfiltered), but says nothing about pagination, rate limits, or result size for a potentially large stop list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the resource and immediately followed by the filter behavior. No filler, nothing to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return structure need not be explained, and annotations cover the safety profile. For a simple optional-filter read tool the description is nearly sufficient; only minor gaps about unfiltered result size or partial-param behavior remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three params are already documented in the schema. The description only restates the lat/lon/radius filter concept without adding units, combinations (all three together?), or defaults beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get DC Metro bus stops') and even names the retrieval modes (all vs. geographic filter). It distinguishes itself from station/position siblings by scoping to bus stops, though it never explicitly contrasts with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Returns all stops or filters by lat/lon/radius' implies when the optional params matter, but there is no explicit when-to-use guidance, no mention of prerequisites, and no reference to alternatives like search_stations or get_bus_routes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_departuresDepartures at a stopARead-onlyIdempotentInspect
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: a name for one place covers all its stations in that network (otherStations lists the same place in other networks, such as the LIRR at Penn Station); a name for different places returns a question to ask, with 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.
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | ||
| stop | No | Stop or station name, with coverage. Give this or stopRef. | |
| limit | No | ||
| toStop | No | Destination stop or station name, with coverage. Give this or toStopRef, or neither. | |
| stopRef | No | Exact stop or station reference. Give this or stop. | |
| coverage | No | Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several. | |
| routeRefs | No | ||
| selection | No | first | |
| toStopRef | No | Destination stop or station: only trips that go on to stop there are listed, each with its arrival time there. | |
| agencyRefs | No | ||
| windowSeconds | No | Search window in seconds, 1 through 604800 (seven days). |
Output Schema
| Name | Required | Description |
|---|---|---|
| asOf | Yes | |
| status | Yes | |
| reasons | Yes | |
| sources | Yes | |
| departures | Yes | |
| attribution | Yes | |
| otherStations | No | The same place in another network (the LIRR at Penn Station): call again with its ref for its departures. |
| frequencyWindows | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/openWorld annotations by disclosing non-obvious behavior: an ambiguous name 'returns a question to ask, with candidates', station refs expand to a whole complex while platform refs do not, and results are dated trip references consumable by get_vehicle_status. Only pagination/limit behavior and the role of the `at` anchor are left unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the primary reference-source hint, then rules, then the sibling redirect. Dense but every clause carries a decision-relevant constraint; the nested parenthetical about Penn Station/LIRR is the only mildly costly digression.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter, zero-required, open-world lookup with an output schema, the description covers the ambiguity cases, reference sourcing, coverage scope, destination filtering, and the down-stream tool handoff. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
At 55% schema coverage the description must compensate, and it does for the hardest parameters: `stop` vs `stopRef`, `coverage` naming/otherStations semantics, `toStop`/`toStopRef` (destination filtering with arrival times). Several parameters (`at`, `routeRefs`, `agencyRefs`, `limit`) get no description beyond their schema text, keeping it short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Find what leaves a stop next') plus the variant scope ('first service or last service in a bounded window'). It also distinguishes itself from siblings by name ('use plan_trip', 'stopRef from find_transit', 'get_vehicle_status'), so an agent can route correctly without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit about when to use and when not to: 'Pass a stopRef from find_transit', 'For a journey with a change use plan_trip', and the exclusion 'departures alone cannot prove a connection'. Alternatives and their selection conditions are named, not implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_elevator_incidentsElevator outagesARead-onlyIdempotentInspect
Get current elevator and escalator outages. DC Metro only.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | Yes | |
| elevatorIncidents | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered. The description only adds that results are 'current' outages, with no mention of freshness window, rate limits, or other operational behavior; an output schema handles the return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no wasted words. The scope restriction follows immediately after the purpose statement and earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only lookup with annotations covering safety and an output schema covering the return shape, the description supplies exactly what is needed: what it returns and which system it covers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the single 'city' parameter. 'DC Metro only' effectively explains that the city enum resolves to dc, which is the only value present, so the parameter's meaning is clear despite the missing schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (get current elevator and escalator outages) and adds a scope qualifier, 'DC Metro only,' that implicitly separates it from get_sfbay_incidents. It does not explicitly name the sibling it is not, so it falls short of the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'DC Metro only' constraint implies when the tool applies versus the SF Bay variants, but there is no explicit when-to-use/when-not guidance or named alternative. Usage is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_incidentsService incidentsARead-onlyIdempotentInspect
Get current transit incidents and service advisories for DC Metro or NYC Subway.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | Yes | |
| incidents | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds only that incidents are 'current' (a freshness signal); it discloses nothing about rate limits, auth, or result scope, and an output schema exists so return details are unnecessary here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. It is appropriately sized for a one-parameter lookup tool, though it is terse enough that it could have absorbed one more clause about usage without becoming bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a rich annotation set, an output schema, and a single enum parameter, the description covers what an agent needs: what it returns (incidents/advisories), for which cities, and that data is current. Only the absence of sibling routing keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It maps the enum values to human meaning: 'DC Metro' for dc and 'NYC Subway' for nyc, which is genuinely useful beyond the bare enum in the schema. It does not add format or default details, keeping it at a 4 rather than 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get'), resource ('current transit incidents and service advisories'), and coverage scope ('DC Metro or NYC Subway'). It implicitly distinguishes itself from get_elevator_incidents and get_sfbay_incidents by naming the cities served, though it does not name siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied by 'current' (real-time incidents) and the city scope, but there is no explicit when-to-use guidance, no statement of exclusions, and no routing to the elevator or SF Bay incident siblings. Adequate but with clear gaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_route_infoRoute informationARead-onlyIdempotentInspect
Get detailed information about a transit route including service patterns. NYC Subway only.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | ||
| routeId | Yes | Route identifier — NYC: A, B, C, D, E, F, M, G, J, Z, L, N, Q, R, W, 1, 2, 3, 4, 5, 6, 7, SI |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | Yes | |
| routeId | Yes | |
| longName | Yes | |
| shortName | Yes | |
| description | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered elsewhere. The description contributes only 'including service patterns' as return-content context, and with an output schema present there is little burden left on the prose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no filler; the capability comes first and the scope restriction second. Minor overlap between 'NYC Subway only' and the city enum keeps it from being maximally tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter lookup with rich annotations and a declared output schema, the description supplies purpose plus scope, which is nearly everything an agent needs. Only an explicit pointer to the sibling routes tools is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: routeId is well documented in the schema while city carries only an enum. 'NYC Subway only' reinforces the single-value city enum and the NYC-only routeId list, but the description adds no format or syntax detail beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Get detailed information about a transit route' — and adds the payload detail 'including service patterns'. The 'NYC Subway only' scoping separates it from the get_sfbay_routes and get_bus_routes siblings, though no sibling is named directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'NYC Subway only' clause implies the usage boundary and effectively rules out the SF Bay and bus siblings, but the description never names an alternative or states an explicit when-to-use condition. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_service_statusTransit service statusARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Agency, route, stop or dated trip reference; or a line's name ("L", "Red Line") with coverage. | |
| stop | No | Station name, e.g. "Fulton St", with coverage; a station covers its complex. | |
| coverage | No | Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several. | |
| itinerary | No | An itinerary exactly as plan_trip returned it; validated strictly against that contract. |
Output Schema
| Name | Required | Description |
|---|---|---|
| asOf | Yes | |
| alerts | Yes | |
| status | Yes | |
| reasons | Yes | |
| sources | Yes | |
| equipment | No | Elevator and escalator outages in scope, where the coverage publishes them. |
| legChecks | Yes | |
| attribution | Yes | |
| journeyValid | Yes | |
| journeyReasons | Yes | |
| transferChecks | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description adds meaningful behavioral detail: aggregate scopes include canonical service for the next 24 hours, station scope covers its complex, itinerary revalidation does not replace the itinerary, and equipment output fields such as accessiblePath and blocksStepFree are explained. These details materially help an agent understand what the tool returns and how to interpret it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded: it starts with the primary use cases, then scoping rules, aggregate behavior, equipment field meanings, and finally the sibling alternative. It is longer than necessary in places, especially the field-level equipment explanation, but most sentences carry useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich annotations, 100% schema coverage, and existing output schema, the description supplies enough context to call the tool correctly. It covers scoping, aggregate behavior, itinerary revalidation, equipment semantics, and the main alternative tool, leaving no major gap for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds useful meaning by explaining how coverage, stop, and ref relate to scoping a query. It also clarifies that itinerary is revalidated rather than replaced, supplementing the schema's contract reference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb phrase, 'Check disruptions, delays, closures, elevator and escalator outages, or revalidate a chosen itinerary,' which clearly identifies the resource and operation. It distinguishes this tool from get_vehicle_status, but does not fully differentiate it from nearby siblings like get_incidents or get_elevator_incidents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear usage context for checking service status and explicitly routes observed vehicle location queries to get_vehicle_status. However, it does not state when to prefer this tool over get_incidents, get_elevator_incidents, or get_departures, which are plausible alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_station_predictionsTrain arrival predictionsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | ||
| stationName | Yes | Station name (e.g., "Metro Center", "Times Square") — auto-converted to station ID. DC accepts codes like "A01". |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | Yes | |
| station | Yes | |
| predictions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, openWorldHint, destructiveHint=false), so the description's added context is what counts: it discloses real-time data, the two supported systems, automatic name-to-ID conversion, and that an ambiguous name yields a candidate list rather than a failure. It stops short of auth, rate limits, or freshness/staleness details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, front-loaded with the primary purpose. The scope constraint and the disambiguation rule each earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return values. It covers the two required parameters, the systems supported, and the ambiguous-name path, which is everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50% (city has an enum but no description), and the description compensates by mapping 'dc'/'nyc' to DC Metro and NYC Subway. For stationName it adds the ambiguity-handling behavior (multiple matches return candidates) on top of the schema's auto-conversion note, adding genuine value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get real-time train arrival predictions for a transit station') and immediately scopes it to DC Metro and NYC Subway, which implicitly separates it from the sibling get_sfbay_station_predictions and from get_bus_predictions/get_train_positions. An agent can identify the right tool from this line alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: it's clear you call this for arrival predictions, but there is no explicit 'when to use this vs. get_sfbay_station_predictions' or any exclusion. The name-vs-ID and multi-match behavior is invocation guidance rather than tool-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stations_by_lineStations on a lineARead-onlyIdempotentInspect
Get all stations on a specific transit line. Supports DC Metro and NYC Subway.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | ||
| lineCode | Yes | Line code — DC: RD, BL, YL, OR, GR, SV | NYC: 1-7, A, C, E, B, D, F, M, N, Q, R, W, J, Z, L, G, SI |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | Yes | |
| line | Yes | |
| stations | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is fully covered. The description adds only the supported service systems, which largely duplicates the city enum, and says nothing about ordering, coverage completeness, or edge cases like a line serving multiple cities.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, purpose front-loaded and the platform-coverage note following. Nothing is wasted and the reader gets the scope in the first clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema and full annotations, the description needn't explain return values or safety. It is nearly complete for a simple filtered lookup; only the sibling-routing guidance and any ordering/limit behavior are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%, but the undocumented half is the city enum (dc/nyc), which the phrase 'Supports DC Metro and NYC Subway' maps to real systems — a modest value-add. The lineCode details are already exhaustively documented in the schema, so the description correctly does not repeat them; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get all stations on a specific transit line'), so the agent knows exactly what it returns. It does not explicitly distinguish itself from the sibling get_all_stations or search_stations, leaving the line-filtered scope as the only implicit differentiator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'on a specific transit line' — use this when you know the line and want its full station list. But no explicit when-not or named alternative (get_all_stations, search_stations, get_route_info) is given, so the agent must infer the boundary between siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_station_transfersStation transfersARead-onlyIdempotentInspect
Get transfer connections and nearby stations from a transit station. NYC Subway only.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | ||
| stationId | Yes | Station ID (e.g., "127" for Times Square) |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | Yes | |
| stationId | Yes | |
| transfers | Yes | |
| stationName | Yes | |
| totalTransfers | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is fully covered structurally. The description's only added behavioral context is the NYC-only scope. With annotations carrying the burden and an output schema present, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero padding; the functional statement comes first and the scope restriction second. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and both required parameters are at least partially documented. The description covers purpose and scope, but leaves minor gaps such as what counts as a 'nearby' station.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% (stationId documented with an example, city only via enum), so the description does not need to carry full weight. It adds marginal value by explaining the single-value city enum ('NYC Subway only') but says nothing about stationId format or the meaning of 'nearby stations'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get transfer connections and nearby stations from a transit station'), which is distinct from siblings like get_all_stations, search_stations, and get_stations_by_line. It does not name a sibling or explicitly contrast with them, so it lands at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'NYC Subway only' clause is a real scoping constraint that tells the agent when this tool applies. However, it gives no guidance on prerequisites (e.g., how to obtain stationId, or whether search_stations should be used first) and no explicit alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_train_positionsLive train positionsARead-onlyIdempotentInspect
Get real-time positions of all trains on the DC Metro system.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| city | Yes | |
| trains | Yes | |
| totalTrains | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive behavior, so the safety profile is covered. The description adds the 'real-time' freshness cue and the 'all trains' completeness scope, but says nothing about refresh/rate characteristics or return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It identifies verb, resource, recency, scope, and system in minimal space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with an output schema and full annotation coverage, the description supplies everything needed to invoke it. The one gap is routing clarity versus get_vehicle_positions and the sfbay variants, which is left to the agent to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a parameterless tool is 4. Schema coverage is also 100%, meaning structured data fully carries any contractual detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get real-time positions of all trains') scoped to 'the DC Metro system,' which clearly separates it from the sfbay_* and bus siblings. It does not, however, distinguish itself from the similarly named get_vehicle_positions sibling, leaving overlap ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to choose this over alternatives such as get_vehicle_positions, get_station_predictions, or the sfbay equivalents. The only implicit signal is the 'DC Metro' scope embedded in the purpose sentence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vehicle_statusWhere trains are nowARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Route, dated trip or stop/station reference. Give this or stop. | |
| stop | No | Station name, with coverage. Give this or ref. | |
| limit | No | ||
| coverage | No | Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several. |
Output Schema
| Name | Required | Description |
|---|---|---|
| asOf | Yes | |
| status | Yes | |
| reasons | Yes | |
| sources | Yes | |
| vehicles | Yes | |
| attribution | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds genuinely non-obvious behavior: each result reports stopStatus, last served stop and destination, and coordinates are the vehicle's own only when the agency supplies them — otherwise a stopped train is placed at its station and a moving one has none. The note that a station covers its whole complex is exactly the kind of scope disclosure that prevents wrong conclusions from partial results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what the tool returns, then the accepted inputs, then the caveats. The middle sentence is long and semicolon-chained, and the '(DC)' parenthetical is opaque, but nearly every clause carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero required params, an existing output schema and full safety annotations, the description covers input modes, output semantics and the coordinate fallback well. The only real gap is limit behavior and the unresolved overlap with the get_train_positions sibling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% and the description reinforces ref (route / dated trip / station), stop (name with coverage) and the station-complex semantics beyond the schema. The limit parameter has no description in either the schema or the description, leaving its effect on result volume undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a concrete resource and scope: real-time positions of observed trains, with three accepted lookup modes spelled out. An agent understands exactly what it retrieves, but the description never distinguishes this from the sibling get_train_positions, which by name appears to do the same thing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives per-input usage rules ('Pass a route ref to list its trains', 'a dated trip ref (from get_departures or a plan_trip leg)', 'a station ... to see trains stopped at or heading to it') and an explicit exclusion routing to find_transit for bare train numbers. It stops short of telling the agent when to prefer this over get_train_positions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_tripPlan a transit journeyARead-onlyIdempotentInspect
Plan an origin-to-destination journey. Returns up to three independently validated itineraries (the fastest, then other lines); departure defaults to now. Pass the rider's place names as given: a name for one place (Penn Station, SFO) plans from or to all its stations. A name meaning different places (Broadway) returns the best trip from each, each labelled in reading and explained in notice: use the one the conversation points to, or ask the rider. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| origin | Yes | ||
| routes | No | Route refs (from find_transit) the journey may ride, e.g. the lines you would take: BART from SFO, then a Muni line. The server finds the actual trips, boarding stops, transfers and walks on only these routes and validates them. Works where full search is unavailable (SF Bay) and for buses. | |
| coverage | No | Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several. | |
| departAt | No | ||
| destination | Yes | ||
| maxTransfers | No | ||
| accessibility | No | step_free: only platforms reachable without stairs, avoiding current elevator outages. | no_preference |
| maxWalkMetres | No | Walking allowed at each end and between rides; more than 800 is taken as 800. | |
| windowSeconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| asOf | Yes | |
| notice | No | Set when a name means several places: which, and how the trips are labelled. |
| status | Yes | |
| reasons | Yes | |
| sources | Yes | |
| routeHints | No | Lines near each end. Pass the ones you would ride (in plan_trip.routes) to have their trips searched and validated. |
| attribution | Yes | |
| itineraries | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so safety is covered. The description adds genuinely useful behavior beyond that: ambiguity handling for names like Broadway (best trip per place, explained in notice), routeHints fallback when no itinerary is possible, the ACCESSIBILITY_UNAVAILABLE and ENDPOINT_NOT_STEP_FREE refusal codes, and how step_free treats in-station changes. That is rich, but it is behavior of the domain rather than of the tool's own operation (latency, result ordering guarantees beyond 'fastest then other lines', or partial-failure semantics), hence a 3 rather than higher.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with purpose and the return shape before the caveats, and nearly every clause carries a rule an agent needs. But it arrives as one dense undivided block of roughly 350 words mixing routing, ambiguity, accessibility, error codes and cross-tool advice; headers or a shorter accessibility paragraph would make it far easier to apply under load.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex 9-parameter, multi-region planner with an output schema, and the description still covers the things the schema cannot: which regions are searched, how ambiguous names are resolved, what routeHints means and how to act on it, and the exact refusal conditions. An agent has everything it needs to call this correctly and to interpret a failure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 44% across 9 parameters, so the description has to compensate, and it does for the hard ones: origin/destination accept names resolving to multiple stations, routes takes lines 'from routeHints or your own knowledge', departAt defaults to now, windowSeconds defaults to two hours with a documented retry rule, and accessibility: step_free is spelled out far beyond the schema's one-liner. maxTransfers and maxWalkMetres are never mentioned, leaving a real gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource: plans an origin-to-destination transit journey and returns up to three validated itineraries. It draws explicit boundaries against siblings (get_departures must not be presented as confirmed, get_vehicle_status consumes tripInstanceRef, find_transit provides route refs), so an agent can tell exactly what this tool does that the others don't.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use rules: pass place names as given, call again with routes when full search is unavailable or when verifying a hand-built journey, retry with a larger windowSeconds when no long-trip itinerary is found, and set accessibility step_free for wheelchair users or stair-avoiders. It also names the anti-pattern (presenting get_departures output as confirmed) and the fix.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_stationsSearch stationsBRead-onlyIdempotentInspect
Search for transit stations by name or code. Supports DC Metro and NYC Subway.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | ||
| query | Yes | Search query (station name or code) |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | Yes | |
| query | Yes | |
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description's only added behavioral value is stating the two supported transit systems; it says nothing about result limits, ranking, or matching behavior beyond 'name or code'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and free of filler. Nothing extraneous, though there is room to fold in usage routing without bloating.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the tool is a simple two-parameter search with full annotation coverage. The remaining gap is the absent guidance on when this tool should be chosen versus its many siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: query is documented, but the city enum (dc/nyc) has no description. The description partially compensates by mapping those systems to DC Metro and NYC Subway and by clarifying that query matches 'name or code', which is real added meaning over the bare enum.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Search') plus resource ('transit stations') and names the searchable fields (name or code), with the supported coverage (DC Metro, NYC Subway) scoping the tool. It implicitly separates itself from search_sfbay_stations by naming the DC/NYC systems, but never names that sibling explicitly, so differentiation is left partly to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not guidance and no alternatives named. The agent must infer from 'DC Metro and NYC Subway' that this is not for SF Bay, and there is no hint about choosing this over get_all_stations or get_stations_by_line.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- Changed
get_service_status1 field changed- changed
Input schema / properties / ref / descriptionPrevious value: -"Agency, route, stop or dated trip reference."New value: +"Agency, route, stop or dated trip reference; or a line's name (\"L\", \"Red Line\") with coverage."
- Changed
plan_trip2 fields changed- added
Input schema / properties / maxWalkMetres / descriptionAdded value: +"Walking allowed at each end and between rides; more than 800 is taken as 800." - removed
Input schema / properties / maxWalkMetres / maximumRemoved value: -800
4 tool updates
- Changed
find_transit3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / anyOfRemoved value: -[ - { - "additionalProperties": false, - "properties": { - "context": { - "additionalProperties": false, - "properties": { - "coverage": { - "description": "Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several.", - "enum": [ - "sfbay", - "SF", - "San Francisco", - "Bay Area", - "dc", - "DC", - "Washington DC", - "Washington, DC", - "WMATA", - "DC Metro", - "Metrobus", - "nyc", - "NYC", - "New York", - "New York City", - "NYC Subway", - "MTA Subway", - "MTA", - "LIRR", - "Long Island Rail Road", - "Metro-North", - "Metro-North Railroad" - ], - "type": "string" - }, - "feed": { - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "serviceDate": { - "pattern": "^\\d{8}$", - "type": "string" - } - }, - "type": "object" - }, - "coverage": { - "description": "Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several.", - "enum": [ - "sfbay", - "SF", - "San Francisco", - "Bay Area", - "dc", - "DC", - "Washington DC", - "Washington, DC", - "WMATA", - "DC Metro", - "Metrobus", - "nyc", - "NYC", - "New York", - "New York City", - "NYC Subway", - "MTA Subway", - "MTA", - "LIRR", - "Long Island Rail Road", - "Metro-North", - "Metro-North Railroad" - ], - "type": "string" - }, - "latitude": { - "not": {} - }, - "limit": { - "default": 20, - "maximum": 50, - "minimum": 1, - "type": "integer" - }, - "longitude": { - "not": {} - }, - "query": { - "not": {} - }, - "ref": { - "maxLength": 256, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "ref" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "context": { - "additionalProperties": false, - "properties": { - "coverage": { - "description": "Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several.", - "enum": [ - "sfbay", - "SF", - "San Francisco", - "Bay Area", - "dc", - "DC", - "Washington DC", - "Washington, DC", - "WMATA", - "DC Metro", - "Metrobus", - "nyc", - "NYC", - "New York", - "New York City", - "NYC Subway", - "MTA Subway", - "MTA", - "LIRR", - "Long Island Rail Road", - "Metro-North", - "Metro-North Railroad" - ], - "type": "string" - }, - "feed": { - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "serviceDate": { - "pattern": "^\\d{8}$", - "type": "string" - } - }, - "type": "object" - }, - "coverage": { - "description": "Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several.", - "enum": [ - "sfbay", - "SF", - "San Francisco", - "Bay Area", - "dc", - "DC", - "Washington DC", - "Washington, DC", - "WMATA", - "DC Metro", - "Metrobus", - "nyc", - "NYC", - "New York", - "New York City", - "NYC Subway", - "MTA Subway", - "MTA", - "LIRR", - "Long Island Rail Road", - "Metro-North", - "Metro-North Railroad" - ], - "type": "string" - }, - "latitude": { - "not": {} - }, - "limit": { - "default": 20, - "maximum": 50, - "minimum": 1, - "type": "integer" - }, - "longitude": { - "not": {} - }, - "query": { - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "ref": { - "not": {} - } - }, - "required": [ - "query" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "context": { - "additionalProperties": false, - "properties": { - "coverage": { - "description": "Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several.", - "enum": [ - "sfbay", - "SF", - "San Francisco", - "Bay Area", - "dc", - "DC", - "Washington DC", - "Washington, DC", - "WMATA", - "DC Metro", - "Metrobus", - "nyc", - "NYC", - "New York", - "New York City", - "NYC Subway", - "MTA Subway", - "MTA", - "LIRR", - "Long Island Rail Road", - "Metro-North", - "Metro-North Railroad" - ], - "type": "string" - }, - "feed": { - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "serviceDate": { - "pattern": "^\\d{8}$", - "type": "string" - } - }, - "type": "object" - }, - "coverage": { - "description": "Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several.", - "enum": [ - "sfbay", - "SF", - "San Francisco", - "Bay Area", - "dc", - "DC", - "Washington DC", - "Washington, DC", - "WMATA", - "DC Metro", - "Metrobus", - "nyc", - "NYC", - "New York", - "New York City", - "NYC Subway", - "MTA Subway", - "MTA", - "LIRR", - "Long Island Rail Road", - "Metro-North", - "Metro-North Railroad" - ], - "type": "string" - }, - "latitude": { - "maximum": 90, - "minimum": -90, - "type": "number" - }, - "limit": { - "default": 20, - "maximum": 50, - "minimum": 1, - "type": "integer" - }, - "longitude": { - "maximum": 180, - "minimum": -180, - "type": "number" - }, - "query": { - "not": {} - }, - "ref": { - "not": {} - } - }, - "required": [ - "latitude", - "longitude" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "context": { - "additionalProperties": false, - "properties": { - "coverage": { - "description": "Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several.", - "enum": [ - "sfbay", - "SF", - "San Francisco", - "Bay Area", - "dc", - "DC", - "Washington DC", - "Washington, DC", - "WMATA", - "DC Metro", - "Metrobus", - "nyc", - "NYC", - "New York", - "New York City", - "NYC Subway", - "MTA Subway", - "MTA", - "LIRR", - "Long Island Rail Road", - "Metro-North", - "Metro-North Railroad" - ], - "type": "string" - }, - "feed": { - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "serviceDate": { - "pattern": "^\\d{8}$", - "type": "string" - } - }, - "type": "object" - }, - "coverage": { - "description": "Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several.", - "enum": [ - "sfbay", - "SF", - "San Francisco", - "Bay Area", - "dc", - "DC", - "Washington DC", - "Washington, DC", - "WMATA", - "DC Metro", - "Metrobus", - "nyc", - "NYC", - "New York", - "New York City", - "NYC Subway", - "MTA Subway", - "MTA", - "LIRR", - "Long Island Rail Road", - "Metro-North", - "Metro-North Railroad" - ], - "type": "string" - }, - "latitude": { - "not": {} - }, - "limit": { - "default": 20, - "maximum": 50, - "minimum": 1, - "type": "integer" - }, - "longitude": { - "not": {} - }, - "query": { - "not": {} - }, - "ref": { - "not": {} - } - }, - "type": "object" - } -] - added
Input schema / propertiesAdded value: +{ + "context": { + "additionalProperties": false, + "properties": { + "coverage": { + "description": "Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several.", + "enum": [ + "sfbay", + "SF", + "San Francisco", + "Bay Area", + "dc", + "DC", + "Washington DC", + "Washington, DC", + "WMATA", + "DC Metro", + "Metrobus", + "nyc", + "NYC", + "New York", + "New York City", + "NYC Subway", + "MTA Subway", + "MTA", + "LIRR", + "Long Island Rail Road", + "Metro-North", + "Metro-North Railroad" + ], + "type": "string" + }, + "feed": { + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "serviceDate": { + "pattern": "^\\d{8}$", + "type": "string" + } + }, + "type": "object" + }, + "coverage": { + "description": "Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several.", + "enum": [ + "sfbay", + "SF", + "San Francisco", + "Bay Area", + "dc", + "DC", + "Washington DC", + "Washington, DC", + "WMATA", + "DC Metro", + "Metrobus", + "nyc", + "NYC", + "New York", + "New York City", + "NYC Subway", + "MTA Subway", + "MTA", + "LIRR", + "Long Island Rail Road", + "Metro-North", + "Metro-North Railroad" + ], + "type": "string" + }, + "latitude": { + "description": "With longitude: stops near this point.", + "maximum": 90, + "minimum": -90, + "type": "number" + }, + "limit": { + "default": 20, + "maximum": 50, + "minimum": 1, + "type": "integer" + }, + "longitude": { + "maximum": 180, + "minimum": -180, + "type": "number" + }, + "query": { + "description": "A name to search: station, stop, line, agency or train number.", + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "ref": { + "description": "Exact reference to inspect.", + "maxLength": 256, + "minLength": 1, + "type": "string" + } +}
- Changed
get_departures1 field changed- added
Output schema / properties / otherStationsAdded value: +{ + "description": "The same place in another network (the LIRR at Penn Station): call again with its ref for its departures.", + "items": { + "additionalProperties": false, + "properties": { + "coordinates": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "latitude": { + "maximum": 90, + "minimum": -90, + "type": "number" + }, + "longitude": { + "maximum": 180, + "minimum": -180, + "type": "number" + } + }, + "required": [ + "latitude", + "longitude" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "coverage": { + "type": "string" + }, + "endpoint": { + "enum": [ + "origin", + "destination" + ], + "type": "string" + }, + "feed": { + "type": "string" + }, + "kind": { + "enum": [ + "agency", + "route", + "stop", + "trip" + ], + "type": "string" + }, + "modes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "providerId": { + "type": "string" + }, + "ref": { + "type": "string" + }, + "routeCount": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "routeNames": { + "description": "Lines serving it, up to ten.", + "items": { + "type": "string" + }, + "maxItems": 10, + "type": "array" + }, + "stationRef": { + "type": "string" + }, + "stopType": { + "description": "station: groups platforms; platform: part of stationRef; stop: a standalone stop such as a street corner.", + "enum": [ + "station", + "platform", + "stop", + "entrance", + "other" + ], + "type": "string" + } + }, + "required": [ + "ref", + "kind", + "name", + "coverage", + "feed", + "providerId" + ], + "type": "object" + }, + "type": "array" +}
- Changed
get_service_status3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / anyOfRemoved value: -[ - { - "additionalProperties": false, - "properties": { - "coverage": { - "description": "Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several.", - "enum": [ - "sfbay", - "SF", - "San Francisco", - "Bay Area", - "dc", - "DC", - "Washington DC", - "Washington, DC", - "WMATA", - "DC Metro", - "Metrobus", - "nyc", - "NYC", - "New York", - "New York City", - "NYC Subway", - "MTA Subway", - "MTA", - "LIRR", - "Long Island Rail Road", - "Metro-North", - "Metro-North Railroad" - ], - "type": "string" - }, - "itinerary": { - "not": {} - }, - "ref": { - "not": {} - }, - "stop": { - "not": {} - } - }, - "required": [ - "coverage" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "coverage": { - "not": {} - }, - "itinerary": { - "not": {} - }, - "ref": { - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "stop": { - "not": {} - } - }, - "required": [ - "ref" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "coverage": { - "description": "Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several.", - "enum": [ - "sfbay", - "SF", - "San Francisco", - "Bay Area", - "dc", - "DC", - "Washington DC", - "Washington, DC", - "WMATA", - "DC Metro", - "Metrobus", - "nyc", - "NYC", - "New York", - "New York City", - "NYC Subway", - "MTA Subway", - "MTA", - "LIRR", - "Long Island Rail Road", - "Metro-North", - "Metro-North Railroad" - ], - "type": "string" - }, - "itinerary": { - "not": {} - }, - "ref": { - "not": {} - }, - "stop": { - "description": "Station name, e.g. \"Fulton St\"; a station covers its complex.", - "maxLength": 256, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "coverage", - "stop" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "coverage": { - "not": {} - }, - "itinerary": { - "additionalProperties": {}, - "description": "An itinerary exactly as plan_trip returned it; validated strictly against that contract.", - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "ref": { - "not": {} - }, - "stop": { - "not": {} - } - }, - "required": [ - "itinerary" - ], - "type": "object" - } -] - added
Input schema / propertiesAdded value: +{ + "coverage": { + "description": "Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several.", + "enum": [ + "sfbay", + "SF", + "San Francisco", + "Bay Area", + "dc", + "DC", + "Washington DC", + "Washington, DC", + "WMATA", + "DC Metro", + "Metrobus", + "nyc", + "NYC", + "New York", + "New York City", + "NYC Subway", + "MTA Subway", + "MTA", + "LIRR", + "Long Island Rail Road", + "Metro-North", + "Metro-North Railroad" + ], + "type": "string" + }, + "itinerary": { + "additionalProperties": {}, + "description": "An itinerary exactly as plan_trip returned it; validated strictly against that contract.", + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "ref": { + "description": "Agency, route, stop or dated trip reference.", + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "stop": { + "description": "Station name, e.g. \"Fulton St\", with coverage; a station covers its complex.", + "maxLength": 256, + "minLength": 1, + "type": "string" + } +}
- Changed
plan_trip2 fields changed- added
Output schema / properties / itineraries / items / properties / readingAdded value: +{ + "additionalProperties": false, + "description": "When a name means several places: the place this trip is from and to (null: as given).", + "properties": { + "destination": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "origin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "origin", + "destination" + ], + "type": "object" +} - added
Output schema / properties / noticeAdded value: +{ + "description": "Set when a name means several places: which, and how the trips are labelled.", + "type": "string" +}
5 tool updates
- Changed
find_transit2 fields changed- changed
Input schema / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "context": { - "additionalProperties": false, - "properties": { - "coverage": { - "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "feed": { - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "serviceDate": { - "pattern": "^\\d{8}$", - "type": "string" - } - }, - "type": "object" - }, - "coverage": { - "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "latitude": { - "not": {} - }, - "limit": { - "default": 20, - "maximum": 50, - "minimum": 1, - "type": "integer" - }, - "longitude": { - "not": {} - }, - "query": { - "not": {} - }, - "ref": { - "maxLength": 256, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "ref" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "context": { - "additionalProperties": false, - "properties": { - "coverage": { - "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "feed": { - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "serviceDate": { - "pattern": "^\\d{8}$", - "type": "string" - } - }, - "type": "object" - }, - "coverage": { - "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "latitude": { - "not": {} - }, - "limit": { - "default": 20, - "maximum": 50, - "minimum": 1, - "type": "integer" - }, - "longitude": { - "not": {} - }, - "query": { - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "ref": { - "not": {} - } - }, - "required": [ - "query" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "context": { - "additionalProperties": false, - "properties": { - "coverage": { - "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "feed": { - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "serviceDate": { - "pattern": "^\\d{8}$", - "type": "string" - } - }, - "type": "object" - }, - "coverage": { - "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "latitude": { - "maximum": 90, - "minimum": -90, - "type": "number" - }, - "limit": { - "default": 20, - "maximum": 50, - "minimum": 1, - "type": "integer" - }, - "longitude": { - "maximum": 180, - "minimum": -180, - "type": "number" - }, - "query": { - "not": {} - }, - "ref": { - "not": {} - } - }, - "required": [ - "latitude", - "longitude" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "context": { - "additionalProperties": false, - "properties": { - "coverage": { - "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "feed": { - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "serviceDate": { - "pattern": "^\\d{8}$", - "type": "string" - } - }, - "type": "object" - }, - "coverage": { - "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "latitude": { - "not": {} - }, - "limit": { - "default": 20, - "maximum": 50, - "minimum": 1, - "type": "integer" - }, - "longitude": { - "not": {} - }, - "query": { - "not": {} - }, - "ref": { - "not": {} - } - }, - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "context": { + "additionalProperties": false, + "properties": { + "coverage": { + "description": "Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several.", + "enum": [ + "sfbay", + "SF", + "San Francisco", + "Bay Area", + "dc", + "DC", + "Washington DC", + "Washington, DC", + "WMATA", + "DC Metro", + "Metrobus", + "nyc", + "NYC", + "New York", + "New York City", + "NYC Subway", + "MTA Subway", + "MTA", + "LIRR", + "Long Island Rail Road", + "Metro-North", + "Metro-North Railroad" + ], + "type": "string" + }, + "feed": { + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "serviceDate": { + "pattern": "^\\d{8}$", + "type": "string" + } + }, + "type": "object" + }, + "coverage": { + "description": "Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several.", + "enum": [ + "sfbay", + "SF", + "San Francisco", + "Bay Area", + "dc", + "DC", + "Washington DC", + "Washington, DC", + "WMATA", + "DC Metro", + "Metrobus", + "nyc", + "NYC", + "New York", + "New York City", + "NYC Subway", + "MTA Subway", + "MTA", + "LIRR", + "Long Island Rail Road", + "Metro-North", + "Metro-North Railroad" + ], + "type": "string" + }, + "latitude": { + "not": {} + }, + "limit": { + "default": 20, + "maximum": 50, + "minimum": 1, + "type": "integer" + }, + "longitude": { + "not": {} + }, + "query": { + "not": {} + }, + "ref": { + "maxLength": 256, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "ref" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "context": { + "additionalProperties": false, + "properties": { + "coverage": { + "description": "Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several.", + "enum": [ + "sfbay", + "SF", + "San Francisco", + "Bay Area", + "dc", + "DC", + "Washington DC", + "Washington, DC", + "WMATA", + "DC Metro", + "Metrobus", + "nyc", + "NYC", + "New York", + "New York City", + "NYC Subway", + "MTA Subway", + "MTA", + "LIRR", + "Long Island Rail Road", + "Metro-North", + "Metro-North Railroad" + ], + "type": "string" + }, + "feed": { + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "serviceDate": { + "pattern": "^\\d{8}$", + "type": "string" + } + }, + "type": "object" + }, + "coverage": { + "description": "Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several.", + "enum": [ + "sfbay", + "SF", + "San Francisco", + "Bay Area", + "dc", + "DC", + "Washington DC", + "Washington, DC", + "WMATA", + "DC Metro", + "Metrobus", + "nyc", + "NYC", + "New York", + "New York City", + "NYC Subway", + "MTA Subway", + "MTA", + "LIRR", + "Long Island Rail Road", + "Metro-North", + "Metro-North Railroad" + ], + "type": "string" + }, + "latitude": { + "not": {} + }, + "limit": { + "default": 20, + "maximum": 50, + "minimum": 1, + "type": "integer" + }, + "longitude": { + "not": {} + }, + "query": { + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "ref": { + "not": {} + } + }, + "required": [ + "query" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "context": { + "additionalProperties": false, + "properties": { + "coverage": { + "description": "Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several.", + "enum": [ + "sfbay", + "SF", + "San Francisco", + "Bay Area", + "dc", + "DC", + "Washington DC", + "Washington, DC", + "WMATA", + "DC Metro", + "Metrobus", + "nyc", + "NYC", + "New York", + "New York City", + "NYC Subway", + "MTA Subway", + "MTA", + "LIRR", + "Long Island Rail Road", + "Metro-North", + "Metro-North Railroad" + ], + "type": "string" + }, + "feed": { + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "serviceDate": { + "pattern": "^\\d{8}$", + "type": "string" + } + }, + "type": "object" + }, + "coverage": { + "description": "Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several.", + "enum": [ + "sfbay", + "SF", + "San Francisco", + "Bay Area", + "dc", + "DC", + "Washington DC", + "Washington, DC", + "WMATA", + "DC Metro", + "Metrobus", + "nyc", + "NYC", + "New York", + "New York City", + "NYC Subway", + "MTA Subway", + "MTA", + "LIRR", + "Long Island Rail Road", + "Metro-North", + "Metro-North Railroad" + ], + "type": "string" + }, + "latitude": { + "maximum": 90, + "minimum": -90, + "type": "number" + }, + "limit": { + "default": 20, + "maximum": 50, + "minimum": 1, + "type": "integer" + }, + "longitude": { + "maximum": 180, + "minimum": -180, + "type": "number" + }, + "query": { + "not": {} + }, + "ref": { + "not": {} + } + }, + "required": [ + "latitude", + "longitude" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "context": { + "additionalProperties": false, + "properties": { + "coverage": { + "description": "Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several.", + "enum": [ + "sfbay", + "SF", + "San Francisco", + "Bay Area", + "dc", + "DC", + "Washington DC", + "Washington, DC", + "WMATA", + "DC Metro", + "Metrobus", + "nyc", + "NYC", + "New York", + "New York City", + "NYC Subway", + "MTA Subway", + "MTA", + "LIRR", + "Long Island Rail Road", + "Metro-North", + "Metro-North Railroad" + ], + "type": "string" + }, + "feed": { + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "serviceDate": { + "pattern": "^\\d{8}$", + "type": "string" + } + }, + "type": "object" + }, + "coverage": { + "description": "Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several.", + "enum": [ + "sfbay", + "SF", + "San Francisco", + "Bay Area", + "dc", + "DC", + "Washington DC", + "Washington, DC", + "WMATA", + "DC Metro", + "Metrobus", + "nyc", + "NYC", + "New York", + "New York City", + "NYC Subway", + "MTA Subway", + "MTA", + "LIRR", + "Long Island Rail Road", + "Metro-North", + "Metro-North Railroad" + ], + "type": "string" + }, + "latitude": { + "not": {} + }, + "limit": { + "default": 20, + "maximum": 50, + "minimum": 1, + "type": "integer" + }, + "longitude": { + "not": {} + }, + "query": { + "not": {} + }, + "ref": { + "not": {} + } + }, + "type": "object" + } +] - added
Output schema / properties / suggestionsAdded value: +{ + "description": "When no name matches: the closest stop names, not matches. Confirm one with the rider, or retry with the official station name.", + "items": { + "additionalProperties": false, + "properties": { + "coordinates": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "latitude": { + "maximum": 90, + "minimum": -90, + "type": "number" + }, + "longitude": { + "maximum": 180, + "minimum": -180, + "type": "number" + } + }, + "required": [ + "latitude", + "longitude" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "coverage": { + "type": "string" + }, + "endpoint": { + "enum": [ + "origin", + "destination" + ], + "type": "string" + }, + "feed": { + "type": "string" + }, + "kind": { + "enum": [ + "agency", + "route", + "stop", + "trip" + ], + "type": "string" + }, + "modes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "providerId": { + "type": "string" + }, + "ref": { + "type": "string" + }, + "routeCount": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "routeNames": { + "description": "Lines serving it, up to ten.", + "items": { + "type": "string" + }, + "maxItems": 10, + "type": "array" + }, + "stationRef": { + "type": "string" + }, + "stopType": { + "description": "station: groups platforms; platform: part of stationRef; stop: a standalone stop such as a street corner.", + "enum": [ + "station", + "platform", + "stop", + "entrance", + "other" + ], + "type": "string" + } + }, + "required": [ + "ref", + "kind", + "name", + "coverage", + "feed", + "providerId" + ], + "type": "object" + }, + "type": "array" +}
- Changed
get_departures4 fields changed- changed
Input schema / properties / coverage / descriptionPrevious value: -"Runtime coverage name or identifier; use find_transit to inspect availability."New value: +"Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several." - added
Input schema / properties / coverage / enumAdded value: +[ + "sfbay", + "SF", + "San Francisco", + "Bay Area", + "dc", + "DC", + "Washington DC", + "Washington, DC", + "WMATA", + "DC Metro", + "Metrobus", + "nyc", + "NYC", + "New York", + "New York City", + "NYC Subway", + "MTA Subway", + "MTA", + "LIRR", + "Long Island Rail Road", + "Metro-North", + "Metro-North Railroad" +] - removed
Input schema / properties / coverage / maxLengthRemoved value: -256 - removed
Input schema / properties / coverage / minLengthRemoved value: -1
- Changed
get_service_status1 field changed- changed
Input schema / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "coverage": { - "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "itinerary": { - "not": {} - }, - "ref": { - "not": {} - }, - "stop": { - "not": {} - } - }, - "required": [ - "coverage" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "coverage": { - "not": {} - }, - "itinerary": { - "not": {} - }, - "ref": { - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "stop": { - "not": {} - } - }, - "required": [ - "ref" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "coverage": { - "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "itinerary": { - "not": {} - }, - "ref": { - "not": {} - }, - "stop": { - "description": "Station name, e.g. \"Fulton St\"; a station covers its complex.", - "maxLength": 256, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "coverage", - "stop" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "coverage": { - "not": {} - }, - "itinerary": { - "additionalProperties": {}, - "description": "An itinerary exactly as plan_trip returned it; validated strictly against that contract.", - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "ref": { - "not": {} - }, - "stop": { - "not": {} - } - }, - "required": [ - "itinerary" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "coverage": { + "description": "Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several.", + "enum": [ + "sfbay", + "SF", + "San Francisco", + "Bay Area", + "dc", + "DC", + "Washington DC", + "Washington, DC", + "WMATA", + "DC Metro", + "Metrobus", + "nyc", + "NYC", + "New York", + "New York City", + "NYC Subway", + "MTA Subway", + "MTA", + "LIRR", + "Long Island Rail Road", + "Metro-North", + "Metro-North Railroad" + ], + "type": "string" + }, + "itinerary": { + "not": {} + }, + "ref": { + "not": {} + }, + "stop": { + "not": {} + } + }, + "required": [ + "coverage" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "coverage": { + "not": {} + }, + "itinerary": { + "not": {} + }, + "ref": { + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "stop": { + "not": {} + } + }, + "required": [ + "ref" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "coverage": { + "description": "Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several.", + "enum": [ + "sfbay", + "SF", + "San Francisco", + "Bay Area", + "dc", + "DC", + "Washington DC", + "Washington, DC", + "WMATA", + "DC Metro", + "Metrobus", + "nyc", + "NYC", + "New York", + "New York City", + "NYC Subway", + "MTA Subway", + "MTA", + "LIRR", + "Long Island Rail Road", + "Metro-North", + "Metro-North Railroad" + ], + "type": "string" + }, + "itinerary": { + "not": {} + }, + "ref": { + "not": {} + }, + "stop": { + "description": "Station name, e.g. \"Fulton St\"; a station covers its complex.", + "maxLength": 256, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "coverage", + "stop" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "coverage": { + "not": {} + }, + "itinerary": { + "additionalProperties": {}, + "description": "An itinerary exactly as plan_trip returned it; validated strictly against that contract.", + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "ref": { + "not": {} + }, + "stop": { + "not": {} + } + }, + "required": [ + "itinerary" + ], + "type": "object" + } +]
- Changed
get_vehicle_status4 fields changed- changed
Input schema / properties / coverage / descriptionPrevious value: -"Runtime coverage name or identifier; use find_transit to inspect availability."New value: +"Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several." - added
Input schema / properties / coverage / enumAdded value: +[ + "sfbay", + "SF", + "San Francisco", + "Bay Area", + "dc", + "DC", + "Washington DC", + "Washington, DC", + "WMATA", + "DC Metro", + "Metrobus", + "nyc", + "NYC", + "New York", + "New York City", + "NYC Subway", + "MTA Subway", + "MTA", + "LIRR", + "Long Island Rail Road", + "Metro-North", + "Metro-North Railroad" +] - removed
Input schema / properties / coverage / maxLengthRemoved value: -256 - removed
Input schema / properties / coverage / minLengthRemoved value: -1
- Changed
plan_trip4 fields changed- changed
Input schema / properties / coverage / descriptionPrevious value: -"Runtime coverage name or identifier; use find_transit to inspect availability."New value: +"Region: sfbay (San Francisco Bay Area), dc (Washington DC Metro and Metrobus), nyc (New York City Subway, LIRR and Metro-North). Region names such as SF or Washington DC also work. Pick the region the place is in; where optional, leave it out only if the place could be in several." - added
Input schema / properties / coverage / enumAdded value: +[ + "sfbay", + "SF", + "San Francisco", + "Bay Area", + "dc", + "DC", + "Washington DC", + "Washington, DC", + "WMATA", + "DC Metro", + "Metrobus", + "nyc", + "NYC", + "New York", + "New York City", + "NYC Subway", + "MTA Subway", + "MTA", + "LIRR", + "Long Island Rail Road", + "Metro-North", + "Metro-North Railroad" +] - removed
Input schema / properties / coverage / maxLengthRemoved value: -256 - removed
Input schema / properties / coverage / minLengthRemoved value: -1
1 tool update
- Changed
get_bus_predictions1 field changed- added
Input schema / properties / stopId / patternAdded value: +"^\\d{7}$"
1 tool update
- Changed
find_transit1 field changed- changed
Input schema / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "context": { - "additionalProperties": false, - "properties": { - "coverage": { - "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "feed": { - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "serviceDate": { - "pattern": "^\\d{8}$", - "type": "string" - } - }, - "type": "object" - }, - "coverage": { - "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "latitude": { - "not": {} - }, - "limit": { - "default": 20, - "maximum": 50, - "minimum": 1, - "type": "integer" - }, - "longitude": { - "not": {} - }, - "query": { - "not": {} - }, - "ref": { - "maxLength": 256, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "ref" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "context": { - "additionalProperties": false, - "properties": { - "coverage": { - "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "feed": { - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "serviceDate": { - "pattern": "^\\d{8}$", - "type": "string" - } - }, - "type": "object" - }, - "coverage": { - "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "latitude": { - "not": {} - }, - "limit": { - "default": 20, - "maximum": 50, - "minimum": 1, - "type": "integer" - }, - "longitude": { - "not": {} - }, - "query": { - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "ref": { - "not": {} - } - }, - "required": [ - "query" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "context": { - "additionalProperties": false, - "properties": { - "coverage": { - "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "feed": { - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "serviceDate": { - "pattern": "^\\d{8}$", - "type": "string" - } - }, - "type": "object" - }, - "coverage": { - "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "latitude": { - "maximum": 90, - "minimum": -90, - "type": "number" - }, - "limit": { - "default": 20, - "maximum": 50, - "minimum": 1, - "type": "integer" - }, - "longitude": { - "maximum": 180, - "minimum": -180, - "type": "number" - }, - "query": { - "not": {} - }, - "ref": { - "not": {} - } - }, - "required": [ - "latitude", - "longitude" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "context": { + "additionalProperties": false, + "properties": { + "coverage": { + "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "feed": { + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "serviceDate": { + "pattern": "^\\d{8}$", + "type": "string" + } + }, + "type": "object" + }, + "coverage": { + "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "latitude": { + "not": {} + }, + "limit": { + "default": 20, + "maximum": 50, + "minimum": 1, + "type": "integer" + }, + "longitude": { + "not": {} + }, + "query": { + "not": {} + }, + "ref": { + "maxLength": 256, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "ref" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "context": { + "additionalProperties": false, + "properties": { + "coverage": { + "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "feed": { + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "serviceDate": { + "pattern": "^\\d{8}$", + "type": "string" + } + }, + "type": "object" + }, + "coverage": { + "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "latitude": { + "not": {} + }, + "limit": { + "default": 20, + "maximum": 50, + "minimum": 1, + "type": "integer" + }, + "longitude": { + "not": {} + }, + "query": { + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "ref": { + "not": {} + } + }, + "required": [ + "query" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "context": { + "additionalProperties": false, + "properties": { + "coverage": { + "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "feed": { + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "serviceDate": { + "pattern": "^\\d{8}$", + "type": "string" + } + }, + "type": "object" + }, + "coverage": { + "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "latitude": { + "maximum": 90, + "minimum": -90, + "type": "number" + }, + "limit": { + "default": 20, + "maximum": 50, + "minimum": 1, + "type": "integer" + }, + "longitude": { + "maximum": 180, + "minimum": -180, + "type": "number" + }, + "query": { + "not": {} + }, + "ref": { + "not": {} + } + }, + "required": [ + "latitude", + "longitude" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "context": { + "additionalProperties": false, + "properties": { + "coverage": { + "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "feed": { + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "serviceDate": { + "pattern": "^\\d{8}$", + "type": "string" + } + }, + "type": "object" + }, + "coverage": { + "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "latitude": { + "not": {} + }, + "limit": { + "default": 20, + "maximum": 50, + "minimum": 1, + "type": "integer" + }, + "longitude": { + "not": {} + }, + "query": { + "not": {} + }, + "ref": { + "not": {} + } + }, + "type": "object" + } +]
2 tool updates
- Changed
find_transit12 fields changed- added
Output schema / properties / candidates / items / properties / coordinatesAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "latitude": { + "maximum": 90, + "minimum": -90, + "type": "number" + }, + "longitude": { + "maximum": 180, + "minimum": -180, + "type": "number" + } + }, + "required": [ + "latitude", + "longitude" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / candidates / items / properties / modesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / candidates / items / properties / routeCountAdded value: +{ + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Output schema / properties / candidates / items / properties / routeNamesAdded value: +{ + "description": "Lines serving it, up to ten.", + "items": { + "type": "string" + }, + "maxItems": 10, + "type": "array" +} - added
Output schema / properties / candidates / items / properties / stationRefAdded value: +{ + "type": "string" +} - added
Output schema / properties / candidates / items / properties / stopTypeAdded value: +{ + "description": "station: groups platforms; platform: part of stationRef; stop: a standalone stop such as a street corner.", + "enum": [ + "station", + "platform", + "stop", + "entrance", + "other" + ], + "type": "string" +} - added
Output schema / properties / entities / items / properties / modesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / entities / items / properties / routeCountAdded value: +{ + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Output schema / properties / entities / items / properties / routeNamesAdded value: +{ + "description": "Lines serving it, up to ten.", + "items": { + "type": "string" + }, + "maxItems": 10, + "type": "array" +} - added
Output schema / properties / entities / items / properties / stationRefAdded value: +{ + "type": "string" +} - added
Output schema / properties / entities / items / properties / stopTypeAdded value: +{ + "description": "station: groups platforms; platform: part of stationRef; stop: a standalone stop such as a street corner.", + "enum": [ + "station", + "platform", + "stop", + "entrance", + "other" + ], + "type": "string" +} - changed
Output schema / properties / entities / items / requiredPrevious value: -[ - "ref", - "kind", - "name", - "coverage", - "feed", - "providerId", - "scheduleVersion", - "resourceUri", - "coordinates", - "routeRefs", - "agencyRef", - "mode", - "patterns", - "calls", - "stepFree" -]New value: +[ + "ref", + "kind", + "name", + "coverage", + "feed", + "providerId", + "coordinates", + "scheduleVersion", + "resourceUri", + "routeRefs", + "agencyRef", + "mode", + "patterns", + "calls", + "stepFree" +]
- Changed
get_service_status1 field changed- changed
Input schema / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "coverage": { - "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "itinerary": { - "not": {} - }, - "ref": { - "not": {} - } - }, - "required": [ - "coverage" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "coverage": { - "not": {} - }, - "itinerary": { - "not": {} - }, - "ref": { - "maxLength": 256, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "ref" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "coverage": { - "not": {} - }, - "itinerary": { - "additionalProperties": {}, - "description": "An itinerary exactly as plan_trip returned it; validated strictly against that contract.", - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "ref": { - "not": {} - } - }, - "required": [ - "itinerary" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "coverage": { + "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "itinerary": { + "not": {} + }, + "ref": { + "not": {} + }, + "stop": { + "not": {} + } + }, + "required": [ + "coverage" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "coverage": { + "not": {} + }, + "itinerary": { + "not": {} + }, + "ref": { + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "stop": { + "not": {} + } + }, + "required": [ + "ref" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "coverage": { + "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "itinerary": { + "not": {} + }, + "ref": { + "not": {} + }, + "stop": { + "description": "Station name, e.g. \"Fulton St\"; a station covers its complex.", + "maxLength": 256, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "coverage", + "stop" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "coverage": { + "not": {} + }, + "itinerary": { + "additionalProperties": {}, + "description": "An itinerary exactly as plan_trip returned it; validated strictly against that contract.", + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "ref": { + "not": {} + }, + "stop": { + "not": {} + } + }, + "required": [ + "itinerary" + ], + "type": "object" + } +]
5 tool updates
- Changed
find_transit1 field changed- changed
Output schema / properties / reasons / items / enumPrevious value: -[ - "REALTIME_STALE", - "REALTIME_UNAVAILABLE", - "SCHEDULE_EXPIRED", - "SCHEDULE_APPROXIMATE", - "SCHEDULE_REALTIME_MISMATCH", - "TRIP_CANCELED", - "STOP_SKIPPED", - "VALIDATOR_REJECTED", - "COVERAGE_UNAVAILABLE", - "SCOPE_LIMIT_EXCEEDED", - "ACCESSIBILITY_UNAVAILABLE", - "ENDPOINT_NOT_STEP_FREE" -]New value: +[ + "REALTIME_STALE", + "REALTIME_UNAVAILABLE", + "SCHEDULE_EXPIRED", + "SCHEDULE_APPROXIMATE", + "SCHEDULE_REALTIME_MISMATCH", + "TRIP_CANCELED", + "STOP_SKIPPED", + "VALIDATOR_REJECTED", + "COVERAGE_UNAVAILABLE", + "SCOPE_LIMIT_EXCEEDED", + "ACCESSIBILITY_UNAVAILABLE", + "ENDPOINT_NOT_STEP_FREE", + "PLANNING_UNAVAILABLE" +]
- Changed
get_departures5 fields changed- added
Input schema / properties / toStopAdded value: +{ + "description": "Destination stop or station name, with coverage. Give this or toStopRef, or neither.", + "maxLength": 256, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / toStopRefAdded value: +{ + "description": "Destination stop or station: only trips that go on to stop there are listed, each with its arrival time there.", + "maxLength": 256, + "minLength": 1, + "type": "string" +} - added
Output schema / properties / departures / items / properties / arrivalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "predictedTime": { + "anyOf": [ + { + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "scheduledTime": { + "anyOf": [ + { + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "stopName": { + "type": "string" + }, + "stopRef": { + "type": "string" + }, + "stopSequence": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + }, + "required": [ + "stopRef", + "stopName", + "stopSequence", + "scheduledTime", + "predictedTime" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "With a destination: where and when this trip reaches it. Null without one." +} - changed
Output schema / properties / departures / items / requiredPrevious value: -[ - "tripRef", - "serviceDate", - "routeRef", - "routeName", - "agencyRef", - "stopRef", - "stopName", - "stopSequence", - "stepFree", - "headsign", - "directionId", - "pickupType", - "status", - "feedId", - "scheduleVersion", - "agencyTimezone", - "tripInstanceRef", - "scheduledTime", - "predictedTime", - "platform", - "scheduleMatch" -]New value: +[ + "tripRef", + "serviceDate", + "routeRef", + "routeName", + "agencyRef", + "stopRef", + "stopName", + "stopSequence", + "stepFree", + "headsign", + "directionId", + "pickupType", + "status", + "feedId", + "scheduleVersion", + "agencyTimezone", + "tripInstanceRef", + "scheduledTime", + "predictedTime", + "platform", + "scheduleMatch", + "arrival" +] - changed
Output schema / properties / reasons / items / enumPrevious value: -[ - "REALTIME_STALE", - "REALTIME_UNAVAILABLE", - "SCHEDULE_EXPIRED", - "SCHEDULE_APPROXIMATE", - "SCHEDULE_REALTIME_MISMATCH", - "TRIP_CANCELED", - "STOP_SKIPPED", - "VALIDATOR_REJECTED", - "COVERAGE_UNAVAILABLE", - "SCOPE_LIMIT_EXCEEDED", - "ACCESSIBILITY_UNAVAILABLE", - "ENDPOINT_NOT_STEP_FREE" -]New value: +[ + "REALTIME_STALE", + "REALTIME_UNAVAILABLE", + "SCHEDULE_EXPIRED", + "SCHEDULE_APPROXIMATE", + "SCHEDULE_REALTIME_MISMATCH", + "TRIP_CANCELED", + "STOP_SKIPPED", + "VALIDATOR_REJECTED", + "COVERAGE_UNAVAILABLE", + "SCOPE_LIMIT_EXCEEDED", + "ACCESSIBILITY_UNAVAILABLE", + "ENDPOINT_NOT_STEP_FREE", + "PLANNING_UNAVAILABLE" +]
- Changed
get_service_status1 field changed- changed
Output schema / properties / reasons / items / enumPrevious value: -[ - "REALTIME_STALE", - "REALTIME_UNAVAILABLE", - "SCHEDULE_EXPIRED", - "SCHEDULE_APPROXIMATE", - "SCHEDULE_REALTIME_MISMATCH", - "TRIP_CANCELED", - "STOP_SKIPPED", - "VALIDATOR_REJECTED", - "COVERAGE_UNAVAILABLE", - "SCOPE_LIMIT_EXCEEDED", - "ACCESSIBILITY_UNAVAILABLE", - "ENDPOINT_NOT_STEP_FREE" -]New value: +[ + "REALTIME_STALE", + "REALTIME_UNAVAILABLE", + "SCHEDULE_EXPIRED", + "SCHEDULE_APPROXIMATE", + "SCHEDULE_REALTIME_MISMATCH", + "TRIP_CANCELED", + "STOP_SKIPPED", + "VALIDATOR_REJECTED", + "COVERAGE_UNAVAILABLE", + "SCOPE_LIMIT_EXCEEDED", + "ACCESSIBILITY_UNAVAILABLE", + "ENDPOINT_NOT_STEP_FREE", + "PLANNING_UNAVAILABLE" +]
- Changed
get_vehicle_status1 field changed- changed
Output schema / properties / reasons / items / enumPrevious value: -[ - "REALTIME_STALE", - "REALTIME_UNAVAILABLE", - "SCHEDULE_EXPIRED", - "SCHEDULE_APPROXIMATE", - "SCHEDULE_REALTIME_MISMATCH", - "TRIP_CANCELED", - "STOP_SKIPPED", - "VALIDATOR_REJECTED", - "COVERAGE_UNAVAILABLE", - "SCOPE_LIMIT_EXCEEDED", - "ACCESSIBILITY_UNAVAILABLE", - "ENDPOINT_NOT_STEP_FREE" -]New value: +[ + "REALTIME_STALE", + "REALTIME_UNAVAILABLE", + "SCHEDULE_EXPIRED", + "SCHEDULE_APPROXIMATE", + "SCHEDULE_REALTIME_MISMATCH", + "TRIP_CANCELED", + "STOP_SKIPPED", + "VALIDATOR_REJECTED", + "COVERAGE_UNAVAILABLE", + "SCOPE_LIMIT_EXCEEDED", + "ACCESSIBILITY_UNAVAILABLE", + "ENDPOINT_NOT_STEP_FREE", + "PLANNING_UNAVAILABLE" +]
- Changed
plan_trip4 fields changed- added
Input schema / properties / routesAdded value: +{ + "description": "Route refs (from find_transit) the journey may ride, e.g. the lines you would take: BART from SFO, then a Muni line. The server finds the actual trips, boarding stops, transfers and walks on only these routes and validates them. Works where full search is unavailable (SF Bay) and for buses.", + "items": { + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "maxItems": 4, + "minItems": 1, + "type": "array" +} - added
Output schema / properties / itineraries / items / properties / stepsAdded value: +{ + "items": { + "description": "fromName/toName null means the caller's own map point.", + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "arrivalTime": { + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", + "type": "string" + }, + "departureTime": { + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", + "type": "string" + }, + "distanceMetres": { + "minimum": 0, + "type": "number" + }, + "fromName": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "kind": { + "const": "walk", + "type": "string" + }, + "minutes": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "throughStation": { + "description": "Includes walkways inside a station (published pathways).", + "type": "boolean" + }, + "toName": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "fromName", + "toName", + "departureTime", + "arrivalTime", + "distanceMetres", + "minutes", + "throughStation" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "arrivalTime": { + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", + "type": "string" + }, + "departureTime": { + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", + "type": "string" + }, + "fromName": { + "type": "string" + }, + "headsign": { + "type": "string" + }, + "intermediateStopCount": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "kind": { + "const": "ride", + "type": "string" + }, + "mode": { + "type": "string" + }, + "routeName": { + "type": "string" + }, + "status": { + "enum": [ + "realtime", + "scheduled_only" + ], + "type": "string" + }, + "toName": { + "type": "string" + }, + "tripInstanceRef": { + "type": "string" + } + }, + "required": [ + "kind", + "routeName", + "headsign", + "mode", + "fromName", + "toName", + "departureTime", + "arrivalTime", + "status", + "intermediateStopCount", + "tripInstanceRef" + ], + "type": "object" + } + ] + }, + "type": "array" +} - changed
Output schema / properties / reasons / items / enumPrevious value: -[ - "REALTIME_STALE", - "REALTIME_UNAVAILABLE", - "SCHEDULE_EXPIRED", - "SCHEDULE_APPROXIMATE", - "SCHEDULE_REALTIME_MISMATCH", - "TRIP_CANCELED", - "STOP_SKIPPED", - "VALIDATOR_REJECTED", - "COVERAGE_UNAVAILABLE", - "SCOPE_LIMIT_EXCEEDED", - "ACCESSIBILITY_UNAVAILABLE", - "ENDPOINT_NOT_STEP_FREE" -]New value: +[ + "REALTIME_STALE", + "REALTIME_UNAVAILABLE", + "SCHEDULE_EXPIRED", + "SCHEDULE_APPROXIMATE", + "SCHEDULE_REALTIME_MISMATCH", + "TRIP_CANCELED", + "STOP_SKIPPED", + "VALIDATOR_REJECTED", + "COVERAGE_UNAVAILABLE", + "SCOPE_LIMIT_EXCEEDED", + "ACCESSIBILITY_UNAVAILABLE", + "ENDPOINT_NOT_STEP_FREE", + "PLANNING_UNAVAILABLE" +] - added
Output schema / properties / routeHintsAdded value: +{ + "additionalProperties": false, + "description": "Lines near each end. Pass the ones you would ride (in plan_trip.routes) to have their trips searched and validated.", + "properties": { + "destination": { + "items": { + "additionalProperties": false, + "properties": { + "agencyRef": { + "type": "string" + }, + "mode": { + "type": "string" + }, + "name": { + "type": "string" + }, + "ref": { + "type": "string" + }, + "stopName": { + "type": "string" + }, + "stopRef": { + "description": "The nearest stop the line serves.", + "type": "string" + }, + "walkMetres": { + "minimum": 0, + "type": "number" + } + }, + "required": [ + "ref", + "name", + "mode", + "agencyRef", + "stopRef", + "stopName", + "walkMetres" + ], + "type": "object" + }, + "type": "array" + }, + "direct": { + "description": "Lines serving stops near both ends: a one-seat ride may exist.", + "items": { + "additionalProperties": false, + "properties": { + "agencyRef": { + "type": "string" + }, + "mode": { + "type": "string" + }, + "name": { + "type": "string" + }, + "ref": { + "type": "string" + }, + "stopName": { + "type": "string" + }, + "stopRef": { + "description": "The nearest stop the line serves.", + "type": "string" + }, + "walkMetres": { + "minimum": 0, + "type": "number" + } + }, + "required": [ + "ref", + "name", + "mode", + "agencyRef", + "stopRef", + "stopName", + "walkMetres" + ], + "type": "object" + }, + "type": "array" + }, + "origin": { + "items": { + "additionalProperties": false, + "properties": { + "agencyRef": { + "type": "string" + }, + "mode": { + "type": "string" + }, + "name": { + "type": "string" + }, + "ref": { + "type": "string" + }, + "stopName": { + "type": "string" + }, + "stopRef": { + "description": "The nearest stop the line serves.", + "type": "string" + }, + "walkMetres": { + "minimum": 0, + "type": "number" + } + }, + "required": [ + "ref", + "name", + "mode", + "agencyRef", + "stopRef", + "stopName", + "walkMetres" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "direct", + "origin", + "destination" + ], + "type": "object" +}
5 tool updates
- Changed
find_transit4 fields changed- added
Output schema / properties / entities / items / properties / stepFreeAdded value: +{ + "anyOf": [ + { + "enum": [ + "accessible", + "partial", + "not_accessible", + "unknown" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Step-free access from the street per the agency's station data (stops only; partial = some platforms, e.g. one direction). Live elevator outages are in get_service_status." +} - changed
Output schema / properties / entities / items / requiredPrevious value: -[ - "ref", - "kind", - "name", - "coverage", - "feed", - "providerId", - "scheduleVersion", - "resourceUri", - "coordinates", - "routeRefs", - "agencyRef", - "mode", - "patterns", - "calls" -]New value: +[ + "ref", + "kind", + "name", + "coverage", + "feed", + "providerId", + "scheduleVersion", + "resourceUri", + "coordinates", + "routeRefs", + "agencyRef", + "mode", + "patterns", + "calls", + "stepFree" +] - changed
Output schema / properties / reasons / items / enumPrevious value: -[ - "REALTIME_STALE", - "REALTIME_UNAVAILABLE", - "SCHEDULE_EXPIRED", - "SCHEDULE_APPROXIMATE", - "SCHEDULE_REALTIME_MISMATCH", - "TRIP_CANCELED", - "STOP_SKIPPED", - "VALIDATOR_REJECTED", - "COVERAGE_UNAVAILABLE", - "SCOPE_LIMIT_EXCEEDED" -]New value: +[ + "REALTIME_STALE", + "REALTIME_UNAVAILABLE", + "SCHEDULE_EXPIRED", + "SCHEDULE_APPROXIMATE", + "SCHEDULE_REALTIME_MISMATCH", + "TRIP_CANCELED", + "STOP_SKIPPED", + "VALIDATOR_REJECTED", + "COVERAGE_UNAVAILABLE", + "SCOPE_LIMIT_EXCEEDED", + "ACCESSIBILITY_UNAVAILABLE", + "ENDPOINT_NOT_STEP_FREE" +] - changed
Output schema / properties / sources / items / properties / kind / enumPrevious value: -[ - "gtfs_schedule", - "trip_updates", - "vehicle_positions", - "alerts", - "native_api" -]New value: +[ + "gtfs_schedule", + "trip_updates", + "vehicle_positions", + "alerts", + "equipment_outages", + "native_api" +]
- Changed
get_departures6 fields changed- added
Output schema / properties / departures / items / properties / stepFreeAdded value: +{ + "description": "Step-free access to this platform per the agency's station data; live elevator outages are in get_service_status.", + "enum": [ + "accessible", + "not_accessible", + "unknown" + ], + "type": "string" +} - changed
Output schema / properties / departures / items / requiredPrevious value: -[ - "tripRef", - "serviceDate", - "routeRef", - "routeName", - "agencyRef", - "stopRef", - "stopName", - "stopSequence", - "headsign", - "directionId", - "pickupType", - "status", - "feedId", - "scheduleVersion", - "agencyTimezone", - "tripInstanceRef", - "scheduledTime", - "predictedTime", - "platform", - "scheduleMatch" -]New value: +[ + "tripRef", + "serviceDate", + "routeRef", + "routeName", + "agencyRef", + "stopRef", + "stopName", + "stopSequence", + "stepFree", + "headsign", + "directionId", + "pickupType", + "status", + "feedId", + "scheduleVersion", + "agencyTimezone", + "tripInstanceRef", + "scheduledTime", + "predictedTime", + "platform", + "scheduleMatch" +] - added
Output schema / properties / frequencyWindows / items / properties / stepFreeAdded value: +{ + "description": "Step-free access to this platform per the agency's station data; live elevator outages are in get_service_status.", + "enum": [ + "accessible", + "not_accessible", + "unknown" + ], + "type": "string" +} - changed
Output schema / properties / frequencyWindows / items / requiredPrevious value: -[ - "tripRef", - "serviceDate", - "routeRef", - "routeName", - "agencyRef", - "stopRef", - "stopName", - "stopSequence", - "headsign", - "directionId", - "pickupType", - "status", - "feedId", - "scheduleVersion", - "agencyTimezone", - "tripTemplateRef", - "startTime", - "endTime", - "overlapStartTime", - "overlapEndTime", - "headwaySeconds", - "exactTimes" -]New value: +[ + "tripRef", + "serviceDate", + "routeRef", + "routeName", + "agencyRef", + "stopRef", + "stopName", + "stopSequence", + "stepFree", + "headsign", + "directionId", + "pickupType", + "status", + "feedId", + "scheduleVersion", + "agencyTimezone", + "tripTemplateRef", + "startTime", + "endTime", + "overlapStartTime", + "overlapEndTime", + "headwaySeconds", + "exactTimes" +] - changed
Output schema / properties / reasons / items / enumPrevious value: -[ - "REALTIME_STALE", - "REALTIME_UNAVAILABLE", - "SCHEDULE_EXPIRED", - "SCHEDULE_APPROXIMATE", - "SCHEDULE_REALTIME_MISMATCH", - "TRIP_CANCELED", - "STOP_SKIPPED", - "VALIDATOR_REJECTED", - "COVERAGE_UNAVAILABLE", - "SCOPE_LIMIT_EXCEEDED" -]New value: +[ + "REALTIME_STALE", + "REALTIME_UNAVAILABLE", + "SCHEDULE_EXPIRED", + "SCHEDULE_APPROXIMATE", + "SCHEDULE_REALTIME_MISMATCH", + "TRIP_CANCELED", + "STOP_SKIPPED", + "VALIDATOR_REJECTED", + "COVERAGE_UNAVAILABLE", + "SCOPE_LIMIT_EXCEEDED", + "ACCESSIBILITY_UNAVAILABLE", + "ENDPOINT_NOT_STEP_FREE" +] - changed
Output schema / properties / sources / items / properties / kind / enumPrevious value: -[ - "gtfs_schedule", - "trip_updates", - "vehicle_positions", - "alerts", - "native_api" -]New value: +[ + "gtfs_schedule", + "trip_updates", + "vehicle_positions", + "alerts", + "equipment_outages", + "native_api" +]
- Changed
get_service_status3 fields changed- added
Output schema / properties / equipmentAdded value: +{ + "additionalProperties": false, + "description": "Elevator and escalator outages in scope, where the coverage publishes them.", + "properties": { + "blockingStepFreeCount": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "count": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "outages": { + "description": "At most 20, blocking and accessible-path outages first.", + "items": { + "additionalProperties": false, + "properties": { + "accessiblePath": { + "description": "On the step-free (ADA) path.", + "type": "boolean" + }, + "alternativeRoute": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Agency-supplied way around the outage." + }, + "blocksStepFree": { + "description": "Step-free plan_trip avoids these stations while this lasts.", + "type": "boolean" + }, + "equipmentId": { + "type": "string" + }, + "estimatedReturn": { + "anyOf": [ + { + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "hasBackup": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "Agency says another elevator covers the same path; null when it does not say." + }, + "kind": { + "enum": [ + "elevator", + "escalator" + ], + "type": "string" + }, + "location": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "since": { + "anyOf": [ + { + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "stationName": { + "type": "string" + }, + "stationRefs": { + "items": { + "type": "string" + }, + "maxItems": 8, + "type": "array" + }, + "upcoming": { + "description": "Announced, starting within 24 hours.", + "type": "boolean" + } + }, + "required": [ + "equipmentId", + "kind", + "stationRefs", + "stationName", + "location", + "accessiblePath", + "hasBackup", + "blocksStepFree", + "reason", + "since", + "estimatedReturn", + "upcoming", + "alternativeRoute" + ], + "type": "object" + }, + "type": "array" + }, + "status": { + "description": "Freshness of the agency equipment report; not_offered when this coverage publishes none.", + "enum": [ + "current", + "stale", + "unavailable", + "not_offered" + ], + "type": "string" + } + }, + "required": [ + "status", + "count", + "blockingStepFreeCount", + "outages" + ], + "type": "object" +} - changed
Output schema / properties / reasons / items / enumPrevious value: -[ - "REALTIME_STALE", - "REALTIME_UNAVAILABLE", - "SCHEDULE_EXPIRED", - "SCHEDULE_APPROXIMATE", - "SCHEDULE_REALTIME_MISMATCH", - "TRIP_CANCELED", - "STOP_SKIPPED", - "VALIDATOR_REJECTED", - "COVERAGE_UNAVAILABLE", - "SCOPE_LIMIT_EXCEEDED" -]New value: +[ + "REALTIME_STALE", + "REALTIME_UNAVAILABLE", + "SCHEDULE_EXPIRED", + "SCHEDULE_APPROXIMATE", + "SCHEDULE_REALTIME_MISMATCH", + "TRIP_CANCELED", + "STOP_SKIPPED", + "VALIDATOR_REJECTED", + "COVERAGE_UNAVAILABLE", + "SCOPE_LIMIT_EXCEEDED", + "ACCESSIBILITY_UNAVAILABLE", + "ENDPOINT_NOT_STEP_FREE" +] - changed
Output schema / properties / sources / items / properties / kind / enumPrevious value: -[ - "gtfs_schedule", - "trip_updates", - "vehicle_positions", - "alerts", - "native_api" -]New value: +[ + "gtfs_schedule", + "trip_updates", + "vehicle_positions", + "alerts", + "equipment_outages", + "native_api" +]
- Changed
get_vehicle_status21 fields changed- added
Input schema / properties / coverageAdded value: +{ + "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", + "maxLength": 256, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / ref / descriptionAdded value: +"Route, dated trip or stop/station reference. Give this or stop." - added
Input schema / properties / stopAdded value: +{ + "description": "Station name, with coverage. Give this or ref.", + "maxLength": 256, + "minLength": 1, + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "ref" -] - changed
Output schema / properties / reasons / items / enumPrevious value: -[ - "REALTIME_STALE", - "REALTIME_UNAVAILABLE", - "SCHEDULE_EXPIRED", - "SCHEDULE_APPROXIMATE", - "SCHEDULE_REALTIME_MISMATCH", - "TRIP_CANCELED", - "STOP_SKIPPED", - "VALIDATOR_REJECTED", - "COVERAGE_UNAVAILABLE", - "SCOPE_LIMIT_EXCEEDED" -]New value: +[ + "REALTIME_STALE", + "REALTIME_UNAVAILABLE", + "SCHEDULE_EXPIRED", + "SCHEDULE_APPROXIMATE", + "SCHEDULE_REALTIME_MISMATCH", + "TRIP_CANCELED", + "STOP_SKIPPED", + "VALIDATOR_REJECTED", + "COVERAGE_UNAVAILABLE", + "SCOPE_LIMIT_EXCEEDED", + "ACCESSIBILITY_UNAVAILABLE", + "ENDPOINT_NOT_STEP_FREE" +] - changed
Output schema / properties / sources / items / properties / kind / enumPrevious value: -[ - "gtfs_schedule", - "trip_updates", - "vehicle_positions", - "alerts", - "native_api" -]New value: +[ + "gtfs_schedule", + "trip_updates", + "vehicle_positions", + "alerts", + "equipment_outages", + "native_api" +] - removed
Output schema / properties / vehicles / items / properties / coordinates / additionalPropertiesRemoved value: -false - added
Output schema / properties / vehicles / items / properties / coordinates / anyOfAdded value: +[ + { + "additionalProperties": false, + "properties": { + "latitude": { + "maximum": 90, + "minimum": -90, + "type": "number" + }, + "longitude": { + "maximum": 180, + "minimum": -180, + "type": "number" + } + }, + "required": [ + "latitude", + "longitude" + ], + "type": "object" + }, + { + "type": "null" + } +] - removed
Output schema / properties / vehicles / items / properties / coordinates / propertiesRemoved value: -{ - "latitude": { - "maximum": 90, - "minimum": -90, - "type": "number" - }, - "longitude": { - "maximum": 180, - "minimum": -180, - "type": "number" - } -} - removed
Output schema / properties / vehicles / items / properties / coordinates / requiredRemoved value: -[ - "latitude", - "longitude" -] - removed
Output schema / properties / vehicles / items / properties / coordinates / typeRemoved value: -"object" - added
Output schema / properties / vehicles / items / properties / coordinatesSourceAdded value: +{ + "anyOf": [ + { + "enum": [ + "vehicle", + "stop" + ], + "type": "string" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / vehicles / items / properties / headsignAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / vehicles / items / properties / previousStopNameAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / vehicles / items / properties / previousStopRefAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The scheduled stop before stopRef while the train is between stops; null when stopped or off its scheduled pattern." +} - added
Output schema / properties / vehicles / items / properties / routeNameAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Public route name, e.g. \"A\" or \"Red\"." +} - added
Output schema / properties / vehicles / items / properties / stopNameAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / vehicles / items / properties / stopRefAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / vehicles / items / properties / stopStatusAdded value: +{ + "anyOf": [ + { + "enum": [ + "stopped_at", + "incoming_at", + "in_transit_to" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Relation to stopRef: stopped there, arriving, or travelling towards it." +} - added
Output schema / properties / vehicles / items / properties / trainIdAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The agency's train identifier: an NYCT train ID such as \"1A 1023 207/FAR\" (line, scheduled origin time, origin/destination) or the label WMATA publishes. find_transit resolves it to this train's trip." +} - changed
Output schema / properties / vehicles / items / requiredPrevious value: -[ - "id", - "tripInstanceRef", - "routeRef", - "coordinates", - "bearing", - "speedMetersPerSecond", - "observedAt", - "ageSeconds" -]New value: +[ + "id", + "trainId", + "tripInstanceRef", + "routeRef", + "routeName", + "headsign", + "stopStatus", + "stopRef", + "stopName", + "previousStopRef", + "previousStopName", + "coordinates", + "coordinatesSource", + "bearing", + "speedMetersPerSecond", + "observedAt", + "ageSeconds" +]
- Changed
plan_trip4 fields changed- added
Input schema / properties / accessibility / descriptionAdded value: +"step_free: only platforms reachable without stairs, avoiding current elevator outages." - changed
Output schema / properties / itineraries / items / properties / legs / items / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "agencyRef": { - "type": "string" - }, - "alightSequence": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "arrivalTime": { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", - "type": "string" - }, - "boardSequence": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "continuation": { - "type": "boolean" - }, - "departureTime": { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", - "type": "string" - }, - "directionId": { - "anyOf": [ - { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "from": { - "type": "string" - }, - "headsign": { - "type": "string" - }, - "instanceStartSeconds": { - "type": "number" - }, - "intermediateStopCount": { - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "kind": { - "const": "transit", - "type": "string" - }, - "mode": { - "type": "string" - }, - "realtimeTimestampSeconds": { - "type": "number" - }, - "routeRef": { - "type": "string" - }, - "scheduleVersion": { - "type": "string" - }, - "scheduledArrivalTime": { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", - "type": "string" - }, - "scheduledDepartureTime": { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", - "type": "string" - }, - "serviceDate": { - "type": "string" - }, - "sources": { - "items": { - "additionalProperties": false, - "properties": { - "ageSeconds": { - "anyOf": [ - { - "minimum": 0, - "type": "number" - }, - { - "type": "null" - } - ] - }, - "feedId": { - "type": "string" - }, - "ingestedAt": { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", - "type": "string" - }, - "kind": { - "enum": [ - "gtfs_schedule", - "trip_updates", - "vehicle_positions", - "alerts", - "native_api" - ], - "type": "string" - }, - "producerTimestamp": { - "anyOf": [ - { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", - "type": "string" - }, - { - "type": "null" - } - ] - }, - "scheduleVersion": { - "type": "string" - } - }, - "required": [ - "feedId", - "kind", - "producerTimestamp", - "ingestedAt", - "ageSeconds", - "scheduleVersion" - ], - "type": "object" - }, - "type": "array" - }, - "status": { - "enum": [ - "realtime", - "scheduled_only" - ], - "type": "string" - }, - "to": { - "type": "string" - }, - "transferRequired": { - "type": "boolean" - }, - "tripInstanceRef": { - "type": "string" - }, - "tripRef": { - "type": "string" - }, - "validatorOutcome": { - "const": "valid", - "type": "string" - } - }, - "required": [ - "kind", - "from", - "to", - "tripRef", - "tripInstanceRef", - "serviceDate", - "instanceStartSeconds", - "routeRef", - "directionId", - "headsign", - "boardSequence", - "alightSequence", - "scheduleVersion", - "scheduledDepartureTime", - "scheduledArrivalTime", - "departureTime", - "arrivalTime", - "status", - "continuation", - "mode", - "agencyRef", - "intermediateStopCount", - "transferRequired", - "sources", - "validatorOutcome" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "arrivalTime": { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", - "type": "string" - }, - "departureTime": { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", - "type": "string" - }, - "distanceMetres": { - "type": "number" - }, - "estimated": { - "type": "boolean" - }, - "from": { - "anyOf": [ - { - "type": "string" - }, - { - "additionalProperties": false, - "properties": { - "latitude": { - "maximum": 90, - "minimum": -90, - "type": "number" - }, - "longitude": { - "maximum": 180, - "minimum": -180, - "type": "number" - } - }, - "required": [ - "latitude", - "longitude" - ], - "type": "object" - } - ] - }, - "kind": { - "const": "walk", - "type": "string" - }, - "pathwayId": { - "type": "string" - }, - "to": { - "anyOf": [ - { - "type": "string" - }, - { - "additionalProperties": false, - "properties": { - "latitude": { - "maximum": 90, - "minimum": -90, - "type": "number" - }, - "longitude": { - "maximum": 180, - "minimum": -180, - "type": "number" - } - }, - "required": [ - "latitude", - "longitude" - ], - "type": "object" - } - ] - }, - "validatorOutcome": { - "const": "valid", - "type": "string" - }, - "verification": { - "enum": [ - "pathway", - "unverified" - ], - "type": "string" - } - }, - "required": [ - "kind", - "from", - "to", - "departureTime", - "arrivalTime", - "distanceMetres", - "verification", - "estimated", - "validatorOutcome" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "agencyRef": { + "type": "string" + }, + "alightSequence": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "arrivalTime": { + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", + "type": "string" + }, + "boardSequence": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "continuation": { + "type": "boolean" + }, + "departureTime": { + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", + "type": "string" + }, + "directionId": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "from": { + "type": "string" + }, + "headsign": { + "type": "string" + }, + "instanceStartSeconds": { + "type": "number" + }, + "intermediateStopCount": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "kind": { + "const": "transit", + "type": "string" + }, + "mode": { + "type": "string" + }, + "realtimeTimestampSeconds": { + "type": "number" + }, + "routeRef": { + "type": "string" + }, + "scheduleVersion": { + "type": "string" + }, + "scheduledArrivalTime": { + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", + "type": "string" + }, + "scheduledDepartureTime": { + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", + "type": "string" + }, + "serviceDate": { + "type": "string" + }, + "sources": { + "items": { + "additionalProperties": false, + "properties": { + "ageSeconds": { + "anyOf": [ + { + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ] + }, + "feedId": { + "type": "string" + }, + "ingestedAt": { + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", + "type": "string" + }, + "kind": { + "enum": [ + "gtfs_schedule", + "trip_updates", + "vehicle_positions", + "alerts", + "equipment_outages", + "native_api" + ], + "type": "string" + }, + "producerTimestamp": { + "anyOf": [ + { + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "scheduleVersion": { + "type": "string" + } + }, + "required": [ + "feedId", + "kind", + "producerTimestamp", + "ingestedAt", + "ageSeconds", + "scheduleVersion" + ], + "type": "object" + }, + "type": "array" + }, + "status": { + "enum": [ + "realtime", + "scheduled_only" + ], + "type": "string" + }, + "to": { + "type": "string" + }, + "transferRequired": { + "type": "boolean" + }, + "tripInstanceRef": { + "type": "string" + }, + "tripRef": { + "type": "string" + }, + "validatorOutcome": { + "const": "valid", + "type": "string" + } + }, + "required": [ + "kind", + "from", + "to", + "tripRef", + "tripInstanceRef", + "serviceDate", + "instanceStartSeconds", + "routeRef", + "directionId", + "headsign", + "boardSequence", + "alightSequence", + "scheduleVersion", + "scheduledDepartureTime", + "scheduledArrivalTime", + "departureTime", + "arrivalTime", + "status", + "continuation", + "mode", + "agencyRef", + "intermediateStopCount", + "transferRequired", + "sources", + "validatorOutcome" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "arrivalTime": { + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", + "type": "string" + }, + "departureTime": { + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", + "type": "string" + }, + "distanceMetres": { + "type": "number" + }, + "estimated": { + "type": "boolean" + }, + "from": { + "anyOf": [ + { + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "latitude": { + "maximum": 90, + "minimum": -90, + "type": "number" + }, + "longitude": { + "maximum": 180, + "minimum": -180, + "type": "number" + } + }, + "required": [ + "latitude", + "longitude" + ], + "type": "object" + } + ] + }, + "kind": { + "const": "walk", + "type": "string" + }, + "pathwayId": { + "type": "string" + }, + "to": { + "anyOf": [ + { + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "latitude": { + "maximum": 90, + "minimum": -90, + "type": "number" + }, + "longitude": { + "maximum": 180, + "minimum": -180, + "type": "number" + } + }, + "required": [ + "latitude", + "longitude" + ], + "type": "object" + } + ] + }, + "validatorOutcome": { + "const": "valid", + "type": "string" + }, + "verification": { + "enum": [ + "pathway", + "unverified" + ], + "type": "string" + } + }, + "required": [ + "kind", + "from", + "to", + "departureTime", + "arrivalTime", + "distanceMetres", + "verification", + "estimated", + "validatorOutcome" + ], + "type": "object" + } +] - changed
Output schema / properties / reasons / items / enumPrevious value: -[ - "REALTIME_STALE", - "REALTIME_UNAVAILABLE", - "SCHEDULE_EXPIRED", - "SCHEDULE_APPROXIMATE", - "SCHEDULE_REALTIME_MISMATCH", - "TRIP_CANCELED", - "STOP_SKIPPED", - "VALIDATOR_REJECTED", - "COVERAGE_UNAVAILABLE", - "SCOPE_LIMIT_EXCEEDED" -]New value: +[ + "REALTIME_STALE", + "REALTIME_UNAVAILABLE", + "SCHEDULE_EXPIRED", + "SCHEDULE_APPROXIMATE", + "SCHEDULE_REALTIME_MISMATCH", + "TRIP_CANCELED", + "STOP_SKIPPED", + "VALIDATOR_REJECTED", + "COVERAGE_UNAVAILABLE", + "SCOPE_LIMIT_EXCEEDED", + "ACCESSIBILITY_UNAVAILABLE", + "ENDPOINT_NOT_STEP_FREE" +] - changed
Output schema / properties / sources / items / properties / kind / enumPrevious value: -[ - "gtfs_schedule", - "trip_updates", - "vehicle_positions", - "alerts", - "native_api" -]New value: +[ + "gtfs_schedule", + "trip_updates", + "vehicle_positions", + "alerts", + "equipment_outages", + "native_api" +]
2 tool updates
- Changed
get_departures10 fields changed- added
Input schema / properties / coverageAdded value: +{ + "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", + "maxLength": 256, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / stopAdded value: +{ + "description": "Stop or station name, with coverage. Give this or stopRef.", + "maxLength": 256, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / stopRef / descriptionAdded value: +"Exact stop or station reference. Give this or stop." - removed
Input schema / requiredRemoved value: -[ - "stopRef" -] - added
Output schema / properties / departures / items / properties / routeNameAdded value: +{ + "description": "Public route name, e.g. \"1\", \"A\" or \"Red\".", + "type": "string" +} - added
Output schema / properties / departures / items / properties / stopNameAdded value: +{ + "type": "string" +} - changed
Output schema / properties / departures / items / requiredPrevious value: -[ - "tripRef", - "serviceDate", - "routeRef", - "agencyRef", - "stopRef", - "stopSequence", - "headsign", - "directionId", - "pickupType", - "status", - "feedId", - "scheduleVersion", - "agencyTimezone", - "tripInstanceRef", - "scheduledTime", - "predictedTime", - "platform", - "scheduleMatch" -]New value: +[ + "tripRef", + "serviceDate", + "routeRef", + "routeName", + "agencyRef", + "stopRef", + "stopName", + "stopSequence", + "headsign", + "directionId", + "pickupType", + "status", + "feedId", + "scheduleVersion", + "agencyTimezone", + "tripInstanceRef", + "scheduledTime", + "predictedTime", + "platform", + "scheduleMatch" +] - added
Output schema / properties / frequencyWindows / items / properties / routeNameAdded value: +{ + "description": "Public route name, e.g. \"1\", \"A\" or \"Red\".", + "type": "string" +} - added
Output schema / properties / frequencyWindows / items / properties / stopNameAdded value: +{ + "type": "string" +} - changed
Output schema / properties / frequencyWindows / items / requiredPrevious value: -[ - "tripRef", - "serviceDate", - "routeRef", - "agencyRef", - "stopRef", - "stopSequence", - "headsign", - "directionId", - "pickupType", - "status", - "feedId", - "scheduleVersion", - "agencyTimezone", - "tripTemplateRef", - "startTime", - "endTime", - "overlapStartTime", - "overlapEndTime", - "headwaySeconds", - "exactTimes" -]New value: +[ + "tripRef", + "serviceDate", + "routeRef", + "routeName", + "agencyRef", + "stopRef", + "stopName", + "stopSequence", + "headsign", + "directionId", + "pickupType", + "status", + "feedId", + "scheduleVersion", + "agencyTimezone", + "tripTemplateRef", + "startTime", + "endTime", + "overlapStartTime", + "overlapEndTime", + "headwaySeconds", + "exactTimes" +]
- Changed
get_service_status6 fields changed- changed
Input schema / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "coverage": { - "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - "itinerary": { - "not": {} - }, - "ref": { - "not": {} - } - }, - "required": [ - "coverage" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "coverage": { - "not": {} - }, - "itinerary": { - "not": {} - }, - "ref": { - "maxLength": 256, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "ref" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "coverage": { - "not": {} - }, - "itinerary": { - "additionalProperties": false, - "properties": { - "arrivalTime": { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", - "type": "string" - }, - "artifactVersion": { - "type": "string" - }, - "coverageId": { - "type": "string" - }, - "departAt": { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", - "type": "string" - }, - "departureTime": { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", - "type": "string" - }, - "destination": { - "anyOf": [ - { - "type": "string" - }, - { - "additionalProperties": false, - "properties": { - "latitude": { - "maximum": 90, - "minimum": -90, - "type": "number" - }, - "longitude": { - "maximum": 180, - "minimum": -180, - "type": "number" - } - }, - "required": [ - "latitude", - "longitude" - ], - "type": "object" - } - ] - }, - "legs": { - "items": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "agencyRef": { - "type": "string" - }, - "alightSequence": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "arrivalTime": { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", - "type": "string" - }, - "boardSequence": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "continuation": { - "type": "boolean" - }, - "departureTime": { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", - "type": "string" - }, - "directionId": { - "anyOf": [ - { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "from": { - "type": "string" - }, - "headsign": { - "type": "string" - }, - "instanceStartSeconds": { - "type": "number" - }, - "intermediateStopCount": { - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "kind": { - "const": "transit", - "type": "string" - }, - "mode": { - "type": "string" - }, - "realtimeTimestampSeconds": { - "type": "number" - }, - "routeRef": { - "type": "string" - }, - "scheduleVersion": { - "type": "string" - }, - "scheduledArrivalTime": { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", - "type": "string" - }, - "scheduledDepartureTime": { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", - "type": "string" - }, - "serviceDate": { - "type": "string" - }, - "sources": { - "items": { - "additionalProperties": false, - "properties": { - "ageSeconds": { - "anyOf": [ - { - "minimum": 0, - "type": "number" - }, - { - "type": "null" - } - ] - }, - "feedId": { - "type": "string" - }, - "ingestedAt": { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", - "type": "string" - }, - "kind": { - "enum": [ - "gtfs_schedule", - "trip_updates", - "vehicle_positions", - "alerts", - "native_api" - ], - "type": "string" - }, - "producerTimestamp": { - "anyOf": [ - { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", - "type": "string" - }, - { - "type": "null" - } - ] - }, - "scheduleVersion": { - "type": "string" - } - }, - "required": [ - "feedId", - "kind", - "producerTimestamp", - "ingestedAt", - "ageSeconds", - "scheduleVersion" - ], - "type": "object" - }, - "type": "array" - }, - "status": { - "enum": [ - "realtime", - "scheduled_only" - ], - "type": "string" - }, - "to": { - "type": "string" - }, - "transferRequired": { - "type": "boolean" - }, - "tripInstanceRef": { - "type": "string" - }, - "tripRef": { - "type": "string" - }, - "validatorOutcome": { - "const": "valid", - "type": "string" - } - }, - "required": [ - "kind", - "from", - "to", - "tripRef", - "tripInstanceRef", - "serviceDate", - "instanceStartSeconds", - "routeRef", - "directionId", - "headsign", - "boardSequence", - "alightSequence", - "scheduleVersion", - "scheduledDepartureTime", - "scheduledArrivalTime", - "departureTime", - "arrivalTime", - "status", - "continuation", - "mode", - "agencyRef", - "intermediateStopCount", - "transferRequired", - "sources", - "validatorOutcome" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "arrivalTime": { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", - "type": "string" - }, - "departureTime": { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", - "type": "string" - }, - "distanceMetres": { - "type": "number" - }, - "estimated": { - "type": "boolean" - }, - "from": { - "anyOf": [ - { - "type": "string" - }, - { - "additionalProperties": false, - "properties": { - "latitude": { - "maximum": 90, - "minimum": -90, - "type": "number" - }, - "longitude": { - "maximum": 180, - "minimum": -180, - "type": "number" - } - }, - "required": [ - "latitude", - "longitude" - ], - "type": "object" - } - ] - }, - "kind": { - "const": "walk", - "type": "string" - }, - "pathwayId": { - "type": "string" - }, - "to": { - "anyOf": [ - { - "type": "string" - }, - { - "additionalProperties": false, - "properties": { - "latitude": { - "maximum": 90, - "minimum": -90, - "type": "number" - }, - "longitude": { - "maximum": 180, - "minimum": -180, - "type": "number" - } - }, - "required": [ - "latitude", - "longitude" - ], - "type": "object" - } - ] - }, - "validatorOutcome": { - "const": "valid", - "type": "string" - }, - "verification": { - "enum": [ - "pathway", - "unverified" - ], - "type": "string" - } - }, - "required": [ - "kind", - "from", - "to", - "departureTime", - "arrivalTime", - "distanceMetres", - "verification", - "estimated", - "validatorOutcome" - ], - "type": "object" - } - ] - }, - "type": "array" - }, - "maxTransfers": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "maxWalkMetres": { - "type": "number" - }, - "origin": { - "anyOf": [ - { - "type": "string" - }, - { - "additionalProperties": false, - "properties": { - "latitude": { - "maximum": 90, - "minimum": -90, - "type": "number" - }, - "longitude": { - "maximum": 180, - "minimum": -180, - "type": "number" - } - }, - "required": [ - "latitude", - "longitude" - ], - "type": "object" - } - ] - }, - "status": { - "enum": [ - "realtime", - "scheduled_only" - ], - "type": "string" - }, - "transfers": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "walkingMetres": { - "type": "number" - }, - "windowSeconds": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - } - }, - "required": [ - "coverageId", - "artifactVersion", - "origin", - "destination", - "departAt", - "windowSeconds", - "maxWalkMetres", - "maxTransfers", - "departureTime", - "arrivalTime", - "walkingMetres", - "transfers", - "status", - "legs" - ], - "type": "object" - }, - "ref": { - "not": {} - } - }, - "required": [ - "itinerary" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "coverage": { + "description": "Runtime coverage name or identifier; use find_transit to inspect availability.", + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "itinerary": { + "not": {} + }, + "ref": { + "not": {} + } + }, + "required": [ + "coverage" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "coverage": { + "not": {} + }, + "itinerary": { + "not": {} + }, + "ref": { + "maxLength": 256, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "ref" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "coverage": { + "not": {} + }, + "itinerary": { + "additionalProperties": {}, + "description": "An itinerary exactly as plan_trip returned it; validated strictly against that contract.", + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "ref": { + "not": {} + } + }, + "required": [ + "itinerary" + ], + "type": "object" + } +] - added
Output schema / properties / alerts / items / properties / selectorCountAdded value: +{ + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Output schema / properties / alerts / items / properties / selectors / descriptionAdded value: +"At most 20; selectorCount is the full number." - added
Output schema / properties / alerts / items / properties / stopCountAdded value: +{ + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Output schema / properties / alerts / items / properties / stopIds / descriptionAdded value: +"At most 20; stopCount is the full number." - changed
Output schema / properties / alerts / items / requiredPrevious value: -[ - "id", - "agencyText", - "routeIds", - "stopIds", - "selectors", - "stale", - "activePeriods" -]New value: +[ + "id", + "agencyText", + "routeIds", + "stopIds", + "selectors", + "selectorCount", + "stopCount", + "stale", + "activePeriods" +]
1 tool update
- Changed
get_departures10 fields changed- added
Output schema / properties / departures / items / properties / scheduleMatchAdded value: +{ + "enum": [ + "matched", + "unscheduled_call", + "unmatched_trip" + ], + "type": "string" +} - added
Output schema / properties / departures / items / properties / scheduledTime / anyOfAdded value: +[ + { + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / departures / items / properties / scheduledTime / formatRemoved value: -"date-time" - removed
Output schema / properties / departures / items / properties / scheduledTime / patternRemoved value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - removed
Output schema / properties / departures / items / properties / scheduledTime / typeRemoved value: -"string" - added
Output schema / properties / departures / items / properties / stopSequence / anyOfAdded value: +[ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / departures / items / properties / stopSequence / maximumRemoved value: -9007199254740991 - removed
Output schema / properties / departures / items / properties / stopSequence / minimumRemoved value: --9007199254740991 - removed
Output schema / properties / departures / items / properties / stopSequence / typeRemoved value: -"integer" - changed
Output schema / properties / departures / items / requiredPrevious value: -[ - "tripRef", - "serviceDate", - "routeRef", - "agencyRef", - "stopRef", - "stopSequence", - "headsign", - "directionId", - "pickupType", - "status", - "feedId", - "scheduleVersion", - "agencyTimezone", - "tripInstanceRef", - "scheduledTime", - "predictedTime", - "platform" -]New value: +[ + "tripRef", + "serviceDate", + "routeRef", + "agencyRef", + "stopRef", + "stopSequence", + "headsign", + "directionId", + "pickupType", + "status", + "feedId", + "scheduleVersion", + "agencyTimezone", + "tripInstanceRef", + "scheduledTime", + "predictedTime", + "platform", + "scheduleMatch" +]
10 tool updates
- Added
find_transit - Added
get_departures - Added
get_service_status - Removed
get_sfbay_incidents - Removed
get_sfbay_routes - Removed
get_sfbay_station_predictions - Removed
get_vehicle_positions - Added
get_vehicle_status - Added
plan_trip - Removed
search_sfbay_stations
18 tool updates
- First observed
get_all_stations - First observed
get_bus_positions - First observed
get_bus_predictions - First observed
get_bus_routes - First observed
get_bus_stops - First observed
get_elevator_incidents - First observed
get_incidents - First observed
get_route_info - First observed
get_sfbay_incidents - First observed
get_sfbay_routes - First observed
get_sfbay_station_predictions - First observed
get_station_predictions - First observed
get_station_transfers - First observed
get_stations_by_line - First observed
get_train_positions - First observed
get_vehicle_positions - First observed
search_sfbay_stations - First observed
search_stations
Related MCP Connectors
Unofficial DC, Maryland and Virginia transit: trips, Metro, buses, rail, fares and alerts.
Plan San Francisco and Bay Area transit trips and check upcoming stop departures. Free, no API keys.
Real-time SF Muni departures, routes, alerts, vehicle positions, and schedules.
Get real-time NYC bus arrivals, live vehicle locations, and service alerts. Plan trips between any…
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables querying real-time BART and SF Muni transit data, including departures, trip planning, fares, advisories, routes, alerts, vehicle positions, and schedules, from any MCP-compatible client.1MIT

@pipeworx/mcp-trimetofficial
AlicenseNot gradedqualityCmaintenanceProvides live TriMet transit data for Portland, Oregon, including real-time arrivals, nearby stops, vehicle positions, and service alerts for buses, MAX light rail, WES commuter rail, and Portland Streetcar.188 npmMIT- AlicenseAqualityBmaintenanceEnables AI assistants to access real-time and scheduled public transit data, including routes, stops, departures, and service alerts, across multiple US metropolitan areas.5MIT
- AlicenseNot gradedqualityBmaintenanceProvides real-time NYC subway information including train arrivals, station search, service alerts, and nearby station finder using live MTA data with intelligent location handling.7MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.