Skip to main content
Glama

Ryde CLI — Your rides. Your data.

Ryde CLI

PyPI CI Dependency audit CodeQL Python 3.11+ MIT license uv

An unofficial CLI, local map dashboard, and MCP server for your Ryde account. Export ride history, map recorded routes, inspect passes and payments, and compare RidePass costs.

Login uses SMS. Account commands are read only.

Quick start · Dashboard · Commands · MCP · Claude / Codex · Development

Quick start

Requires uv on macOS or Linux. Python 3.11+ is required; uv can install a compatible interpreter. Windows is not currently supported because local secrets use Unix file permissions.

Run directly from PyPI, without cloning:

uvx --from ryde-cli ryde --help
uvx --from ryde-cli ryde login
uvx --from ryde-cli ryde stats

Or clone it for local use and development:

git clone https://github.com/HelgeSverre/ryde-cli.git
cd ryde-cli
uv sync --locked
uv run ryde --help
uv run ryde login
uv run ryde stats

The examples below use uv run from a checkout. To run them anywhere, replace uv run with uvx --from ryde-cli. For a persistent installation, see distribution.

Related MCP server: Google Ads MCP

Login

# Prompts for your phone number, asks before sending an SMS, then asks for the code.
uv run ryde login

# Supply your number and optional location explicitly.
uv run ryde login --phone '<your E.164 phone number>' --latitude 60.39 --longitude 5.32

# Non-interactive login: request one SMS, then complete that request separately.
uv run ryde login --phone '<your E.164 phone number>' --send-sms
uv run ryde login --phone '<your E.164 phone number>' --sms-code '<code>'

Local numbers default to country code +47; set --country-code for another country. For an international number, supply the matching country code too. A second SMS request is refused for 60 seconds unless --force is supplied. Image challenges must be completed in the official app.

The token, stable device ID, and client profile are saved to ~/.config/ryde-cli/config.json with owner-only permissions (0600). Login does not print the token. Use RYDE_CONFIG or --config FILE to select a different config file. Never commit that file.

Map your rides

After authentication, one command fetches completed rides and opens the bundled dashboard:

uv run ryde stats

# Include precise stored GPS route traces; default uses ride start/end points.
uv run ryde stats --include-location

# Agent / headless use: fetch, start the local server, and return its URL.
uv run ryde stats --include-location --no-open

# Reopen cached data without API calls, or fetch without starting a server.
uv run ryde stats --no-fetch
uv run ryde stats --include-location --fetch-only

# Stop a running dashboard; it also expires after one hour by default.
uv run ryde stats --stop '<dashboard-url>'

No Node installation or separate webapp is needed. The dashboard links an interactive map with filters, charts, raw ride details, and pass-independent ride metrics. It centres on your rides rather than a fixed city. Failed or missing traces fall back to start/end arcs; completed route requests are cached so an interrupted export can resume.

Data is saved outside the repo in a private, login-scoped directory under ~/.local/share/ryde-cli/stats/ (or XDG_DATA_HOME). Standard ride records include endpoint coordinates; --include-location also fetches the full recorded route.

The server uses a random 127.0.0.1 URL and serves only its dataset and bundled UI. Treat the URL as private. OpenFreeMap supplies public map tiles; no Ryde token or ride records are sent to it, but tile requests reveal the viewed area. Remote agents cannot expose their loopback URL on a user's laptop automatically. See dashboard storage and automation.

Dashboard preview

Ryde Stats showing a ride map, filters, and charts with 180 generated demo rides

180 generated demo rides, including 135 route traces.

All commands

Every row below is prefixed with uv run ryde. The full command reference includes every flag and help screen.

Command

Purpose / command-specific arguments

--help

Show help; also available for every command and group

--version

Show package version

login

SMS login; --phone, --country-code, --send-sms, --sms-code, --force, --device, --phone-info, --latitude, --longitude

account profile

Your account/profile record

account active-ride

Current ride status

rides list

Completed rides; --start YYYY-MM-DD, --end YYYY-MM-DD

rides detail USE_ID

A completed ride

rides order ORDER_ID

A ride's linked charge/order

rides route USE_ID --include-location

Recorded GPS route; requires location acknowledgement

passes catalogue --city-id CITY_ID

Current RidePass products and prices

passes owned

Currently owned/active passes

passes history

Pass/recharge history; --page N or --all

payments vipps

Vipps order history; --page N or --all

payments recharge-detail RECHARGE_ID

One recharge/pass receipt

payments month-amount YYYY-MM

Monthly account amount data

payments recharge-month YYYY-MM

Monthly recharge data

fees --city-id CITY_ID

City fare rules

summary

Totals and monthly trends; --start, --end

optimize --city-id CITY_ID

Current-price pass comparison; --start, --end

stats

Fetch and open the map; --include-location, --fetch-only, --no-fetch, --no-open, --data-dir, --start, --end, --port, --ttl, --stop URL

skill --agent codex|claude

Install the workflow skill; --scope project|user (default project), --force

export RESOURCE

Save a resource; --start, --end, --city-id, --page, --all where applicable

