Skip to main content
Glama

Get Toll Rates

wsdot_get_toll_rates
Read-only

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. Filter to one facility with stateRoute ("SR 520", "520", "I-405", or "405" all work). Each row reports stateRoute as the bare, zero-padded number the feed carries ("099", "405") — the posted designation is in the rendered text. Results are paged — pass offset/limit to page through the matching set. A page ends at limit or at a 24,000-byte response budget, whichever comes first; the notice reports the next offset.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum toll rates to return in this page (1–500). Defaults to 50. A large page ends sooner, at the 24,000-byte response budget.
offsetNoZero-based index of the first toll rate to return, for paging. Defaults to 0.
stateRouteNoTolled route to filter by. Accepts natural forms — "SR 520", "520", "0520", "I-405", "405" — matched case- and space-insensitively against each row's posted designation, so a route-type prefix must agree: "SR 405" matches nothing because the I-405 Express Lanes are an Interstate. A route with no tolled facility returns an empty page whose notice names the tolled routes. Omit to include every facility.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
errorNoPresent when the call failed. Absent on success.
ratesNoCurrent toll rates for the matching tolled facilities.
noticeNoInformational note about the page window, or guidance when no toll rate data is available, the route has no tolled facility, or the offset ran past the end.
hasMoreNoTrue when more toll rates remain beyond the current page.
nextOffsetNoOffset to pass to retrieve the next page, or null when this is the last page.
totalCountNoTotal toll rate entries matching the filter across all pages (not just this page).
appliedFiltersNoActive filters applied to the toll rates. Absent when no filter was applied.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changed
    • changedInput schema / properties / limit / description
      Previous value: -"Maximum toll rates to return in this page (1–500). Defaults to 50."New value: +"Maximum toll rates to return in this page (1–500). Defaults to 50. A large page ends sooner, at the 24,000-byte response budget."
    • addedInput schema / properties / stateRoute
      Added value: +{
      +  "description": "Tolled route to filter by. Accepts natural forms — \"SR 520\", \"520\", \"0520\", \"I-405\", \"405\" — matched case- and space-insensitively against each row's posted designation, so a route-type prefix must agree: \"SR 405\" matches nothing because the I-405 Express Lanes are an Interstate. A route with no tolled facility returns an empty page whose notice names the tolled routes. Omit to include every facility.",
      +  "maxLength": 200,
      +  "type": "string"
      +}
    • addedOutput schema / properties / appliedFilters
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Active filters applied to the toll rates. Absent when no filter was applied.",
      +  "properties": {
      +    "stateRoute": {
      +      "description": "State route filter applied.",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • changedOutput schema / properties / notice / description
      Previous value: -"Informational note about the page window, or guidance when no toll rate data is available or the offset ran past the end."New value: +"Informational note about the page window, or guidance when no toll rate data is available, the route has no tolled facility, or the offset ran past the end."
    • changedOutput schema / properties / rates / description
      Previous value: -"Current toll rates for all active tolled facilities."New value: +"Current toll rates for the matching tolled facilities."
    • changedOutput schema / properties / rates / items / properties / stateRoute / description
      Previous value: -"State route number."New value: +"Route number as the feed reports it: bare and zero-padded, with no route type (\"099\", \"405\"). The rendered text shows the posted designation (SR 99, I-405)."
    • changedOutput schema / properties / rates / items / properties / travelDirection / description
      Previous value: -"Travel direction code for this toll segment: N (north), S (south), E (east), W (west)."New value: +"Direction code the feed assigns the toll trip: N, S, E, or W. On SR 99, SR 509, and SR 520 it is one fixed code per facility (S, S, and E) although trips run both ways, so read the direction of travel from the segment ends — startLocationName/endLocationName and startMilepost → endMilepost — not from this code."
    • changedOutput schema / properties / totalCount / description
      Previous value: -"Total toll rate entries across all pages (not just this page)."New value: +"Total toll rate entries matching the filter across all pages (not just this page)."
  2. Changed2 schema fields changed
    • removedOutput schema / properties / nextOffset / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / nextOffset / type
      Added value: +[
      +  "number",
      +  "null"
      +]
  3. Changed6 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / additionalProperties
      Added value: +false
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedOutput schema / anyOf
      Added value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "rates",
      +      "totalCount",
      +      "nextOffset",
      +      "hasMore"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / error
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Present when the call failed. Absent on success.",
      +  "properties": {
      +    "code": {
      +      "description": "JSON-RPC error code for this failure.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "data": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "reason": {
      +          "description": "Machine-readable failure mode. Declared by this tool: `api_unavailable`: WSDOT Traffic API is unreachable or returns a non-2xx response after retries. `invalid_access_code`: WSDOT rejected the request because WSDOT_ACCESS_CODE is missing, invalid, or not registered. Other values are possible when a failure originates below the handler.",
      +          "examples": [
      +            "api_unavailable",
      +            "invalid_access_code"
      +          ],
      +          "type": "string"
      +        },
      +        "recovery": {
      +          "additionalProperties": {},
      +          "description": "Actionable next step for the caller.",
      +          "properties": {
      +            "hint": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "hint"
      +          ],
      +          "type": "object"
      +        },
      +        "retryable": {
      +          "description": "Whether retrying may succeed.",
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "message": {
      +      "description": "Human-readable description of what went wrong.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / required
      Removed value: -[
      -  "rates",
      -  "totalCount",
      -  "nextOffset",
      -  "hasMore"
      -]
  4. Changed7 schema fields changed
    • addedInput schema / properties / limit
      Added value: +{
      +  "description": "Maximum toll rates to return in this page (1–500). Defaults to 50.",
      +  "maximum": 500,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / offset
      Added value: +{
      +  "description": "Zero-based index of the first toll rate to return, for paging. Defaults to 0.",
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / hasMore
      Added value: +{
      +  "description": "True when more toll rates remain beyond the current page.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / nextOffset
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Offset to pass to retrieve the next page, or null when this is the last page."
      +}
    • changedOutput schema / properties / notice / description
      Previous value: -"Optional notice when no toll rate data is available. Absent on normal results."New value: +"Informational note about the page window, or guidance when no toll rate data is available or the offset ran past the end."
    • changedOutput schema / properties / totalCount / description
      Previous value: -"Total number of toll rate entries returned."New value: +"Total toll rate entries across all pages (not just this page)."
    • changedOutput schema / required
      Previous value: -[
      -  "rates",
      -  "totalCount"
      -]New value: +[
      +  "rates",
      +  "totalCount",
      +  "nextOffset",
      +  "hasMore"
      +]
  5. Changed2 schema fields changed
    • changedOutput schema / properties / rates / items / properties / timeUpdated / description
      Previous value: -"When this toll rate was last updated."New value: +"When this toll rate was last updated (ISO 8601)."
    • changedOutput schema / properties / rates / items / properties / travelDirection / description
      Previous value: -"Travel direction for this toll segment (e.g. \"N\", \"S\", \"E\", \"W\")."New value: +"Travel direction code for this toll segment: N (north), S (south), E (east), W (west)."
  6. Changed8 schema fields changed
    • addedOutput schema / properties / rates / items / properties / endLatitude
      Added value: +{
      +  "description": "Latitude of the segment end point.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / rates / items / properties / endLongitude
      Added value: +{
      +  "description": "Longitude of the segment end point.",
      +  "type": "number"
      +}
    • changedOutput schema / properties / rates / items / properties / message / description
      Previous value: -"Dynamic message shown on toll sign."New value: +"Dynamic message associated with this toll."
    • removedOutput schema / properties / rates / items / properties / signText
      Removed value: -{
      -  "description": "Text displayed on the toll rate sign.",
      -  "type": "string"
      -}
    • addedOutput schema / properties / rates / items / properties / startLatitude
      Added value: +{
      +  "description": "Latitude of the segment start point.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / rates / items / properties / startLongitude
      Added value: +{
      +  "description": "Longitude of the segment start point.",
      +  "type": "number"
      +}
    • removedOutput schema / properties / rates / items / properties / tollCondition
      Removed value: -{
      -  "description": "Numeric toll condition code.",
      -  "type": "number"
      -}
    • addedOutput schema / properties / rates / items / properties / travelDirection
      Added value: +{
      +  "description": "Travel direction for this toll segment (e.g. \"N\", \"S\", \"E\", \"W\").",
      +  "type": "string"
      +}
  7. Changed1 schema field changed
    • addedOutput schema / properties / notice
      Added value: +{
      +  "description": "Optional notice when no toll rate data is available. Absent on normal results.",
      +  "type": "string"
      +}
  8. First observed

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses important behavioral traits: rates are time-banded and dynamic, results are paged via offset/limit, pages cap at a 24,000-byte response budget, stateRoute values are zero-padded like '099', and the notice reports the next offset. This is rich, non-obvious information that materially affects how an agent uses the tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and information-rich with no fluff. It front-loads the core function and facility list, then moves efficiently through filtering, output formatting, and pagination details. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only paged data tool with a full output schema and fully documented parameters, the description covers the key operational details: facilities, dynamic pricing, filtering, pagination, and the stateRoute output quirk. It is nearly complete, though it does not explicitly address alternative-tool routing, which is a minor gap given the sibling set.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% parameter documentation, including accepted route forms and case-insensitive matching rules, so the baseline applies. The description adds a couple of useful examples and explains the zero-padded stateRoute output, but it does not substantially enhance the parameter semantics beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 dynamic toll rates for WA express lanes and tolled facilities,' then enumerates exactly which facilities are covered. This distinguishes it clearly from the sibling tools, which all address different WSDOT data domains such as ferries, mountain passes, and cameras.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context on what data this tool returns and how to filter it via stateRoute, but it never explicitly states when to choose this tool over a sibling or which sibling to use for other types of transportation data. The domain is obvious enough that an agent can infer the use case, though no exclusions or alternatives are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.