wsdot-mcp-server
Server Details
WA highway conditions, ferry schedules, vessel locations, toll rates, and border waits via MCP.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- cyanheads/wsdot-mcp-server
- GitHub Stars
- 1
- Server Listing
- wsdot-mcp-server
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.7/5 across 12 of 12 tools scored.
Each tool targets a distinct WSDOT data source: border waits, ferry alerts/routes/schedule/terminals/space/vessels, mountain passes, toll rates, travel times, highway alerts, and cameras. There is no overlap in purpose; even the two alert tools are clearly separated by domain (ferry vs highway).
All tools follow a consistent wsdot_{verb}_{resource} pattern, with verbs limited to 'get' and 'search' and resource names in lowercase snake_case. The pattern is predictable and easy to extend.
With 12 tools, the set is well within the ideal 3-15 range. Each tool corresponds to a distinct data category, and the number feels appropriate for the broad scope of statewide transportation data without being bloated.
The tool set covers the core WSDOT data needs: real-time operational data (border waits, travel times, tolls, mountain passes, ferry space/vessel locations), planned schedules (ferry routes/schedule), and alerts/cameras for incidents. No significant dead ends or missing operations for the stated purpose.
Available Tools
12 toolswsdot_get_border_waitsGet Border Wait TimesARead-onlyInspect
Returns current vehicle wait times at WA→Canada land border crossings: I-5 (Peace Arch, Blaine), SR 543 (Pacific Highway, Blaine), SR 539 (Lynden), and SR 9 (Sumas). Each crossing reports a general-purpose lane and a Nexus lane; SR 539 adds a truck lane and SR 543 adds truck and FAST truck lanes — eleven entries in crossings[], one per lane. crossingName is a route code (e.g. "I5", "I5Nexus", "SR543Trucks"); the readable name is in location.description. Wait times are in minutes. A crossing reporting no current data is still returned — only waitTimeInMinutes is omitted. Use for "how long is the border wait?" questions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Optional notice when no crossing data is available. Absent on normal results. |
| crossings | Yes | All WA/Canada border crossing wait times. |
| totalCount | Yes | Total number of crossings returned. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though readOnlyHint=true is annotated, the description adds rich behavioral details: wait times in minutes, the exact number and composition of lane entries (eleven across the four crossings), the naming convention (route codes vs. readable names), and the behavior when a crossing lacks current data (still returned, only waitTimeInMinutes omitted). This goes well beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: it lists crossings, explains lane types, clarifies naming, specifies units, and describes missing-data behavior. It is front-loaded with the primary purpose and uses a clear, structured format (colons, em-dashes, parenthetical examples). No redundant text or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no parameters, the tool's response is multi-faceted (11 lane entries with route codes and readable names) and the description thoroughly explains the response semantics, including edge cases like no current data. Given that an output schema exists, the description adds the necessary semantic layer to make the tool fully usable without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description does not need to explain parameter semantics, and it appropriately focuses on the output structure instead. There is no ambiguity about how to call the tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states exactly what the tool does with a specific verb and resource: 'Returns current vehicle wait times at WA→Canada land border crossings', listing all four crossings (I-5, SR 543, SR 539, SR 9). It is clearly distinct from sibling tools focused on ferries, mountain passes, tolls, travel times, and cameras.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit use-case guidance is provided: 'Use for "how long is the border wait?" questions.' This clearly signals when to invoke this tool, though it does not explicitly mention alternatives beyond the obvious domain separation from the listed siblings. No when-not-to-use is stated, but the unique scope makes it unnecessary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wsdot_get_ferry_alertsGet Ferry AlertsARead-onlyInspect
Returns active WSF ferry service disruptions, delays, and bulletins. Each alert carries a one-line summary plus the bulletin title, kind, and full body — the body is where detail such as a replacement sailing appears. Each alert includes impacted route IDs — cross-reference with wsdot_get_ferry_routes to resolve route IDs to human-readable route names. Some IDs (seasonal, San Juan interisland, or international Sidney B.C. routes) may not appear in wsdot_get_ferry_routes for a given date.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| alerts | Yes | Active ferry service alerts and disruptions. |
| notice | No | Optional notice when no alerts are active. Absent when alerts are present. |
| totalCount | Yes | Total number of active alerts. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses the alert structure (one-line summary, title, kind, full body), explains that the body contains details like replacement sailings, and notes the important caveat that seasonal/San Juan/Sidney route IDs may be absent. This is substantial behavioral context beyond what the annotation alone provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose, then expands into useful details about alert contents and route-ID resolution. Every sentence adds value without redundancy, filler, or excessive length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter, read-only alert retrieval tool with an output schema, the description is fully complete. It explains what the alerts contain, how to interpret route IDs, and where to find additional detail, giving the agent everything needed to invoke and use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the input schema is empty. Per the rubric, 0 parameters receives a baseline of 4. The description appropriately focuses on output semantics rather than parameter behavior, and no additional parameter documentation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Returns active WSF ferry service disruptions, delays, and bulletins.' It clearly identifies the tool's output as alerts and differentiates it from sibling tools like ferry routes, schedules, and terminals by emphasizing active disruptions and bulletin content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context by instructing users to cross-reference impacted route IDs with wsdot_get_ferry_routes and warns that some route IDs may not appear. It lacks an explicit when-not-to-use comparison with the sibling wsdot_search_alerts, but for a zero-parameter read-only alerts tool, the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wsdot_get_ferry_routesGet Ferry RoutesARead-onlyInspect
Returns the main WSF ferry routes operating on a given date. Route IDs correspond to impactedRouteIds in ferry alerts from wsdot_get_ferry_alerts, though some alert route IDs (seasonal, San Juan interisland, or Sidney B.C.) may not appear in this list. To get terminal IDs for schedule and space lookups, use wsdot_get_ferry_terminals.
| Name | Required | Description | Default |
|---|---|---|---|
| tripDate | No | Date for which to list routes, in ISO 8601 format (YYYY-MM-DD). Defaults to today if omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Optional notice when no routes are available for the date. Absent on normal results. |
| routes | Yes | Ferry routes operating on the requested date. |
| tripDate | Yes | Date for which routes were retrieved (ISO 8601). |
| totalCount | Yes | Total number of routes returned. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses that not all alert route IDs map to returned routes, adding valuable behavioral context. This transparency helps the agent understand the tool's coverage limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the core purpose and caveats, with a direct pointer to an alternative tool. No extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description adequately covers purpose, relationships, and limitations. It provides enough context for correct invocation without over-explaining return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, tripDate, is fully described in the schema with format and default. The description does not add new information beyond that, so it meets the baseline for 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the tool returns 'main WSF ferry routes operating on a given date,' with a clear verb and resource. It distinguishes itself from siblings by relating route IDs to ferry alerts and directing users to another tool for terminal IDs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool (for routes on a given date) and provides exclusion criteria (seasonal, interisland, Sidney B.C. routes may not appear). It also advises using wsdot_get_ferry_terminals for terminal IDs, offering clear guidance on alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wsdot_get_ferry_scheduleGet Ferry ScheduleARead-onlyInspect
Returns departure times for a specific WSF ferry route on a given date. Requires numeric terminal IDs — use wsdot_get_ferry_terminals to resolve terminal names to IDs. Set remainingOnly to true to show only future departures for today (useful for "next ferry" queries). For future dates, all sailings for that day are returned. Sailing times are ISO 8601 UTC while tripDate is the Pacific service day, so evening sailings carry the next UTC date — convert to America/Los_Angeles before quoting a clock time. Cancellations are not carried here — WSF drops a cancelled sailing from the schedule instead of flagging it, so a listed sailing is not confirmation that it will run. Check wsdot_get_ferry_alerts for disruptions; those are scoped to a route, not an individual sailing.
| Name | Required | Description | Default |
|---|---|---|---|
| tripDate | No | Date in ISO 8601 format (YYYY-MM-DD). Defaults to today if omitted. | |
| remainingOnly | No | When true, returns only future sailings for today. Ignored for future dates. Default: false. | |
| arrivingTerminalId | Yes | Numeric ID of the arriving terminal. | |
| departingTerminalId | Yes | Numeric ID of the departing terminal. Use wsdot_get_ferry_terminals to look up terminal IDs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Optional notice when no sailings are found — e.g. invalid terminal pair or no service for this date. Absent when sailings are present. |
| sailings | Yes | Scheduled sailings for this route and date. |
| tripDate | Yes | Date of the schedule (ISO 8601). |
| remainingOnly | Yes | Whether the result shows only remaining sailings. |
| totalSailings | Yes | Total number of sailings returned. |
| arrivingTerminalName | No | Arriving terminal name. |
| departingTerminalName | No | Departing terminal name. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description reveals critical behavioral traits: sailing times are in UTC while tripDate is a Pacific service day, requiring timezone conversion; cancellations are silently dropped rather than flagged; and remainingOnly is only meaningful for today. This adds substantial contextual information not available from annotations alone, and no contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet comprehensive, with each sentence serving a purpose. It front-loads the main function, then covers prerequisites, parameter semantics, and caveats in a logical order. No redundant or filler content is present; every sentence adds meaningful guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and the existence of an output schema, the description is exceptionally complete. It covers the core purpose, necessary prerequisite (terminal IDs), parameter nuances, timezone handling, and a critical limitation (cancellations not flagged) along with an alternative tool. This fully equips an AI agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema describes all parameters, the description adds value beyond it. It clarifies that tripDate refers to the Pacific service day (not UTC), and that remainingOnly is specifically useful for 'next ferry' queries, which is not in the schema. This enhances understanding of parameter behavior beyond the basic field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Returns departure times for a specific WSF ferry route on a given date.' It clearly distinguishes this from sibling tools by noting it requires numeric terminal IDs and pointing to wsdot_get_ferry_terminals for ID resolution, which is unique to this tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs when to use this tool and when to use alternatives: it says to use wsdot_get_ferry_terminals to resolve terminal IDs, and wsdot_get_ferry_alerts for disruptions. It also gives a concrete use case ('next ferry' queries) for remainingOnly, clarifying when that parameter is beneficial. This provides clear context and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wsdot_get_ferry_terminalsGet Ferry TerminalsARead-onlyInspect
Returns all WSF ferry terminals with their numeric IDs, names, and abbreviations. Call this first to resolve human-readable terminal names (e.g. "Bainbridge Island", "Seattle", "Kingston") to the numeric terminal IDs required by the schedule and space tools. The terminal list is small (20 terminals) and rarely changes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Optional notice when no terminal data is available. Absent on normal results. |
| terminals | Yes | All WSF ferry terminals. |
| totalCount | Yes | Total number of terminals returned. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true, and the description reinforces a read-only operation. It adds valuable behavioral context beyond annotations: the list has 20 terminals and rarely changes, which helps the agent understand the tool's stability and scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core return value, then usage guidance. No wasted words; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only list tool with an output schema, the description fully covers purpose, usage context, and expected behavior. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has zero parameters, so there is nothing to document. The description handles this well by not inventing unnecessary detail; baseline 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool returns all WSF ferry terminals with IDs, names, and abbreviations. It also explicitly distinguishes this from sibling tools by noting it resolves terminal names to numeric IDs required by schedule and space tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit instruction to call this tool first to resolve terminal IDs for use with other tools. Also adds context that the list is small and rarely changes, setting expectations for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wsdot_get_mountain_passesGet Mountain Pass ConditionsARead-onlyInspect
Returns current road conditions for all Washington State mountain passes: status, weather, road condition, traction laws, temperature, and elevation. Includes all 16 passes (Snoqualmie, Stevens, White, Blewett, Cayuse, etc.). Use for "is the pass open?", traction law status, or winter driving planning.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Optional notice when no pass data is available — e.g. API temporarily unavailable. Absent on normal results. |
| passes | Yes | All WA mountain pass conditions. |
| totalCount | Yes | Total number of passes returned. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description aligns with a read-only operation. It adds functional context beyond annotations by listing the specific data returned (status, weather, temperature, elevation) and confirming coverage of all 16 passes, which helps set expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with front-loaded purpose. The first sentence states the core function and data fields; the second adds scope (all 16 passes) and practical use cases. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a zero-parameter tool with an output schema and read-only annotation, the description is comprehensive. It covers scope (all mountain passes), key data fields, and common use cases, leaving no significant gaps for selection or invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is 100%, so there is no need for parameter explanation. The baseline of 4 applies, and the description appropriately focuses on output rather than parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Returns current road conditions for all Washington State mountain passes' with specific data fields (status, weather, traction laws, etc.). It distinguishes itself from sibling tools (ferries, tolls, travel times) by explicitly focusing on mountain passes and listing the passes covered.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit use cases: 'Use for "is the pass open?", traction law status, or winter driving planning.' This clearly indicates when to invoke this tool, and the sibling list shows no overlapping functionality, so no alternatives are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wsdot_get_terminal_spaceGet Terminal SpaceARead-onlyInspect
Returns real-time drive-up and reservable vehicle space available at WSF terminals for upcoming sailings. Use for "will I make the ferry?" or "how full is the next sailing?" questions. Optionally filter to a specific terminal by ID (use wsdot_get_ferry_terminals for the ID). driveUpSpaceCount is the key field — zero means the drive-up lane is full. Destinations are arrivingTerminalIds, not the itineraryLabel string: a sailing can serve several terminals, and those IDs are what wsdot_get_ferry_schedule accepts. Results are paged by terminal (default 5, max 20): offset/limit select whole terminals and totalCount counts matching terminals, not sailings — every sailing of a returned terminal is included, so page size varies with how many departures each terminal carries.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum terminals to return in this page (1–20). Defaults to 5. Counts terminals, not sailings. | |
| offset | No | Zero-based index of the first terminal to return, for paging. Defaults to 0. | |
| departingTerminalId | No | Filter to a specific terminal by numeric ID. Omit to return all terminals. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Informational note about the page window, or guidance when no terminal space data is available, the filter matched nothing, or the offset ran past the end. |
| hasMore | Yes | True when more terminals remain beyond the current page. |
| terminals | Yes | Terminal space availability by terminal. |
| nextOffset | Yes | Offset to pass to retrieve the next page, or null when this is the last page. |
| totalCount | Yes | Total terminals matching the filter across all pages (not just this page). Counts terminals, not sailings. |
| terminalFilter | No | The terminal ID filter applied, or absent if no filter was used. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond readOnlyHint=true, the description discloses detailed behavior: driveUpSpaceCount's meaning (zero = full), paging by terminal (default 5, max 20), offset/limit counting terminals, totalCount counting matching terminals, and varying page sizes. This is rich context that annotations don't provide, and it contradicts nothing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense yet efficient—every sentence earns its place. It opens with the primary action, then covers typical questions, key fields, paging semantics, and caveats, all in a well-organized paragraph without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no required parameters, is read-only, and has an output schema. The description covers all essential behavioral aspects: what the data represents, how to interpret the key field, the paging model, and how to coordinate with sibling tools. Nothing important is left unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds meaningful nuance: offset/limit select whole terminals, totalCount counts terminals not sailings, and every sailing of a returned terminal is included. This goes beyond the schema's per-parameter descriptions, giving real semantic insight into the paging parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns real-time drive-up and reservable vehicle space at WSF terminals for upcoming sailings, and explicitly names the use cases ('will I make the ferry?'). It distinguishes itself from siblings by referencing wsdot_get_ferry_terminals for terminal IDs and wsdot_get_ferry_schedule for schedule queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance ('Use for...'), mentions the optional terminal filter with a pointer to wsdot_get_ferry_terminals, and clarifies that arrivingTerminalIds are what the schedule tool expects, steering away from itineraryLabel. This effectively differentiates from alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wsdot_get_toll_ratesGet Toll RatesARead-onlyInspect
Returns current dynamic toll rates for WA express lanes and tolled facilities: SR 99 (WSDOT Tunnel), SR 167 HOT Lanes, I-405 Express Lanes, SR 509 tolled segment, and the SR 520 Bridge. Rates are time-banded and change dynamically based on traffic conditions. stateRoute is a bare, zero-padded route number ("099", "405") — the posted designation is in the rendered text. Results are paged — pass offset/limit to page through the full set (the notice reports the next offset).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum toll rates to return in this page (1–500). Defaults to 50. | |
| offset | No | Zero-based index of the first toll rate to return, for paging. Defaults to 0. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rates | Yes | Current toll rates for all active tolled facilities. |
| notice | No | Informational note about the page window, or guidance when no toll rate data is available or the offset ran past the end. |
| hasMore | Yes | True when more toll rates remain beyond the current page. |
| nextOffset | Yes | Offset to pass to retrieve the next page, or null when this is the last page. |
| totalCount | Yes | Total toll rate entries across all pages (not just this page). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as readOnlyHint. The description adds significant behavioral context: rates are time-banded and dynamic, results are paged with offset/limit, and the stateRoute field format is explained. This goes beyond the annotation and helps the agent understand response semantics and paging behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each earning its place: the first lists covered facilities, the second explains dynamic time-banding, and the third covers stateRoute formatting and paging. It is dense but free of fluff, well-structured and front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and the readOnly annotation is present, the description provides all needed context: facility list, dynamic nature, paging details, and a note about the stateRoute field. Nothing essential is missing for an agent to correctly invoke and understand the result set.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers both parameters with detailed descriptions, so baseline is 3. The description adds that offset/limit are used for paging and mentions 'the notice reports the next offset', which is useful but only slightly enhances the schema's existing documentation. No additional parameter-level detail is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns current dynamic toll rates for specific WA facilities, listing them explicitly. The verb 'Returns' plus the resource 'current dynamic toll rates' makes the purpose unambiguous and distinguishes it from sibling tools like ferry schedules or travel times.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context that this tool is for toll rates on specific routes, which implicitly tells when to use it. However, it does not explicitly mention alternatives or when not to use it, though the unique scope makes exclusions unnecessary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wsdot_get_travel_timesGet Travel TimesARead-onlyInspect
Returns current vs. average travel times for named WA highway corridors (I-5, I-90, SR 520, SR 99, I-405, SR 167, etc.). Use for "how congested is I-5?" or commute time estimates. The route filter matches two ways: a route designation ("I-5", "5", "SR 520") returns every corridor measured on that route, and any text also matches corridor names ("Everett"). When current time exceeds average, the corridor is congested. Results are paged — pass offset/limit to page through the full set (the notice reports the next offset).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum corridors to return in this page (1–500). Defaults to 50. | |
| route | No | Optional filter. A route designation — "I-5", "5", "005", "SR 520", "520" — matches every corridor whose start or end point is on that route, whichever form the feed reports. Any text also matches the corridor name as a case-insensitive substring, so "Everett" finds the Seattle-Everett corridors. Omit to return all corridors. | |
| offset | No | Zero-based index of the first corridor to return, for paging. Defaults to 0. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Informational note about the page window, or guidance when no corridors matched the route filter or the offset ran past the end. |
| hasMore | Yes | True when more corridors remain beyond the current page. |
| corridors | Yes | Travel time corridors matching the filter. |
| nextOffset | Yes | Offset to pass to retrieve the next page, or null when this is the last page. |
| totalCount | Yes | Total corridors matching the filter across all pages (not just this page). |
| routeFilter | No | The route name filter applied (lowercased), or absent if no filter was used. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description adds meaningful behavioral details: the route filter's dual matching behavior, the congestion interpretation ('When current time exceeds average, the corridor is congested'), and pagination semantics with offset/limit and the notice for next offset. No annotation contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it states the core function, then use cases, then behavioral details. Each sentence adds useful information without redundancy, and the length is appropriate for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema and available output schema, the description is complete: it covers what the tool returns, when to use it, how filtering works, how congestion is determined, and how paging works. No critical guidance is missing for correct invocation and interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers 100% of parameters with detailed descriptions, so the baseline is 3. The description mentions route matching and paging, but the schema already explains these thoroughly; the only marginal addition is the 'notice reports the next offset' detail, which does not elevate the score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Returns current vs. average travel times for named WA highway corridors.' It lists concrete routes and clearly distinguishes this from sibling tools like ferry alerts or toll rates by focusing on highway corridor travel times.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear use cases: 'Use for "how congested is I-5?" or commute time estimates.' It does not explicitly name alternatives or exclusion criteria, but the mention of corridor-specific congestion makes the intended scenario clear relative to the other WSDOT tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wsdot_get_vessel_locationsGet Vessel LocationsARead-onlyInspect
Returns real-time AIS positions, speed, heading, ETA, and dock status for all active WSF vessels. Use for "where is the ferry now?", vessel tracking, or checking if a vessel is in service. Position data may lag by 30–60 seconds. Many fields are null for vessels not currently operating.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Optional notice when no vessel data is available. Absent on normal results. |
| vessels | Yes | All WSF vessels with real-time position data. |
| totalCount | Yes | Total number of vessels returned. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the readOnlyHint annotation, including real-time data delays (30–60 seconds) and that many fields are null for non-operating vessels. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that clearly state the tool's output and usage. Every sentence adds value, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description appropriately focuses on behavior and usage. It covers real-time nature, lag, and null fields, which is sufficient for a parameterless tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the description does not need to explain them. The baseline for 0 params is 4, and the description adds value by detailing output fields and caveats.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns real-time AIS positions, speed, heading, ETA, and dock status for active WSF vessels, and mentions example use cases. It is distinct from sibling tools (e.g., wsdot_get_ferry_alerts, wsdot_get_border_waits) which cover different data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use for "where is the ferry now?", vessel tracking, or checking if a vessel is in service.' It also notes caveats like data lag and null fields. It does not explicitly mention when not to use, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wsdot_search_alertsSearch Highway AlertsARead-onlyInspect
Returns active WA highway alerts: incidents, construction, closures, and restrictions. Filter by state route ("I-90", "90", "SR 520", or "520" all work), WSDOT region (Northwest, Olympic, Southwest, South Central, North Central, Eastern), or milepost range, matched against the alert's full extent. Omit all filters to return all current statewide alerts. Results are ordered by alertId and paged — pass offset/limit to page through the full set (the notice reports the next offset).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum alerts to return in this page (1–500). Defaults to 50. | |
| offset | No | Zero-based index of the first alert to return, for paging. Defaults to 0. | |
| region | No | WSDOT region name as it appears in alert data: "Northwest", "Olympic", "Southwest", "South Central", "North Central", or "Eastern". Matching is case-insensitive. | |
| stateRoute | No | State route to filter by. Accepts natural forms — "I-90", "90", "090", "SR 520", "520" — matched case- and space-insensitively to the route number. A route-type prefix is compared only when both sides carry one, so "SR 26" never matches US 26 while a bare "26" matches either. Omit to include all routes. | |
| endMilepost | No | End of the milepost range. Matched by extent overlap like startMilepost, so an alert beginning inside the range and continuing past it is returned. | |
| startMilepost | No | Start of the milepost range. An alert matches when its extent overlaps the range, so a closure running from MP 10 to MP 30 is returned for a range starting at MP 20. Either bound may be given alone. Alerts reporting no milepost are always included. |
Output Schema
| Name | Required | Description |
|---|---|---|
| alerts | Yes | Matching highway alerts. |
| notice | No | Informational note about the page window, or guidance when no alerts matched the filters or the offset ran past the end. |
| hasMore | Yes | True when more alerts remain beyond the current page. |
| nextOffset | Yes | Offset to pass to retrieve the next page, or null when this is the last page. |
| totalCount | Yes | Total alerts matching the filters across all pages (not just this page). |
| appliedFilters | Yes | Active filters applied to the alert search. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, so the safe-read nature is known. The description adds valuable behavioral detail: matching against the alert's full extent, ordering by alertId, pagination with offset/limit, and the notice reporting the next offset. This goes beyond the annotation without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each earning its place: purpose, filter options, default behavior, and pagination. It is front-loaded with the core action and avoids redundancy. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 6 optional parameters and an output schema, so return values are covered elsewhere. The description covers all key user-facing behaviors: what alerts are returned, how filters work, how to get all alerts, and how paging works. This is complete for a search/list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter already thoroughly described (e.g., startMilepost explains overlap matching). The main description adds no new parameter semantics beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Returns active WA highway alerts: incidents, construction, closures, and restrictions.' This clearly distinguishes it from sibling tools like ferry alerts or mountain passes. The scope (active, statewide) and filtering capability are explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: filter by route, region, or milepost, and 'Omit all filters to return all current statewide alerts.' It also explains pagination behavior. It does not explicitly contrast with alternatives, but sibling tool names make the domain boundaries obvious, so exclusions are implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wsdot_search_camerasSearch Highway CamerasARead-onlyInspect
Returns WSDOT highway camera locations, descriptions, and image URLs. Camera images are copyright WSDOT — only metadata and image URLs are returned, not image bytes. Filter by state route ("I-90", "90", "SR 520", or "520" all work), WSDOT region, or milepost range. Results are ordered by cameraId and paged — pass offset/limit to page through the full set (the notice reports the next offset).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum cameras to return in this page (1–500). Defaults to 50. | |
| offset | No | Zero-based index of the first camera to return, for paging. Defaults to 0. | |
| region | No | WSDOT region code: NW (Northwest), SW (Southwest), OL (Olympic), ER (Eastern), SC (South Central), OS (Olympic South), NC (North Central), or WA (statewide). Matching is case-insensitive. | |
| stateRoute | No | State route to filter by. Accepts natural forms — "I-90", "90", "090", "SR 520", "520" — matched case- and space-insensitively to the route number. Camera road names carry a route-type prefix, which is compared when the filter carries one too: "SR 26" excludes US 26, while a bare "26" returns both. A lettered suffix is part of the route, so "US 97" excludes US 97A. Omit to include all routes. | |
| endMilepost | No | End of milepost range to filter cameras. | |
| startMilepost | No | Start of milepost range to filter cameras. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Informational note about the page window, copyright, or empty results. Absent when not applicable. |
| cameras | Yes | Camera metadata and image URLs. Images are copyright WSDOT. |
| hasMore | Yes | True when more cameras remain beyond the current page. |
| nextOffset | Yes | Offset to pass to retrieve the next page, or null when this is the last page. |
| totalCount | Yes | Total cameras matching the filters across all pages (not just this page). |
| appliedFilters | Yes | Active filters applied to the camera search. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses that camera images are copyrighted, that only metadata/URLs are returned, and that results are ordered by cameraId with pagination reporting the next offset. This gives the agent concrete expectations about response behavior and limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, covering purpose, limitations, filters, and pagination in three sentences with no redundant detail. Every sentence adds actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a rich input schema, output schema, and readOnlyHint annotation, the description complements structured data by explaining overall behavior, pagination, and the metadata-only constraint. It is comprehensive for a search tool, though it could theoretically mention that all filters are optional, which the schema already implies.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides detailed descriptions for all six parameters, so the description adds little new parameter-specific information. It summarizes filter options (state route, region, milepost) but does not elaborate beyond what the schema covers, warranting the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Returns WSDOT highway camera locations, descriptions, and image URLs'), clearly distinguishing it from sibling tools like ferry or toll tools. It also clarifies output scope (metadata/URLs, not image bytes), leaving no ambiguity about the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states when to use the tool—any need for WSDOT camera info—and adds an exclusion that only metadata and URLs are returned, not image bytes, so users know not to expect images. It also provides paging instructions and mentions supported filter types, though it does not explicitly name alternative sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Servers
- Alicense-qualityAmaintenanceProvides live California road conditions, route planning, and an AI assistant over MCP, enabling natural-language queries about traffic, closures, chain controls, and more.3MIT
- AlicenseBqualityDmaintenanceProvides real-time access to BC highway conditions, road closures, weather alerts, and traffic incidents through the Open511-DriveBC API with smart caching.4MIT
- Alicense-qualityCmaintenanceMCP server for ANWB traffic information, route planning, and location search in the Netherlands. Provides real-time traffic incidents, route calculation with turn-by-turn directions, and location search via natural language.6MIT
- AlicenseAqualityBmaintenanceEnables querying Norwegian traffic messages (roadworks, closures, detours) from Statens vegvesen, filtered by route and time window. Supports both current and future travel times, with tools for route-based and general searches.3MIT
Your Connectors
Sign in to create a connector for this server.