export supports all nine resources: rides, profile, catalogue, owned-passes, recharges, vipps, fee-rule, summary, and recommendation. For city-specific exports, pass --city-id explicitly; its export default is 15. Page numbering starts at 0. Date ranges are inclusive and default to 2018-01-01 through today. Ride fetching starts with the requested start year's archive and includes the current partition when applicable. Future-year partitions are skipped. Available history depends on what Ryde retains.

Global options are --config FILE, --base-url URL, and --mobile-type TEXT. All commands support --format json|csv|tsv|table; all data commands also support --output FILE. Common options can appear before or after nested subcommands when supplied as separate arguments (--format csv).

Output and exports

JSON is the default. CSV/TSV flatten nested objects into dot-separated fields and encode nested arrays as JSON. Table output is a compact preview limited to eight columns and 48 characters per cell; use JSON for complete records.

uv run ryde account profile --format table
uv run ryde rides list --start 2026-01-01 --end 2026-12-31 --format csv --output ryde-rides.csv
uv run ryde rides detail '<use-id>'
uv run ryde rides order '<order-id>'
uv run ryde rides route '<use-id>' --include-location --output ryde-route.json
uv run ryde passes catalogue --city-id 15 --format table
uv run ryde passes history --all --output ryde-passes.json
uv run ryde payments vipps --all --format tsv --output ryde-vipps.tsv
uv run ryde payments recharge-detail '<recharge-id>'
uv run ryde payments month-amount 2026-08
uv run ryde payments recharge-month 2026-08
uv run ryde fees --city-id 15
uv run ryde export rides --format csv --output ryde-rides.csv
uv run ryde export recommendation --city-id 15 --output ryde-analysis.json

--output writes atomically with permissions 0600. export saves to ryde-RESOURCE.FORMAT if no path is supplied. Redirecting stdout uses your shell's file permissions instead. Exports can contain addresses, payment references, and account information; route exports include precise GPS history.

Summaries and RidePass analysis

uv run ryde summary --start 2026-08-01
uv run ryde optimize --city-id 15 --start 2026-08-01

summary reports paid and nominal amounts, distance, duration, averages, currency grouping, and monthly trends. API amounts are converted from minor units. Duration comes from a duration field or the ride's timestamps.

optimize compares your history with current city fares and pass prices. It returns single-product comparisons and a non-overlapping mixed purchase timeline. Included started minutes are consumed across rides inside each pass's validity window; a ride crossing the allowance pays metered overflow. Later rides in an exhausted pass window pay full PAYG.

The model assumes every ride is pass eligible. It does not reconstruct historic prices or unknown parking/geographic exclusions, and cannot guarantee future savings. Each result includes the assumptions used.

MCP server

The package also includes a stdio MCP server. Log in first using the same config path as your MCP client. Launch it through uv:

uvx --from ryde-cli ryde-mcp
# Or, from a local checkout:
uv run ryde-mcp

For clients that accept an mcpServers JSON configuration:

{
  "mcpServers": {
    "ryde": {
      "command": "uvx",
      "args": ["--from", "ryde-cli", "ryde-mcp"],
      "env": {"RYDE_CONFIG": "/absolute/path/to/your/ryde-config.json"}
    }
  }
}

Use an absolute path to uvx if a desktop app cannot find it on PATH. For reproducible deployments, pin the package version (ryde-cli==0.1.1). The server uses stdout for MCP messages and stderr for diagnostics.

Tools

Purpose

account_profile, current_ride

Account and current status

list_rides, ride_detail, ride_order

Completed rides and charges

ride_route

GPS route; requires include_sensitive_location=true

pass_catalogue, owned_passes

Current products and owned passes

recharge_history, recharge_detail, vipps_payment_history

Purchase/payment history

account_month_amount, recharge_month, city_fee_rule

Monthly data and city fares

ride_summary, recommend_ridepass

Local summaries and cost comparisons

prepare_stats, open_stats

Start background export / fetch-and-open jobs

stats_job_status, close_stats

Poll a job / stop a dashboard

There are 20 tools. open_stats and prepare_stats return a job_id immediately; poll stats_job_status for completion. open_stats(refresh=false) opens an existing dataset immediately. This lets large exports complete without one long tool call.

Resources: ryde://account/summary and ryde://city/{city_id}/passes.

For MCP registration commands and the bundled workflow skill, see Claude Code and Codex setup. From a checkout, explicit skill installation is:

uv run ryde skill --agent codex --scope user
uv run ryde skill --agent claude --scope user

Skill setup and MCP registration are separate steps.

Configuration

config.example.json documents non-secret config fields. Login creates the real config; copying the example does not authenticate you.

Setting

CLI / environment

Notes

Config path

--config, RYDE_CONFIG

Default: ~/.config/ryde-cli/config.json

Token

RYDE_TOKEN

Overrides saved token

API URL

--base-url, RYDE_BASE_URL

Overrides saved/default URL

Android descriptor

--mobile-type, RYDE_MOBILE_TYPE

Overrides saved/default descriptor

Device ID

Login --device, RYDE_DEVICE_ID

Generated if absent

Phone info

Login --phone-info, RYDE_PHONE_INFO

Android phone string

Country code

Login --country-code, RYDE_COUNTRY_CODE

Default: +47

Login location

