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

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum toll rates to return in this page (1–500). Defaults to 50.
offsetNoZero-based index of the first toll rate to return, for paging. Defaults to 0.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
errorNoPresent when the call failed. Absent on success.
ratesNoCurrent toll rates for all active tolled facilities.
noticeNoInformational note about the page window, or guidance when no toll rate data is available 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 across all pages (not just this page).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • removedOutput schema / properties / nextOffset / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / nextOffset / type
      Added value: +[
      +  "number",
      +  "null"
      +]
  2. 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"
      -]
  3. 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"
      +]
  4. 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)."
  5. 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"
      +}
  6. 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"
      +}
  7. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses meaningful behavior: rates are time-banded and dynamic (volatility), results are paged and require offset/limit iteration with the next offset reported in the notice (pagination mechanics), and stateRoute is zero-padded with the posted designation only in rendered text (a data-format gotcha). This substantially exceeds 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.

Conciseness5/5

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

Four sentences, zero filler, and the core purpose is front-loaded. The facility enumeration, dynamic-rate caveat, stateRoute gotcha, and pagination note each earn their place as distinct pieces of information an agent needs.

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

Completeness5/5

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

With an output schema present, an annotation covering the safety profile, and fully documented parameters, the description covers the remaining ground: what data is included, how it behaves, how to page through it, and a formatting trap. Nothing an agent needs to invoke this correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3 — both limit and offset are fully documented with ranges and defaults. The description adds genuine extra value by explaining the pagination workflow: pass offset/limit to traverse the full set and rely on the notice for the next offset. This connects the two parameters into an iteration pattern the schema alone does not convey.

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' — and enumerates every covered facility (SR 99, SR 167, I-405, SR 509, SR 520 Bridge). This unambiguously distinguishes it from siblings like wsdot_get_mountain_passes or wsdot_get_ferry_schedule, whose names concern entirely different data.

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?

Clear usage context is established: this is the tool for current, dynamic toll rates on WA express lanes and tolled facilities, with the 'time-banded and change dynamically' phrasing signaling real-time data. However, it never explicitly names alternatives or states when not to use it — the distinction from siblings is left to inference from their names.

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.