Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, email [email protected] and we’ll put it right.

io.github.cyanheads/onebusaway-mcp-server

REMOTE · ONEBUSAWAY.CASEYJHAND.COM · 2 COMPONENTS · SCANNED AUG 3

Real-time transit stops, routes, arrivals, vehicle positions, and schedules via OneBusAway APIs.

+4 this week 72 Trust /100
Trust breakdown (6 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →

Endpoint Security66
  • The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
  • Authorisation not fully verified: no authorisation is required to call this server, and 15 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe. See how to fix → View diagnostics → Unverified
  • HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
  • The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
  • DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
Transport & Reachability100
Schema Quality & AI Usability84
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 2279 tokens (~134/item across 17 items; 15 tools + 2 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
  • Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

remote · onebusaway.caseyjhand.com

# add to Claude Code
claude mcp add --transport http cyanheads-onebusaway-mcp-server https://onebusaway.caseyjhand.com/mcp
# ~/.codex/config.toml
[mcp_servers.cyanheads-onebusaway-mcp-server]
url = "https://onebusaway.caseyjhand.com/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "cyanheads-onebusaway-mcp-server": {
      "type": "remote",
      "url": "https://onebusaway.caseyjhand.com/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add cyanheads-onebusaway-mcp-server --url https://onebusaway.caseyjhand.com/mcp --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  cyanheads-onebusaway-mcp-server:
    url: "https://onebusaway.caseyjhand.com/mcp"
// mcp.json
{
  "mcpServers": {
    "cyanheads-onebusaway-mcp-server": {
      "type": "http",
      "url": "https://onebusaway.caseyjhand.com/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 2 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

  • 31 Jul 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 30 Jul 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 29 Jul 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

  • 28 Jul 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

  • 27 Jul 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 26 Jul 26 68

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 3 Aug 2026 · Probed https://onebusaway.caseyjhand.com/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=caseyjhand.com CN=WE1,O=Google Trust Services,C=US 7 Jul 2026 5 Oct 2026 ECDSA 256 ECDSA-SHA256 5aad900eb2055a0b0ea55912ec19680c
SANs: caseyjhand.com, *.caseyjhand.com
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b
DNSSEC secure

Validation of onebusaway.caseyjhand.com. Secure

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
caseyjhand.com. present 2371 13 Verified
onebusaway.caseyjhand.com. Verified address RRset verified with the apex keys
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=63072000; includeSubDomains; preload
x-content-type-options nosniff
Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://onebusaway.caseyjhand.com/mcp Verified 200
http (plaintext) http://onebusaway.caseyjhand.com/mcp HTTPS enforced 301 https://onebusaway.caseyjhand.com/mcp
MCP tools — 15 exposed · ~1,992 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.

Tool Tokens
onebusaway_find_routes ~227

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.

NameTypeReqDescription
latnumberyesLatitude of the search center, in [-90, 90].
latSpannumberOptional bounding-box height in degrees, as an alternative to radius. Takes effect only when lonSpan is also set, in which case radius is ignored.
lonnumberyesLongitude of the search center, in [-180, 180].
lonSpannumberOptional bounding-box width in degrees, as an alternative to radius. Takes effect only when latSpan is also set, in which case radius is ignored.
querystringFilter by route name or number (e.g. "44" or "Link Light Rail").
radiusnumberSearch radius in meters. Must be positive; capped at 1600m. Defaults to 500m. Ignored when latSpan and lonSpan are both set.
NameTypeReqDescription
countnumberyesNumber of routes returned.
limitExceededbooleanyesTrue if more routes exist beyond the returned set; narrow the radius or set latSpan/lonSpan to see all.
noticestringGuidance when no routes matched — e.g. try a larger radius or different query.
querystringRoute name/number filter applied to the search, if any.
routesarrayyesRoutes found near the specified location.

No examples provided.

onebusaway_find_stops ~192

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").

NameTypeReqDescription
latnumberyesLatitude of the search center, in [-90, 90].
lonnumberyesLongitude of the search center, in [-180, 180].
querystringOptional stop code filter (the number printed on the stop sign, e.g. "75403"). When provided, returns only stops matching this code within the radius.
radiusnumberSearch radius in meters. Must be positive; capped at 1600m, beyond which results degrade. Defaults to 300m.
NameTypeReqDescription
countnumberyesNumber of stops returned.
limitExceededbooleanyesTrue if more stops exist beyond the returned set; narrow the radius to see all.
noticestringGuidance when results are empty or truncated — e.g. how to narrow the radius or verify the stop code.
querystringStop code filter applied to the search, if any.
stopsarrayyesStops within the search radius.

No examples provided.

onebusaway_get_alert ~104

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.

NameTypeReqDescription
situationIdstringyesSituation/alert ID from onebusaway_get_arrivals (situations[].id or arrivals[].situationIds[]).
NameTypeReqDescription
activeWindowsarrayyesTime windows when this alert is active.
affectsarrayyesStops, routes, trips, or agencies affected by this alert.
consequenceMessageyesHuman-readable consequence description (e.g. "Detour in effect"), or null.
consequencesarrayyesOperational consequences of this alert.
descriptionyesLonger description of the alert, or null.
idstringyesSituation ID.
reasonyesReason code from TPEG: equipmentReason, environmentReason, personnelReason, miscellaneousReason, securityAlert. Null when not provided.
severityyesSeverity level as reported by the agency, or null.
summarystringyesShort summary of the service alert.
urlyesURL for more information about this alert, or null.

No examples provided.

onebusaway_get_arrivals ~197

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").

NameTypeReqDescription
minutesAfternumberInclude arrivals expected within the next N minutes. Defaults to 35.
minutesBeforenumberInclude arrivals that departed up to this many minutes ago. Defaults to 5.
stopIdstringyesAgency-prefixed stop ID (e.g. "1_75403" for Metro Transit stop 75403). Use onebusaway_find_stops or onebusaway_search_stops to discover IDs.
NameTypeReqDescription
arrivalsarrayyesArrivals and departures at this stop within the requested time window.
countnumberyesNumber of arrivals in the time window.
currentTimenumberyesServer time as Unix milliseconds, for computing countdown timers.
noticestringGuidance when no arrivals were found — e.g. try expanding the time window or check for service alerts.
queriedStopstringyesStop ID queried.
situationsarrayyesActive service alerts referenced by arrivals at this stop.
stopIdstringyesThe queried stop ID.
stopNamestringyesStop name.
windowMinutesobjectyesTime window used for the arrivals query.

No examples provided.

onebusaway_get_block ~132

Fetch the full-day block schedule for a vehicle by block ID. A block is the ordered sequence of trips a single vehicle makes in one service day. Returns all trips in order with their stop times. Useful for 'when will this bus return?' and fleet tracking. Block IDs appear in onebusaway_get_trip responses under the schedule block field; obtain a tripId from onebusaway_get_arrivals first.

NameTypeReqDescription
blockIdstringyesBlock ID from a trip record. Obtain a tripId from onebusaway_get_arrivals, then call onebusaway_get_trip to get the blockId.
NameTypeReqDescription
activeServiceIdsarrayyesService calendar IDs active for this block today.
blockIdstringyesBlock ID.
inactiveServiceIdsarrayyesService calendar IDs not active for this block today.
tripsarrayyesAll trips in this block in order.

No examples provided.

onebusaway_get_route ~98

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").

NameTypeReqDescription
routeIdstringyesAgency-prefixed route ID (e.g. "1_100259"). Use onebusaway_find_routes or onebusaway_search_routes to discover IDs.
NameTypeReqDescription
agencyIdstringyesAgency ID that operates this route.
agencyNamestringyesAgency name that operates this route.
coloryesRoute brand color hex (without #), or null.
descriptionstringyesRoute description.
idstringyesAgency-prefixed route ID.
longNamestringyesFull route name.
shortNamestringyesThe number or short name displayed on vehicles (e.g. "44").
typenumberyesGTFS route type: 0=tram, 1=subway, 2=rail, 3=bus, 4=ferry, 5=cable_car.
urlyesAgency schedule page URL, or null.

No examples provided.

onebusaway_get_schedule_for_route ~128

Full-day schedule for a route — all trips, stop sequences, and departure times for the specified date (defaults to today). Returns up to all trips for the route. For live predictions, use onebusaway_get_arrivals at specific stops instead.

NameTypeReqDescription
datestringISO 8601 date (e.g. "2026-05-23"). Defaults to today.
routeIdstringyesAgency-prefixed route ID (e.g. "1_100259"). Use onebusaway_find_routes or onebusaway_search_routes to discover IDs.
NameTypeReqDescription
datestringDate parameter used for the schedule request, if specified.
noticestringGuidance when no trips were found — e.g. no service on weekends or holiday schedule in effect.
queriedRoutestringyesRoute ID queried.
routeIdstringyesThe queried route ID.
routeShortNamestringyesRoute short name.
serviceDateMsnumberyesService date as Unix milliseconds.
tripCountnumberyesNumber of trips for this route on this date.
tripsarrayyesAll trips for this route on this date, with their stop sequences.

No examples provided.

onebusaway_get_schedule_for_stop ~133

Full-day departure schedule for a stop. Lists every departure by route and direction for the specified date (defaults to today). Useful for planning or when real-time data isn't needed. For live predictions, use onebusaway_get_arrivals instead.

NameTypeReqDescription
datestringISO 8601 date (e.g. "2026-05-23"). Defaults to today in the agency's timezone.
stopIdstringyesAgency-prefixed stop ID (e.g. "1_75403"). Use onebusaway_find_stops or onebusaway_search_stops to discover IDs.
NameTypeReqDescription
datestringDate parameter used for the schedule request, if specified.
noticestringGuidance when no routes were found — e.g. no service on weekends or holiday schedule in effect.
queriedStopstringyesStop ID queried.
routeCountnumberyesNumber of routes with departures from this stop on this date.
routesarrayyesAll routes with departures from this stop on this date.
serviceDateMsnumberyesService date as Unix milliseconds (start of service day).
stopIdstringyesThe queried stop ID.
stopNamestringyesStop name.

No examples provided.

onebusaway_get_stop ~128

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).

NameTypeReqDescription
stopIdstringyesAgency-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.
NameTypeReqDescription
codestringyesThe stop code printed on the sign.
directionstringyesCompass direction of travel at this stop (e.g. "NW").
idstringyesAgency-prefixed stop ID.
latnumberyesLatitude of the stop.
lonnumberyesLongitude of the stop.
namestringyesStop name.
routeIdsarrayyesIDs of routes that serve this stop. Use with onebusaway_get_arrivals or onebusaway_get_schedule_for_stop.
wheelchairBoardingstringyesWheelchair boarding status.

No examples provided.

onebusaway_get_trip ~127

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.

NameTypeReqDescription
includeSchedulebooleanWhether to include the full stop sequence with times. Defaults to true.
serviceDateMsnumberService date as Unix milliseconds (midnight local time). Only needed for trips from a previous service day. Omit to use today.
tripIdstringyesTrip ID from an arrivals response or schedule lookup.
NameTypeReqDescription
blockIdyesBlock 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.
routeShortNamestringyesRoute short name (e.g. "44").
scheduleyesFull stop sequence with times, or null if includeSchedule=false.
situationsarrayyesActive situation IDs affecting this trip.
statusobjectyesReal-time status of the trip.
tripHeadsignstringyesDestination sign text.
tripIdstringyesThe queried trip ID.

No examples provided.

onebusaway_get_vehicles ~143

Real-time positions of all active vehicles for an agency. Optionally filter to a single route (client-side). Returns GPS coordinates, heading, schedule deviation, and current trip. Useful for "where are all the buses on route X right now?" Use agencyId values from onebusaway_list_agencies.

NameTypeReqDescription
agencyIdstringyesAgency ID (e.g. "1" for Metro Transit, "40" for Sound Transit). Use onebusaway_list_agencies to discover IDs.
routeIdstringOptional agency-prefixed route ID to filter results to one route. Filtering is client-side — all agency vehicles are fetched first.
NameTypeReqDescription
agencyIdstringyesAgency ID queried.
countnumberyesNumber of vehicles returned after any route filter.
limitExceededbooleanyesTrue if the upstream capped the vehicle list — some vehicles were omitted. This endpoint has no pagination to retrieve them.
noticestringGuidance when no vehicles were found — e.g. the route may not be currently active, or the agency may not have real-time data.
routeIdstringRoute ID filter applied client-side, if any.
vehiclesarrayyesActive vehicles for the agency, optionally filtered by route.

No examples provided.

onebusaway_list_agencies ~61

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.

Input schema present but exposes no named parameters.

NameTypeReqDescription
agenciesarrayyesAll agencies served by this OneBusAway instance.
countnumberyesNumber of transit agencies returned.
limitExceededbooleanyesTrue if the upstream capped the agency list — some agencies were omitted. This endpoint has no pagination to retrieve them.
noticestringGuidance when no agencies were returned.

No examples provided.

onebusaway_list_routes_for_agency ~97

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.

NameTypeReqDescription
agencyIdstringyesAgency ID (e.g. "1" for Metro Transit, "40" for Sound Transit). Use onebusaway_list_agencies to discover IDs.
NameTypeReqDescription
agencyIdstringyesAgency ID queried.
countnumberyesNumber of routes returned for this agency.
limitExceededbooleanyesTrue if the upstream capped the route list — some routes were omitted. This endpoint has no pagination to retrieve them.
noticestringGuidance when no routes were found — verify the agency ID with onebusaway_list_agencies.
routesarrayyesAll routes operated by this agency.

No examples provided.

onebusaway_search_routes ~118

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.

NameTypeReqDescription
maxCountintegerMaximum number of results to return. A positive integer, at most 100. Defaults to 10.
querystringyesRoute name or number (e.g. "44", "Link", or "RapidRide").
NameTypeReqDescription
countnumberyesNumber of routes returned.
limitExceededbooleanyesTrue if more routes match than were returned; raise maxCount or refine the query to see all.
noticestringGuidance when no routes matched — e.g. try onebusaway_find_routes with coordinates, or onebusaway_list_routes_for_agency.
querystringyesRoute name/number query sent to the API.
routesarrayyesRoutes matching the search query.

No examples provided.

onebusaway_search_stops ~107

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.

NameTypeReqDescription
maxCountintegerMaximum number of results to return. A positive integer, at most 100. Defaults to 10.
querystringyesStop name fragment or stop code (e.g. "University Way" or "75403").
NameTypeReqDescription
countnumberyesNumber of stops returned.
limitExceededbooleanyesTrue if more stops match than were returned; raise maxCount or refine the query to see all.
noticestringGuidance when no stops matched — e.g. try a different name fragment or use onebusaway_find_stops with coordinates.
querystringyesSearch query sent to the API.
stopsarrayyesStops matching the search query.

No examples provided.