--latitude, --longitude, RYDE_LATITUDE, RYDE_LONGITUDE

Defaults to 0, 0; used only for login

Use only an account you own or are authorized to access. Keep configs and exports out of version control. Data may contain private identifiers beyond GPS, so review output before sharing it with another person or an AI agent. See API compatibility for request signing and endpoint mapping.

Shell completion

For Bash in a local checkout, install the project environment and register completion:

uv sync --locked
eval "$(uv run register-python-argcomplete ryde)"

For Zsh, enable Bash-compatible completion first:

autoload -U bashcompinit
bashcompinit
eval "$(uv run register-python-argcomplete ryde)"

Troubleshooting

  • Authentication missing / 401: run uv run ryde login again. Check whether RYDE_TOKEN is overriding a newer saved token.

  • 403 / version or network error: the private API or compatible request profile may have changed. Check for updates; retry with the default profile.

  • Image challenge: complete login in the official app; this tool cannot bypass the challenge.

  • Duplicate SMS refused: wait one minute. Use --force only when you know the previous request did not reach Ryde.

  • Missing history: try --all for payment/pass history. For rides, set --start to include the years you want; the default starts in 2018.

  • Insecure config permissions: on macOS/Linux, run chmod 600 /path/to/config.json.

  • MCP authentication fails: check that login and the server use the same RYDE_CONFIG, then restart the MCP client.

Development and distribution

See CONTRIBUTING.md for uv setup, tests, linting, and packaging. CI tests Python 3.11–3.14 on Linux and Python 3.14 on macOS, checks generated docs, builds and smoke-tests distributions, and runs dependency audits and CodeQL.

See distribution and releases for installation options and the PyPI release workflow. Licensed under MIT.

Available Tools

20 tools
account_month_amountC
Read-onlyIdempotent

Return account amount data for YYYY-MM. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
monthYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the closing "Read-only" merely repeats structured data and adds nothing. The description discloses no additional behavior such as currency/units of the amount, empty-month behavior, or account scoping.

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?

Two short sentences, front-loaded with the action and period format. The trailing "Read-only" is redundant with annotations but costs almost nothing.

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

Completeness3/5

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

An output schema exists, so return-value documentation is not required. Still, for a monthly amount tool the description leaves the unit/currency and the account identity undefined, and gives no signal on how it differs from the other monthly/account siblings.

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 0% and the schema gives only a bare untyped-description "Month" string, so the description's "YYYY-MM" is the sole source of format guidance and genuinely compensates for the gap. It does not cover edge cases like timezone or invalid-month handling, keeping it short of 5.

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

Purpose3/5

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

States a verb (Return) and a resource (account amount data) scoped to a month, which is enough to know it is a monthly read. However, "amount data" is vague about what is being measured, and nothing distinguishes it from siblings like recharge_month or account_profile, which also deal with monetary/account data.

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

Usage Guidelines2/5

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

"Read-only" is a safety statement, not usage guidance. There is no indication of when to call this instead of account_profile or recharge_month, nor any prerequisite about which account is targeted.

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

account_profileA
Read-onlyIdempotent

Return the signed-in owner's profile/account record. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the trailing 'Read-only' sentence largely repeats structured data rather than adding new behavioral detail. The only added signal is that the record belongs to the authenticated owner (no user identifier needed), which is useful but thin for a tool with this annotation coverage.

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?

Two short sentences, front-loaded with the purpose. The second sentence is redundant with the readOnlyHint annotation, so it does not fully earn its place, keeping this just below the top mark.

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 zero-parameter read of a known resource with an output schema present, the description covers what an agent needs in order to call it correctly. Missing only sibling-level guidance and any hint of what the profile record contains.

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 tool takes zero parameters, so the baseline is 4. There is nothing for the description to disambiguate beyond the fact that no user/ID argument is required, which the 'signed-in owner' phrasing loosely conveys.

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?

States a specific verb ('Return') and resource ('profile/account record') with the scope 'signed-in owner'. It implicitly distinguishes itself from sibling tools that cover rides, passes, and recharge history, though it never names an alternative explicitly.

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

Usage Guidelines3/5

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

Usage is only implied: an agent can infer it should call this when it needs the current user's account details. There is no statement of when to prefer this over siblings like account_month_amount or owned_passes, and no prerequisites or exclusions.

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

city_fee_ruleC
Read-onlyIdempotent

Return fee/fare rules for a city. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
city_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the trailing 'Read-only' sentence merely restates structured data without adding anything. No added context is given on the fee rule model, whether results are cached, or when rules change.

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?

Two short sentences with the core purpose front-loaded and no padding. However, the second sentence duplicates the annotations rather than earning its place, so it is not maximally efficient.

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

Completeness3/5

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

Because an output schema exists, the return format need not be described, and the read-only nature is covered by annotations. The remaining gaps are the undocumented city_id and the absence of any usage context, which leaves the definition at a minimal-but-adequate level.

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

Parameters2/5

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

The only parameter, city_id, has 0% schema description coverage and the description never mentions it, so there is no guidance on where the city id comes from or its expected scope. With one undocumented required parameter, the description fails to compensate for the schema gap.

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?

