onebusaway-mcp-server
Server Details
Real-time transit stops, routes, arrivals, vehicle positions, and schedules via OneBusAway APIs.
- Status
- Healthy
- Uptime
- 100.0% over 80 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- cyanheads/onebusaway-mcp-server
- GitHub Stars
- 2
- Server Listing
- @cyanheads/onebusaway-mcp-server
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 16 tools
Most tools target distinct resources, but three pairs overlap heavily: find_routes vs search_routes, find_stops vs search_stops, and get_stop_context vs get_stop/get_arrivals. The descriptions do distinguish them (proximity search vs name lookup, composite vs single-fetch), which prevents outright confusion, but an agent could easily pick the wrong one of each pair.
All 16 tools follow a uniform snake_case verb_noun pattern under the onebusaway_ prefix, using a coherent verb vocabulary (get_, list_, search_, find_) applied to a small set of resource nouns (route, stop, trip, agency, arrivals, vehicles, schedule, alert, block).
At 16 tools the surface is slightly heavy but each covers a real transit-API concern (routes, stops, trips, vehicles, schedules, blocks, alerts, agencies) with no obviously redundant tool beyond the find/search pairing. It sits at the upper end of a comfortable range rather than being bloated.
Core lifecycle coverage is strong: discovery (find/search/list), detail fetches, real-time arrivals/vehicles/trips, static schedules, blocks, and alert detail all exist. The notable gap is alert enumeration — there is only get_alert by ID, with no tool to list active alerts for an agency or route, so discovery of alerts depends on them surfacing inside arrivals or stop context.
Available Tools
16 toolsonebusaway_find_routesFind Routes Near LocationARead-onlyInspect
Find transit routes near a location, optionally filtered by name or number. Returns routes with IDs, short names, and descriptions. Use routeId values to fetch schedules, vehicles, or stop sequences.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | Latitude of the search center, in [-90, 90]. | |
| lon | Yes | Longitude of the search center, in [-180, 180]. | |
| query | No | Filter by route name or number (e.g. "44" or "Link Light Rail"). | |
| radius | No | Search radius in meters. Must be positive; capped at 1600m. Defaults to 500m. Ignored when latSpan and lonSpan are both set. | |
| latSpan | No | Optional bounding-box height in degrees, as an alternative to radius. Takes effect only when lonSpan is also set, in which case radius is ignored. | |
| lonSpan | No | Optional bounding-box width in degrees, as an alternative to radius. Takes effect only when latSpan is also set, in which case radius is ignored. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number of routes returned. |
| error | No | Present when the call failed. Absent on success. |
| query | No | Route name/number filter applied to the search, if any. |
| notice | No | Guidance when no routes matched — e.g. try a larger radius or different query. |
| routes | No | Routes found near the specified location. |
| limitExceeded | No | True if more routes exist beyond the returned set; narrow the radius or set latSpan/lonSpan to see all. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, covering the safety profile. The description adds that routes can be filtered by name/number and returns IDs, short names, and descriptions, which is useful but not deeply behavioral. It does not discuss pagination, rate limits, or edge cases, but given the read-only annotation, the added context is acceptable.
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, front-loaded with the primary purpose, and includes a concise follow-up hint. No wasted words or redundancy. The structure is efficient and scannable.
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 tool has 6 parameters (2 required) and a thorough schema, the description does not need to repeat parameter details. It states the return fields and hints at next steps. It does not mention the latSpan/lonSpan vs radius distinction, but the schema covers that. For a read-only search tool with a rich schema, this is largely 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?
The schema description coverage is 100%, so all parameters are documented. The description's mention of 'optionally filtered by name or number' aligns with the query parameter but does not add new semantic depth beyond the schema. It also refers to routeId in output, not parameters. 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?
The description clearly states the verb 'Find' and the resource 'transit routes' with a location context. It mentions optional filtering and return fields, making the purpose specific. However, it does not explicitly name sibling tools like search_routes or list_routes_for_agency to differentiate when to use this versus them, so it stops short of a 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 description implies usage for location-based route discovery ('near a location') but does not explicitly state when not to use it or name alternative tools. It gives a follow-up hint to use routeId values, but that is about subsequent actions, not tool selection. No exclusions or alternative routing guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onebusaway_find_stopsFind Stops Near LocationARead-onlyInspect
Find bus stops near a location. Returns stops within a radius, each with ID, name, direction, served routes, and wheelchair boarding status. Use stopId values from results to fetch real-time arrivals with onebusaway_get_arrivals. Optionally filter by stop code (the number printed on the stop sign, e.g. "75403").
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | Latitude of the search center, in [-90, 90]. | |
| lon | Yes | Longitude of the search center, in [-180, 180]. | |
| query | No | Optional stop code filter (the number printed on the stop sign, e.g. "75403"). When provided, returns only stops matching this code within the radius. | |
| radius | No | Search radius in meters. Must be positive; capped at 1600m, beyond which results degrade. Defaults to 300m. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number of stops returned. |
| error | No | Present when the call failed. Absent on success. |
| query | No | Stop code filter applied to the search, if any. |
| stops | No | Stops within the search radius. |
| notice | No | Guidance when results are empty or truncated — e.g. how to narrow the radius or verify the stop code. |
| limitExceeded | No | True if more stops exist beyond the returned set; narrow the radius to see all. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, and the description adds useful behavioral context about what results contain and how stopId values feed into onebusaway_get_arrivals. It does not cover edge cases like empty results or radius degradation, but for a read-only lookup with an output schema this is adequate.
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 three short sentences with the core action front-loaded, followed by the return-value summary and a practical follow-up hint. Every sentence adds useful information and there is no filler.
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?
Combined with the readOnlyHint annotation, fully described parameters, and output schema, the description provides enough context for an agent to call the tool correctly. The only missing comparative context is how this tool relates to onebusaway_search_stops, but the tool is otherwise self-contained.
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 description does not need to compensate for undocumented parameters. The description restates the stop-code filter meaning but adds no parameter semantics beyond what the schema already provides, which matches the baseline of 3.
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 opens with 'Find bus stops near a location' and adds 'Returns stops within a radius, each with ID, name, direction, served routes, and wheelchair boarding status,' giving a specific verb, resource, and scope. It does not explicitly distinguish itself from the sibling onebusaway_search_stops, so it falls just short of a 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 description clearly states the tool's purpose and gives an explicit downstream instruction: 'Use stopId values from results to fetch real-time arrivals with onebusaway_get_arrivals.' It does not explain when to prefer this tool over onebusaway_search_stops or list exclusions, so it is clear but not fully exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onebusaway_get_alertGet Service Alert DetailARead-onlyInspect
Fetch full detail for a service alert (situation) by ID. Returns the summary, description, reason (e.g. detour, construction), affected stops and routes, consequence description, and active time windows. Situation IDs appear in onebusaway_get_arrivals responses under situationIds and situations[].id.
| Name | Required | Description | Default |
|---|---|---|---|
| situationId | Yes | Situation/alert ID from onebusaway_get_arrivals (situations[].id or arrivals[].situationIds[]). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | Situation ID. |
| url | No | URL for more information about this alert, or null. |
| error | No | Present when the call failed. Absent on success. |
| reason | No | Reason code from TPEG: equipmentReason, environmentReason, personnelReason, miscellaneousReason, securityAlert. Null when not provided. |
| affects | No | Stops, routes, trips, or agencies affected by this alert. |
| summary | No | Short summary of the service alert. |
| severity | No | Severity level as reported by the agency, or null. |
| timezone | No | Validated IANA timezone shared by every affected scope, or UTC when unresolved, invalid, absent, or conflicting. |
| description | No | Longer description of the alert, or null. |
| consequences | No | Operational consequences of this alert. |
| activeWindows | No | Time windows when this alert is active. |
| consequenceMessage | No | Human-readable consequence description (e.g. "Detour in effect"), or null. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes the safety profile, and the description adds that the result carries reason, consequences, affected stops/routes and active time windows. However, this largely restates what the output schema already defines, and it says nothing about behavior for an unknown/expired ID or whether the alert can be returned outside its active window.
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, both earning their place: the first gives purpose and payload, the second gives ID provenance. Purpose is front-loaded and there is no filler.
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 an output schema, the description covers what it does, how to obtain the required ID, and what the response conceptually contains. Nothing an agent needs to invoke 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?
Schema coverage is 100% and the single parameter's description already names both source paths (situations[].id and arrivals[].situationIds[]). The description's provenance note repeats that schema text rather than adding format or validity constraints, so the 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 ('Fetch full detail for a service alert (situation) by ID') and enumerates what the detail contains, making it unambiguous that this is a single-record lookup rather than a search or list. The mention that IDs come from get_arrivals positions it clearly against the sibling that surfaces 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?
Tells the agent exactly where a valid situationId originates ('situationIds and situations[].id' in onebusaway_get_arrivals responses), which is the main usage decision for this tool. No explicit when-not-use or sibling exclusion is stated, but for a leaf ID-lookup there is little alternative to rule out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onebusaway_get_arrivalsGet Real-Time ArrivalsARead-onlyInspect
Real-time arrivals and departures at a stop. Returns predicted arrival times, schedule deviation (how many seconds late/early), vehicle positions, and any active service alerts. The predicted boolean on each arrival indicates whether GPS tracking backs the estimate — predicted=false means schedule-only. Use tripId from results for follow-up onebusaway_get_trip calls. Stop IDs use agency-prefixed format: {agencyId}_{localId} (e.g. "1_75403").
| Name | Required | Description | Default |
|---|---|---|---|
| stopId | Yes | Agency-prefixed stop ID (e.g. "1_75403" for Metro Transit stop 75403). Use onebusaway_find_stops or onebusaway_search_stops to discover IDs. | |
| minutesAfter | No | Include arrivals expected within the next N minutes — an integer from 0 to 240. Defaults to 35. For a longer horizon, use onebusaway_get_schedule_for_stop. | |
| minutesBefore | No | Include arrivals that departed up to this many minutes ago — an integer from 0 to 60. Defaults to 5. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number of arrivals in the time window. |
| error | No | Present when the call failed. Absent on success. |
| notice | No | Guidance when no arrivals were found — widen minutesAfter, or check onebusaway_get_schedule_for_stop for scheduled service. |
| stopId | No | The queried stop ID. |
| arrivals | No | Arrivals and departures at this stop within the requested time window. |
| stopName | No | Stop name. |
| timezone | No | Validated timezone of the queried stop agency, or UTC when unavailable or invalid. |
| situations | No | Active service alerts at this stop — those attached to the stop itself and those referenced by its arrivals, each listed once. |
| currentTime | No | Server time as Unix milliseconds, for computing countdown timers. |
| queriedStop | No | Stop ID queried. |
| windowMinutes | No | Time window used for the arrivals query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only safety, and the description adds genuinely non-obvious semantics: predicted=false means schedule-only rather than GPS-backed, and deviation is expressed in seconds late/early. It stops short of 5 because it says nothing about rate limits, caching/staleness of real-time data, or what an empty result means.
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?
Four tight sentences, front-loaded with what the tool returns, then semantics of the tricky field, then chaining and ID format. No filler, though the ID-format sentence partially duplicates 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?
With an output schema present, the description only needs to orient the agent — and it covers the return payload's meaning (including the non-obvious predicted flag), follow-up chaining, and ID format for a 3-parameter, fully described tool. Nothing needed 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?
Schema description coverage is 100%, so stopId format and the minutesBefore/minutesAfter windows are already fully documented in the schema. The description's restatement of the {agencyId}_{localId} format and the tripId field name adds little beyond what structured data provides; 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 concrete verb+resource ('Real-time arrivals and departures at a stop') and immediately enumerates what comes back: predicted times, schedule deviation, vehicle positions, alerts. The word 'Real-time' plus the departure/deviation detail distinguishes it from the schedule-oriented siblings without needing the 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?
Gives clear operational context: use tripId from results to chain into onebusaway_get_trip, and the agency-prefixed stop ID format. It does not name when to prefer this over onebusaway_get_schedule_for_stop (that routing hint lives only in the schema's minutesAfter description), so it stops short of explicit alternatives/exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onebusaway_get_blockGet Block ScheduleARead-onlyInspect
Fetch block trip sequences with their stop times and service-calendar conditions. Top-level fields describe the first returned configuration; every remaining alternative is included without choosing a calendar date. Optionally select an exact tripId or complete trips having any departure in a half-open GTFS-seconds interval, independently in every configuration; selection counts trip occurrences before and after filtering. Without selectors, returns all trips with no default cap. Block IDs appear as blockId in onebusaway_get_trip responses; obtain a tripId from onebusaway_get_arrivals first.
| Name | Required | Description | Default |
|---|---|---|---|
| tripId | No | Exact trip ID; omit or leave blank for no trip selector. Mutually exclusive with departure bounds. | |
| blockId | Yes | Block ID from a trip record. Obtain a tripId from onebusaway_get_arrivals, then call onebusaway_get_trip to get the blockId. | |
| departureFromSec | No | Inclusive departure lower bound in GTFS seconds from midnight; values beyond 86400 are valid. | |
| departureBeforeSec | No | Exclusive departure upper bound in GTFS seconds from midnight; must exceed departureFromSec when both are supplied. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| trips | No | All trips in the first returned configuration, in order. |
| notice | No | Alternative-configuration guidance or an aggregate empty-selection notice. |
| blockId | No | Block ID. |
| selection | No | Applied selectors and aggregate trip occurrence counts across every configuration; absent without selectors. |
| activeServiceIds | No | Service IDs required active for the first returned configuration. |
| inactiveServiceIds | No | Service IDs required inactive for the first returned configuration. |
| alternateConfigurations | No | Remaining configurations in upstream order; empty when none exist. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint already covers safety, so the description is free to add real behavior. It does: top-level fields describe the first returned configuration, alternatives are returned without choosing a calendar date, and selection counts trip occurrences before and after filtering. It also discloses that there is no default cap on results. That is meaningful context beyond the annotations, though return size or ordering is still 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?
It is front-loaded and contains no filler, but the middle sentences are densely nested ('independently in every configuration; selection counts trip occurrences before and after filtering') and hard to parse on first read. The closing sentence about blockId also largely repeats what the blockId schema field already says.
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 and readOnlyHint is set, so return values and safety do not need to be explained. The description covers the ambiguous parts: multi-configuration results, defaults, and selector interaction. What is missing is any note on result size or pagination when no cap applies.
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 100%, so the baseline is 3. The description still adds value by explaining that selection applies independently in every configuration and by clarifying the half-open interval semantics and the counting behavior. It also reinforces the tripId/departure-bounds mutual exclusivity that the schema states.
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: 'Fetch block trip sequences with their stop times and service-calendar conditions.' That is clearly distinct from get_trip or get_arrivals. It never explains in one clause what a 'block' is or why this differs from get_schedule_for_route, so it stops short of a 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?
It describes the two selection modes (tripId or departure interval) and notes that no selectors means all trips with no cap, which implies usage. It also gives a workflow hint ('obtain a tripId from onebusaway_get_arrivals first'). However, it never says when to use this tool rather than get_trip or get_schedule_for_route, so the guidance remains implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onebusaway_get_routeGet Route DetailsARead-onlyInspect
Fetch details for a specific route by ID. Returns short name, description, agency, route type, and schedule URL. Route IDs use agency-prefixed format: {agencyId}_{localId} (e.g. "1_100259").
| Name | Required | Description | Default |
|---|---|---|---|
| routeId | Yes | Agency-prefixed route ID (e.g. "1_100259"). Use onebusaway_find_routes or onebusaway_search_routes to discover IDs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | Agency-prefixed route ID. |
| url | No | Agency schedule page URL, or null. |
| type | No | GTFS route type: 0=tram, 1=subway, 2=rail, 3=bus, 4=ferry, 5=cable_car. |
| color | No | Route brand color hex (without #), or null. |
| error | No | Present when the call failed. Absent on success. |
| agencyId | No | Agency ID that operates this route. |
| longName | No | Full route name. |
| shortName | No | The number or short name displayed on vehicles (e.g. "44"). |
| agencyName | No | Agency name that operates this route. |
| description | No | Route description. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the agent knows this is a safe read operation. The description adds the ID format requirement and the list of returned fields, which is useful context. However, it doesn't disclose behavior like error handling for invalid IDs, whether the response is paginated, or if the schedule URL is always present. With annotations covering the safety profile, a 3 is appropriate.
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 with zero waste. The core purpose is front-loaded, the returned fields are listed compactly, and the ID format example is placed at the end where it's most useful. Every sentence 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?
Complete for a single-parameter read-only tool with an output schema present. The description covers what the tool does, what it returns, and how to get the ID. The only minor gap is not mentioning error behavior for invalid IDs, but given the output schema and annotations, nothing critical 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 100%, so the schema already documents the routeId parameter with format and discovery hints. The description reinforces the format with an example but doesn't add meaning beyond what the schema provides. Baseline 3 is correct when schema does the heavy lifting.
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 clearly states the tool fetches details for a specific route by ID, lists the exact fields returned (short name, description, agency, route type, schedule URL), and distinguishes it from sibling tools by emphasizing the route ID requirement. The verb 'Fetch' and resource 'route' are specific, and the ID format example removes ambiguity.
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 description explicitly tells the agent to use onebusaway_find_routes or onebusaway_search_routes to discover IDs, which is clear usage guidance. It doesn't explicitly state when NOT to use this tool (e.g., when you need schedules, use onebusaway_get_schedule_for_route), but the context is sufficient for an agent to select it for route-detail lookups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onebusaway_get_schedule_for_routeGet Route ScheduleARead-onlyInspect
Full-day schedule for a route — all trips, stop sequences, and departure times for the specified date (defaults to today). Optionally select an exact tripId or complete trips having any departure in a half-open GTFS-seconds interval; selection includes counts before and after filtering. Without selectors, returns all mapped trips with no default cap. For live predictions, use onebusaway_get_arrivals at specific stops instead.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Service date as YYYY-MM-DD (e.g. "2026-05-23"). Must be a real calendar date. Omit or leave blank for today. | |
| tripId | No | Exact trip ID; omit or leave blank for no trip selector. Mutually exclusive with departure bounds. | |
| routeId | Yes | Agency-prefixed route ID (e.g. "1_100259"). Use onebusaway_find_routes or onebusaway_search_routes to discover IDs. | |
| departureFromSec | No | Inclusive departure lower bound in GTFS seconds from midnight; values beyond 86400 are valid. | |
| departureBeforeSec | No | Exclusive departure upper bound in GTFS seconds from midnight; must exceed departureFromSec when both are supplied. |
Output Schema
| Name | Required | Description |
|---|---|---|
| date | No | Date parameter used for the schedule request, if specified. |
| error | No | Present when the call failed. Absent on success. |
| trips | No | All trips for this route on this date, with their stop sequences. |
| notice | No | Guidance when no trips were found — e.g. no service on weekends or holiday schedule in effect. |
| routeId | No | The queried route ID. |
| timezone | No | Validated timezone of the referenced route agency, or UTC when unavailable or invalid. |
| selection | No | Applied selectors and trip counts before and after local selection; absent without selectors. |
| tripCount | No | Number of trips for this route on this date. |
| queriedRoute | No | Route ID queried. |
| serviceDateMs | No | Unchanged upstream service-date marker (scheduleDate) as Unix milliseconds, identifying the route schedule service day. |
| routeShortName | No | Route short name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the read-only safety profile, and the description adds real behavioral facts: no default cap on results without selectors, mutually exclusive selectors, and that counts before and after filtering are included. It stops short of warning about payload size or pagination for the uncapped full-day case.
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 dense sentences with the resource purpose front-loaded and the alternative tool named last, which is the right order. No wasted clauses, though the selector sentence packs several concepts into one long construction.
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 and full parameter coverage, the description only needed to supply selection semantics, defaulting behavior, and routing to alternatives, all of which it does. Nothing required to invoke 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?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema: it explains that selectors are optional, that selecting yields counts before and after filtering, and that unfiltered calls return everything with no cap. The half-open GTFS-seconds semantics are already in 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 ("Full-day schedule for a route") and enumerates exactly what is returned (all trips, stop sequences, departure times) plus the date default. This clearly separates it from onebusaway_get_schedule_for_stop and onebusaway_get_arrivals.
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?
Explicitly routes the agent away from live data with "For live predictions, use onebusaway_get_arrivals at specific stops instead," and describes when the optional selectors apply. It does not mention onebusaway_get_schedule_for_stop as the stop-scoped alternative, leaving one sibling comparison to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onebusaway_get_schedule_for_stopGet Stop ScheduleARead-onlyInspect
Full-day departure schedule for a stop. Lists every departure by route and direction for the specified date (defaults to today). Optionally filter departure rows by routeId and a half-open Unix-millisecond interval; selection includes counts before and after filtering. Without selectors, returns the complete mapped schedule with no default cap. For live predictions, use onebusaway_get_arrivals instead.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Service date as YYYY-MM-DD (e.g. "2026-05-23"). Must be a real calendar date. Omit or leave blank for today in the agency's timezone. | |
| stopId | Yes | Agency-prefixed stop ID (e.g. "1_75403"). Use onebusaway_find_stops or onebusaway_search_stops to discover IDs. | |
| routeId | No | Exact route ID, combined with departure bounds; omit or leave blank for all routes. | |
| departureFromMs | No | Inclusive departure lower bound in Unix milliseconds. | |
| departureBeforeMs | No | Exclusive departure upper bound in Unix milliseconds; must exceed departureFromMs when both are supplied. |
Output Schema
| Name | Required | Description |
|---|---|---|
| date | No | Date parameter used for the schedule request, if specified. |
| error | No | Present when the call failed. Absent on success. |
| notice | No | Guidance when no routes were found — e.g. no service on weekends or holiday schedule in effect. |
| routes | No | All routes with departures from this stop on this date. |
| stopId | No | The queried stop ID. |
| stopName | No | Stop name. |
| timezone | No | Validated timezone of the queried stop agency, or UTC when unavailable or invalid. |
| selection | No | Applied selectors and departure counts before and after local selection; absent without selectors. |
| routeCount | No | Number of routes with departures from this stop on this date. |
| queriedStop | No | Stop ID queried. |
| serviceDateMs | No | Unchanged upstream schedule-date marker in Unix milliseconds: query time when date is omitted or blank, instance-local midnight for an explicit date. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint already declaring the safe-read profile, the description adds real behavioral context: the interval is half-open, an unfiltered call returns the complete schedule with no default cap (a potential payload-size hazard), and results report counts before and after filtering. It does not discuss rate limits or error behavior, but the output schema covers 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?
Four tight sentences, each doing distinct work: purpose, default and filtering, unbounded-return caveat, and the alternative redirection. The alternative is placed last where it acts as a decision checkpoint, and no sentence restates structured fields verbatim.
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 five-parameter read tool with an output schema and readOnlyHint annotation, everything an agent needs to invoke correctly is present: the default date, the one required parameter, how the optional selectors combine, and the fact that omitting them yields an uncapped result.
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 100%, so baseline is 3; the description earns above it by stating that date defaults to today in the agency's timezone, that routeId composes with the departure bounds rather than replacing them, and by spelling out the half-open interval semantics and the pre/post-filter counts those bounds produce.
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 — a full-day departure schedule for a stop — and immediately distinguishes it from the live-prediction sibling, onebusaway_get_arrivals. The scope ('every departure by route and direction', 'specified date') is precise enough that an agent can differentiate it from onebusaway_get_schedule_for_route and the arrival tools without opening any schema.
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?
Explicitly routes the agent away for the live-prediction case ('For live predictions, use onebusaway_get_arrivals instead') and clarifies the default date and the unbounded-result behavior. It stops short of contrasting with the near-identical onebusaway_get_schedule_for_route sibling, so it is strong but not complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onebusaway_get_stopGet Stop DetailsARead-onlyInspect
Fetch details for a specific stop by ID. Returns the stop's name, coordinates, direction, served routes, and wheelchair accessibility. Stop IDs use agency-prefixed format: {agencyId}_{localId} (e.g. "1_75403" for Metro Transit stop 75403).
| Name | Required | Description | Default |
|---|---|---|---|
| stopId | Yes | Agency-prefixed stop ID (e.g. "1_75403" for Metro Transit stop 75403, "40_100239" for Sound Transit). Use onebusaway_find_stops or onebusaway_search_stops to discover IDs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | Agency-prefixed stop ID. |
| lat | No | Latitude of the stop. |
| lon | No | Longitude of the stop. |
| code | No | The stop code printed on the sign. |
| name | No | Stop name. |
| error | No | Present when the call failed. Absent on success. |
| routeIds | No | IDs of routes that serve this stop. Use with onebusaway_get_arrivals or onebusaway_get_schedule_for_stop. |
| direction | No | Compass direction of travel at this stop (e.g. "NW"). |
| wheelchairBoarding | No | Wheelchair boarding status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals a safe read, and the description adds meaningful behavioral context by listing the returned attributes (name, coordinates, direction, served routes, wheelchair accessibility) and explaining the agency-prefixed ID format. No contradictions with annotations are present.
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, with the main action first and the most important ID-format detail immediately after the return values. Every sentence contributes 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?
For a simple single-parameter read operation, the description plus the fully documented schema and readOnlyHint annotation are sufficient for correct selection and invocation. The output schema also exists, so the description does not need to cover every return detail.
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 schema already provides examples and discovery guidance for stopId. The tool description adds a general ID format pattern, which is modestly helpful, but most parameter meaning is already carried by 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 ('Fetch') and resource ('details for a specific stop by ID') and enumerates the exact fields returned. This clearly distinguishes it from sibling tools like onebusaway_get_arrivals or onebusaway_get_schedule_for_stop, which serve different data for a stop.
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 description makes clear this tool is for fetching a single stop's details when a stop ID is already known. The schema's parameter description further directs users to discover IDs via onebusaway_find_stops or onebusaway_search_stops, though the tool description itself does not mention exclusions or alternatives explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onebusaway_get_stop_contextGet Stop ContextARead-onlyInspect
Everything happening at a stop in one call: the stop's details, its real-time arrivals, and full detail for every service alert on the stop or on any arrival in the window. Returns what onebusaway_get_stop, onebusaway_get_arrivals, and one onebusaway_get_alert call per alert would, from a single upstream request — arrivals in the onebusaway_get_arrivals shape, alerts in the onebusaway_get_alert shape. The stop omits its served-route list; use onebusaway_get_stop for routeIds. Stop IDs use agency-prefixed format: {agencyId}_{localId} (e.g. "1_75403").
| Name | Required | Description | Default |
|---|---|---|---|
| stopId | Yes | Agency-prefixed stop ID (e.g. "1_75403" for Metro Transit stop 75403). Use onebusaway_find_stops or onebusaway_search_stops to discover IDs. | |
| minutesAfter | No | Include arrivals expected within the next N minutes — an integer from 0 to 240. Defaults to 35. For a longer horizon, use onebusaway_get_schedule_for_stop. | |
| minutesBefore | No | Include arrivals that departed up to this many minutes ago — an integer from 0 to 60. Defaults to 5. |
Output Schema
| Name | Required | Description |
|---|---|---|
| stop | No | The queried stop, without its served-route list (use onebusaway_get_stop for routeIds). Null when the upstream response omitted the stop. |
| error | No | Present when the call failed. Absent on success. |
| alerts | No | Service alerts on this stop or on any arrival in the window, each listed once — including alerts whose affected arrivals fall outside the window. |
| notice | No | What the response is missing and where to get it — no arrivals in the window, stop details absent, or referenced alerts absent. |
| arrivals | No | Arrivals and departures at this stop within the requested time window. |
| timezone | No | Validated timezone of the queried stop agency, or UTC when unavailable or invalid. |
| currentTime | No | Server time as Unix milliseconds, for computing countdown timers. |
| queriedStop | No | Stop ID queried. |
| windowMinutes | No | Time window used for the arrivals query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint, so the description carries meaningful extra burden and does: it discloses that everything comes from a single upstream request, that results mirror specific sibling output shapes, and that one field (routeIds) is deliberately omitted. No contradiction with readOnlyHint. Minor gap: no rate-limit or ordering/failure-mode notes.
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?
Three dense sentences, front-loaded with the aggregation value proposition before the caveats. Slightly over-explains the output-shape equivalence, which duplicates information available via the output 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?
An output schema covers the return values, and the description adds what the schema cannot: the composite nature of the response, which sibling shapes it matches, and the one deliberate omission. Complete 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%, so the baseline of 3 applies. The description restates the agency-prefixed ID format with the same example already present in the schema, adding little beyond it, and says nothing about the two arrival-window parameters.
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 — aggregates stop details, real-time arrivals, and full alert detail in one call — and explicitly contrasts with the three sibling tools it replaces (onebusaway_get_stop, onebusaway_get_arrivals, onebusaway_get_alert). An agent can distinguish it without inspecting any schema.
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?
Clearly explains the aggregating use case and routes the agent away where appropriate: 'The stop omits its served-route list; use onebusaway_get_stop for routeIds.' Plus a longer-horizon alternative in the schema. However there is no explicit statement of when to prefer the individual calls over this composite one (e.g. cost/latency tradeoff).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onebusaway_get_tripGet Trip StatusARead-onlyInspect
Real-time status and stop sequence for a trip. Returns vehicle position, schedule deviation, current phase, and remaining stops. Use tripId from onebusaway_get_arrivals to look up a specific vehicle's progress.
| Name | Required | Description | Default |
|---|---|---|---|
| tripId | Yes | Trip ID from an arrivals response or schedule lookup. | |
| serviceDateMs | No | Service date as Unix milliseconds (midnight local time) — a non-negative integer. Only needed for trips from a previous service day. Omit to use today. | |
| includeSchedule | No | Whether to include the full stop sequence with times. Defaults to true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| status | No | Real-time status of the trip. |
| tripId | No | The queried trip ID. |
| blockId | No | Block ID grouping this trip with the others the same vehicle runs back-to-back. Pass to onebusaway_get_block for the full block schedule. Null when the trip has no block. |
| schedule | No | Full stop sequence with times, or null if includeSchedule=false. |
| timezone | No | Validated timezone of the trip route agency, or UTC when unavailable or invalid. |
| situations | No | Active situation IDs affecting this trip. |
| tripHeadsign | No | Destination sign text. |
| routeShortName | No | Route short name (e.g. "44"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes that this is a safe read operation. The description adds useful context that the data is real-time and summarizes the payload, but it does not mention auth needs, rate limits, pagination, or other behavioral caveats. With an output schema present, return-value detail is less critical.
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?
Three tight sentences with no wasted language. The primary purpose is front-loaded, followed by return details and the key sourcing instruction.
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 a rich input schema with full parameter descriptions, a readOnlyHint annotation, and an output schema, the description is complete enough for correct invocation. It explains the tripId source and what the tool returns without needing to duplicate schema or output details.
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 parameters are already documented. The description only reinforces that tripId comes from an arrivals response, which the schema already says, and it does not elaborate on serviceDateMs or includeSchedule 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 resource (a trip) and the data returned: real-time status, stop sequence, vehicle position, schedule deviation, current phase, and remaining stops. The reference to arrivals helps orient the agent among sibling tools, but it does not explicitly disambiguate from get_vehicles or get_block.
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 clear when-to-use context by telling the agent to use a tripId obtained from onebusaway_get_arrivals. It does not state when not to use this tool or name alternate tools for similar data, but the intended workflow is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onebusaway_get_vehiclesGet Real-Time Vehicle PositionsARead-onlyInspect
Real-time positions of active vehicles for an agency. Optionally filter to a single route (client-side). Returns GPS coordinates, counter-clockwise orientation from east, schedule deviation, and current trip. Reports agency records omitted for missing position coordinates. Use agencyId values from onebusaway_list_agencies.
| Name | Required | Description | Default |
|---|---|---|---|
| routeId | No | Optional agency-prefixed route ID to filter results to one route. Filtering is client-side — all agency vehicles are fetched first. | |
| agencyId | Yes | Agency ID (e.g. "1" for Metro Transit, "40" for Sound Transit). Use onebusaway_list_agencies to discover IDs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number of vehicles returned after any route filter. |
| error | No | Present when the call failed. Absent on success. |
| notice | No | Independent notices for records omitted without position, upstream truncation, and an empty returned list. |
| routeId | No | Route ID filter applied client-side, if any. |
| agencyId | No | Agency ID queried. |
| timezone | No | Validated timezone of the requested agency, or UTC when unavailable or invalid. |
| vehicles | No | Active vehicles for the agency, optionally filtered by route. |
| limitExceeded | No | True if the upstream capped the vehicle list — some vehicles were omitted. This endpoint has no pagination to retrieve them. |
| omittedWithoutPosition | No | Agency-wide records omitted because latitude or longitude is missing, counted before route filtering. |
| omittedWithoutPositionOnRoute | No | Omitted records whose canonical current trip resolves to the requested route; present only with a route filter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations only declaring readOnlyHint, the description adds meaningful behavior: route filtering is client-side, all agency vehicles are fetched first, and records missing coordinates are omitted. It does not mention rate limits or pagination, but the output schema exists and the safety profile is already covered by annotations.
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 front-loaded with the tool purpose, then compactly covers filtering behavior, returned fields, omission handling, and ID sourcing. Every sentence contributes useful context without unnecessary repetition.
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 output schema handles return structure and annotations cover read-only safety, the description supplies the remaining critical context: required agencyId discovery, optional route filtering behavior, and the caveat that some records may be omitted. Nothing essential for correct invocation 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 100%, so the baseline is 3. The description reinforces the optional route filter and agencyId source, but those details are already present in the schema; it does not add syntax or meaning beyond the structured parameter descriptions.
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: real-time positions of active vehicles for an agency, with route filtering scope. It distinguishes itself from sibling tools like arrivals, trips, and stops by focusing on GPS-based vehicle positions, so an agent can identify it without opening the schema.
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 prerequisite by directing the agent to onebusaway_list_agencies for agencyId and explains the optional route filter. However, it does not explicitly compare when to use this tool versus alternatives such as onebusaway_get_arrivals or onebusaway_get_trip, so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onebusaway_list_agenciesList Transit AgenciesARead-onlyInspect
List all transit agencies served by this OneBusAway instance. Returns agency IDs, names, contact info, timezone, and geographic coverage center. Agency IDs are needed for onebusaway_list_routes_for_agency and onebusaway_get_vehicles.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number of transit agencies returned. |
| error | No | Present when the call failed. Absent on success. |
| notice | No | Guidance when no agencies were returned. |
| agencies | No | All agencies served by this OneBusAway instance. |
| limitExceeded | No | True if the upstream capped the agency list — some agencies were omitted. This endpoint has no pagination to retrieve them. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, and the description adds useful scope and result details: it enumerates all agencies served by the instance and lists the specific returned fields. No hidden mutation or external-world behavior is suggested, and there is no contradiction with annotations.
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?
Three compact, front-loaded sentences: purpose, returned data, and downstream usage. Each sentence adds information without redundancy.
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, read-only listing tool with an output schema, the description fully covers what an agent needs: what is listed, which fields are returned, and how the IDs feed into sibling tools. Nothing essential 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 has zero parameters, so the description has nothing to document beyond what the empty schema shows. This matches the baseline of 4 for a no-parameter tool.
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 opens with a specific verb and resource ('List all transit agencies served by this OneBusAway instance') and enumerates the returned fields (IDs, names, contact info, timezone, coverage center). This clearly distinguishes it from the sibling find/get/search tools.
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 provides a clear usage context: agency IDs from this call are needed before calling onebusaway_list_routes_for_agency and onebusaway_get_vehicles. It does not explicitly state when not to use it or mention alternatives, but the no-argument list-all purpose is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onebusaway_list_routes_for_agencyList Routes for AgencyARead-onlyInspect
List all routes operated by an agency. Returns route IDs, short names, and descriptions. Use to enumerate an agency's full service before searching for a specific route. Get agencyId values from onebusaway_list_agencies.
| Name | Required | Description | Default |
|---|---|---|---|
| agencyId | Yes | Agency ID (e.g. "1" for Metro Transit, "40" for Sound Transit). Use onebusaway_list_agencies to discover IDs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number of routes returned for this agency. |
| error | No | Present when the call failed. Absent on success. |
| notice | No | Guidance when no routes were found — verify the agency ID with onebusaway_list_agencies. |
| routes | No | All routes operated by this agency. |
| agencyId | No | Agency ID queried. |
| limitExceeded | No | True if the upstream capped the route list — some routes were omitted. This endpoint has no pagination to retrieve them. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description doesn't need to repeat that. It adds behavioral context by stating it returns all routes ('full service') and specifying the return fields (route IDs, short names, descriptions). This goes beyond annotations by clarifying the scope and output shape, which helps the agent understand what to expect. No contradictions.
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 three sentences with no wasted words. It front-loads the core action, then states return fields, then gives usage context and a cross-reference. Each sentence serves a distinct purpose, and the structure is logical and easy to scan.
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 tool with one parameter and an output schema, the description covers all essential aspects: what it does, what it returns, and how to obtain the required input. It is sufficiently complete for an agent to decide when to use it and how to invoke it correctly. The presence of an output schema means the description doesn't need to explain return details.
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 schema description for agencyId is fully descriptive (100% coverage), including examples and a pointer to onebusaway_list_agencies. The description repeats the cross-reference but does not add any new meaning beyond the schema. Since schema already covers the parameter, the description adds minimal value here, matching the baseline of 3 for high schema coverage.
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 clearly states the verb (list), the resource (routes), and the scope (per agency). It explicitly says 'List all routes operated by an agency' and distinguishes itself from searching tools by framing it as 'enumerate an agency's full service before searching for a specific route.' This differentiates it from siblings like onebusaway_find_routes and onebusaway_search_routes.
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 description provides clear guidance on when to use the tool: to enumerate an agency's full service before searching for a specific route. It also gives an explicit cross-reference for obtaining the required parameter via onebusaway_list_agencies. However, it does not explicitly name the alternative search tools (e.g., onebusaway_search_routes), leaving some inference for the agent about which sibling to use for targeted searches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onebusaway_search_routesSearch Routes by Name or NumberARead-onlyInspect
Search for routes by name or number. Returns matching routes with IDs. Use to resolve a route short name (e.g. "44") to a route ID for schedule or vehicle lookups with onebusaway_get_vehicles or onebusaway_get_schedule_for_route.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Route name or number (e.g. "44", "Link", or "RapidRide"). | |
| maxCount | No | Maximum number of results to return. A positive integer, at most 100. Defaults to 10. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The maxCount limit applied to truncated results. |
| count | No | Number of routes returned. |
| error | No | Present when the call failed. Absent on success. |
| query | No | Route name/number query sent to the API. |
| shown | No | Number of routes returned when results were truncated. |
| notice | No | Guidance when no routes matched — e.g. try onebusaway_find_routes with coordinates, or onebusaway_list_routes_for_agency. |
| routes | No | Routes matching the search query. |
| truncated | No | True when matching routes exceeded maxCount. |
| limitExceeded | No | True if more routes match than were returned; raise maxCount or refine the query to see all. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already communicates that this is a safe read operation. The description adds a useful context point about returning route IDs for follow-up lookups, but it does not disclose any additional behavioral details such as pagination, fuzzy matching, sorting, or case sensitivity. This is acceptable 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?
The description is two sentences with no filler. The core action and output are front-loaded, and the use case is stated efficiently. Every sentence 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 simple search tool with a read-only annotation, a complete output schema, and fully documented parameters, the description is nearly sufficient. It clearly connects the tool to a practical workflow. The only notable gap is the lack of guidance on how this tool relates to onebusaway_find_routes.
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 schema already documents 'query' and 'maxCount' with examples and constraints. The description echoes the query concept but does not add meaning beyond the schema. Baseline 3 is appropriate because the schema carries the parameter documentation burden.
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 clear action ('Search for routes by name or number') and resource, and clarifies the output ('matching routes with IDs'). It differentiates from get_route and schedule/vehicle tools, but does not distinguish itself from the sibling onebusaway_find_routes, which appears to be a very similar operation.
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 description explicitly says when to use the tool: to resolve a route short name like '44' to a route ID for downstream schedule or vehicle lookups. It names the intended follow-on tools, but it does not provide exclusions or explain when to prefer onebusaway_find_routes instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onebusaway_search_stopsSearch Stops by Name or CodeARead-onlyInspect
Search for stops by name or code. Returns matching stops with IDs and coordinates. Use to resolve a human-readable stop name or number to a stop ID for arrivals lookups with onebusaway_get_arrivals.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Stop name fragment or stop code (e.g. "University Way" or "75403"). | |
| maxCount | No | Maximum number of results to return. A positive integer, at most 100. Defaults to 10. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The maxCount limit applied to truncated results. |
| count | No | Number of stops returned. |
| error | No | Present when the call failed. Absent on success. |
| query | No | Search query sent to the API. |
| shown | No | Number of stops returned when results were truncated. |
| stops | No | Stops matching the search query. |
| notice | No | Guidance when no stops matched — e.g. try a different name fragment or use onebusaway_find_stops with coordinates. |
| truncated | No | True when matching stops exceeded maxCount. |
| limitExceeded | No | True if more stops match than were returned; raise maxCount or refine the query to see all. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safe-read nature is externally known. The description adds useful behavioral detail by noting the return contains IDs and coordinateschers. It does not cover edge cases like ambiguous matches or pagination behavior, but given the annotation coverage this is acceptable.
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?
Three short sentences, each earning its place: what it searches, what it returns, and why you would use it. The main action is front-loaded and there is no filler.
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 two-parameter search tool with a complete input schema, an output schema, and readOnly annotations, this description covers the essentials: matching criteria, return contents, and the typical call flow. It could add a hint about what happens when no matches are found, but nothing critical 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 100%, so both 'query' and 'maxCount' are fully documented in the schema. The description adds the semantic context that the query can be a stop name fragment or stop code, but the schema already conveys this. 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?
The description uses a specific verb ('search') targeting a clear resource ('stops') and specifies the matching criteria ('by name or code'). It further states the output ('IDs and coordinates') and the intended downstream use, making the tool's purpose unambiguous and distinguishable from the broader sibling set.
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 description explicitly states when to use the tool: to resolve a human-readable stop name or number to a stop ID for arrivals lookups with onebusaway_get_arrivals. This gives clear usage context, though it does not explicitly exclude siblings like onebusaway_find_stops.
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.
8 tool updates
- Changed
onebusaway_get_alert2 fields changed- changed
Output schema / anyOfPrevious value: -[ - { - "not": { - "required": [ - "error" - ] - }, - "required": [ - "id", - "summary", - "description", - "reason", - "severity", - "consequenceMessage", - "affects", - "consequences", - "activeWindows", - "url" - ] - }, - { - "required": [ - "error" - ] - } -]New value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "timezone", + "id", + "summary", + "description", + "reason", + "severity", + "consequenceMessage", + "affects", + "consequences", + "activeWindows", + "url" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / timezoneAdded value: +{ + "description": "Validated IANA timezone shared by every affected scope, or UTC when unresolved, invalid, absent, or conflicting.", + "type": "string" +}
- Changed
onebusaway_get_arrivals4 fields changed- changed
Output schema / anyOfPrevious value: -[ - { - "not": { - "required": [ - "error" - ] - }, - "required": [ - "stopId", - "stopName", - "currentTime", - "arrivals", - "situations", - "queriedStop", - "count", - "windowMinutes" - ] - }, - { - "required": [ - "error" - ] - } -]New value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "timezone", + "stopId", + "stopName", + "currentTime", + "arrivals", + "situations", + "queriedStop", + "count", + "windowMinutes" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / situations / items / properties / timezoneAdded value: +{ + "description": "Validated timezone shared by all affected scopes, otherwise UTC.", + "type": "string" +} - changed
Output schema / properties / situations / items / requiredPrevious value: -[ - "id", - "summary", - "description" -]New value: +[ + "id", + "timezone", + "summary", + "description" +] - added
Output schema / properties / timezoneAdded value: +{ + "description": "Validated timezone of the queried stop agency, or UTC when unavailable or invalid.", + "type": "string" +}
- Changed
onebusaway_get_block15 fields changed- added
Input schema / properties / departureBeforeSecAdded value: +{ + "description": "Exclusive departure upper bound in GTFS seconds from midnight; must exceed departureFromSec when both are supplied.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / departureFromSecAdded value: +{ + "description": "Inclusive departure lower bound in GTFS seconds from midnight; values beyond 86400 are valid.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / tripIdAdded value: +{ + "description": "Exact trip ID; omit or leave blank for no trip selector. Mutually exclusive with departure bounds.", + "type": "string" +} - changed
Output schema / anyOfPrevious value: -[ - { - "not": { - "required": [ - "error" - ] - }, - "required": [ - "blockId", - "activeServiceIds", - "inactiveServiceIds", - "trips" - ] - }, - { - "required": [ - "error" - ] - } -]New value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "blockId", + "activeServiceIds", + "inactiveServiceIds", + "trips", + "alternateConfigurations" + ] + }, + { + "required": [ + "error" + ] + } +] - changed
Output schema / properties / activeServiceIds / descriptionPrevious value: -"Service calendar IDs active for this block today."New value: +"Service IDs required active for the first returned configuration." - added
Output schema / properties / alternateConfigurationsAdded value: +{ + "description": "Remaining configurations in upstream order; empty when none exist.", + "items": { + "additionalProperties": false, + "description": "An alternative block configuration.", + "properties": { + "activeServiceIds": { + "description": "Service IDs required active for this configuration.", + "items": { + "type": "string" + }, + "type": "array" + }, + "inactiveServiceIds": { + "description": "Service IDs required inactive for this configuration.", + "items": { + "type": "string" + }, + "type": "array" + }, + "trips": { + "description": "Ordered trips in this configuration.", + "items": { + "additionalProperties": false, + "description": "A block trip.", + "properties": { + "accumulatedSlackTime": { + "description": "Accumulated layover/slack time (seconds) before this trip starts.", + "type": "number" + }, + "blockStopTimes": { + "description": "Ordered stop times.", + "items": { + "additionalProperties": false, + "description": "A stop time.", + "properties": { + "arrivalTime": { + "description": "Arrival in GTFS seconds from midnight.", + "type": "number" + }, + "departureTime": { + "description": "Departure in GTFS seconds from midnight.", + "type": "number" + }, + "dropOffType": { + "description": "GTFS drop-off type (0=regular, 1=no dropoff, 2=phone agency, 3=coordinate with driver).", + "type": "number" + }, + "pickupType": { + "description": "GTFS pickup type (0=regular, 1=no pickup, 2=phone agency, 3=coordinate with driver).", + "type": "number" + }, + "stopId": { + "description": "Stop ID.", + "type": "string" + } + }, + "required": [ + "stopId", + "arrivalTime", + "departureTime" + ], + "type": "object" + }, + "type": "array" + }, + "distanceAlongBlock": { + "description": "Cumulative distance (meters) from block start to the first stop of this trip.", + "type": "number" + }, + "tripId": { + "description": "Trip ID for follow-up onebusaway_get_trip calls.", + "type": "string" + } + }, + "required": [ + "tripId", + "distanceAlongBlock", + "accumulatedSlackTime", + "blockStopTimes" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "activeServiceIds", + "inactiveServiceIds", + "trips" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / properties / inactiveServiceIds / descriptionPrevious value: -"Service calendar IDs not active for this block today."New value: +"Service IDs required inactive for the first returned configuration." - added
Output schema / properties / noticeAdded value: +{ + "description": "Alternative-configuration guidance or an aggregate empty-selection notice.", + "type": "string" +} - added
Output schema / properties / selectionAdded value: +{ + "additionalProperties": false, + "description": "Applied selectors and aggregate trip occurrence counts across every configuration; absent without selectors.", + "properties": { + "configurationCounts": { + "description": "Preserved slot order: index 0 is the top-level first configuration; index 1 is alternateConfigurations[0], and so on, including empty slots.", + "items": { + "additionalProperties": false, + "description": "Trip occurrence counts for one configuration.", + "properties": { + "returned": { + "description": "Count after local selection.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "total": { + "description": "Count before local selection.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "total", + "returned" + ], + "type": "object" + }, + "type": "array" + }, + "departureBeforeSec": { + "description": "Exclusive departure upper bound in GTFS seconds from midnight; must exceed departureFromSec when both are supplied.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "departureFromSec": { + "description": "Inclusive departure lower bound in GTFS seconds from midnight; values beyond 86400 are valid.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "returned": { + "description": "Count after local selection.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "total": { + "description": "Count before local selection.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "tripId": { + "description": "Exact trip ID; omit or leave blank for no trip selector. Mutually exclusive with departure bounds.", + "type": "string" + } + }, + "required": [ + "total", + "returned", + "configurationCounts" + ], + "type": "object" +} - changed
Output schema / properties / trips / descriptionPrevious value: -"All trips in this block in order."New value: +"All trips in the first returned configuration, in order." - changed
Output schema / properties / trips / items / descriptionPrevious value: -"A trip in this vehicle block."New value: +"A block trip." - changed
Output schema / properties / trips / items / properties / blockStopTimes / descriptionPrevious value: -"Ordered stop times for this trip."New value: +"Ordered stop times." - changed
Output schema / properties / trips / items / properties / blockStopTimes / items / descriptionPrevious value: -"A scheduled stop time within this trip."New value: +"A stop time." - changed
Output schema / properties / trips / items / properties / blockStopTimes / items / properties / arrivalTime / descriptionPrevious value: -"Scheduled arrival time as seconds from midnight (GTFS format)."New value: +"Arrival in GTFS seconds from midnight." - changed
Output schema / properties / trips / items / properties / blockStopTimes / items / properties / departureTime / descriptionPrevious value: -"Scheduled departure time as seconds from midnight (GTFS format)."New value: +"Departure in GTFS seconds from midnight."
- Changed
onebusaway_get_schedule_for_route7 fields changed- added
Input schema / properties / departureBeforeSecAdded value: +{ + "description": "Exclusive departure upper bound in GTFS seconds from midnight; must exceed departureFromSec when both are supplied.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / departureFromSecAdded value: +{ + "description": "Inclusive departure lower bound in GTFS seconds from midnight; values beyond 86400 are valid.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / tripIdAdded value: +{ + "description": "Exact trip ID; omit or leave blank for no trip selector. Mutually exclusive with departure bounds.", + "type": "string" +} - changed
Output schema / anyOfPrevious value: -[ - { - "not": { - "required": [ - "error" - ] - }, - "required": [ - "routeId", - "routeShortName", - "serviceDateMs", - "trips", - "queriedRoute", - "tripCount" - ] - }, - { - "required": [ - "error" - ] - } -]New value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "timezone", + "routeId", + "routeShortName", + "serviceDateMs", + "trips", + "queriedRoute", + "tripCount" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / selectionAdded value: +{ + "additionalProperties": false, + "description": "Applied selectors and trip counts before and after local selection; absent without selectors.", + "properties": { + "departureBeforeSec": { + "description": "Exclusive departure upper bound in GTFS seconds from midnight; must exceed departureFromSec when both are supplied.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "departureFromSec": { + "description": "Inclusive departure lower bound in GTFS seconds from midnight; values beyond 86400 are valid.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "returned": { + "description": "Count after local selection.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "total": { + "description": "Count before local selection.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "tripId": { + "description": "Exact trip ID; omit or leave blank for no trip selector. Mutually exclusive with departure bounds.", + "type": "string" + } + }, + "required": [ + "total", + "returned" + ], + "type": "object" +} - changed
Output schema / properties / serviceDateMs / descriptionPrevious value: -"Service date as Unix milliseconds."New value: +"Unchanged upstream service-date marker (scheduleDate) as Unix milliseconds, identifying the route schedule service day." - added
Output schema / properties / timezoneAdded value: +{ + "description": "Validated timezone of the referenced route agency, or UTC when unavailable or invalid.", + "type": "string" +}
- Changed
onebusaway_get_schedule_for_stop7 fields changed- added
Input schema / properties / departureBeforeMsAdded value: +{ + "description": "Exclusive departure upper bound in Unix milliseconds; must exceed departureFromMs when both are supplied.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / departureFromMsAdded value: +{ + "description": "Inclusive departure lower bound in Unix milliseconds.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / routeIdAdded value: +{ + "description": "Exact route ID, combined with departure bounds; omit or leave blank for all routes.", + "type": "string" +} - changed
Output schema / anyOfPrevious value: -[ - { - "not": { - "required": [ - "error" - ] - }, - "required": [ - "stopId", - "stopName", - "serviceDateMs", - "routes", - "queriedStop", - "routeCount" - ] - }, - { - "required": [ - "error" - ] - } -]New value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "timezone", + "stopId", + "stopName", + "serviceDateMs", + "routes", + "queriedStop", + "routeCount" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / selectionAdded value: +{ + "additionalProperties": false, + "description": "Applied selectors and departure counts before and after local selection; absent without selectors.", + "properties": { + "departureBeforeMs": { + "description": "Exclusive departure upper bound in Unix milliseconds; must exceed departureFromMs when both are supplied.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "departureFromMs": { + "description": "Inclusive departure lower bound in Unix milliseconds.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "returned": { + "description": "Count after local selection.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "routeId": { + "description": "Exact route ID, combined with departure bounds; omit or leave blank for all routes.", + "type": "string" + }, + "total": { + "description": "Count before local selection.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "total", + "returned" + ], + "type": "object" +} - changed
Output schema / properties / serviceDateMs / descriptionPrevious value: -"Service date as Unix milliseconds (start of service day)."New value: +"Unchanged upstream schedule-date marker in Unix milliseconds: query time when date is omitted or blank, instance-local midnight for an explicit date." - added
Output schema / properties / timezoneAdded value: +{ + "description": "Validated timezone of the queried stop agency, or UTC when unavailable or invalid.", + "type": "string" +}
- Changed
onebusaway_get_stop_context4 fields changed- changed
Output schema / anyOfPrevious value: -[ - { - "not": { - "required": [ - "error" - ] - }, - "required": [ - "stop", - "currentTime", - "arrivals", - "alerts", - "queriedStop", - "windowMinutes" - ] - }, - { - "required": [ - "error" - ] - } -]New value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "timezone", + "stop", + "currentTime", + "arrivals", + "alerts", + "queriedStop", + "windowMinutes" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / alerts / items / properties / timezoneAdded value: +{ + "description": "Validated IANA timezone shared by every affected scope, or UTC when unresolved, invalid, absent, or conflicting.", + "type": "string" +} - changed
Output schema / properties / alerts / items / requiredPrevious value: -[ - "id", - "summary", - "description", - "reason", - "severity", - "consequenceMessage", - "affects", - "consequences", - "activeWindows", - "url" -]New value: +[ + "timezone", + "id", + "summary", + "description", + "reason", + "severity", + "consequenceMessage", + "affects", + "consequences", + "activeWindows", + "url" +] - added
Output schema / properties / timezoneAdded value: +{ + "description": "Validated timezone of the queried stop agency, or UTC when unavailable or invalid.", + "type": "string" +}
- Changed
onebusaway_get_trip2 fields changed- changed
Output schema / anyOfPrevious value: -[ - { - "not": { - "required": [ - "error" - ] - }, - "required": [ - "tripId", - "routeShortName", - "tripHeadsign", - "blockId", - "status", - "schedule", - "situations" - ] - }, - { - "required": [ - "error" - ] - } -]New value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "timezone", + "tripId", + "routeShortName", + "tripHeadsign", + "blockId", + "status", + "schedule", + "situations" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / timezoneAdded value: +{ + "description": "Validated timezone of the trip route agency, or UTC when unavailable or invalid.", + "type": "string" +}
- Changed
onebusaway_get_vehicles7 fields changed- changed
Output schema / anyOfPrevious value: -[ - { - "not": { - "required": [ - "error" - ] - }, - "required": [ - "vehicles", - "limitExceeded", - "agencyId", - "count" - ] - }, - { - "required": [ - "error" - ] - } -]New value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "timezone", + "omittedWithoutPosition", + "vehicles", + "limitExceeded", + "agencyId", + "count" + ] + }, + { + "required": [ + "error" + ] + } +] - changed
Output schema / properties / notice / descriptionPrevious value: -"Guidance when no vehicles were found — e.g. the route may not be currently active, or the agency may not have real-time data."New value: +"Independent notices for records omitted without position, upstream truncation, and an empty returned list." - added
Output schema / properties / omittedWithoutPositionAdded value: +{ + "description": "Agency-wide records omitted because latitude or longitude is missing, counted before route filtering.", + "type": "number" +} - added
Output schema / properties / omittedWithoutPositionOnRouteAdded value: +{ + "description": "Omitted records whose canonical current trip resolves to the requested route; present only with a route filter.", + "type": "number" +} - added
Output schema / properties / timezoneAdded value: +{ + "description": "Validated timezone of the requested agency, or UTC when unavailable or invalid.", + "type": "string" +} - changed
Output schema / properties / vehicles / items / properties / orientation / descriptionPrevious value: -"Heading in degrees (0=north, 90=east), or null."New value: +"Counter-clockwise degrees from east (0=east, 90=north, 180=west, 270=south), not a compass bearing; null if unavailable." - changed
Output schema / properties / vehicles / items / properties / tripId / descriptionPrevious value: -"Current trip ID, or null if not on a trip."New value: +"Active trip ID, falling back to the vehicle trip ID when absent; null if neither is available. All trip metadata resolves only from this ID."
5 tool updates
- Changed
onebusaway_get_arrivals10 fields changed- changed
Input schema / properties / minutesAfter / descriptionPrevious value: -"Include arrivals expected within the next N minutes. Defaults to 35."New value: +"Include arrivals expected within the next N minutes — an integer from 0 to 240. Defaults to 35. For a longer horizon, use onebusaway_get_schedule_for_stop." - added
Input schema / properties / minutesAfter / maximumAdded value: +240 - added
Input schema / properties / minutesAfter / minimumAdded value: +0 - changed
Input schema / properties / minutesAfter / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / minutesBefore / descriptionPrevious value: -"Include arrivals that departed up to this many minutes ago. Defaults to 5."New value: +"Include arrivals that departed up to this many minutes ago — an integer from 0 to 60. Defaults to 5." - added
Input schema / properties / minutesBefore / maximumAdded value: +60 - added
Input schema / properties / minutesBefore / minimumAdded value: +0 - changed
Input schema / properties / minutesBefore / typePrevious value: -"number"New value: +"integer" - changed
Output schema / properties / notice / descriptionPrevious value: -"Guidance when no arrivals were found — e.g. try expanding the time window or check for service alerts."New value: +"Guidance when no arrivals were found — widen minutesAfter, or check onebusaway_get_schedule_for_stop for scheduled service." - changed
Output schema / properties / situations / descriptionPrevious value: -"Active service alerts referenced by arrivals at this stop."New value: +"Active service alerts at this stop — those attached to the stop itself and those referenced by its arrivals, each listed once."
- Changed
onebusaway_get_schedule_for_route3 fields changed- added
Input schema / properties / date / anyOfAdded value: +[ + { + "const": "", + "type": "string" + }, + { + "description": "A real calendar date in YYYY-MM-DD form (e.g. \"2026-05-23\").", + "format": "date", + "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])))$", + "type": "string" + } +] - changed
Input schema / properties / date / descriptionPrevious value: -"ISO 8601 date (e.g. \"2026-05-23\"). Defaults to today."New value: +"Service date as YYYY-MM-DD (e.g. \"2026-05-23\"). Must be a real calendar date. Omit or leave blank for today." - removed
Input schema / properties / date / typeRemoved value: -"string"
- Changed
onebusaway_get_schedule_for_stop3 fields changed- added
Input schema / properties / date / anyOfAdded value: +[ + { + "const": "", + "type": "string" + }, + { + "description": "A real calendar date in YYYY-MM-DD form (e.g. \"2026-05-23\").", + "format": "date", + "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])))$", + "type": "string" + } +] - changed
Input schema / properties / date / descriptionPrevious value: -"ISO 8601 date (e.g. \"2026-05-23\"). Defaults to today in the agency's timezone."New value: +"Service date as YYYY-MM-DD (e.g. \"2026-05-23\"). Must be a real calendar date. Omit or leave blank for today in the agency's timezone." - removed
Input schema / properties / date / typeRemoved value: -"string"
- Added
onebusaway_get_stop_context - Changed
onebusaway_get_trip4 fields changed- changed
Input schema / properties / serviceDateMs / descriptionPrevious value: -"Service date as Unix milliseconds (midnight local time). Only needed for trips from a previous service day. Omit to use today."New value: +"Service date as Unix milliseconds (midnight local time) — a non-negative integer. Only needed for trips from a previous service day. Omit to use today." - added
Input schema / properties / serviceDateMs / maximumAdded value: +9007199254740991 - added
Input schema / properties / serviceDateMs / minimumAdded value: +0 - changed
Input schema / properties / serviceDateMs / typePrevious value: -"number"New value: +"integer"
15 tool updates
- Changed
onebusaway_find_routes6 fields changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode."New value: +"Machine-readable failure mode. Declared by this tool: `rate_limited`: No upstream request slot opened within the queue wait cap, or OneBusAway returned a rate limit response. Other values are possible when a failure originates below the handler." - added
Output schema / properties / error / properties / data / properties / reason / examplesAdded value: +[ + "rate_limited" +] - removed
Output schema / properties / routes / items / properties / color / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / routes / items / properties / color / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / routes / items / properties / url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / routes / items / properties / url / typeAdded value: +[ + "string", + "null" +]
- Changed
onebusaway_find_stops2 fields changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode."New value: +"Machine-readable failure mode. Declared by this tool: `rate_limited`: No upstream request slot opened within the queue wait cap, or OneBusAway returned a rate limit response. Other values are possible when a failure originates below the handler." - added
Output schema / properties / error / properties / data / properties / reason / examplesAdded value: +[ + "rate_limited" +]
- Changed
onebusaway_get_alert12 fields changed- removed
Output schema / properties / consequenceMessage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / consequenceMessage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / description / typeAdded value: +[ + "string", + "null" +] - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `situation_not_found`: Situation ID does not exist on this instance. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `situation_not_found`: Situation ID does not exist on this instance. `rate_limited`: No upstream request slot opened within the queue wait cap, or OneBusAway returned a rate limit response. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "situation_not_found" -]New value: +[ + "situation_not_found", + "rate_limited" +] - removed
Output schema / properties / reason / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / reason / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / severity / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / severity / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / url / typeAdded value: +[ + "string", + "null" +]
- Changed
onebusaway_get_arrivals9 fields changed- removed
Output schema / properties / arrivals / items / properties / predictedArrivalTime / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / arrivals / items / properties / predictedArrivalTime / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / arrivals / items / properties / stopsAway / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / arrivals / items / properties / stopsAway / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / arrivals / items / properties / vehicleId / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / arrivals / items / properties / vehicleId / typeAdded value: +[ + "string", + "null" +] - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `stop_not_found`: Stop ID does not exist on this instance. `rate_limited`: API returned a rate limit response. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `stop_not_found`: Stop ID does not exist on this instance. `rate_limited`: No upstream request slot opened within the queue wait cap, or OneBusAway returned a rate limit response. Other values are possible when a failure originates below the handler." - removed
Output schema / properties / situations / items / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / situations / items / properties / description / typeAdded value: +[ + "string", + "null" +]
- Changed
onebusaway_get_block2 fields changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `block_not_found`: Block ID does not exist on this instance. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `block_not_found`: Block ID does not exist on this instance. `rate_limited`: No upstream request slot opened within the queue wait cap, or OneBusAway returned a rate limit response. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "block_not_found" -]New value: +[ + "block_not_found", + "rate_limited" +]
- Changed
onebusaway_get_route6 fields changed- removed
Output schema / properties / color / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / color / typeAdded value: +[ + "string", + "null" +] - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `route_not_found`: Route ID does not exist on this instance. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `route_not_found`: Route ID does not exist on this instance. `rate_limited`: No upstream request slot opened within the queue wait cap, or OneBusAway returned a rate limit response. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "route_not_found" -]New value: +[ + "route_not_found", + "rate_limited" +] - removed
Output schema / properties / url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / url / typeAdded value: +[ + "string", + "null" +]
- Changed
onebusaway_get_schedule_for_route2 fields changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `route_not_found`: Route ID does not exist on this instance. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `route_not_found`: Route ID does not exist on this instance. `rate_limited`: No upstream request slot opened within the queue wait cap, or OneBusAway returned a rate limit response. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "route_not_found" -]New value: +[ + "route_not_found", + "rate_limited" +]
- Changed
onebusaway_get_schedule_for_stop2 fields changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `stop_not_found`: Stop ID does not exist on this instance. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `stop_not_found`: Stop ID does not exist on this instance. `rate_limited`: No upstream request slot opened within the queue wait cap, or OneBusAway returned a rate limit response. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "stop_not_found" -]New value: +[ + "stop_not_found", + "rate_limited" +]
- Changed
onebusaway_get_stop2 fields changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `stop_not_found`: Stop ID does not exist on this instance. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `stop_not_found`: Stop ID does not exist on this instance. `rate_limited`: No upstream request slot opened within the queue wait cap, or OneBusAway returned a rate limit response. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "stop_not_found" -]New value: +[ + "stop_not_found", + "rate_limited" +]
- Changed
onebusaway_get_trip10 fields changed- removed
Output schema / properties / blockId / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / blockId / typeAdded value: +[ + "string", + "null" +] - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `trip_not_found`: Trip ID not found or not active for the service date. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `trip_not_found`: Trip ID not found or not active for the service date. `rate_limited`: No upstream request slot opened within the queue wait cap, or OneBusAway returned a rate limit response. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "trip_not_found" -]New value: +[ + "trip_not_found", + "rate_limited" +] - removed
Output schema / properties / status / properties / closestStop / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / status / properties / closestStop / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / status / properties / nextStop / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / status / properties / nextStop / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / status / properties / vehicleId / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / status / properties / vehicleId / typeAdded value: +[ + "string", + "null" +]
- Changed
onebusaway_get_vehicles16 fields changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `agency_not_found`: Agency ID does not exist on this instance. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `agency_not_found`: Agency ID does not exist on this instance. `rate_limited`: No upstream request slot opened within the queue wait cap, or OneBusAway returned a rate limit response. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "agency_not_found" -]New value: +[ + "agency_not_found", + "rate_limited" +] - removed
Output schema / properties / vehicles / items / properties / nextStop / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / vehicles / items / properties / nextStop / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / vehicles / items / properties / orientation / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / vehicles / items / properties / orientation / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / vehicles / items / properties / routeId / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / vehicles / items / properties / routeId / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / vehicles / items / properties / routeShortName / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / vehicles / items / properties / routeShortName / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / vehicles / items / properties / scheduleDeviation / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / vehicles / items / properties / scheduleDeviation / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / vehicles / items / properties / tripHeadsign / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / vehicles / items / properties / tripHeadsign / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / vehicles / items / properties / tripId / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / vehicles / items / properties / tripId / typeAdded value: +[ + "string", + "null" +]
- Changed
onebusaway_list_agencies4 fields changed- removed
Output schema / properties / agencies / items / properties / phone / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / agencies / items / properties / phone / typeAdded value: +[ + "string", + "null" +] - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode."New value: +"Machine-readable failure mode. Declared by this tool: `rate_limited`: No upstream request slot opened within the queue wait cap, or OneBusAway returned a rate limit response. Other values are possible when a failure originates below the handler." - added
Output schema / properties / error / properties / data / properties / reason / examplesAdded value: +[ + "rate_limited" +]
- Changed
onebusaway_list_routes_for_agency6 fields changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `agency_not_found`: Agency ID does not exist on this instance. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `agency_not_found`: Agency ID does not exist on this instance. `rate_limited`: No upstream request slot opened within the queue wait cap, or OneBusAway returned a rate limit response. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "agency_not_found" -]New value: +[ + "agency_not_found", + "rate_limited" +] - removed
Output schema / properties / routes / items / properties / color / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / routes / items / properties / color / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / routes / items / properties / url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / routes / items / properties / url / typeAdded value: +[ + "string", + "null" +]
- Changed
onebusaway_search_routes2 fields changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `endpoint_unavailable`: The search/route endpoint returns 404 on this OBA instance (e.g. Puget Sound). Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `endpoint_unavailable`: The search/route endpoint returns 404 on this OBA instance (e.g. Puget Sound). `rate_limited`: No upstream request slot opened within the queue wait cap, or OneBusAway returned a rate limit response. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "endpoint_unavailable" -]New value: +[ + "endpoint_unavailable", + "rate_limited" +]
- Changed
onebusaway_search_stops2 fields changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode."New value: +"Machine-readable failure mode. Declared by this tool: `rate_limited`: No upstream request slot opened within the queue wait cap, or OneBusAway returned a rate limit response. Other values are possible when a failure originates below the handler." - added
Output schema / properties / error / properties / data / properties / reason / examplesAdded value: +[ + "rate_limited" +]
15 tool updates
- Changed
onebusaway_find_routes6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "routes", + "limitExceeded", + "count" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode.", + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "routes", - "limitExceeded", - "count" -]
- Changed
onebusaway_find_stops6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "stops", + "limitExceeded", + "count" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode.", + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "stops", - "limitExceeded", - "count" -]
- Changed
onebusaway_get_alert6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "id", + "summary", + "description", + "reason", + "severity", + "consequenceMessage", + "affects", + "consequences", + "activeWindows", + "url" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `situation_not_found`: Situation ID does not exist on this instance. Other values are possible when a failure originates below the handler.", + "examples": [ + "situation_not_found" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "id", - "summary", - "description", - "reason", - "severity", - "consequenceMessage", - "affects", - "consequences", - "activeWindows", - "url" -]
- Changed
onebusaway_get_arrivals6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "stopId", + "stopName", + "currentTime", + "arrivals", + "situations", + "queriedStop", + "count", + "windowMinutes" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `stop_not_found`: Stop ID does not exist on this instance. `rate_limited`: API returned a rate limit response. Other values are possible when a failure originates below the handler.", + "examples": [ + "stop_not_found", + "rate_limited" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "stopId", - "stopName", - "currentTime", - "arrivals", - "situations", - "queriedStop", - "count", - "windowMinutes" -]
- Changed
onebusaway_get_block6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "blockId", + "activeServiceIds", + "inactiveServiceIds", + "trips" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `block_not_found`: Block ID does not exist on this instance. Other values are possible when a failure originates below the handler.", + "examples": [ + "block_not_found" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "blockId", - "activeServiceIds", - "inactiveServiceIds", - "trips" -]
- Changed
onebusaway_get_route6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "id", + "shortName", + "longName", + "description", + "agencyId", + "agencyName", + "type", + "color", + "url" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `route_not_found`: Route ID does not exist on this instance. Other values are possible when a failure originates below the handler.", + "examples": [ + "route_not_found" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "id", - "shortName", - "longName", - "description", - "agencyId", - "agencyName", - "type", - "color", - "url" -]
- Changed
onebusaway_get_schedule_for_route6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "routeId", + "routeShortName", + "serviceDateMs", + "trips", + "queriedRoute", + "tripCount" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `route_not_found`: Route ID does not exist on this instance. Other values are possible when a failure originates below the handler.", + "examples": [ + "route_not_found" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "routeId", - "routeShortName", - "serviceDateMs", - "trips", - "queriedRoute", - "tripCount" -]
- Changed
onebusaway_get_schedule_for_stop6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "stopId", + "stopName", + "serviceDateMs", + "routes", + "queriedStop", + "routeCount" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `stop_not_found`: Stop ID does not exist on this instance. Other values are possible when a failure originates below the handler.", + "examples": [ + "stop_not_found" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "stopId", - "stopName", - "serviceDateMs", - "routes", - "queriedStop", - "routeCount" -]
- Changed
onebusaway_get_stop6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "id", + "code", + "name", + "lat", + "lon", + "direction", + "routeIds", + "wheelchairBoarding" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `stop_not_found`: Stop ID does not exist on this instance. Other values are possible when a failure originates below the handler.", + "examples": [ + "stop_not_found" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "id", - "code", - "name", - "lat", - "lon", - "direction", - "routeIds", - "wheelchairBoarding" -]
- Changed
onebusaway_get_trip6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "tripId", + "routeShortName", + "tripHeadsign", + "blockId", + "status", + "schedule", + "situations" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `trip_not_found`: Trip ID not found or not active for the service date. Other values are possible when a failure originates below the handler.", + "examples": [ + "trip_not_found" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "tripId", - "routeShortName", - "tripHeadsign", - "blockId", - "status", - "schedule", - "situations" -]
- Changed
onebusaway_get_vehicles6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "vehicles", + "limitExceeded", + "agencyId", + "count" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `agency_not_found`: Agency ID does not exist on this instance. Other values are possible when a failure originates below the handler.", + "examples": [ + "agency_not_found" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "vehicles", - "limitExceeded", - "agencyId", - "count" -]
- Changed
onebusaway_list_agencies6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "agencies", + "limitExceeded", + "count" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode.", + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "agencies", - "limitExceeded", - "count" -]
- Changed
onebusaway_list_routes_for_agency6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "routes", + "limitExceeded", + "agencyId", + "count" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `agency_not_found`: Agency ID does not exist on this instance. Other values are possible when a failure originates below the handler.", + "examples": [ + "agency_not_found" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "routes", - "limitExceeded", - "agencyId", - "count" -]
- Changed
onebusaway_search_routes9 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "routes", + "limitExceeded", + "query", + "count" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / capAdded value: +{ + "description": "The maxCount limit applied to truncated results.", + "type": "number" +} - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `endpoint_unavailable`: The search/route endpoint returns 404 on this OBA instance (e.g. Puget Sound). Other values are possible when a failure originates below the handler.", + "examples": [ + "endpoint_unavailable" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - added
Output schema / properties / shownAdded value: +{ + "description": "Number of routes returned when results were truncated.", + "type": "number" +} - added
Output schema / properties / truncatedAdded value: +{ + "description": "True when matching routes exceeded maxCount.", + "type": "boolean" +} - removed
Output schema / requiredRemoved value: -[ - "routes", - "limitExceeded", - "query", - "count" -]
- Changed
onebusaway_search_stops9 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "stops", + "limitExceeded", + "query", + "count" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / capAdded value: +{ + "description": "The maxCount limit applied to truncated results.", + "type": "number" +} - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode.", + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - added
Output schema / properties / shownAdded value: +{ + "description": "Number of stops returned when results were truncated.", + "type": "number" +} - added
Output schema / properties / truncatedAdded value: +{ + "description": "True when matching stops exceeded maxCount.", + "type": "boolean" +} - removed
Output schema / requiredRemoved value: -[ - "stops", - "limitExceeded", - "query", - "count" -]
7 tool updates
- Changed
onebusaway_find_routes13 fields changed- changed
Input schema / properties / lat / descriptionPrevious value: -"Latitude of the search center."New value: +"Latitude of the search center, in [-90, 90]." - added
Input schema / properties / lat / maximumAdded value: +90 - added
Input schema / properties / lat / minimumAdded value: +-90 - added
Input schema / properties / latSpanAdded value: +{ + "description": "Optional bounding-box height in degrees, as an alternative to radius. Takes effect only when lonSpan is also set, in which case radius is ignored.", + "exclusiveMinimum": 0, + "type": "number" +} - changed
Input schema / properties / lon / descriptionPrevious value: -"Longitude of the search center."New value: +"Longitude of the search center, in [-180, 180]." - added
Input schema / properties / lon / maximumAdded value: +180 - added
Input schema / properties / lon / minimumAdded value: +-180 - added
Input schema / properties / lonSpanAdded value: +{ + "description": "Optional bounding-box width in degrees, as an alternative to radius. Takes effect only when latSpan is also set, in which case radius is ignored.", + "exclusiveMinimum": 0, + "type": "number" +} - changed
Input schema / properties / radius / descriptionPrevious value: -"Search radius in meters. Defaults to 500m."New value: +"Search radius in meters. Must be positive; capped at 1600m. Defaults to 500m. Ignored when latSpan and lonSpan are both set." - added
Input schema / properties / radius / exclusiveMinimumAdded value: +0 - added
Input schema / properties / radius / maximumAdded value: +1600 - added
Output schema / properties / limitExceededAdded value: +{ + "description": "True if more routes exist beyond the returned set; narrow the radius or set latSpan/lonSpan to see all.", + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "routes", - "count" -]New value: +[ + "routes", + "limitExceeded", + "count" +]
- Changed
onebusaway_find_stops9 fields changed- changed
Input schema / properties / lat / descriptionPrevious value: -"Latitude of the search center."New value: +"Latitude of the search center, in [-90, 90]." - added
Input schema / properties / lat / maximumAdded value: +90 - added
Input schema / properties / lat / minimumAdded value: +-90 - changed
Input schema / properties / lon / descriptionPrevious value: -"Longitude of the search center."New value: +"Longitude of the search center, in [-180, 180]." - added
Input schema / properties / lon / maximumAdded value: +180 - added
Input schema / properties / lon / minimumAdded value: +-180 - changed
Input schema / properties / radius / descriptionPrevious value: -"Search radius in meters. Defaults to 300m. Max ~1600m before results degrade."New value: +"Search radius in meters. Must be positive; capped at 1600m, beyond which results degrade. Defaults to 300m." - added
Input schema / properties / radius / exclusiveMinimumAdded value: +0 - added
Input schema / properties / radius / maximumAdded value: +1600
- Changed
onebusaway_get_vehicles2 fields changed- added
Output schema / properties / limitExceededAdded value: +{ + "description": "True if the upstream capped the vehicle list — some vehicles were omitted. This endpoint has no pagination to retrieve them.", + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "vehicles", - "agencyId", - "count" -]New value: +[ + "vehicles", + "limitExceeded", + "agencyId", + "count" +]
- Changed
onebusaway_list_agencies2 fields changed- added
Output schema / properties / limitExceededAdded value: +{ + "description": "True if the upstream capped the agency list — some agencies were omitted. This endpoint has no pagination to retrieve them.", + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "agencies", - "count" -]New value: +[ + "agencies", + "limitExceeded", + "count" +]
- Changed
onebusaway_list_routes_for_agency2 fields changed- added
Output schema / properties / limitExceededAdded value: +{ + "description": "True if the upstream capped the route list — some routes were omitted. This endpoint has no pagination to retrieve them.", + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "routes", - "agencyId", - "count" -]New value: +[ + "routes", + "limitExceeded", + "agencyId", + "count" +]
- Changed
onebusaway_search_routes6 fields changed- changed
Input schema / properties / maxCount / descriptionPrevious value: -"Maximum number of results to return. Defaults to 10."New value: +"Maximum number of results to return. A positive integer, at most 100. Defaults to 10." - added
Input schema / properties / maxCount / exclusiveMinimumAdded value: +0 - added
Input schema / properties / maxCount / maximumAdded value: +100 - changed
Input schema / properties / maxCount / typePrevious value: -"number"New value: +"integer" - added
Output schema / properties / limitExceededAdded value: +{ + "description": "True if more routes match than were returned; raise maxCount or refine the query to see all.", + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "routes", - "query", - "count" -]New value: +[ + "routes", + "limitExceeded", + "query", + "count" +]
- Changed
onebusaway_search_stops6 fields changed- changed
Input schema / properties / maxCount / descriptionPrevious value: -"Maximum number of results to return. Defaults to 10."New value: +"Maximum number of results to return. A positive integer, at most 100. Defaults to 10." - added
Input schema / properties / maxCount / exclusiveMinimumAdded value: +0 - added
Input schema / properties / maxCount / maximumAdded value: +100 - changed
Input schema / properties / maxCount / typePrevious value: -"number"New value: +"integer" - added
Output schema / properties / limitExceededAdded value: +{ + "description": "True if more stops match than were returned; raise maxCount or refine the query to see all.", + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "stops", - "query", - "count" -]New value: +[ + "stops", + "limitExceeded", + "query", + "count" +]
1 tool update
- Changed
onebusaway_get_trip2 fields changed- added
Output schema / properties / blockIdAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Block ID grouping this trip with the others the same vehicle runs back-to-back. Pass to onebusaway_get_block for the full block schedule. Null when the trip has no block." +} - changed
Output schema / requiredPrevious value: -[ - "tripId", - "routeShortName", - "tripHeadsign", - "status", - "schedule", - "situations" -]New value: +[ + "tripId", + "routeShortName", + "tripHeadsign", + "blockId", + "status", + "schedule", + "situations" +]
3 tool updates
- Added
onebusaway_get_alert - Added
onebusaway_get_block - Changed
onebusaway_list_routes_for_agency1 field changed- added
Output schema / properties / noticeAdded value: +{ + "description": "Guidance when no routes were found — verify the agency ID with onebusaway_list_agencies.", + "type": "string" +}
10 tool updates
- Changed
onebusaway_find_routes4 fields changed- added
Output schema / properties / countAdded value: +{ + "description": "Number of routes returned.", + "type": "number" +} - added
Output schema / properties / noticeAdded value: +{ + "description": "Guidance when no routes matched — e.g. try a larger radius or different query.", + "type": "string" +} - added
Output schema / properties / queryAdded value: +{ + "description": "Route name/number filter applied to the search, if any.", + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "routes" -]New value: +[ + "routes", + "count" +]
- Changed
onebusaway_find_stops4 fields changed- added
Output schema / properties / countAdded value: +{ + "description": "Number of stops returned.", + "type": "number" +} - added
Output schema / properties / noticeAdded value: +{ + "description": "Guidance when results are empty or truncated — e.g. how to narrow the radius or verify the stop code.", + "type": "string" +} - added
Output schema / properties / queryAdded value: +{ + "description": "Stop code filter applied to the search, if any.", + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "stops", - "limitExceeded" -]New value: +[ + "stops", + "limitExceeded", + "count" +]
- Changed
onebusaway_get_arrivals5 fields changed- added
Output schema / properties / countAdded value: +{ + "description": "Number of arrivals in the time window.", + "type": "number" +} - added
Output schema / properties / noticeAdded value: +{ + "description": "Guidance when no arrivals were found — e.g. try expanding the time window or check for service alerts.", + "type": "string" +} - added
Output schema / properties / queriedStopAdded value: +{ + "description": "Stop ID queried.", + "type": "string" +} - added
Output schema / properties / windowMinutesAdded value: +{ + "additionalProperties": false, + "description": "Time window used for the arrivals query.", + "properties": { + "after": { + "description": "Minutes after current time included.", + "type": "number" + }, + "before": { + "description": "Minutes before current time included.", + "type": "number" + } + }, + "required": [ + "before", + "after" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "stopId", - "stopName", - "currentTime", - "arrivals", - "situations" -]New value: +[ + "stopId", + "stopName", + "currentTime", + "arrivals", + "situations", + "queriedStop", + "count", + "windowMinutes" +]
- Changed
onebusaway_get_schedule_for_route5 fields changed- added
Output schema / properties / dateAdded value: +{ + "description": "Date parameter used for the schedule request, if specified.", + "type": "string" +} - added
Output schema / properties / noticeAdded value: +{ + "description": "Guidance when no trips were found — e.g. no service on weekends or holiday schedule in effect.", + "type": "string" +} - added
Output schema / properties / queriedRouteAdded value: +{ + "description": "Route ID queried.", + "type": "string" +} - added
Output schema / properties / tripCountAdded value: +{ + "description": "Number of trips for this route on this date.", + "type": "number" +} - changed
Output schema / requiredPrevious value: -[ - "routeId", - "routeShortName", - "serviceDateMs", - "trips" -]New value: +[ + "routeId", + "routeShortName", + "serviceDateMs", + "trips", + "queriedRoute", + "tripCount" +]
- Changed
onebusaway_get_schedule_for_stop5 fields changed- added
Output schema / properties / dateAdded value: +{ + "description": "Date parameter used for the schedule request, if specified.", + "type": "string" +} - added
Output schema / properties / noticeAdded value: +{ + "description": "Guidance when no routes were found — e.g. no service on weekends or holiday schedule in effect.", + "type": "string" +} - added
Output schema / properties / queriedStopAdded value: +{ + "description": "Stop ID queried.", + "type": "string" +} - added
Output schema / properties / routeCountAdded value: +{ + "description": "Number of routes with departures from this stop on this date.", + "type": "number" +} - changed
Output schema / requiredPrevious value: -[ - "stopId", - "stopName", - "serviceDateMs", - "routes" -]New value: +[ + "stopId", + "stopName", + "serviceDateMs", + "routes", + "queriedStop", + "routeCount" +]
- Changed
onebusaway_get_vehicles5 fields changed- added
Output schema / properties / agencyIdAdded value: +{ + "description": "Agency ID queried.", + "type": "string" +} - added
Output schema / properties / countAdded value: +{ + "description": "Number of vehicles returned after any route filter.", + "type": "number" +} - added
Output schema / properties / noticeAdded value: +{ + "description": "Guidance when no vehicles were found — e.g. the route may not be currently active, or the agency may not have real-time data.", + "type": "string" +} - added
Output schema / properties / routeIdAdded value: +{ + "description": "Route ID filter applied client-side, if any.", + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "vehicles" -]New value: +[ + "vehicles", + "agencyId", + "count" +]
- Changed
onebusaway_list_agencies3 fields changed- added
Output schema / properties / countAdded value: +{ + "description": "Number of transit agencies returned.", + "type": "number" +} - added
Output schema / properties / noticeAdded value: +{ + "description": "Guidance when no agencies were returned.", + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "agencies" -]New value: +[ + "agencies", + "count" +]
- Changed
onebusaway_list_routes_for_agency3 fields changed- added
Output schema / properties / agencyIdAdded value: +{ + "description": "Agency ID queried.", + "type": "string" +} - added
Output schema / properties / countAdded value: +{ + "description": "Number of routes returned for this agency.", + "type": "number" +} - changed
Output schema / requiredPrevious value: -[ - "routes" -]New value: +[ + "routes", + "agencyId", + "count" +]
- Changed
onebusaway_search_routes4 fields changed- added
Output schema / properties / countAdded value: +{ + "description": "Number of routes returned.", + "type": "number" +} - added
Output schema / properties / noticeAdded value: +{ + "description": "Guidance when no routes matched — e.g. try onebusaway_find_routes with coordinates, or onebusaway_list_routes_for_agency.", + "type": "string" +} - added
Output schema / properties / queryAdded value: +{ + "description": "Route name/number query sent to the API.", + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "routes" -]New value: +[ + "routes", + "query", + "count" +]
- Changed
onebusaway_search_stops4 fields changed- added
Output schema / properties / countAdded value: +{ + "description": "Number of stops returned.", + "type": "number" +} - added
Output schema / properties / noticeAdded value: +{ + "description": "Guidance when no stops matched — e.g. try a different name fragment or use onebusaway_find_stops with coordinates.", + "type": "string" +} - added
Output schema / properties / queryAdded value: +{ + "description": "Search query sent to the API.", + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "stops" -]New value: +[ + "stops", + "query", + "count" +]
13 tool updates
- First observed
onebusaway_find_routes - First observed
onebusaway_find_stops - First observed
onebusaway_get_arrivals - First observed
onebusaway_get_route - First observed
onebusaway_get_schedule_for_route - First observed
onebusaway_get_schedule_for_stop - First observed
onebusaway_get_stop - First observed
onebusaway_get_trip - First observed
onebusaway_get_vehicles - First observed
onebusaway_list_agencies - First observed
onebusaway_list_routes_for_agency - First observed
onebusaway_search_routes - First observed
onebusaway_search_stops
Related MCP Connectors
Read-only public transit departures, stop search, and city coverage for bus and train users.
Trips, departures, alerts and vehicles for NYC, DC and the SF Bay Area.
Real-time SF Muni departures, routes, alerts, vehicle positions, and schedules.
Unofficial DC, Maryland and Virginia transit: trips, Metro, buses, rail, fares and alerts.
Related MCP Servers
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- AlicenseNot gradedqualityBmaintenanceEnables real-time access to Boston MBTA transit data (subway, bus, commuter rail, etc.) via the MBTA v3 API.485 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables real-time Chicago Transit Authority train and bus tracking, including arrivals, positions, and predictions for CTA 'L' trains and buses.415 npmMIT
- FlicenseNot gradedqualityCmaintenanceEnables querying real-time bike-share feed data, including station availability, nearby bikes and docks, route checks, alerts, and system information across many cities.-
Glama MCP Gateway
Add one secure layer between your agents and this server.