onebusaway-mcp-server
An MCP server that provides 16 tools and 2 resources to query OneBusAway transit APIs. It allows agents to list agencies, find stops and routes by location or name, search for specific stops or routes, retrieve real-time arrivals and vehicle positions, and access full schedules and service alerts for transit systems like King County Metro.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://onebusaway.caseyjhand.com/mcpWhat its tools do
16 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (16)
onebusaway_list_agenciesonebusaway_find_stopsonebusaway_find_routesonebusaway_search_stopsonebusaway_search_routesonebusaway_get_stoponebusaway_get_routeonebusaway_list_routes_for_agencyonebusaway_get_arrivalsonebusaway_get_stop_contextonebusaway_get_alertonebusaway_get_triponebusaway_get_blockonebusaway_get_vehiclesonebusaway_get_schedule_for_stoponebusaway_get_schedule_for_route
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Find bus stops near a specific latitude and longitude
- Retrieve real-time arrivals and departures for a stop
- Search for transit routes by name or number
- Get real-time vehicle positions for an agency
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- onebusaway-mcp-server 0.3.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 16 advertised
- Resources
- 3 advertised
- Resource templates
- 3 advertised
- Prompts
- 0 advertised
{
"tools": {
"listChanged": true
},
"logging": {},
"prompts": {
"listChanged": true
},
"resources": {
"subscribe": true,
"listChanged": true
},
"extensions": {
"io.modelcontextprotocol/skills": {
"directoryRead": true
}
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
16 advertised
onebusaway_list_agencies — List Transit Agencies
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"agencies",
"limitExceeded",
"count"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"count": {
"type": "number",
"description": "Number of transit agencies returned."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"rate_limited"
],
"description": "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."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"notice": {
"type": "string",
"description": "Guidance when no agencies were returned."
},
"agencies": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"url",
"phone",
"timezone",
"coverageCenter",
"coverageSpan"
],
"properties": {
"id": {
"type": "string",
"description": "Agency ID used in other calls (e.g. \"1\" for Metro Transit)."
},
"url": {
"type": "string",
"description": "Agency website URL."
},
"name": {
"type": "string",
"description": "Full agency name."
},
"phone": {
"type": [
"string",
"null"
],
"description": "Agency phone number, or null if not provided."
},
"timezone": {
"type": "string",
"description": "Agency timezone (e.g. \"America/Los_Angeles\")."
},
"coverageSpan": {
"type": "object",
"required": [
"latSpan",
"lonSpan"
],
"properties": {
"latSpan": {
"type": "number",
"description": "Latitude span of the coverage area in degrees."
},
"lonSpan": {
"type": "number",
"description": "Longitude span of the coverage area in degrees."
}
},
"description": "Geographic extent of the agency's service area.",
"additionalProperties": false
},
"coverageCenter": {
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number",
"description": "Latitude of the coverage center."
},
"lon": {
"type": "number",
"description": "Longitude of the coverage center."
}
},
"description": "Geographic center of the agency's service area.",
"additionalProperties": false
}
},
"description": "A transit agency with coverage information.",
"additionalProperties": false
},
"description": "All agencies served by this OneBusAway instance."
},
"limitExceeded": {
"type": "boolean",
"description": "True if the upstream capped the agency list — some agencies were omitted. This endpoint has no pagination to retrieve them."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}onebusaway_find_stops — Find Stops Near Location
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").
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude of the search center, in [-90, 90]."
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude of the search center, in [-180, 180]."
},
"query": {
"type": "string",
"description": "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": {
"type": "number",
"default": 300,
"maximum": 1600,
"description": "Search radius in meters. Must be positive; capped at 1600m, beyond which results degrade. Defaults to 300m.",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"stops",
"limitExceeded",
"count"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"count": {
"type": "number",
"description": "Number of stops returned."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"rate_limited"
],
"description": "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."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"query": {
"type": "string",
"description": "Stop code filter applied to the search, if any."
},
"stops": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"code",
"name",
"lat",
"lon",
"direction",
"routeIds",
"wheelchairBoarding"
],
"properties": {
"id": {
"type": "string",
"description": "Agency-prefixed stop ID (e.g. \"1_75403\"). Use with onebusaway_get_arrivals."
},
"lat": {
"type": "number",
"description": "Latitude of the stop."
},
"lon": {
"type": "number",
"description": "Longitude of the stop."
},
"code": {
"type": "string",
"description": "The stop code printed on the sign."
},
"name": {
"type": "string",
"description": "Stop name."
},
"routeIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs of routes that serve this stop."
},
"direction": {
"type": "string",
"description": "Compass direction of travel at this stop (e.g. \"NW\")."
},
"wheelchairBoarding": {
"enum": [
"ACCESSIBLE",
"NOT_ACCESSIBLE",
"UNKNOWN"
],
"type": "string",
"description": "Wheelchair boarding status."
}
},
"description": "A transit stop with location and route information.",
"additionalProperties": false
},
"description": "Stops within the search radius."
},
"notice": {
"type": "string",
"description": "Guidance when results are empty or truncated — e.g. how to narrow the radius or verify the stop code."
},
"limitExceeded": {
"type": "boolean",
"description": "True if more stops exist beyond the returned set; narrow the radius to see all."
}
},
"additionalProperties": false
}{
"readOnlyHint": true
}onebusaway_find_routes — Find Routes Near Location
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude of the search center, in [-90, 90]."
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude of the search center, in [-180, 180]."
},
"query": {
"type": "string",
"description": "Filter by route name or number (e.g. \"44\" or \"Link Light Rail\")."
},
"radius": {
"type": "number",
"default": 500,
"maximum": 1600,
"description": "Search radius in meters. Must be positive; capped at 1600m. Defaults to 500m. Ignored when latSpan and lonSpan are both set.",
"exclusiveMinimum": 0
},
"latSpan": {
"type": "number",
"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
},
"lonSpan": {
"type": "number",
"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
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"routes",
"limitExceeded",
"count"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"count": {
"type": "number",
"description": "Number of routes returned."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"rate_limited"
],
"description": "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."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"query": {
"type": "string",
"description": "Route name/number filter applied to the search, if any."
},
"notice": {
"type": "string",
"description": "Guidance when no routes matched — e.g. try a larger radius or different query."
},
"routes": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"shortName",
"longName",
"description",
"agencyId",
"agencyName",
"type",
"color",
"url"
],
"properties": {
"id": {
"type": "string",
"description": "Agency-prefixed route ID (e.g. \"1_100259\"). Use with onebusaway_get_schedule_for_route or onebusaway_get_vehicles."
},
"url": {
"type": [
"string",
"null"
],
"description": "Agency schedule page URL, or null."
},
"type": {
"type": "number",
"description": "GTFS route type: 0=tram, 1=subway, 2=rail, 3=bus, 4=ferry, 5=cable_car."
},
"color": {
"type": [
"string",
"null"
],
"description": "Route brand color hex (without #), or null."
},
"agencyId": {
"type": "string",
"description": "Agency ID that operates this route."
},
"longName": {
"type": "string",
"description": "Full route name."
},
"shortName": {
"type": "string",
"description": "The number or short name displayed on vehicles (e.g. \"44\")."
},
"agencyName": {
"type": "string",
"description": "Agency name that operates this route."
},
"description": {
"type": "string",
"description": "Route description."
}
},
"description": "A transit route with agency and type information.",
"additionalProperties": false
},
"description": "Routes found near the specified location."
},
"limitExceeded": {
"type": "boolean",
"description": "True if more routes exist beyond the returned set; narrow the radius or set latSpan/lonSpan to see all."
}
},
"additionalProperties": false
}{
"readOnlyHint": true
}onebusaway_search_stops — Search Stops by Name or Code
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"minLength": 1,
"description": "Stop name fragment or stop code (e.g. \"University Way\" or \"75403\")."
},
"maxCount": {
"type": "integer",
"default": 10,
"maximum": 100,
"description": "Maximum number of results to return. A positive integer, at most 100. Defaults to 10.",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"stops",
"limitExceeded",
"query",
"count"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"cap": {
"type": "number",
"description": "The maxCount limit applied to truncated results."
},
"count": {
"type": "number",
"description": "Number of stops returned."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"rate_limited"
],
"description": "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."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"query": {
"type": "string",
"description": "Search query sent to the API."
},
"shown": {
"type": "number",
"description": "Number of stops returned when results were truncated."
},
"stops": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"code",
"name",
"lat",
"lon",
"direction",
"routeIds",
"wheelchairBoarding"
],
"properties": {
"id": {
"type": "string",
"description": "Agency-prefixed stop ID (e.g. \"1_75403\"). Use with onebusaway_get_arrivals."
},
"lat": {
"type": "number",
"description": "Latitude of the stop."
},
"lon": {
"type": "number",
"description": "Longitude of the stop."
},
"code": {
"type": "string",
"description": "The stop code printed on the sign."
},
"name": {
"type": "string",
"description": "Stop name."
},
"routeIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs of routes that serve this stop."
},
"direction": {
"type": "string",
"description": "Compass direction of travel at this stop."
},
"wheelchairBoarding": {
"enum": [
"ACCESSIBLE",
"NOT_ACCESSIBLE",
"UNKNOWN"
],
"type": "string",
"description": "Wheelchair boarding status."
}
},
"description": "A transit stop with location and route information.",
"additionalProperties": false
},
"description": "Stops matching the search query."
},
"notice": {
"type": "string",
"description": "Guidance when no stops matched — e.g. try a different name fragment or use onebusaway_find_stops with coordinates."
},
"truncated": {
"type": "boolean",
"description": "True when matching stops exceeded maxCount."
},
"limitExceeded": {
"type": "boolean",
"description": "True if more stops match than were returned; raise maxCount or refine the query to see all."
}
},
"additionalProperties": false
}{
"readOnlyHint": true
}onebusaway_search_routes — Search Routes by Name or Number
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"minLength": 1,
"description": "Route name or number (e.g. \"44\", \"Link\", or \"RapidRide\")."
},
"maxCount": {
"type": "integer",
"default": 10,
"maximum": 100,
"description": "Maximum number of results to return. A positive integer, at most 100. Defaults to 10.",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"routes",
"limitExceeded",
"query",
"count"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"cap": {
"type": "number",
"description": "The maxCount limit applied to truncated results."
},
"count": {
"type": "number",
"description": "Number of routes returned."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"endpoint_unavailable",
"rate_limited"
],
"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). `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."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"query": {
"type": "string",
"description": "Route name/number query sent to the API."
},
"shown": {
"type": "number",
"description": "Number of routes returned when results were truncated."
},
"notice": {
"type": "string",
"description": "Guidance when no routes matched — e.g. try onebusaway_find_routes with coordinates, or onebusaway_list_routes_for_agency."
},
"routes": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"shortName",
"longName",
"description",
"agencyId",
"agencyName",
"type"
],
"properties": {
"id": {
"type": "string",
"description": "Agency-prefixed route ID (e.g. \"1_100259\"). Use with onebusaway_get_vehicles or onebusaway_get_schedule_for_route."
},
"type": {
"type": "number",
"description": "GTFS route type: 0=tram, 1=subway, 2=rail, 3=bus, 4=ferry, 5=cable_car."
},
"agencyId": {
"type": "string",
"description": "Agency ID that operates this route."
},
"longName": {
"type": "string",
"description": "Full route name."
},
"shortName": {
"type": "string",
"description": "The number or short name displayed on vehicles (e.g. \"44\")."
},
"agencyName": {
"type": "string",
"description": "Agency name that operates this route."
},
"description": {
"type": "string",
"description": "Route description."
}
},
"description": "A transit route with agency and type information.",
"additionalProperties": false
},
"description": "Routes matching the search query."
},
"truncated": {
"type": "boolean",
"description": "True when matching routes exceeded maxCount."
},
"limitExceeded": {
"type": "boolean",
"description": "True if more routes match than were returned; raise maxCount or refine the query to see all."
}
},
"additionalProperties": false
}{
"readOnlyHint": true
}onebusaway_get_stop — Get Stop Details
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).
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"stopId"
],
"properties": {
"stopId": {
"type": "string",
"minLength": 1,
"description": "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."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"id",
"code",
"name",
"lat",
"lon",
"direction",
"routeIds",
"wheelchairBoarding"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"id": {
"type": "string",
"description": "Agency-prefixed stop ID."
},
"lat": {
"type": "number",
"description": "Latitude of the stop."
},
"lon": {
"type": "number",
"description": "Longitude of the stop."
},
"code": {
"type": "string",
"description": "The stop code printed on the sign."
},
"name": {
"type": "string",
"description": "Stop name."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"stop_not_found",
"rate_limited"
],
"description": "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."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"routeIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs of routes that serve this stop. Use with onebusaway_get_arrivals or onebusaway_get_schedule_for_stop."
},
"direction": {
"type": "string",
"description": "Compass direction of travel at this stop (e.g. \"NW\")."
},
"wheelchairBoarding": {
"enum": [
"ACCESSIBLE",
"NOT_ACCESSIBLE",
"UNKNOWN"
],
"type": "string",
"description": "Wheelchair boarding status."
}
},
"additionalProperties": false
}{
"readOnlyHint": true
}onebusaway_get_route — Get Route Details
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").
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"routeId"
],
"properties": {
"routeId": {
"type": "string",
"minLength": 1,
"description": "Agency-prefixed route ID (e.g. \"1_100259\"). Use onebusaway_find_routes or onebusaway_search_routes to discover IDs."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"id",
"shortName",
"longName",
"description",
"agencyId",
"agencyName",
"type",
"color",
"url"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"id": {
"type": "string",
"description": "Agency-prefixed route ID."
},
"url": {
"type": [
"string",
"null"
],
"description": "Agency schedule page URL, or null."
},
"type": {
"type": "number",
"description": "GTFS route type: 0=tram, 1=subway, 2=rail, 3=bus, 4=ferry, 5=cable_car."
},
"color": {
"type": [
"string",
"null"
],
"description": "Route brand color hex (without #), or null."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"route_not_found",
"rate_limited"
],
"description": "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."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"agencyId": {
"type": "string",
"description": "Agency ID that operates this route."
},
"longName": {
"type": "string",
"description": "Full route name."
},
"shortName": {
"type": "string",
"description": "The number or short name displayed on vehicles (e.g. \"44\")."
},
"agencyName": {
"type": "string",
"description": "Agency name that operates this route."
},
"description": {
"type": "string",
"description": "Route description."
}
},
"additionalProperties": false
}{
"readOnlyHint": true
}onebusaway_list_routes_for_agency — List Routes for Agency
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"agencyId"
],
"properties": {
"agencyId": {
"type": "string",
"minLength": 1,
"description": "Agency ID (e.g. \"1\" for Metro Transit, \"40\" for Sound Transit). Use onebusaway_list_agencies to discover IDs."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"routes",
"limitExceeded",
"agencyId",
"count"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"count": {
"type": "number",
"description": "Number of routes returned for this agency."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"agency_not_found",
"rate_limited"
],
"description": "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."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"notice": {
"type": "string",
"description": "Guidance when no routes were found — verify the agency ID with onebusaway_list_agencies."
},
"routes": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"shortName",
"longName",
"description",
"type",
"color",
"url"
],
"properties": {
"id": {
"type": "string",
"description": "Agency-prefixed route ID. Use with onebusaway_get_schedule_for_route or onebusaway_get_vehicles."
},
"url": {
"type": [
"string",
"null"
],
"description": "Agency schedule page URL, or null."
},
"type": {
"type": "number",
"description": "GTFS route type: 0=tram, 1=subway, 2=rail, 3=bus, 4=ferry, 5=cable_car."
},
"color": {
"type": [
"string",
"null"
],
"description": "Route brand color hex (without #), or null."
},
"longName": {
"type": "string",
"description": "Full route name."
},
"shortName": {
"type": "string",
"description": "The number or short name displayed on vehicles."
},
"description": {
"type": "string",
"description": "Route description."
}
},
"description": "A transit route operated by this agency.",
"additionalProperties": false
},
"description": "All routes operated by this agency."
},
"agencyId": {
"type": "string",
"description": "Agency ID queried."
},
"limitExceeded": {
"type": "boolean",
"description": "True if the upstream capped the route list — some routes were omitted. This endpoint has no pagination to retrieve them."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}onebusaway_get_arrivals — Get Real-Time Arrivals
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").
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"stopId"
],
"properties": {
"stopId": {
"type": "string",
"minLength": 1,
"description": "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": {
"type": "integer",
"default": 35,
"maximum": 240,
"minimum": 0,
"description": "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": {
"type": "integer",
"default": 5,
"maximum": 60,
"minimum": 0,
"description": "Include arrivals that departed up to this many minutes ago — an integer from 0 to 60. Defaults to 5."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"timezone",
"stopId",
"stopName",
"currentTime",
"arrivals",
"situations",
"queriedStop",
"count",
"windowMinutes"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"count": {
"type": "number",
"description": "Number of arrivals in the time window."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"stop_not_found",
"rate_limited"
],
"description": "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."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"notice": {
"type": "string",
"description": "Guidance when no arrivals were found — widen minutesAfter, or check onebusaway_get_schedule_for_stop for scheduled service."
},
"stopId": {
"type": "string",
"description": "The queried stop ID."
},
"arrivals": {
"type": "array",
"items": {
"type": "object",
"required": [
"routeShortName",
"tripHeadsign",
"predicted",
"predictedArrivalTime",
"scheduledArrivalTime",
"scheduleDeviation",
"vehicleId",
"vehiclePosition",
"stopsAway",
"tripId",
"routeId",
"situationIds"
],
"properties": {
"tripId": {
"type": "string",
"description": "Trip ID for follow-up onebusaway_get_trip calls."
},
"routeId": {
"type": "string",
"description": "Route ID for follow-up route calls."
},
"predicted": {
"type": "boolean",
"description": "True if GPS-tracked real-time data is available; false if schedule-only."
},
"stopsAway": {
"type": [
"number",
"null"
],
"description": "Number of stops until this stop, or null if unknown."
},
"vehicleId": {
"type": [
"string",
"null"
],
"description": "Vehicle ID if known, or null."
},
"situationIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs of active service alerts affecting this arrival."
},
"tripHeadsign": {
"type": "string",
"description": "Destination sign text (e.g. \"Downtown Seattle\")."
},
"routeShortName": {
"type": "string",
"description": "Route short name (e.g. \"44\")."
},
"vehiclePosition": {
"anyOf": [
{
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number",
"description": "Vehicle latitude."
},
"lon": {
"type": "number",
"description": "Vehicle longitude."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Current vehicle position if available, or null."
},
"scheduleDeviation": {
"type": "number",
"description": "Seconds late (positive) or early (negative). Only meaningful when predicted=true."
},
"predictedArrivalTime": {
"type": [
"number",
"null"
],
"description": "Predicted arrival time as Unix milliseconds. Null when predicted=false."
},
"scheduledArrivalTime": {
"type": "number",
"description": "Scheduled arrival time as Unix milliseconds."
}
},
"description": "A single arrival or departure at this stop.",
"additionalProperties": false
},
"description": "Arrivals and departures at this stop within the requested time window."
},
"stopName": {
"type": "string",
"description": "Stop name."
},
"timezone": {
"type": "string",
"description": "Validated timezone of the queried stop agency, or UTC when unavailable or invalid."
},
"situations": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"timezone",
"summary",
"description"
],
"properties": {
"id": {
"type": "string",
"description": "Situation ID."
},
"summary": {
"type": "string",
"description": "Short summary of the service alert."
},
"timezone": {
"type": "string",
"description": "Validated timezone shared by all affected scopes, otherwise UTC."
},
"description": {
"type": [
"string",
"null"
],
"description": "Longer description of the service alert, or null."
}
},
"description": "A single active service alert.",
"additionalProperties": false
},
"description": "Active service alerts at this stop — those attached to the stop itself and those referenced by its arrivals, each listed once."
},
"currentTime": {
"type": "number",
"description": "Server time as Unix milliseconds, for computing countdown timers."
},
"queriedStop": {
"type": "string",
"description": "Stop ID queried."
},
"windowMinutes": {
"type": "object",
"required": [
"before",
"after"
],
"properties": {
"after": {
"type": "number",
"description": "Minutes after current time included."
},
"before": {
"type": "number",
"description": "Minutes before current time included."
}
},
"description": "Time window used for the arrivals query.",
"additionalProperties": false
}
},
"additionalProperties": false
}{
"readOnlyHint": true
}onebusaway_get_stop_context — Get Stop Context
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").
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"stopId"
],
"properties": {
"stopId": {
"type": "string",
"minLength": 1,
"description": "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": {
"type": "integer",
"default": 35,
"maximum": 240,
"minimum": 0,
"description": "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": {
"type": "integer",
"default": 5,
"maximum": 60,
"minimum": 0,
"description": "Include arrivals that departed up to this many minutes ago — an integer from 0 to 60. Defaults to 5."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"timezone",
"stop",
"currentTime",
"arrivals",
"alerts",
"queriedStop",
"windowMinutes"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"stop": {
"anyOf": [
{
"type": "object",
"required": [
"id",
"code",
"name",
"lat",
"lon",
"direction",
"wheelchairBoarding"
],
"properties": {
"id": {
"type": "string",
"description": "Agency-prefixed stop ID."
},
"lat": {
"type": "number",
"description": "Latitude of the stop."
},
"lon": {
"type": "number",
"description": "Longitude of the stop."
},
"code": {
"type": "string",
"description": "The stop code printed on the sign."
},
"name": {
"type": "string",
"description": "Stop name."
},
"direction": {
"type": "string",
"description": "Compass direction of travel at this stop (e.g. \"NW\")."
},
"wheelchairBoarding": {
"enum": [
"ACCESSIBLE",
"NOT_ACCESSIBLE",
"UNKNOWN"
],
"type": "string",
"description": "Wheelchair boarding status."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "The queried stop, without its served-route list (use onebusaway_get_stop for routeIds). Null when the upstream response omitted the stop."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"stop_not_found",
"rate_limited"
],
"description": "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."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"alerts": {
"type": "array",
"items": {
"type": "object",
"required": [
"timezone",
"id",
"summary",
"description",
"reason",
"severity",
"consequenceMessage",
"affects",
"consequences",
"activeWindows",
"url"
],
"properties": {
"id": {
"type": "string",
"description": "Situation ID."
},
"url": {
"type": [
"string",
"null"
],
"description": "URL for more information about this alert, or null."
},
"reason": {
"type": [
"string",
"null"
],
"description": "Reason code from TPEG: equipmentReason, environmentReason, personnelReason, miscellaneousReason, securityAlert. Null when not provided."
},
"affects": {
"type": "array",
"items": {
"type": "object",
"properties": {
"stopId": {
"type": "string",
"description": "Affected stop ID, if scoped to a stop."
},
"tripId": {
"type": "string",
"description": "Affected trip ID, if scoped to a trip."
},
"routeId": {
"type": "string",
"description": "Affected route ID, if scoped to a route."
},
"agencyId": {
"type": "string",
"description": "Affected agency ID, if scoped to an agency."
}
},
"description": "An entity affected by this alert.",
"additionalProperties": false
},
"description": "Stops, routes, trips, or agencies affected by this alert."
},
"summary": {
"type": "string",
"description": "Short summary of the service alert."
},
"severity": {
"type": [
"string",
"null"
],
"description": "Severity level as reported by the agency, or null."
},
"timezone": {
"type": "string",
"description": "Validated IANA timezone shared by every affected scope, or UTC when unresolved, invalid, absent, or conflicting."
},
"description": {
"type": [
"string",
"null"
],
"description": "Longer description of the alert, or null."
},
"consequences": {
"type": "array",
"items": {
"type": "object",
"properties": {
"condition": {
"type": "string",
"description": "Consequence condition (e.g. \"detour\", \"reducedService\")."
},
"diversionStopIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Stop IDs on the diversion path, when condition is \"detour\"."
}
},
"description": "A consequence of this alert.",
"additionalProperties": false
},
"description": "Operational consequences of this alert."
},
"activeWindows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"to": {
"type": "number",
"description": "End of active window as Unix milliseconds, if known."
},
"from": {
"type": "number",
"description": "Start of active window as Unix milliseconds, if known."
}
},
"description": "A time window during which this alert is active.",
"additionalProperties": false
},
"description": "Time windows when this alert is active."
},
"consequenceMessage": {
"type": [
"string",
"null"
],
"description": "Human-readable consequence description (e.g. \"Detour in effect\"), or null."
}
},
"description": "One service alert, in full detail.",
"additionalProperties": false
},
"description": "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": {
"type": "string",
"description": "What the response is missing and where to get it — no arrivals in the window, stop details absent, or referenced alerts absent."
},
"arrivals": {
"type": "array",
"items": {
"type": "object",
"required": [
"routeShortName",
"tripHeadsign",
"predicted",
"predictedArrivalTime",
"scheduledArrivalTime",
"scheduleDeviation",
"vehicleId",
"vehiclePosition",
"stopsAway",
"tripId",
"routeId",
"situationIds"
],
"properties": {
"tripId": {
"type": "string",
"description": "Trip ID for follow-up onebusaway_get_trip calls."
},
"routeId": {
"type": "string",
"description": "Route ID for follow-up route calls."
},
"predicted": {
"type": "boolean",
"description": "True if GPS-tracked real-time data is available; false if schedule-only."
},
"stopsAway": {
"type": [
"number",
"null"
],
"description": "Number of stops until this stop, or null if unknown."
},
"vehicleId": {
"type": [
"string",
"null"
],
"description": "Vehicle ID if known, or null."
},
"situationIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs of active service alerts affecting this arrival."
},
"tripHeadsign": {
"type": "string",
"description": "Destination sign text (e.g. \"Downtown Seattle\")."
},
"routeShortName": {
"type": "string",
"description": "Route short name (e.g. \"44\")."
},
"vehiclePosition": {
"anyOf": [
{
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number",
"description": "Vehicle latitude."
},
"lon": {
"type": "number",
"description": "Vehicle longitude."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Current vehicle position if available, or null."
},
"scheduleDeviation": {
"type": "number",
"description": "Seconds late (positive) or early (negative). Only meaningful when predicted=true."
},
"predictedArrivalTime": {
"type": [
"number",
"null"
],
"description": "Predicted arrival time as Unix milliseconds. Null when predicted=false."
},
"scheduledArrivalTime": {
"type": "number",
"description": "Scheduled arrival time as Unix milliseconds."
}
},
"description": "A single arrival or departure at this stop.",
"additionalProperties": false
},
"description": "Arrivals and departures at this stop within the requested time window."
},
"timezone": {
"type": "string",
"description": "Validated timezone of the queried stop agency, or UTC when unavailable or invalid."
},
"currentTime": {
"type": "number",
"description": "Server time as Unix milliseconds, for computing countdown timers."
},
"queriedStop": {
"type": "string",
"description": "Stop ID queried."
},
"windowMinutes": {
"type": "object",
"required": [
"before",
"after"
],
"properties": {
"after": {
"type": "number",
"description": "Minutes after current time included."
},
"before": {
"type": "number",
"description": "Minutes before current time included."
}
},
"description": "Time window used for the arrivals query.",
"additionalProperties": false
}
},
"additionalProperties": false
}{
"readOnlyHint": true
}onebusaway_get_alert — Get Service Alert Detail
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"situationId"
],
"properties": {
"situationId": {
"type": "string",
"minLength": 1,
"description": "Situation/alert ID from onebusaway_get_arrivals (situations[].id or arrivals[].situationIds[])."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"timezone",
"id",
"summary",
"description",
"reason",
"severity",
"consequenceMessage",
"affects",
"consequences",
"activeWindows",
"url"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"id": {
"type": "string",
"description": "Situation ID."
},
"url": {
"type": [
"string",
"null"
],
"description": "URL for more information about this alert, or null."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"situation_not_found",
"rate_limited"
],
"description": "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."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"reason": {
"type": [
"string",
"null"
],
"description": "Reason code from TPEG: equipmentReason, environmentReason, personnelReason, miscellaneousReason, securityAlert. Null when not provided."
},
"affects": {
"type": "array",
"items": {
"type": "object",
"properties": {
"stopId": {
"type": "string",
"description": "Affected stop ID, if scoped to a stop."
},
"tripId": {
"type": "string",
"description": "Affected trip ID, if scoped to a trip."
},
"routeId": {
"type": "string",
"description": "Affected route ID, if scoped to a route."
},
"agencyId": {
"type": "string",
"description": "Affected agency ID, if scoped to an agency."
}
},
"description": "An entity affected by this alert.",
"additionalProperties": false
},
"description": "Stops, routes, trips, or agencies affected by this alert."
},
"summary": {
"type": "string",
"description": "Short summary of the service alert."
},
"severity": {
"type": [
"string",
"null"
],
"description": "Severity level as reported by the agency, or null."
},
"timezone": {
"type": "string",
"description": "Validated IANA timezone shared by every affected scope, or UTC when unresolved, invalid, absent, or conflicting."
},
"description": {
"type": [
"string",
"null"
],
"description": "Longer description of the alert, or null."
},
"consequences": {
"type": "array",
"items": {
"type": "object",
"properties": {
"condition": {
"type": "string",
"description": "Consequence condition (e.g. \"detour\", \"reducedService\")."
},
"diversionStopIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Stop IDs on the diversion path, when condition is \"detour\"."
}
},
"description": "A consequence of this alert.",
"additionalProperties": false
},
"description": "Operational consequences of this alert."
},
"activeWindows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"to": {
"type": "number",
"description": "End of active window as Unix milliseconds, if known."
},
"from": {
"type": "number",
"description": "Start of active window as Unix milliseconds, if known."
}
},
"description": "A time window during which this alert is active.",
"additionalProperties": false
},
"description": "Time windows when this alert is active."
},
"consequenceMessage": {
"type": [
"string",
"null"
],
"description": "Human-readable consequence description (e.g. \"Detour in effect\"), or null."
}
},
"additionalProperties": false
}{
"readOnlyHint": true
}onebusaway_get_trip — Get Trip Status
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"tripId"
],
"properties": {
"tripId": {
"type": "string",
"minLength": 1,
"description": "Trip ID from an arrivals response or schedule lookup."
},
"serviceDateMs": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "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": {
"type": "boolean",
"default": true,
"description": "Whether to include the full stop sequence with times. Defaults to true."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"timezone",
"tripId",
"routeShortName",
"tripHeadsign",
"blockId",
"status",
"schedule",
"situations"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"trip_not_found",
"rate_limited"
],
"description": "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."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"status": {
"type": "object",
"required": [
"phase",
"predicted",
"position",
"scheduleDeviation",
"nextStop",
"closestStop",
"vehicleId",
"lastUpdateTime"
],
"properties": {
"phase": {
"type": "string",
"description": "Current journey phase (e.g. \"in_progress\", \"layover_before\", \"layover_during\")."
},
"nextStop": {
"type": [
"string",
"null"
],
"description": "Stop ID of the next stop, or null."
},
"position": {
"anyOf": [
{
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number",
"description": "Vehicle latitude."
},
"lon": {
"type": "number",
"description": "Vehicle longitude."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Current vehicle position if available, or null."
},
"predicted": {
"type": "boolean",
"description": "True if GPS-tracked real-time data is available."
},
"vehicleId": {
"type": [
"string",
"null"
],
"description": "Vehicle ID if known, or null."
},
"closestStop": {
"type": [
"string",
"null"
],
"description": "Stop ID of the closest stop, or null."
},
"lastUpdateTime": {
"type": "number",
"description": "Timestamp of the last real-time update as Unix milliseconds."
},
"scheduleDeviation": {
"type": "number",
"description": "Seconds late (positive) or early (negative)."
}
},
"description": "Real-time status of the trip.",
"additionalProperties": false
},
"tripId": {
"type": "string",
"description": "The queried trip ID."
},
"blockId": {
"type": [
"string",
"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."
},
"schedule": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"stopId",
"stopName",
"arrivalTime",
"departureTime",
"distanceAlongTripMeters"
],
"properties": {
"stopId": {
"type": "string",
"description": "Stop ID."
},
"stopName": {
"type": "string",
"description": "Stop name."
},
"arrivalTime": {
"type": "number",
"description": "Scheduled arrival time as seconds from midnight (GTFS format)."
},
"departureTime": {
"type": "number",
"description": "Scheduled departure time as seconds from midnight (GTFS format)."
},
"distanceAlongTripMeters": {
"type": "number",
"description": "Distance along the trip to this stop, in meters."
}
},
"description": "A scheduled stop time along this trip.",
"additionalProperties": false
}
},
{
"type": "null"
}
],
"description": "Full stop sequence with times, or null if includeSchedule=false."
},
"timezone": {
"type": "string",
"description": "Validated timezone of the trip route agency, or UTC when unavailable or invalid."
},
"situations": {
"type": "array",
"items": {
"type": "string"
},
"description": "Active situation IDs affecting this trip."
},
"tripHeadsign": {
"type": "string",
"description": "Destination sign text."
},
"routeShortName": {
"type": "string",
"description": "Route short name (e.g. \"44\")."
}
},
"additionalProperties": false
}{
"readOnlyHint": true
}onebusaway_get_block — Get Block Schedule
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"blockId"
],
"properties": {
"tripId": {
"type": "string",
"description": "Exact trip ID; omit or leave blank for no trip selector. Mutually exclusive with departure bounds."
},
"blockId": {
"type": "string",
"minLength": 1,
"description": "Block ID from a trip record. Obtain a tripId from onebusaway_get_arrivals, then call onebusaway_get_trip to get the blockId."
},
"departureFromSec": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Inclusive departure lower bound in GTFS seconds from midnight; values beyond 86400 are valid."
},
"departureBeforeSec": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Exclusive departure upper bound in GTFS seconds from midnight; must exceed departureFromSec when both are supplied."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"blockId",
"activeServiceIds",
"inactiveServiceIds",
"trips",
"alternateConfigurations"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"block_not_found",
"rate_limited"
],
"description": "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."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"trips": {
"type": "array",
"items": {
"type": "object",
"required": [
"tripId",
"distanceAlongBlock",
"accumulatedSlackTime",
"blockStopTimes"
],
"properties": {
"tripId": {
"type": "string",
"description": "Trip ID for follow-up onebusaway_get_trip calls."
},
"blockStopTimes": {
"type": "array",
"items": {
"type": "object",
"required": [
"stopId",
"arrivalTime",
"departureTime"
],
"properties": {
"stopId": {
"type": "string",
"description": "Stop ID."
},
"pickupType": {
"type": "number",
"description": "GTFS pickup type (0=regular, 1=no pickup, 2=phone agency, 3=coordinate with driver)."
},
"arrivalTime": {
"type": "number",
"description": "Arrival in GTFS seconds from midnight."
},
"dropOffType": {
"type": "number",
"description": "GTFS drop-off type (0=regular, 1=no dropoff, 2=phone agency, 3=coordinate with driver)."
},
"departureTime": {
"type": "number",
"description": "Departure in GTFS seconds from midnight."
}
},
"description": "A stop time.",
"additionalProperties": false
},
"description": "Ordered stop times."
},
"distanceAlongBlock": {
"type": "number",
"description": "Cumulative distance (meters) from block start to the first stop of this trip."
},
"accumulatedSlackTime": {
"type": "number",
"description": "Accumulated layover/slack time (seconds) before this trip starts."
}
},
"description": "A block trip.",
"additionalProperties": false
},
"description": "All trips in the first returned configuration, in order."
},
"notice": {
"type": "string",
"description": "Alternative-configuration guidance or an aggregate empty-selection notice."
},
"blockId": {
"type": "string",
"description": "Block ID."
},
"selection": {
"type": "object",
"required": [
"total",
"returned",
"configurationCounts"
],
"properties": {
"total": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Count before local selection."
},
"tripId": {
"type": "string",
"description": "Exact trip ID; omit or leave blank for no trip selector. Mutually exclusive with departure bounds."
},
"returned": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Count after local selection."
},
"departureFromSec": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Inclusive departure lower bound in GTFS seconds from midnight; values beyond 86400 are valid."
},
"departureBeforeSec": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Exclusive departure upper bound in GTFS seconds from midnight; must exceed departureFromSec when both are supplied."
},
"configurationCounts": {
"type": "array",
"items": {
"type": "object",
"required": [
"total",
"returned"
],
"properties": {
"total": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Count before local selection."
},
"returned": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Count after local selection."
}
},
"description": "Trip occurrence counts for one configuration.",
"additionalProperties": false
},
"description": "Preserved slot order: index 0 is the top-level first configuration; index 1 is alternateConfigurations[0], and so on, including empty slots."
}
},
"description": "Applied selectors and aggregate trip occurrence counts across every configuration; absent without selectors.",
"additionalProperties": false
},
"activeServiceIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Service IDs required active for the first returned configuration."
},
"inactiveServiceIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Service IDs required inactive for the first returned configuration."
},
"alternateConfigurations": {
"type": "array",
"items": {
"type": "object",
"required": [
"activeServiceIds",
"inactiveServiceIds",
"trips"
],
"properties": {
"trips": {
"type": "array",
"items": {
"type": "object",
"required": [
"tripId",
"distanceAlongBlock",
"accumulatedSlackTime",
"blockStopTimes"
],
"properties": {
"tripId": {
"type": "string",
"description": "Trip ID for follow-up onebusaway_get_trip calls."
},
"blockStopTimes": {
"type": "array",
"items": {
"type": "object",
"required": [
"stopId",
"arrivalTime",
"departureTime"
],
"properties": {
"stopId": {
"type": "string",
"description": "Stop ID."
},
"pickupType": {
"type": "number",
"description": "GTFS pickup type (0=regular, 1=no pickup, 2=phone agency, 3=coordinate with driver)."
},
"arrivalTime": {
"type": "number",
"description": "Arrival in GTFS seconds from midnight."
},
"dropOffType": {
"type": "number",
"description": "GTFS drop-off type (0=regular, 1=no dropoff, 2=phone agency, 3=coordinate with driver)."
},
"departureTime": {
"type": "number",
"description": "Departure in GTFS seconds from midnight."
}
},
"description": "A stop time.",
"additionalProperties": false
},
"description": "Ordered stop times."
},
"distanceAlongBlock": {
"type": "number",
"description": "Cumulative distance (meters) from block start to the first stop of this trip."
},
"accumulatedSlackTime": {
"type": "number",
"description": "Accumulated layover/slack time (seconds) before this trip starts."
}
},
"description": "A block trip.",
"additionalProperties": false
},
"description": "Ordered trips in this configuration."
},
"activeServiceIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Service IDs required active for this configuration."
},
"inactiveServiceIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Service IDs required inactive for this configuration."
}
},
"description": "An alternative block configuration.",
"additionalProperties": false
},
"description": "Remaining configurations in upstream order; empty when none exist."
}
},
"additionalProperties": false
}{
"readOnlyHint": true
}onebusaway_get_vehicles — Get Real-Time Vehicle Positions
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"agencyId"
],
"properties": {
"routeId": {
"type": "string",
"description": "Optional agency-prefixed route ID to filter results to one route. Filtering is client-side — all agency vehicles are fetched first."
},
"agencyId": {
"type": "string",
"minLength": 1,
"description": "Agency ID (e.g. \"1\" for Metro Transit, \"40\" for Sound Transit). Use onebusaway_list_agencies to discover IDs."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"timezone",
"omittedWithoutPosition",
"vehicles",
"limitExceeded",
"agencyId",
"count"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"count": {
"type": "number",
"description": "Number of vehicles returned after any route filter."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"agency_not_found",
"rate_limited"
],
"description": "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."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"notice": {
"type": "string",
"description": "Independent notices for records omitted without position, upstream truncation, and an empty returned list."
},
"routeId": {
"type": "string",
"description": "Route ID filter applied client-side, if any."
},
"agencyId": {
"type": "string",
"description": "Agency ID queried."
},
"timezone": {
"type": "string",
"description": "Validated timezone of the requested agency, or UTC when unavailable or invalid."
},
"vehicles": {
"type": "array",
"items": {
"type": "object",
"required": [
"vehicleId",
"tripId",
"routeId",
"routeShortName",
"tripHeadsign",
"position",
"lastUpdateTime",
"phase",
"scheduleDeviation",
"orientation",
"nextStop",
"predicted"
],
"properties": {
"phase": {
"type": "string",
"description": "Current journey phase (e.g. \"in_progress\", \"layover_before\")."
},
"tripId": {
"type": [
"string",
"null"
],
"description": "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."
},
"routeId": {
"type": [
"string",
"null"
],
"description": "Current route ID, or null."
},
"nextStop": {
"type": [
"string",
"null"
],
"description": "Stop ID of the next stop, or null."
},
"position": {
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number",
"description": "Vehicle latitude."
},
"lon": {
"type": "number",
"description": "Vehicle longitude."
}
},
"description": "Current GPS position.",
"additionalProperties": false
},
"predicted": {
"type": "boolean",
"description": "True if this vehicle is reporting real-time GPS data."
},
"vehicleId": {
"type": "string",
"description": "Vehicle ID."
},
"orientation": {
"type": [
"number",
"null"
],
"description": "Counter-clockwise degrees from east (0=east, 90=north, 180=west, 270=south), not a compass bearing; null if unavailable."
},
"tripHeadsign": {
"type": [
"string",
"null"
],
"description": "Destination sign text, or null."
},
"lastUpdateTime": {
"type": "number",
"description": "Timestamp of the last position update as Unix milliseconds."
},
"routeShortName": {
"type": [
"string",
"null"
],
"description": "Route short name, or null."
},
"scheduleDeviation": {
"type": [
"number",
"null"
],
"description": "Seconds late (positive) or early (negative), or null."
}
},
"description": "A real-time vehicle position entry.",
"additionalProperties": false
},
"description": "Active vehicles for the agency, optionally filtered by route."
},
"limitExceeded": {
"type": "boolean",
"description": "True if the upstream capped the vehicle list — some vehicles were omitted. This endpoint has no pagination to retrieve them."
},
"omittedWithoutPosition": {
"type": "number",
"description": "Agency-wide records omitted because latitude or longitude is missing, counted before route filtering."
},
"omittedWithoutPositionOnRoute": {
"type": "number",
"description": "Omitted records whose canonical current trip resolves to the requested route; present only with a route filter."
}
},
"additionalProperties": false
}{
"readOnlyHint": true
}onebusaway_get_schedule_for_stop — Get Stop Schedule
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"stopId"
],
"properties": {
"date": {
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"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])))$",
"description": "A real calendar date in YYYY-MM-DD form (e.g. \"2026-05-23\")."
}
],
"description": "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": {
"type": "string",
"minLength": 1,
"description": "Agency-prefixed stop ID (e.g. \"1_75403\"). Use onebusaway_find_stops or onebusaway_search_stops to discover IDs."
},
"routeId": {
"type": "string",
"description": "Exact route ID, combined with departure bounds; omit or leave blank for all routes."
},
"departureFromMs": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Inclusive departure lower bound in Unix milliseconds."
},
"departureBeforeMs": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Exclusive departure upper bound in Unix milliseconds; must exceed departureFromMs when both are supplied."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"timezone",
"stopId",
"stopName",
"serviceDateMs",
"routes",
"queriedStop",
"routeCount"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"date": {
"type": "string",
"description": "Date parameter used for the schedule request, if specified."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"stop_not_found",
"rate_limited"
],
"description": "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."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"notice": {
"type": "string",
"description": "Guidance when no routes were found — e.g. no service on weekends or holiday schedule in effect."
},
"routes": {
"type": "array",
"items": {
"type": "object",
"required": [
"routeId",
"routeShortName",
"directions"
],
"properties": {
"routeId": {
"type": "string",
"description": "Route ID for follow-up onebusaway_get_route or onebusaway_get_schedule_for_route calls."
},
"directions": {
"type": "array",
"items": {
"type": "object",
"required": [
"tripHeadsign",
"departures"
],
"properties": {
"departures": {
"type": "array",
"items": {
"type": "object",
"required": [
"scheduledDepartureTime",
"tripId"
],
"properties": {
"tripId": {
"type": "string",
"description": "Trip ID for follow-up onebusaway_get_trip calls."
},
"scheduledDepartureTime": {
"type": "number",
"description": "Scheduled departure time as Unix milliseconds."
}
},
"description": "A single scheduled departure.",
"additionalProperties": false
},
"description": "All departures for this direction."
},
"tripHeadsign": {
"type": "string",
"description": "Destination sign text."
}
},
"description": "A service direction at this stop.",
"additionalProperties": false
},
"description": "Service directions for this route at this stop."
},
"routeShortName": {
"type": "string",
"description": "Route short name."
}
},
"description": "A route with its scheduled departures from this stop.",
"additionalProperties": false
},
"description": "All routes with departures from this stop on this date."
},
"stopId": {
"type": "string",
"description": "The queried stop ID."
},
"stopName": {
"type": "string",
"description": "Stop name."
},
"timezone": {
"type": "string",
"description": "Validated timezone of the queried stop agency, or UTC when unavailable or invalid."
},
"selection": {
"type": "object",
"required": [
"total",
"returned"
],
"properties": {
"total": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Count before local selection."
},
"routeId": {
"type": "string",
"description": "Exact route ID, combined with departure bounds; omit or leave blank for all routes."
},
"returned": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Count after local selection."
},
"departureFromMs": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Inclusive departure lower bound in Unix milliseconds."
},
"departureBeforeMs": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Exclusive departure upper bound in Unix milliseconds; must exceed departureFromMs when both are supplied."
}
},
"description": "Applied selectors and departure counts before and after local selection; absent without selectors.",
"additionalProperties": false
},
"routeCount": {
"type": "number",
"description": "Number of routes with departures from this stop on this date."
},
"queriedStop": {
"type": "string",
"description": "Stop ID queried."
},
"serviceDateMs": {
"type": "number",
"description": "Unchanged upstream schedule-date marker in Unix milliseconds: query time when date is omitted or blank, instance-local midnight for an explicit date."
}
},
"additionalProperties": false
}{
"readOnlyHint": true
}onebusaway_get_schedule_for_route — Get Route Schedule
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"routeId"
],
"properties": {
"date": {
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"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])))$",
"description": "A real calendar date in YYYY-MM-DD form (e.g. \"2026-05-23\")."
}
],
"description": "Service date as YYYY-MM-DD (e.g. \"2026-05-23\"). Must be a real calendar date. Omit or leave blank for today."
},
"tripId": {
"type": "string",
"description": "Exact trip ID; omit or leave blank for no trip selector. Mutually exclusive with departure bounds."
},
"routeId": {
"type": "string",
"minLength": 1,
"description": "Agency-prefixed route ID (e.g. \"1_100259\"). Use onebusaway_find_routes or onebusaway_search_routes to discover IDs."
},
"departureFromSec": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Inclusive departure lower bound in GTFS seconds from midnight; values beyond 86400 are valid."
},
"departureBeforeSec": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Exclusive departure upper bound in GTFS seconds from midnight; must exceed departureFromSec when both are supplied."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"timezone",
"routeId",
"routeShortName",
"serviceDateMs",
"trips",
"queriedRoute",
"tripCount"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"date": {
"type": "string",
"description": "Date parameter used for the schedule request, if specified."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"route_not_found",
"rate_limited"
],
"description": "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."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"trips": {
"type": "array",
"items": {
"type": "object",
"required": [
"tripId",
"tripHeadsign",
"serviceId",
"stops"
],
"properties": {
"stops": {
"type": "array",
"items": {
"type": "object",
"required": [
"stopId",
"stopName",
"arrivalTime",
"departureTime"
],
"properties": {
"stopId": {
"type": "string",
"description": "Stop ID."
},
"stopName": {
"type": "string",
"description": "Stop name."
},
"arrivalTime": {
"type": "number",
"description": "Scheduled arrival time as seconds from midnight (GTFS format)."
},
"departureTime": {
"type": "number",
"description": "Scheduled departure time as seconds from midnight (GTFS format)."
}
},
"description": "A stop time along this trip.",
"additionalProperties": false
},
"description": "Stop sequence for this trip."
},
"tripId": {
"type": "string",
"description": "Trip ID for follow-up onebusaway_get_trip calls."
},
"serviceId": {
"type": "string",
"description": "Service calendar ID."
},
"tripHeadsign": {
"type": "string",
"description": "Destination sign text."
}
},
"description": "A single trip with its scheduled stop sequence.",
"additionalProperties": false
},
"description": "All trips for this route on this date, with their stop sequences."
},
"notice": {
"type": "string",
"description": "Guidance when no trips were found — e.g. no service on weekends or holiday schedule in effect."
},
"routeId": {
"type": "string",
"description": "The queried route ID."
},
"timezone": {
"type": "string",
"description": "Validated timezone of the referenced route agency, or UTC when unavailable or invalid."
},
"selection": {
"type": "object",
"required": [
"total",
"returned"
],
"properties": {
"total": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Count before local selection."
},
"tripId": {
"type": "string",
"description": "Exact trip ID; omit or leave blank for no trip selector. Mutually exclusive with departure bounds."
},
"returned": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Count after local selection."
},
"departureFromSec": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Inclusive departure lower bound in GTFS seconds from midnight; values beyond 86400 are valid."
},
"departureBeforeSec": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Exclusive departure upper bound in GTFS seconds from midnight; must exceed departureFromSec when both are supplied."
}
},
"description": "Applied selectors and trip counts before and after local selection; absent without selectors.",
"additionalProperties": false
},
"tripCount": {
"type": "number",
"description": "Number of trips for this route on this date."
},
"queriedRoute": {
"type": "string",
"description": "Route ID queried."
},
"serviceDateMs": {
"type": "number",
"description": "Unchanged upstream service-date marker (scheduleDate) as Unix milliseconds, identifying the route schedule service day."
},
"routeShortName": {
"type": "string",
"description": "Route short name."
}
},
"additionalProperties": false
}{
"readOnlyHint": true
}Prompts
0 advertised
Resources
3 advertised
Example: Metro Transit Stop 75403 — OneBusAway Stop
Stop metadata for Metro Transit stop 75403 (Puget Sound instance).
onebusaway://stop/1_75403Example: Metro Transit Route 100259 — OneBusAway Route
Route metadata for Metro Transit route 100259 (Puget Sound instance).
onebusaway://route/1_100259onebusaway-guide
Resolve and interpret onebusaway_* transit results when choosing a boarding stop, tracking a route or trip, checking disruptions, or reading service-day schedules. Use for multi-step questions where direction, agency, missing telemetry, or scheduled versus predicted times change the answer.
skill://onebusaway-guide/SKILL.mdonebusaway-stop — OneBusAway Stop
Stop metadata — name, coordinates, served routes, and wheelchair accessibility. Stop IDs use agency-prefixed format: {agencyId}_{localId} (e.g. "1_75403").
onebusaway://stop/{stopId}onebusaway-route — OneBusAway Route
Route metadata — short name, description, agency, schedule URL. Route IDs use agency-prefixed format: {agencyId}_{localId} (e.g. "1_100259").
onebusaway://route/{routeId}io.modelcontextprotocol/skills
skill://{+path}30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 714 ms
- 95th percentile latency
- 714 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 714 ms · metadata changed · 16 tool(s), 3 resource(s), 3 resource template(s), 0 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http onebusaway-mcp-server https://onebusaway.caseyjhand.com/mcpCodex
codex mcp add onebusaway-mcp-server --url https://onebusaway.caseyjhand.com/mcpCursor
{
"mcpServers": {
"onebusaway-mcp-server": {
"url": "https://onebusaway.caseyjhand.com/mcp"
}
}
}Cline
{
"mcpServers": {
"onebusaway-mcp-server": {
"type": "streamableHttp",
"url": "https://onebusaway.caseyjhand.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"onebusaway-mcp-server": {
"type": "http",
"url": "https://onebusaway.caseyjhand.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http onebusaway-mcp-server https://onebusaway.caseyjhand.com/mcpClaude Desktop
https://onebusaway.caseyjhand.com/mcpWindsurf
{
"mcpServers": {
"onebusaway-mcp-server": {
"serverUrl": "https://onebusaway.caseyjhand.com/mcp"
}
}
}Let your agent find its tools
Find servers like onebusaway-mcp-server from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.