The description gives a specific verb+resource ('Return fee/fare rules for a city'), which is clear enough to distinguish from siblings like current_ride or pass_catalogue. It stops short of explicitly differentiating itself from any sibling, but the resource is distinct within this API surface.

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

Usage Guidelines2/5

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

There is no guidance on when to call this versus other sibling tools, no prerequisites, and no mention of how it relates to ride_order or account_month_amount where fees might also surface. The agent is left to infer usage entirely from the name.

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

close_statsA

Stop a local dashboard using its exact returned URL; never sends account credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false), so the bar is lower. The description adds a genuine behavioral guarantee not present in the structured fields: 'never sends account credentials', which is meaningful auth-context for an agent. It does not mention error behavior if the URL is invalid.

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?

One sentence, front-loaded with the action, then the required argument source. Both clauses earn their place with no filler; it is well sized for a single-parameter tool.

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?

An output schema exists, so return values need not be explained, and the tool takes one parameter. What is present (action, URL source, credential safety) covers the essentials; only edge cases like repeat-close or invalid-URL behavior are unstated.

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 single param has 0% schema description coverage, so the description carries the load. It explains that 'url' is the exact URL returned by the dashboard, which is semantics the bare 'string/Url' schema does not convey.

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?

Specific verb+resource: 'Stop a local dashboard', which cleanly separates it from siblings like open_stats and prepare_stats. It does not explicitly name a sibling to route against, but the action is unambiguous.

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?

'using its exact returned URL' tells the agent both the precondition (a URL previously returned, presumably by open_stats) and the constraint (must be exact). It stops short of stating when-not to use it or what to do if the dashboard is already closed.

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

current_rideA
Read-onlyIdempotent

Return current ride status only; this never starts, ends, or alters a ride.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, fully covering the safety profile. The description's 'never starts, ends, or alters' reinforces that profile but adds no new behavioral detail such as auth requirements, rate limits, or output format, so it only modestly exceeds the structured data.

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?

A single sentence that front-loads the action and resource, then immediately scopes the behavior. Every clause earns its place with no filler.

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 no parameters, existing output schema, and annotations covering the safety profile, the description is complete enough for an agent to call it correctly. It states both what is returned and that the operation is non-mutating.

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 tool has zero parameters, so the baseline is 4 per the rubric. The description appropriately avoids inventing parameter semantics where none exist.

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?

States a specific verb ('Return') and resource ('current ride status only'), and immediately clarifies it does not start, end, or alter a ride. This distinguishes it from mutation-oriented siblings such as ride_order and from broader read tools like ride_detail or list_rides.

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?

The description gives clear context ('current ride status only') and an explicit when-not clause ('never starts, ends, or alters a ride'). However, it does not name alternative tools for related reads, which keeps it short of the explicit when/when-not/alternatives requirement for a 5.

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

list_ridesA
Read-onlyIdempotent

List completed rides. Dates are inclusive YYYY-MM-DD; omit for all available history.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
startNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful scope context (only completed rides, dates are inclusive, omission returns full history) but says nothing about result size, ordering, or pagination behavior for a potentially unbounded listing.

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?

Two short sentences with no filler; the purpose is front-loaded and the date-format/default note follows immediately. Every clause carries information.

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 two-parameter read tool with an output schema, the description covers scope, parameter format, and default behavior adequately. The only real gap is no hint about result volume or ordering when all history is requested, which is minor given the output schema exists.

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 description coverage is 0%, so the description must compensate and largely does: it gives the YYYY-MM-DD format, states that both bounds are inclusive, and explains that omitting the dates returns all available history, covering the null/default semantics of both parameters.

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?

States a specific verb and resource ("List completed rides") and narrows scope to completed rides, which distinguishes it from current_ride and ride_detail. It stops short of explicitly naming which sibling to use for other ride views, so sibling differentiation is only implied.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: the tool is for completed rides and omitting dates returns all history. There is no explicit guidance on when to prefer this over ride_summary, ride_detail, or current_ride, and no exclusions.

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

open_statsA

Start a background fetch-and-open job; poll stats_job_status for its URL. refresh=false opens cached data immediately. Browser opens on the MCP host only.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
ttlNo
startNo
refreshNo
open_browserNo
include_sensitive_locationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, so the agent knows this is a non-idempotent mutation-like operation. The description adds genuinely new context beyond that: it is a background job producing a URL, and the browser opens only on the MCP host, which is a non-obvious side effect.

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?

Three short sentences, front-loaded with the core action and then the follow-up polling instruction and side-effect caveat. Nothing is padded, though the phrasing is terse to the point of being cryptic.

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

Completeness3/5

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

An output schema exists, so return-format detail is not needed, and the multi-step job/poll flow is captured. However, with 6 undocumented parameters and no auth or permission notes, the definition is adequate rather than complete.

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

Parameters2/5

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

Schema description coverage is 0% across 6 parameters, so the description carries the full burden. It only clarifies refresh (false = cached data) and implicitly open_browser; ttl, start, end, and include_sensitive_location are entirely unexplained.

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?

States a specific verb and resource: 'Start a background fetch-and-open job' for stats. It distinguishes itself from the sibling stats_job_status by naming it as the polling counterpart, so an agent can place it in the workflow without opening either schema.

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?

