Skip to main content
Glama

stl_bundle_fares

Read-onlyIdempotent

Fetches the latest Metro fare data from the captured web page, converting prices to integer cents for bundling. Run stl_web_capture first if no data is available.

Instructions

The fare table the app ships, with its as_of date and source URL baked in.

Fares are NOT in the GTFS feed -- this reads the latest capture of Metro's fares page, so run stl_web_capture first if it reports nothing. Prices are integer cents; a fare table carrying 2.4999999 is a bug that reaches riders.

Args: fmt: 'json', or 'kotlin' to emit compilable Kotlin source. Hand-copying a fare table into Kotlin is how a stale fare reaches a rider.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
fmtNojson

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4/5.0
Behavior4/5

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

Annotations already mark it read-only and idempotent; the description adds that it reads the latest web capture, includes as_of date/source URL, and requires integer-cent prices. It also hints at failure mode if capture is absent.

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

Conciseness4/5

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

The text is compact and front-loaded with the core purpose, then adds caveats and parameter details. The 'bug that reaches riders' phrasing is colorful but not redundant.

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 simple read-only tool with one optional parameter, the description provides enough context: source, relationship to web capture, output formats, and data integrity expectation. It does not fully specify return schema or invalid-fmt behavior, but those gaps are minor.

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?

The only parameter fmt is described as accepting 'json' or 'kotlin', with the Kotlin option emitting compilable source, which goes beyond the bare schema type and default. It could be slightly more explicit about the JSON output shape, but it compensates for low schema coverage.

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

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description identifies the resource as the app-shipped fare table and clarifies it is not from the GTFS feed, backed by Metro's captured fares page. It lacks an explicit action verb but the tool name and 'reads' make the retrieval purpose clear.

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?

Description gives practical guidance by directing users to run stl_web_capture first if no data is reported and warns against hand-copying fares into Kotlin to avoid stale values. It distinguishes from GTFS but does not enumerate all alternative tools for fare data.

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