Skip to main content
Glama

Find a race

find_races
Read-only

Use this when the user is looking for a race to enter, for example "which 70.3 can I do in South America next spring", "marathons in Europe in April" or "a HYROX near Riga". It lists races from Phorme's verified race listings that fit the kind of race, the place (a country, city or region) and the months asked, by date only, each with its city, date, its own page, its registration as the organiser last showed it, and whether Phorme has a plan that counts back to it. When the organiser has given them, the race's own logistics are included: where to pick up the race packet, the nearest airport, getting there and the official hotels the organiser lists, with the page they came from. It reads only and changes nothing. Only races in Phorme's listings are returned, with the dates the listings give.

Input Schema

NameRequiredDescriptionDefault
kindNoThe kind of race, for example "70.3", "triathlon", "marathon", "half marathon" or "HYROX". Leave out for any.
whereNoA country, city or region, for example "Colombia", "Barranquilla" or "South America". Leave out for anywhere.
to_monthNoLast month, YYYY-MM, only if the user gave a window.
from_monthNoFirst month, YYYY-MM, only if the user gave a window.

Output Schema

NameRequiredDescriptionDefault
racesYesRaces by date: name, city, country, on (YYYY-MM-DD or null), url (the race's own page), registration (status open, sold_out, opening_soon or closed, its url and checked_on, or null), has_plan, and logistics (the race's own venue, packet pickup, airport, official hotels and guide links as the organiser listed them, with source_url and checked_on; null when not given).
limitsYesWhere the dates come from and what to check. Tell the user.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / properties / races / description
      Previous value: -"Races by date: name, city, country, on (YYYY-MM-DD or null), url (the race's own page), registration (status open, sold_out, opening_soon or closed, its url and checked_on, or null) and has_plan."New value: +"Races by date: name, city, country, on (YYYY-MM-DD or null), url (the race's own page), registration (status open, sold_out, opening_soon or closed, its url and checked_on, or null), has_plan, and logistics (the race's own venue, packet pickup, airport, official hotels and guide links as the organiser listed them, with source_url and checked_on; null when not given)."
  2. Added

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), and the description reinforces with 'It reads only and changes nothing.' It adds genuinely non-obvious context: data provenance ('verified race listings'), a freshness caveat ('as the organiser last showed it'), and a coverage limit ('Only races in Phorme's listings are returned').

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?

Front-loaded with the trigger sentence and efficiently sized overall. The middle sentence is long and enumerates returned fields (city, date, page, registration, plan, logistics) that an output schema already carries, which is minor redundancy but not damaging.

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, the description needn't explain return values, and it still covers search scope, data source, freshness and the boundary that only Phorme-listed races are returned. Nothing an agent needs to call it correctly 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 100%, so the schema already documents kind, where, from_month and to_month with examples, patterns and 'leave out for any/anywhere' semantics. The description mainly restates this and adds only a mild nuance about months being filtered 'by date only', so it stays at the high-coverage baseline.

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 (lists/finds races) and resource (Phorme's verified race listings), and scopes exactly what it filters on: kind of race, place, and months. It is clearly distinct from siblings like plan_for_race or find_clinic, so an agent can route correctly without opening a 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?

Opens with an explicit trigger ('Use this when the user is looking for a race to enter') backed by three concrete user-style examples that map to the parameters. It gives strong positive guidance but never states when-not to use it or names a sibling (e.g., plan_for_race) as the alternative once a race is chosen.

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.