Gives clear routing context: the agent should poll stats_job_status for the resulting URL, and refresh=false opens cached data immediately, which tells the agent when to accept stale data. It does not explicitly contrast with prepare_stats or close_stats, so the when-not is left implied.

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

owned_passesA
Read-onlyIdempotent

Return active/current passes owned by the signed-in account.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds the scoping constraint that only active/current passes are returned and that scope is the signed-in account, but says nothing about expiry semantics, pagination, or result volume.

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?

A single sentence with zero waste, front-loading the verb and the two scoping qualifiers that actually distinguish the result set.

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?

With an output schema present plus rich read-only annotations and no parameters, the description covers nearly everything an agent needs to select and call the tool. Only the precise meaning of 'active' (unexpired vs. currently valid) is left unstated.

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 tool takes zero parameters, so the schema can carry no semantics and there is nothing for the description to compensate for. Baseline of 4 applies.

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?

States a specific verb ('Return') and a clearly scoped resource ('active/current passes owned by the signed-in account'), so the agent knows it is not the full catalogue. It never names the sibling pass_catalogue, leaving the contrast to inference.

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

Usage Guidelines3/5

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

The phrase 'owned by the signed-in account' implicitly signals this is the personal-passes lookup rather than the catalogue, but there is no explicit when-to-use, when-not, or named alternative among the many siblings.

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

pass_catalogueB
Read-onlyIdempotent

Return current RidePass products, prices, allowances and validity for a city.

ParametersJSON Schema
NameRequiredDescriptionDefault
city_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so safety behavior is covered. The description adds that the catalogue is 'current' and enumerates the kinds of data returned (products, prices, allowances, validity), which is useful but modest additional context beyond the structured fields.

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?

A single front-loaded sentence that names the resource and its scope with no filler or redundancy. Every phrase 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?

An output schema exists, so return-shape detail is unnecessary here, and the safety profile comes from annotations. The definition is nearly complete for a one-parameter read tool, with the city_id input format the only notable omission.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry the burden for city_id; it only implies a city scope via 'for a city' and gives no format, ID source, or whether an integer city identifier is expected. This is a real gap for the single required parameter.

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?

The description states a specific verb ('Return') and a concrete resource set (RidePass products, prices, allowances, validity) scoped to a single city. It is clearly distinguishable from owned_passes in substance, but never names or contrasts a sibling explicitly.

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

Usage Guidelines2/5

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

There is no when-to-use, when-not-to-use, or alternative guidance. With siblings such as owned_passes and recommend_ridepass covering adjacent territory, an agent gets no help deciding between browsing the catalogue, viewing owned passes, or requesting a recommendation.

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

prepare_statsA

Start a resumable background export; poll stats_job_status with the returned job_id. Route GPS requires explicit consent.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
startNo
include_sensitive_locationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, so the safety profile is partly covered. The description adds meaningful behavior: the operation is asynchronous, resumable, and returns a job_id for polling, plus a consent gate. It does not explain the consequence of the non-idempotent hint (e.g., whether repeat calls spawn duplicate jobs).

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?

Two front-loaded clauses with zero filler: the primary action and the follow-up step come first, with the consent caveat last. Every phrase carries information.

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

Completeness3/5

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

An output schema exists, so return values need not be described, and the job_id reference is sufficient. However, for a 3-parameter export tool with 0% schema description coverage, the description leaves date-range and consent-flag semantics underspecified.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the burden for all three parameters. It only indirectly gestures at include_sensitive_location through the consent sentence and says nothing about the format or expected values of start and end, leaving most parameter semantics undocumented.

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?

States a specific action and mode ('Start a resumable background export') and names the sibling used to monitor it (stats_job_status), so it is distinguishable from the poller and from open_stats/close_stats. It does not specify what data is exported (rides, account, time range), which keeps it short of a 5.

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?

Gives clear continuation guidance ('poll stats_job_status with the returned job_id') and a precondition for a specific input ('Route GPS requires explicit consent'). No explicit when-not or alternative-tool exclusion is stated, but the invocation path is well defined.

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

recharge_detailB
Read-onlyIdempotent

Return one recharge/pass receipt by its recharge ID. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
recharge_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, and the description's 'Read-only' merely restates them. It adds no new behavioral context such as error handling for an unknown ID, authentication needs, or whether the receipt is a stable snapshot.

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?

Two short sentences, with the core action front-loaded. The trailing 'Read-only' clause earns little since annotations already state it, but nothing is bloated or buried.

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 single-parameter lookup with an output schema present, the description covers what is returned and by what key; return-value detail is correctly left to the output schema. It could say more about failure behavior for an invalid ID, but nothing essential to invoking it is missing.

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?

Schema description coverage is 0%, so the schema documents nothing about recharge_id. The description clarifies that the identifier refers to a recharge/pass receipt, which is slightly more than the parameter name, but gives no format, source, or example of the ID.

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?

States a specific verb and resource ('Return one recharge/pass receipt') plus the lookup key ('by its recharge ID'), which clearly distinguishes a single-record fetch from the list-style siblings like recharge_history. It stops short of naming the sibling it is not, so the differentiation is implied rather than explicit.

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

Usage Guidelines3/5

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

The singular 'one ... receipt by its recharge ID' implies this is the lookup tool used when an ID is already known, as opposed to recharge_history for browsing. However, there is no explicit when-to-use statement, no mention of what to do without an ID, and no named alternative.

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

recharge_historyB
Read-onlyIdempotent

Return pass/recharge purchase history. all_pages may make multiple read-only requests.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
all_pagesNo

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds one genuine behavioral fact beyond that: all_pages may issue multiple read-only requests, which signals extra latency/request volume. It says nothing about pagination behavior, ordering, or result size, so it adds only modest value over the annotations.

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?

Two short sentences with the core purpose front-loaded and zero filler. The second sentence is terse to the point of being under-developed rather than verbose, which is the opposite failure mode.

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

Completeness3/5

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

For a simple read-only, zero-required-parameter tool with no output schema, the description is only minimally complete. It covers what is returned and one flag's side effect, but leaves pagination semantics (page vs all_pages interaction) and the distinction from sibling history tools to inference.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry the parameter burden. It explains all_pages only indirectly ("may make multiple read-only requests") and never mentions the page parameter's paging semantics, so one of the two parameters remains undocumented in both places.

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?

The description gives a specific verb and resource: "Return pass/recharge purchase history." That is clearly distinguishable in kind from write-oriented siblings like ride_order. However, it does not differentiate itself from the closely named siblings recharge_detail, recharge_month, or vipps_payment_history, which is exactly where a routing hint would matter.

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

Usage Guidelines2/5

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

There is no statement of when to use this tool rather than recharge_detail, recharge_month, or vipps_payment_history, and no prerequisites or exclusion conditions. The only usage-flavored sentence concerns the all_pages flag, not tool selection.

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

recharge_monthC
Read-onlyIdempotent

Return recharge data for YYYY-MM. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
monthYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

The annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so 'Read-only' merely restates structured data rather than adding anything. No further behavioral context (auth, rate limits, error conditions) is disclosed, so the description contributes little beyond what the annotations already carry.

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?

Two short sentences that are front-loaded with the operation and scope. Efficient and wasted little space, though 'Read-only' duplicates the annotation and thus doesn't earn its place.

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

Completeness3/5

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

An output schema exists, so return values needn't be spelled out, and the tool is simple with one parameter. Still, the lack of any differentiation from the recharge_* siblings leaves a real gap for an agent choosing among twenty tools.

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?

Schema description coverage is 0% for the single month parameter, so the description carries the burden of clarifying it. The 'YYYY-MM' hint usefully specifies the expected format beyond the bare 'string' schema, but no further detail (valid ranges, timezone, etc.) is given, so it only partially compensates.

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?

States a clear verb (Return) and resource (recharge data) scoped to a month, so the basic operation is unambiguous. However, it does nothing to distinguish itself from siblings like recharge_history, recharge_detail, or account_month_amount, leaving the agent to infer which recharge tool applies when.

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

Usage Guidelines2/5

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

There is no statement of when to use this tool versus alternatives, no prerequisites, and no exclusions. The description offers only what the tool returns, not the context that would select it over its many siblings.

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

recommend_ridepassC
Read-onlyIdempotent

Compare current city RidePasses against observed rides with stated conservative assumptions.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
startNo
city_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The phrase 'with stated conservative assumptions' hints at the comparison methodology but never explains what those assumptions are, what period is analyzed, or how costs are computed, so it adds only modest value beyond the annotations.

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?

A single front-loaded sentence with no filler or repetition. It is efficient, though arguably too terse for a tool whose schema carries no field-level documentation.

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

Completeness2/5

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

An output schema exists, so return values need not be described. But with 0% parameter coverage and no explanation of the 'conservative assumptions,' scope of rides considered, or time-window behavior, the agent lacks enough context to call this tool confidently.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not mention any parameter. 'Current city' loosely implies city_id, but the meaning and accepted format of start/end (optional, nullable strings) are unexplained in both schema and description, leaving the agent to guess at the time-window semantics.

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?

The description gives a concrete verb and two resources ('Compare current city RidePasses against observed rides'), which tells the agent this is an analysis/comparison tool rather than a lookup. However, it never distinguishes itself from plausible siblings like pass_catalogue, owned_passes, or ride_summary, and the actual deliverable (a recommendation, per the name) is only implied.

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

Usage Guidelines2/5

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

There is no when-to-use statement, no prerequisites, and no named alternative among the 19 sibling tools, several of which (pass_catalogue, owned_passes) overlap in subject matter. The agent is left to infer the calling context entirely.

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

ride_detailA
Read-onlyIdempotent

Fetch detail for one completed ride ID. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
use_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so 'Read-only.' merely restates structured data rather than adding to it. The only novel behavioral content is the 'completed ride' scope restriction; nothing is disclosed about failure modes for an unknown/invalid ID.

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?

Two very short sentences with the core purpose front-loaded and zero padding. Nothing could be removed without losing information.

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?

An output schema exists, so return values need not be described, and the operation is simple (one required param, read-only, idempotent). The definition is nearly sufficient for correct invocation; only ID sourcing/format is unstated.

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?

Schema coverage is 0% and the single parameter is named 'use_id', which is opaque on its own, so the description does useful work by clarifying it is a ride ID. It still gives no format, example, or source for that ID, so it only partially compensates for the coverage gap.

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?

States a specific verb+resource ('Fetch detail for one completed ride ID'), and the word 'completed' implicitly separates it from the sibling current_ride. However, it never names or contrasts with the near-neighbours ride_summary, list_rides, or ride_route, so the agent must infer the boundary itself.

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

Usage Guidelines3/5

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

'One completed ride ID' scopes usage implicitly (not for in-progress rides, one ride at a time), which rules out current_ride by inference. There is no explicit when-to-use guidance and no named alternative, so the routing decision is left partly to the agent.

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

ride_orderB
Read-onlyIdempotent

Fetch linked order/charge detail for a completed ride. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
order_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so 'Read-only' largely repeats structured data. The only added behavioral signal is the 'completed ride' scope constraint, which usefully implies the tool fails or is meaningless for in-progress rides.

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?

Two short, front-loaded sentences with no wasted words. Brevity is appropriate, though the second sentence ('Read-only') is redundant against the annotations rather than earning its place.

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

Completeness3/5

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

An output schema exists so return values need no explanation, and annotations cover the safety profile. However, with an undocumented required parameter and no guidance on sourcing order_id, the definition is only minimally complete for an agent that must actually call it.

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

Parameters2/5

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

Schema description coverage is 0% and the single required parameter order_id has no description in either the schema or the tool description. The agent gets no hint about where order_id comes from or its format, and the description does not compensate for this gap.

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?

States a specific verb ('Fetch') and resource ('linked order/charge detail for a completed ride'), which distinguishes it from ride_detail, ride_summary, and ride_route by focusing on order/charge linkage. It does not name a sibling to route against, so it falls short of a 5.

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

Usage Guidelines3/5

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

The phrase 'for a completed ride' implies the precondition (the ride must be finished) but gives no explicit when-to-use vs when-not guidance and never points to alternatives like ride_detail or list_rides for obtaining the order_id. Usage is inferable but not stated.

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

ride_routeC
Read-onlyIdempotent

Fetch stored route GPS only after explicit sensitive-location acknowledgement.

ParametersJSON Schema
NameRequiredDescriptionDefault
use_idYes
include_sensitive_locationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds a meaningful precondition about explicit sensitive-location acknowledgement, but it doesn't explain how that acknowledgement is achieved, whether it's enforced server-side, or what happens if it isn't – which is the key behavioral question here.

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?

A single front-loaded sentence with no waste. It's efficient, though the extreme brevity comes at the cost of the clarity the missing schema docs need.

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

Completeness2/5

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

With an output schema present, return values can be omitted, but the tool still has two undocumented parameters and a potentially sensitive access precondition. For a GPS-location tool with 0% schema coverage and no sibling differentiation, the description leaves important calling requirements unresolved.

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

Parameters2/5

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

Schema coverage is 0%, so the schema only names use_id and include_sensitive_location with no explanation. The description mentions 'sensitive-location acknowledgement' but does not clarify what include_sensitive_location controls, whether it must be true, or what use_id identifies. The description does not compensate for the documentation gap.

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

Purpose3/5

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

States a specific verb (Fetch) and resource (stored route GPS) with a notable constraint, but 'route GPS' is terse and there is no differentiation from siblings like ride_detail or current_ride, which likely also return ride data. Purpose is discernible but the boundaries are left to inference.

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

Usage Guidelines3/5

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

The description implies this tool is only for retrieving stored route GPS after acknowledging sensitive location, which gives some contextual usage. But it never says when to use it over ride_detail or current_ride, and the acknowledgement precondition is not operationalized for the caller.

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

ride_summaryC
Read-onlyIdempotent

Compute local ride totals, distance, duration, discounts, monthly trend and averages.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
startNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description contributes only the word 'local', which faintly suggests on-the-fly computation rather than an asynchronous stats job, but it never explains default time-range behavior when start/end are omitted, output granularity, or result size.

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?

A single front-loaded sentence with no filler and no redundancy. It is efficient, though the brevity is achieved partly by omitting information that belongs somewhere.

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

Completeness2/5

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

An output schema exists, so return values need not be explained, but the tool takes an undocumented date range and the description omits when to call it versus the stats siblings. For a two-parameter analytics tool the definition leaves essential invocation context missing.

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

Parameters2/5

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

Schema description coverage is 0% and the description does not mention start or end at all, so it fails to compensate for the schema gap. An agent cannot learn the expected date format, whether the range is inclusive, or what range is used by default (both params default to null).

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?

States a specific verb ('Compute') and resource ('local ride totals'), then enumerates the metrics produced (distance, duration, discounts, monthly trend, averages), which lets an agent distinguish it from siblings like current_ride or list_rides. It is clear but never differentiates itself from the stats-oriented siblings such as prepare_stats or account_month_amount.

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

Usage Guidelines2/5

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

The description gives no when-to-use guidance, no prerequisites, and no mention of alternatives, despite several siblings (prepare_stats, stats_job_status, account_month_amount, recharge_month) occupying adjacent statistics territory. An agent has no signal for preferring this tool or for knowing whether start/end should be supplied.

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

stats_job_statusA
Read-onlyIdempotent

Poll a background stats job. completed results contain counts and, for open_stats, a local dashboard URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds genuine context about what a completed job yields (counts, and a dashboard URL for open_stats), but says nothing about in-progress/failed states or polling cadence.

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?

Two tight sentences with no filler, and the core action ('poll') is front-loaded before the return-value detail.

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?

An output schema exists, so return values need not be spelled out, and the description's note on completed results is a helpful bonus. The only real gap is the missing lifecycle guidance (pending/failed states, polling) for a job-status tool.

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?

One required parameter (job_id) with 0% schema description coverage, so the description must compensate. It only hints that the job is 'background stats job,' implying the id comes from prepare_stats, but gives no format or source detail beyond the schema's bare 'Job Id' title.

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?

States a specific verb (poll) and resource (background stats job), which cleanly separates it from the sibling tools that prepare or return stats. It never names those siblings, so the differentiation is implied rather than explicit.

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

Usage Guidelines3/5

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

Calling this a 'poll' implies it is used repeatedly after a job is kicked off (presumably by prepare_stats), but the description never states when to call it versus checking elsewhere, nor that it requires a job_id produced by another tool.

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

vipps_payment_historyC
Read-onlyIdempotent

Return read-only Vipps payment-order history for the signed-in account.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
all_pagesNo

TDQS

C2.9/5.0
Behavior2/5

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

The annotations already declare readOnlyHint, idempotentHint and destructiveHint, so repeating 'read-only' adds no new information. The only added context is the account scoping; nothing is said about pagination behavior, result volume, or what happens when all_pages=true, which is the main behavioral question for this 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?

A single front-loaded sentence with no filler; the verb and resource come first and nothing is wasted.

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

Completeness3/5

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

For a read-only list tool whose safety profile is already carried by annotations, the description is minimally adequate: it names the resource and scope. It falls short on the one thing it should explain — pagination semantics — and there is no output schema to cover return shape.

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

Parameters2/5

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

Both parameters (page, all_pages) have 0% schema description coverage, and the description explains neither: it doesn't say that page is zero-indexed, how page interacts with all_pages, or whether all_pages overrides paging. With two undocumented parameters, the description should compensate but does not.

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?

States a specific verb (Return), resource (Vipps payment-order history) and scope (signed-in account), so the agent knows exactly what it retrieves. It does not, however, differentiate itself from the similarly-named siblings recharge_history/recharge_detail.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance, and no alternative tool is named. The agent must infer from the name that this is the history-listing call rather than one of the recharge/ride siblings.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 20 tool updatesv0.1.1
    • First observedaccount_month_amount
    • First observedaccount_profile
    • First observedcity_fee_rule
    • First observedclose_stats
    • First observedcurrent_ride
    • First observedlist_rides
    • First observedopen_stats
    • First observedowned_passes
    • First observedpass_catalogue
    • First observedprepare_stats
    • First observedrecharge_detail
    • First observedrecharge_history
    • First observedrecharge_month
    • First observedrecommend_ridepass
    • First observedride_detail
    • First observedride_order
    • First observedride_route
    • First observedride_summary
    • First observedstats_job_status
    • First observedvipps_payment_history

TDQS

B3.3/5.0

Scored across 20 tools

Disambiguation4/5

Most tools have clearly distinct resource+action targets (list_rides vs ride_detail vs ride_order vs ride_route). The main overlap is among aggregate/period tools: ride_summary, account_month_amount, and recharge_month all return computed monetary/statistical data and could be confused, as could recharge_history vs recharge_month. Descriptions mitigate this reasonably well.

Naming Consistency3/5

All names use snake_case, which is consistent, but the convention mixes verb-first (list_rides, prepare_stats, recommend_ridepass, open_stats) with noun-phrase forms (account_profile, current_ride, ride_summary, pass_catalogue). Readable, but no single predictable pattern.

Tool Count4/5

20 tools is at the high end but justified by the breadth of the domain (account, rides, routes, passes, recharges, payments, stats jobs, city rules). Slightly heavy, with a small cluster of stats-job tools, but each earns its place.

Completeness4/5

Broad read coverage: list/detail/summary across rides, recharges, passes, payments, account, plus analytics and city rules. The surface is essentially read-only, so action operations (booking a ride, buying a pass, topping up) are absent, but this appears to be an intentional analytics/read scope.

Maintenance

ActivityNo data
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides read-only access to Tactical RMM, enabling agent searches, detailed agent information, audit log queries, and execution of information-gathering PowerShell scripts on agents, with Entra ID authentication and a strict read-only guard.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables read-only inspection of Google Ads accounts through MCP, including account inventory, reporting, metadata, change history, and safe GAQL queries.
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides safe, read-only CRM access for AI assistants with per-key scopes, field masking, rate limits, and a full audit log of allowed and blocked actions.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables an agent to sign in to a Meuhedet online account and read lab stickers and results, prescriptions, future appointments, visit approvals, and visit referrals through a local stdio MCP connection. Access is read-only and restricted to the user's own account.
    MIT