Skip to main content
Glama

The Tennis Desk

Server Details

Ratings, line win chances and lineup help for USTA NorCal adult league tennis, from public results.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.8/5.0

Scored across 29 tools

Disambiguation3/5

The descriptions do a lot of work to separate overlapping queries (e.g., query_match_log vs query_player_history, query_club vs query_club_teams, compute_aggregate vs compute_roster_strength), but several families of tools still have fuzzy boundaries: multiple team-scoped tools (query_team_record, query_team_forecast, query_matchup, query_league_standings, query_forecast_results) and two lineup planners all answer closely-related questions. An agent must read carefully to pick the right one.

Naming Consistency4/5

The dominant pattern is verb_noun (query_*, compute_*, plan_*, predict_matchup, project_standings, get_desk_pass, read_docs, scout_team) applied consistently across 29 tools. A couple of outliers break the pattern (availability_loop uses noun_loop, match_date_check uses noun_verb order), which is a minor deviation rather than a systemic problem.

Tool Count2/5

At 29 tools the surface is heavy for a domain that essentially covers team lookup, player lookup, forecasting and lineup planning. Several query_* tools could be consolidated, and the sheer number compounds the disambiguation burden for the agent.

Completeness4/5

Coverage across armor: availability, lineup planning, matchup prediction, standings, playoffs, rosters, player ratings, docs and research all have dedicated tools, with no dead ends for reading data. The absence of any write/update operations is a deliberate design constraint (the Desk never acts on the USTA site), so the read surface is largely complete for the stated purpose.

Available Tools

29 tools
availability_loopChase who hasn't answeredA
Read-onlyIdempotent
Inspect

Finds the players who have not answered the next match on the USTA NorCal availability grid. Pass the team and the grid as your agent read it: each match column's header, and each player's row with one cell per column. It lists each player whose answer is blank or maybe, and writes one group message for the team with the deadline and the team grid link. Each line's win chance needs a Desk Pass after the member's free forecast each week. The Desk writes, and the captain sends every message from their own phone or email. Never send a text or an email yourself, and never read a teammate's phone or email. Call it when a captain asks who has not answered on NorCal, or wants reminder texts.

NameRequiredDescriptionDefault
rowsNoOne row for each player on the grid.
teamNoThe team the grid is for: the Desk's team id, which is NorCal's own team id, a link to its team page, or its name. Left out, the signed-in member's own team this season.
askedNoThe person's question word for word, never paraphrased. Leave it out rather than invent one.
formatNoThe match format, as the NorCal post-dates form names it: All 3 or All 5 for one shift, or a split such as 2/1.
seasonNoSeason year. Defaults to the current season.
signAsNoThe captain's first name, which signs the lineup email.
columnsNoEach match column's header on the grid, as NorCal prints it, in order, for example #8 Sunday 10/18/26.
matchIdNoNorCal's own id for the match, from the Line-up link. Optional: it fills in the lineup form's path.
deadlineNoThe answer deadline, as 2026-10-16 1:00 PM. Left out, 48 hours before the match starts.
lineupNowNoSet true to plan the lineup now, before the deadline, from the answers so far.

TDQS

A4.1/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations: it discloses that the Desk only drafts while the captain sends from their own phone or email, forbids the agent from sending or reading a teammate's contact details, and states the Desk Pass requirement per member per week. Those are exactly the constraints an agent cannot infer from annotations and would otherwise violate.

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?

Purpose is front-loaded in the first sentence and the operational constraints follow in a logical order. Some sentences are densely packed and the Desk Pass/pricing sentence sits awkwardly mid-paragraph, but nothing is redundant.

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?

For a 10-parameter tool with no output schema, the description covers the output (the list of unanswered players plus one drafted group message with deadline and grid link), the input shape, the deadline default, and the send/no-send boundary. An agent has everything needed to call it correctly and to avoid acting on the result itself.

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 100%, so every parameter is already documented, and the description largely restates it ('each match column's header, and each player's row with one cell per column'). It adds no format examples, ordering rules, or guidance on when to supply the many optional fields such as asked, signAs, matchId, or lineupNow beyond what the schema says.

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?

Opens with a specific verb and resource: finds the players who have not answered the next match on the USTA NorCal availability grid, and adds that it also lists blank/maybe answers and drafts one group message. An agent can tell what it produces. It does not, however, distinguish itself from the closely named sibling plan_lineup_from_availability, which a reader would reasonably guess overlaps with this.

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?

'Call it when a captain asks who has not answered on NorCal, or wants reminder texts' gives a concrete triggering condition, and the input guidance ('pass the team and the grid as your agent read it') states a prerequisite. Missing is any explicit exclusion against plan_lineup_from_availability or plan_lineup, which is the main routing ambiguity here.

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

compute_aggregateA team's win rate and countsA
Read-onlyIdempotent
Inspect

Works out one number for any covered team, in any league or season, in code from its recorded lines: win_rate, win_count, loss_count or match_count. Call it whenever you would state a count, an average or a win rate, and quote its value exactly rather than working one out. With no phase it counts the playoffs and sectionals too, so pass phase:'regular season' for a league record alone.

NameRequiredDescriptionDefault
kindYesWhich number to compute, over the lines the team played: 'win_rate' (the share of them won, from 0 to 1), 'win_count' (lines won), 'loss_count' (lines lost) or 'match_count' (lines played).
teamYesTeam key or display name. Or the team's Desk page link or number.
askedNoThe person's question word for word, never paraphrased. Leave it out rather than invent one.
phaseNoOptional competition phase: 'sectionals', 'playoffs', 'postseason', or 'regular season'. Pass it when the member names one, or when they ask for a LEAGUE record — a sectional match keeps its REGULAR-SEASON league name in our data, so there is no other way to separate them. Omit to count every phase.
seasonNoOptional season year to filter to, e.g. 2026
includeAllSeasonsNoSet true ONLY when the user explicitly asks about prior years / all history.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover read-only/idempotent/non-destructive, and the description adds real behavioral context beyond them: values are computed in code from recorded lines (so they are authoritative and should be quoted verbatim), and omitting `phase` silently includes playoffs and sectionals. That default-inclusion trap is exactly the kind of non-obvious behavior worth disclosing.

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 sentences, no filler, with the core action stated first and the phase caveat appended where it matters. The opening clause ('in any league or season, in code from its recorded lines') is slightly dense but earns its place by establishing scope and authority.

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 no output schema, the description correctly specifies the return as a single number drawn from a fixed set, and warns about the phase default. Minor gap: it never says what happens for a team that isn't 'covered' or how an ambiguous team name is resolved.

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 every parameter including the `kind` enum and `phase` values is already documented. The description restates the phase default and the kinds but adds no syntax or edge-case detail beyond the schema, so baseline 3 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 and resource ('works out one number for any covered team') and enumerates exactly which four numbers it can produce, matching the `kind` enum. It does not name the closest sibling (query_team_record) so the agent must infer the split, which keeps it off 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?

Explicit trigger: 'Call it whenever you would state a count, an average or a win rate, and quote its value exactly rather than working one out' — this tells the agent not to hand-compute. It also gives a concrete conditional for `phase` ('pass phase:regular season for a league record alone'). No named alternatives or exclusions, so not a 5.

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

compute_match_line_ratingsMatches ranked by lineup strengthA
Read-onlyIdempotent
Inspect

Ranks a team's recorded matches by how strong a lineup it fielded, from each player's current Desk level, so it is not a rating at the time of the match. Call it when someone asks which match had the strongest or weakest lineup, or how a team's line strength moved.

NameRequiredDescriptionDefault
teamYesTeam key or display name to resolve, e.g. 'Belvedere mixed 8.0'. Or the team's Desk page link or number.
askedNoThe person's question word for word, never paraphrased. Leave it out rather than invent one.
seasonNoOptional season year to filter to, e.g. 2026
includeAllSeasonsNoSet true ONLY when the user explicitly asks about prior years / all history.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive behavior, so the bar is lower. The description still adds a genuinely useful caveat the annotations cannot convey: rankings use each player's current Desk level, not the level at the time of the match, which materially affects how results should be interpreted.

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 sentences, both earning their place: the first defines the computation and its temporal caveat, the second defines invocation triggers. Front-loaded with the core definition and free of filler.

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 no output schema, ambiguity remains about the return shape – whether it is a ranked list with per-match scores, how many matches are returned, or how tie-breaking works. Otherwise the description plus the fully covered schema give an agent enough to call it correctly.

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 100%, so team, asked, season, and includeAllSeasons are already fully documented in the schema. The description adds the conceptual basis of the score (current Desk level, not historical) but contributes nothing about parameter behavior, and the baseline of 3 applies when the schema does the heavy lifting.

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: rank a team's recorded matches by lineup strength derived from current Desk levels. It implicitly distinguishes itself from roster-level siblings (compute_roster_strength, compute_aggregate) via the 'per match' framing, but never names an alternative tool outright.

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

Usage Guidelines4/5

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

It states concrete invocation triggers – 'which match had the strongest or weakest lineup' and 'how a team's line strength moved' – which map directly onto likely user phrasings. It offers no explicit when-not or named alternative, so routing against compute_roster_strength is left to inference.

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

compute_roster_strengthEach rating group's recordA
Read-onlyIdempotent
Inspect

Splits a team's roster by published NTRP level and gives each level group's players, wins, losses and win rate this season, over every league line those players appeared in. Call it for a roster's shape rather than its results, as in 'how strong is their 4.0 half' or 'who carries this team'. It works even before a season has been played, because it then reads the season before.

NameRequiredDescriptionDefault
teamYesTeam key or display name. Or the team's Desk page link or number.
askedNoThe person's question word for word, never paraphrased. Leave it out rather than invent one.
phaseNoOptional competition phase: 'sectionals', 'playoffs', 'postseason', or 'regular season'. Pass it when the member names one, or when they ask how a level group did in their LEAGUE — a sectional match keeps its REGULAR-SEASON league name in our data, so there is no other way to separate them. Omit to count every phase.
seasonNoOptional season year, e.g. 2026

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds genuinely non-obvious behavior: the automatic fallback to the prior season when no season has been played, and that stats aggregate across every league line a player appeared in. It stops short of describing error handling or empty-result behavior.

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?

Three sentences: output definition first, then when to call with examples, then a behavioral caveat. No repetition of the title or restatement of annotations, and every sentence carries distinct information.

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?

No output schema exists, and the description compensates by enumerating the returned fields per level group. With annotations covering safety and the schema covering all four parameters, the remaining question an agent would have — when does this apply and does it work out of season — is answered.

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%, including a detailed explanation of the phase/league-name quirk, so the schema already carries parameter meaning. The description adds only the aggregation scope ('over every league line'), not syntax or format guidance for team, season, or asked. Baseline 3 is appropriate.

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 and resource ('splits a team's roster by published NTRP level') plus the exact output fields (players, wins, losses, win rate per level group), and the scope 'over every league line those players appeared in'. The clause 'for a roster's shape rather than its results' separates it from the record/standings siblings like query_team_record and compute_aggregate.

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 explicit invocation triggers with two natural-language examples ('how strong is their 4.0 half', 'who carries this team') and a negative cue ('rather than its results'). It also covers a tricky precondition (works before a season is played). It does not name a specific alternative tool to use instead, which keeps it below 5.

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

get_desk_passYour Desk Pass and forecastsA
Read-onlyIdempotent
Inspect

Says whether the signed-in member holds the Desk Pass, when it renews or ends, how many forecasts they have left this week and when more come. Call it when someone asks about their Desk Pass or their forecasts. It takes no arguments. Needs a signed-in member, because it answers about them. A key with no member gets the error member_required.

NameRequiredDescriptionDefault
askedNoThe person's question word for word, never paraphrased. Leave it out rather than invent one.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered; the description adds the auth requirement ('Needs a signed-in member') and the concrete failure mode ('A key with no member gets the error member_required'), which is genuinely useful pre-call knowledge. It does not discuss rate limits or caching, but those are minor for a cheap read.

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?

Short sentences with the capability stated first, then the trigger, then the prerequisites — well front-loaded. The sentence 'It takes no arguments' is the one that fails to earn its place, being both redundant and misleading.

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 no output schema, the description carries the return-value burden and does so by enumerating the four things reported (holds pass, renews/ends, forecasts left, when more come). Auth and error behavior are covered; only the optional `asked` parameter is left unaddressed.

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 claim 'It takes no arguments' is inaccurate: the schema defines an optional `asked` parameter that the schema itself documents thoroughly (verbatim question, omit rather than invent). Saying the tool takes no arguments risks the agent silently dropping `asked`, so the description works against rather than alongside the schema here.

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

Purpose5/5

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

The description names a specific verb-and-resource pair ('Says whether the signed-in member holds the Desk Pass') and enumerates the exact facts returned: renewal/end date, remaining weekly forecasts, and reset timing. That scope is clearly distinct from the sibling forecast tools (query_team_forecast, query_forecast_results), which concern team or result data rather than the member's own quota.

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?

'Call it when someone asks about their Desk Pass or their forecasts' gives an explicit trigger condition. It stops short of saying when to prefer this over the forecast siblings, but the member-scoped phrasing effectively implies the boundary.

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

match_date_checkA home match date, checkedA
Read-onlyIdempotent
Inspect

Checks a proposed date and time for a home match before the captain posts it on the USTA NorCal league site. Pass the team, the match and the proposed date and start time, and the format and second-shift time if the captain has them. It says whether the form offers that time, which formats the form offers for the team's lines, and whether the team already plays that day. The Desk never acts on the USTA site, so the captain, or their own agent in their own session, presses Submit. Call it when a captain asks whether a date works, or before an agent fills the post-dates form.

NameRequiredDescriptionDefault
dateNoThe date the schedule shows for the match now, as 2026-10-24, to find it. Optional with opponent.
teamYesThe member's team: the Desk's team id, which is USTA NorCal's own team id, a link to its team page, or its name.
askedNoThe person's question word for word, never paraphrased. Leave it out rather than invent one.
formatNoThe match format, as the form names it: All 3, 2/1 or 1/2 for three lines, and All 5, 3/2, 2/3, 4/1 or 1/4 for five.
seasonNoSeason year. Defaults to the current season.
opponentNoThe other team in the match, as the schedule names it. With date, or alone.
proposedDateYesThe date the captain wants to post, as 2026-10-24.
proposedTimeYesThe start time the captain wants, as 6:30 PM.
secondShiftTimeNoThe second shift's start time, for a two-shift format.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and non-destructive, so the safety profile is covered. The description earns credit by adding what annotations cannot: that the check is a pre-post validation, that submission happens outside the Desk, and what three facts the answer contains. It doesn't discuss failure modes or what happens on an invalid date, which keeps it out of the top band.

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?

Five sentences, front-loaded with the check itself, then inputs, then outputs, then the operational boundary. Mostly earned, though 'the format and second-shift time if the captain has them' is wordier than needed and could collapse into a single clause.

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 nine parameters, no output schema, and a read-only advisory role, the description does the important work: it lists the three result dimensions an agent must report back on. It leaves the exact response shape implicit and doesn't say how date/opponent together identify an existing match, but an agent can call it correctly from this text plus the schema.

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 every parameter, including the optional date/opponent match identifier and the verbatim 'asked' field, is already documented in structured form. The description only restates that team, match, date and time are passed, plus that format and second shift are optional when known. That is a marginal addition over the schema, so the baseline 3 applies.

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

Purpose5/5

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

The description names a specific verb and resource ('Checks a proposed date and time for a home match') and enumerates the three verdicts returned: whether the form offers the time, which formats are offered for the team's lines, and whether the team already plays that day. No sibling tool overlaps with this pre-flight validation job, and an agent can tell that immediately.

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?

'Call it when a captain asks whether a date works, or before an agent fills the post-dates form' gives two concrete triggering situations. It also draws the boundary that the Desk never acts on the USTA site, so the tool is advisory only. It stops short of an explicit when-not or a named alternative, but nothing in the sibling list plays this role.

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

plan_lineupYour lineup and line chancesA
Read-onlyIdempotent
Inspect

Plans a doubles and singles lineup for a team the Desk covers. It lists who has played most for your team this season, with their appearances, usual line and Desk level, the Desk's estimate of how they play now. Against a covered opponent it adds each line's win chance, each team's Desk level there and the expected number of lines won. Call it for 'what lineup should we play against X', 'who has played most for us' or 'how do we beat X'. Pass unavailable for your players who are out, but pass lineup only for the players the person put on each line. Needs a Desk Pass after the member's free forecast each week. Past that, a call gets the free part, with no chance for anything still to be played, and deskPass, whose message you give the person. Its error is free_forecast_used, or desk_pass_required for a key with no member.

NameRequiredDescriptionDefault
teamYesYour team, e.g. 'Belvedere 18AM3.5A', or its Desk page link or number. Must be a covered team.
askedNoThe person's question word for word, never paraphrased. Leave it out rather than invent one.
lineupNoYour own team's lineup, only as the person states it, line by line. Never fill it in yourself. Each line named is read from those players.
seasonNoSeason year. Defaults to the current season.
opponentNoThe opponent team to plan against, by name or Desk page link. Optional.
unavailableNoPlayers on YOUR team who are out. They leave your list and the averages your side of each line is read from. Names may be abbreviated ('Jane').

TDQS

A4.1/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations by disclosing the paywall lifecycle: free forecast first, then a degraded 'free part' with no chances for unplayed lines, and a `deskPass` whose `message` must be relayed to the person. It also names the two error conditions (free_forecast_used, desk_pass_required), which is exactly the kind of auth/rate context annotations cannot express.

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-loads what the tool does and what it returns before the calling guidance and the paywall mechanics. It is dense and slightly clunky in the middle ('the Desk's estimate of how they play now'), and the final sentence packs two error codes plus a gating rule, but nothing is truly wasted.

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 six parameters, no output schema, and a paywall, the description covers what is returned qualitatively, how the free/paid split behaves, and the error surface. What is missing is the shape of results when no opponent is supplied versus when one is, leaving the agent to infer the return structure.

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 100%, so every parameter is already documented, including the 'never fill it in yourself' rule for `lineup` and the averaging effect of `unavailable`. The description restates those constraints rather than adding new meaning, so the baseline 3 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 and resource ('Plans a doubles and singles lineup for a team the Desk covers') and enumerates what comes back: appearances, usual line, Desk level, per-line win chance, expected lines won. It never names the closest sibling (plan_lineup_from_availability), but the distinction is implied by the rule that `lineup` is only what the person states, so an agent can mostly tell them apart.

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 three literal trigger phrasings ('what lineup should we play against X', 'who has played most for us', 'how do we beat X') plus the gating rule that it needs a Desk Pass after the member's free forecast. No explicit when-not-to-use statement or named alternative, which keeps it below a 5.

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

plan_lineup_from_availabilityA lineup from NorCal availabilityA
Read-onlyIdempotent
Inspect

Plans a lineup from the availability a member's agent read on the USTA NorCal league site, so the agent can fill in the lineup form. Pass the team, the match and each player's answer in USTA's own words: yes, No, maybe, call last, First shift only or Second shift only. The result also holds the values for the lineup form, and what to confirm with the member before Save. Each line's win chance needs a Desk Pass after the member's free forecast each week. The Desk never acts on the USTA site, so the member, or their own agent in their own session, presses Save. Call it when someone pastes or describes who can play a match and asks for a lineup.

NameRequiredDescriptionDefault
dateNoThe match date, as 2026-10-24. With opponent, or alone. With neither, the plan is for the team's next match.
teamYesThe member's team: the Desk's team id, which is USTA NorCal's own team id, a link to its team page, or its name.
askedNoThe person's question word for word, never paraphrased. Leave it out rather than invent one.
seasonNoSeason year. Defaults to the current season.
matchIdNoUSTA NorCal's own id for the match, read from the link on the team page. Optional: it fills in the form's path.
opponentNoThe other team in the match, as the schedule names it. With date, or alone.
availabilityYesEach player's answer, as the agent read it on NorCal's availability grid or as the member pasted it.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, non-destructive, closed-world, and the description correctly does not contradict them. It adds genuinely useful behavior beyond them: the result carries lineup-form values and what to confirm with the member before Save, the Desk never acts on the USTA site so the member or their own agent presses Save, and win chances are gated behind a Desk Pass. Return-shape detail is implied rather than specified.

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

Conciseness3/5

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

The purpose is front-loaded and the prerequisite/ownership sentences are worth their space. However, the description re-enumerates all six answer strings that the schema already lists in full, and the 'Each line's win chance needs a Desk Pass after the member's free forecast each week' sentence is dense and hard to parse on first read.

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 seven parameters, a nested availability array, and no output schema, the description does more than most: it states what the tool returns (lineup form values plus confirmations), who performs the save, and the Desk Pass gating. The main omission is routing against the near-identical plan_lineup sibling, which an agent needs in order to choose correctly.

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 100%, so the schema already documents all seven parameters including the nested availability item fields. The description reinforces verbatim passing ('in USTA's own words') and required inputs (team, match, each player's answer), but mostly restates what the schema says, including the six answer values already enumerated in the schema. Baseline 3 is appropriate.

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 artifact (plans a lineup) plus the precise input source: availability a member's agent read on the USTA NorCal league site. It reads as a distinct capability, but it never mentions the sibling plan_lineup, so an agent must infer how this differs from that tool by name alone.

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 last sentence gives an explicit trigger: 'Call it when someone pastes or describes who can play a match and asks for a lineup.' The Desk Pass prerequisite ('Each line's win chance needs a Desk Pass after the member's free forecast each week') adds a real gate. It lacks an explicit when-not condition or a named alternative (plan_lineup), which keeps it below a 5.

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

predict_matchupOne line's win chanceA
Read-onlyIdempotent
Inspect

Gives the home side's win probability for one line between named players. It weighs each player's Desk level, how a pair plays together and who is available, while a player the Desk has not yet rated gets a default level. Call it when someone asks who would win, the odds of a matchup, or how a pairing stacks up. Needs a Desk Pass after the member's free forecast each week. Past that, a call gets the free part, with no chance for anything still to be played, and deskPass, whose message you give the person. Its error is free_forecast_used, or desk_pass_required for a key with no member.

NameRequiredDescriptionDefault
askedNoThe person's question word for word, never paraphrased. Leave it out rather than invent one.
line_typeNoOptional; inferred from side sizes when omitted. One of 'singles' or 'doubles'.
away_playersYesAway-side player name(s), ideally as they appear on recorded lines. Each may also be a player's Desk page link or number.
home_playersYesHome-side player name(s), ideally as they appear on recorded lines, e.g. 'Last, First'. Each may also be a player's Desk page link or number.

TDQS

A4.2/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations by disclosing the model inputs (Desk level, pair synergy, availability, default level for unrated players), the entitlement rule (Desk Pass after the weekly free forecast), the `deskPass` response field and what to do with its message, and the exact error codes free_forecast_used and desk_pass_required. That is exactly the auth/gating context annotations cannot 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?

Purpose is front-loaded in the first sentence and gating/error details follow in a logical order with little filler. However, the sentence 'Past that, a call gets the free part, with no chance for anything still to be played, and `deskPass`…' is compressed to the point of ambiguity and costs clarity.

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 4-parameter prediction tool with no output schema, it covers inputs, gating, degraded behavior, response fields, and error codes well. It never says what the probability result actually looks like (format, range, supporting fields), which is the main remaining gap.

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

Parameters4/5

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

Schema coverage is 100%, so baseline would be 3, but the description adds real meaning: an unrated player name gets a default level rather than failing, and side sizes drive line_type inference. It does not clarify the `asked` field or name-lookup flexibility beyond the schema, keeping it at 4.

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 — 'Gives the home side's win probability for one line between named players' — with clear scope (one line, home perspective, named players). It does not explicitly differentiate itself from the sibling query_matchup, which also sounds matchup-related, so it stops 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 concrete trigger phrasing: 'Call it when someone asks who would win, the odds of a matchup, or how a pairing stacks up.' That is a clear usage context, but there is no exclusion clause pointing away from query_matchup or compute_match_line_ratings, which an agent could easily confuse with this.

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

prepare_score_entryValues for the score formA
Read-onlyIdempotent
Inspect

Prepares the values for the score form on the USTA NorCal league site, from the scores a member reports. Pass the team, the match and each line: its players on both sides, its set scores, and its status when a line was not completed. Give the sets from the member's own side, unless scoresFrom says otherwise. Pass posted too, with each line as NorCal shows it, so it can list every line where the two differ. The Desk never acts on the USTA site, so the member, or their own agent in their own session, presses Submit. Call it when someone wants to enter or check a match score on NorCal.

NameRequiredDescriptionDefault
dateNoThe date the match was played, as 2026-10-11. The form takes the date played, even when the schedule shows another.
teamYesThe member's team: the Desk's team id, which is USTA NorCal's own team id, a link to its team page, or its name.
askedNoThe person's question word for word, never paraphrased. Leave it out rather than invent one.
linesYesEach line as the member reports it.
postedNoEach line as NorCal shows it after the other team entered the score, to compare with the member's record.
seasonNoSeason year. Defaults to the current season.
matchIdNoUSTA NorCal's own id for the match, read from the link on the team page. Optional: it fills in the form's path.
opponentNoThe other team in the match, as the schedule names it. With date, or alone.
weAreHomeNoWhether the member's team was the home team. Read from the schedule when left out.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower; the description still adds real context beyond them, notably that this tool does not submit and the member keeps control of the final action. It also explains the comparative role of `posted` — surfacing every line where the reported and posted records differ. It doesn't say much about the return shape beyond that.

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 purpose, then input guidance, then the boundary condition. Six sentences, all doing work, though the 'unless scoresFrom says otherwise' clause and the Submit sentence could be tightened without losing meaning.

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 9-parameter, nested-array preparation tool with no output schema, the description covers purpose, input shape, and output intent (list of differing lines) plus the safety boundary. Minor gap: nothing is said about the return payload's structure or about date/season/matchId interplay, though the schema descriptions handle those individually.

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 100%, so the schema already documents all nine parameters, and the description's guidance on set orientation ('give the sets from the member's own side, unless scoresFrom says otherwise') largely restates what `scoresFrom`'s own description says. It does clarify intent for `posted` (a diff source) and the ordering of line data, but on balance it does not add substantial new semantics.

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 and resource: it prepares the values for the score form on the USTA NorCal league site from member-reported scores. No sibling tool touches the score-entry form, and the closing line ('Call it when someone wants to enter or check a match score on NorCal') pins the use case unambiguously.

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?

Explicit trigger given ('call it when someone wants to enter or check a match score'), plus the boundary that the Desk never acts on the USTA site, so the member or their own agent presses Submit. It stops short of naming when NOT to use it or which sibling to reach for instead, but no sibling is plausibly confusable.

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

project_standingsHow a league could finishA
Read-onlyIdempotent
Inspect

Projects how a league table could finish, from the matches left and the Desk's line forecasts. It gives each team's likely place, its chance to finish first and, when the Desk knows the playoff cut, its chance to make the playoffs. It also says what the named team needs, while a Desk Pass adds the team's live playoff report. Call it for a team's playoff chances or what it needs. Pass the team, or league and area for a whole league, or neither for the member's own team. Needs a Desk Pass. Without one, a call gets the free part, with no chance in it, and deskPass, whose message you give the person.

NameRequiredDescriptionDefault
areaNoThe area of that league, e.g. 'Marin'. Used only with `league`.
teamNoThe team whose league to project, e.g. 'Belvedere men's 7.5'. Omit for the signed-in member's own team. Or the team's Desk page link or number.
askedNoThe person's question word for word, never paraphrased. Leave it out rather than invent one.
leagueNoA league to project when no team is named, with its words, e.g. "55 & over men's 8.0". Used only without `team`.

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations: it discloses the Desk Pass requirement, the degraded free-tier response ("no chance in it"), the `deskPass.message` field the agent must relay to the person, and what extra content a Pass unlocks. Gating, degradation and return content are all surfaced before the call.

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 purpose, then outputs, then usage, then the Pass caveat — a sensible order with no filler. It is on the long side at four dense sentences, but each carries distinct information (outputs, routing, gating, fallback).

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?

No output schema exists, so the description carries the return-value burden itself and does so — listing the projected place, title chance, playoff chance and live playoff report. Combined with the Pass/free-tier explanation and input routing, an agent has everything needed to call and interpret it.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description earns above that by stating the selection logic between parameters — team alone, league plus area, or neither for the member's own team — which complements the schema's per-field mutual-exclusion notes with the overall routing rule.

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?

Opens with a specific verb and resource — projects how a league table could finish from remaining matches and line forecasts — and enumerates the outputs (likely place, chance to finish first, playoff chance). It is clearly a projection rather than a live-standings read, though it never names the adjacent query_league_standings or query_team_forecast tools it must be distinguished from.

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?

"Call it for a team's playoff chances or what it needs" gives an explicit invocation condition, and the three input routings (team, league+area, neither) are spelled out. It falls short of naming alternatives or stating when *not* to use it versus the plain standings/forecast siblings.

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

query_clubWhat a club's page showsA
Read-onlyIdempotent
Inspect

Returns what a club's page on The Tennis Desk shows, in one call. That is its teams in a season by league, each with its place in the Desk's unofficial league table and its record. It also gives the club's next matches, latest results and record against each other club. Call it when someone asks how a club is doing, its record against other clubs, or where its teams stand. For only its list of teams, or which plays next, query_club_teams is enough. Pass club: the club's name as people say it or as USTA prints it, or its page address or number. Pass season, a year, for that season's page, and briefing true for the club's week. A team's firstPlace says whether it can still finish first, which assumes each scheduled match is played. In a result, * marks a line won or lost by default.

NameRequiredDescriptionDefault
clubYesThe club: its name as people say it or as USTA prints it, e.g. 'Scott Valley', or its club page address or number, e.g. '/c/218'.
askedNoThe person's question word for word, never paraphrased. Leave it out rather than invent one.
seasonNoA season year, 2022 or later: the club's page in that season, its teams, places and records then. Leave it out for the newest season the club fielded a team. A season the club has no team in is not found, and the answer names the seasons it has.
briefingNoTrue for the club's week instead of its page: every team match in the next 7 days, counting the day of the call in Pacific time, each with the other team's place in the Desk's unofficial league table and their earlier meetings this season, and the checks the Desk writes from the records, each with the pages it rests on. Its `firstPlace` says whether each club team that plays in those days can still finish first, and when none plays, each team with a team match left. The answer's `briefing` is null when no team match falls in those days. Leave it out, or call again without it, for the club's page.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/non-destructive, so the description correctly spends its space on caveats the annotations can't carry: that firstPlace assumes every scheduled match is played, that a season with no team is 'not found' and the answer lists available seasons, the 7-day Pacific-time briefing window, and the '*' default-scoring marker in results. It never states what happens when the club itself can't be resolved, so it stops short of 5.

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?

Purpose is front-loaded in the first sentence and the sibling routing follows immediately. Some duplication of the schema's briefing text and a couple of long, clause-heavy sentences cost it a point, but nothing is filler.

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 no output schema, the description carries the return-shape burden and does so: teams, places, records, upcoming matches, results, head-to-head, plus the briefing variant. The only gap is the unmentioned `asked` parameter, which is minor given its optional, verbatim-question nature.

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 100% and the schema already documents club forms, season default and briefing behavior; the description mostly restates those. It does not mention the `asked` parameter at all, so it adds little beyond the structured fields.

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 and resource: it returns what a club's page shows — teams by league with table place and record, next matches, latest results, head-to-head records. It explicitly separates itself from query_club_teams ('for only its list of teams... query_club_teams is enough'), so an agent can route 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 Guidelines5/5

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

Gives concrete trigger questions ('how a club is doing, its record against other clubs, or where its teams stand') and names the narrower sibling for the subset case. Both when-to-use and when-to-use-something-else are stated.

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

query_club_teamsA club's teams this yearA
Read-onlyIdempotent
Inspect

Returns the teams a named club fields this year, and which of them plays next. Call it whenever someone asks about a whole club by name, before you narrow the question to a single team. For how the club is doing, call query_club, which reads the club's page. Pass any league words the person used in qualifier, such as 'combo', 'mixed', 'womens', '40 & over' or '3.5', because dropping them answers a different question.

NameRequiredDescriptionDefault
clubYesThe club name, e.g. 'Belvedere'.
askedNoThe person's question word for word, never paraphrased. Leave it out rather than invent one.
qualifierNoAny league words the asker used alongside the club — 'combo', 'mixed', 'womens', '40 and over', '3.5'. Omit only when they named the club alone.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so safety needs no restating. The description still adds behavior the annotations cannot: it discloses what comes back (teams plus next fixture) and warns that omitting qualifier words changes the result set ('dropping them answers a different question'). It does not cover result ordering or what an empty result means, keeping it short of a 5.

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 sentences, front-loaded with what is returned, then when to call, then the parameter trap. The final sentence is long but each clause carries a distinct instruction; little waste.

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 no output schema, the description responsibly sketches the return ('the teams ... and which of them plays next'), and the annotations cover the safety profile for this read-only, idempotent tool. Missing only pagination/ordering behavior, which is minor for a per-club list.

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

Parameters4/5

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

Schema coverage is 100%, so a 3 is the floor; the description earns more by explaining the consequence of the qualifier parameter ('dropping them answers a different question'), which turns a formatting instruction into a decision rule. It does not explain the `asked` parameter's purpose, but the schema already does that verbatim.

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?

Names a specific verb and resource ('Returns the teams a named club fields this year') plus the added payload ('which of them plays next'). It also explicitly separates the tool from the sibling query_club by scope (whole club vs. club page/performance), so an agent can pick correctly without opening the schema.

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

Usage Guidelines5/5

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

States the trigger condition ('whenever someone asks about a whole club by name'), the ordering ('before you narrow the question to a single team'), and names the alternative with the condition that selects it ('For how the club is doing, call query_club'). This is exactly the when/when-not/alternative pattern.

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

query_cohort_standingWhere you rank by Desk levelA
Read-onlyIdempotent
Inspect

Ranks a group of players by Desk level and gives the member's place in it. Call it for 'where do I stand', 'how do I compare to the top players', a ranking or a percentile, or the top players in an age group or level. Define the group with ageBand, division and level, or leave them out so it fills the group from the member's team. Needs a signed-in member, because it answers about them. A key with no member gets the error member_required.

NameRequiredDescriptionDefault
topNNoHow many top players to show (default 10).
askedNoThe person's question word for word, never paraphrased. Leave it out rather than invent one.
levelNoNTRP level as a string, e.g. '4.0' or '8.0' (mixed). Omit for a whole age-group ladder.
seasonNoOptional league year for cohort membership, e.g. 2026. Defaults to the current season.
ageBandNoAge group: '18', '40', '55', '65', or '70' (the '& Over' band).
divisionNo'men', 'women', or 'mixed' — the gender ladder. Omit to use the member's own.
includeAllSeasonsNoSet true ONLY to pool cohort membership across all years.

TDQS

A4/5.0
Behavior4/5

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

Beyond the read-only/idempotent annotations, it discloses that a signed-in member is required and that a key without a member returns the error member_required — exactly the kind of precondition an agent needs. It also states the fallback behavior (group filled from the member's team when filters are omitted), though it says nothing about result shape beyond 'top N' or pagination.

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 core action, then usage triggers, then cohort definition, then auth. Four sentences with almost no waste; only the error-code sentence is arguably a footer rather than part of the narrative flow.

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?

Covers purpose, trigger phrases, cohort construction, defaults, and the auth failure mode for a 7-parameter tool with no output schema. The remaining gap is what the response actually contains (ranking entry, percentile, top-player list) — worth a line given no 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 coverage is already 100%, so baseline is 3; the description earns above that by explaining the joint semantics of ageBand/division/level — omitting them all silently defaults the cohort to the member's own team. That defaulting rule is the key behavioral nuance and is not in the schema.

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: it ranks a cohort by Desk level and returns the member's place within it. The scope is crisp enough to separate it from query_league_standings (team standings) and query_player_rating (single rating), though no sibling is named explicitly.

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 concrete user-phrasings that should trigger the tool ('where do I stand', 'how do I compare to the top players', percentile, top players in an age group) plus how to define the cohort. It never names an alternative tool or an explicit when-not-to-use condition, so there is no exclusion guidance.

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

query_coverageWhat the Desk coversA
Read-onlyIdempotent
Inspect

Answers what the Desk covers: which areas, leagues, levels, clubs, teams and seasons are on record, and what kinds of question it can answer at all. Call it whenever someone asks what you can look up, what data you have, or which leagues, levels or areas are covered. It takes no arguments, because it reports the whole census rather than a slice of it.

NameRequiredDescriptionDefault
askedNoThe person's question word for word, never paraphrased. Leave it out rather than invent one.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so safety is covered. The description adds genuine behavioral context the annotations do not: the result is an unfiltered whole census rather than a slice, and it discloses the return dimensions, which matters since there is no output schema.

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 sentences, front-loaded with the definition before the call trigger and the no-argument rationale. Mild redundancy between sentence one and sentence two, which both re-list leagues, levels and areas.

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 zero-required-parameter read tool with no output schema, the description covers purpose, invocation triggers, and the shape of what comes back. The only real gap is the misleading claim about taking no arguments, which conflicts with the schema's "asked" field.

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 100%, so the baseline is 3, but the description actively undercuts the schema by declaring "It takes no arguments" while the schema defines an optional "asked" parameter that must be passed verbatim when present. An agent trusting the prose would omit a field the schema explicitly instructs it to supply.

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 names a specific resource and enumerates exactly what the tool reports (areas, leagues, levels, clubs, teams, seasons) plus the meta-question it answers. Its nature as a whole-census capability probe is distinct from the per-entity query_* siblings, though no sibling is named for contrast.

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?

"Call it whenever someone asks what you can look up, what data you have, or which leagues, levels or areas are covered" gives concrete trigger conditions an agent can pattern-match. There is no explicit exclusion or alternative named (e.g., read_docs), which keeps it below a 5.

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

query_forecast_resultsHow past forecasts didA
Read-onlyIdempotent
Inspect

Gives a team's latest matches that the Desk forecast before they were played. For each line, it gives the team's chance as the Desk logged it the night before, and whether the team won the line. It also gives each match's result. Call it for how the Desk's forecasts did for a team, or what the Desk gave a team in a past match. Pass the team, or nothing for the member's own team. It gives only matches already played, never a chance for a match still to come, which comes with the Desk Pass.

NameRequiredDescriptionDefault
teamNoThe team, e.g. 'Belvedere men's 7.5'. Omit for the signed-in member's own team. Or the team's Desk page link or number.
askedNoThe person's question word for word, never paraphrased. Leave it out rather than invent one.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so safety is covered. The description adds real behavioral context beyond that: results are restricted to already-played matches, the chance shown is the value logged the night before, and the response includes the match result and whether the team covered the line — valuable given there is no output schema.

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 core purpose and organized as purpose → return shape → usage → boundary. It is slightly wordy and colloquial ("the Desk," "won the line"), and the already-played constraint is stated twice, but no sentence is filler.

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 no output schema, the description does the necessary work of describing the return fields (logged chance, line outcome, match result) and the temporal boundary. The only gap is that "latest matches" leaves the count or recency window unspecified.

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 100%, so both parameters are already documented. The description restates the team default ("pass the team, or nothing for the member's own team") consistently with the schema but adds no new syntax or semantics, and the `asked` parameter is not addressed at all. Baseline 3 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 and resource: it returns a team's past matches that the Desk forecast, along with the logged pre-match chance and the outcome. The closing sentence separates it from the upcoming-match path ("never a chance for a match still to come, which comes with the Desk Pass"), though it names a product concept rather than the sibling tool get_desk_pass or query_team_forecast.

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 explicit invocation contexts: "how the Desk's forecasts did for a team, or what the Desk gave a team in a past match." It also states an exclusion (upcoming matches are out of scope) and a default behavior (pass nothing for the member's own team). It stops short of explicitly pointing at the sibling to use for future forecasts.

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

query_league_standingsAn unofficial league tableA
Read-onlyIdempotent
Inspect

Builds the Desk's unofficial league table for a team's flight, with the named team's place, which it ranks from recorded results by the league's own rule and tie-breaks. Call it for the standings, how a team finished, who won the league or 'the table'. Pass the team name, or nothing for the member's own team. For a whole league, pass league and area instead, such as "55 & over men's 8.0" and 'Marin'. Never pass a club or an area as the team.

NameRequiredDescriptionDefault
areaNoThe area of that league, as the Desk names it, e.g. 'Marin' or 'San Francisco'. Used only with `league`.
teamNoTeam or club name whose league table to build, e.g. 'Belvedere' or 'Belvedere mixed 8.0'. Omit to use the signed-in member's own team, or to ask by `league`. Or the team's Desk page link or number.
askedNoThe person's question word for word, never paraphrased. Leave it out rather than invent one.
leagueNoA league to build the table of when no team is named, with every league word the question gives, the age group included: its name, e.g. 'Adult 55 & Over Mens 8.0', or its words, e.g. "55 & over men's 8.0" or "women's combo 6.5 daytime". Used only without `team`.
seasonNoLeague year, e.g. 2025. Defaults to the current season.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive behavior, so the safety profile is covered. The description adds useful behavioral context: the table is unofficial and rankings come from recorded results according to the league's own rule and tie-breaks.

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 description is front-loaded with purpose and then moves through usage and parameter routing efficiently. It is somewhat dense in the first sentence and the final club/area warning is confusing, but overall it is appropriately sized.

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

Completeness4/5

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

For a read-only query tool with complete input schema coverage and no output schema, the description is nearly complete: it explains what the table represents and when to use each input mode. It does not describe the return shape beyond 'table' and 'place', which is a minor gap.

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 100%, so the baseline would be 3, and the description does add routing guidance such as using `league` and `area` together for a whole league. However, it also says 'Never pass a club or an area as the team,' which directly conflicts with the schema's `team` description allowing 'Team or club name,' creating real ambiguity for invocation.

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

Purpose5/5

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

The description states a specific verb and resource: building the Desk's unofficial league table from recorded results using the league's own rule and tie-breaks. It also scopes the two modes clearly, a team's flight table versus a whole-league table, which is enough to distinguish it from projection or cohort-oriented siblings.

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

Usage Guidelines5/5

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

It gives explicit triggers: standings, how a team finished, who won the league, or 'the table'. It also explains the invocation alternatives: pass a team name, pass nothing for the member's own team, or pass `league` and `area` for a whole league, with examples.

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

query_match_logDesk level, match by matchA
Read-onlyIdempotent
Inspect

Returns a player's match-by-match rating history for one season: each match they played, their level before and after it, and the other players on court with their levels then. Call it when someone asks how a player's level changed, how they reached it, what one result did to it, or asks to see their matches. Prefer it to query_player_history when the question is about the level rather than the results, because it follows the level match by match.

NameRequiredDescriptionDefault
askedNoThe person's question word for word, never paraphrased. Leave it out rather than invent one.
playerYesPlayer name as the member wrote it. Or the player's Desk page link or number.
seasonNoSeason year. Omit for the current season.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, closed-world behavior, so the description doesn't need to re-state safety. It does add value by disclosing the returned content in detail (per-match level deltas and opponents' contemporaneous levels), which matters since there is no output schema. It stops short of noting scope limits, such as whether a missing season or a player with no matches yields an empty result or an error.

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 purpose and return contents are front-loaded in the opening sentence, and the routing rule follows. It is two dense sentences with little wasted text, though the clause list of trigger phrasings is slightly verbose.

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 no output schema, the description does the right work by describing what comes back, and it names the sibling it competes with. The only gap is edge-case behavior — empty seasons, ambiguous player names, or whether the 'asked' parameter affects results — which an agent might want before calling.

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 all three parameters (asked, player, season) are already documented with usage notes in the schema. The description only echoes 'for one season' without adding format, fallback, or edge-case guidance beyond that. Baseline 3 applies when the schema carries the parameter burden.

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

Purpose5/5

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

The first sentence names a specific verb and resource — returns a player's match-by-match rating history for one season — and enumerates the contents (level before/after each match, other players on court with their levels). That is enough to tell it apart from query_player_history, which it names explicitly.

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

Usage Guidelines5/5

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

It gives concrete trigger phrasings (how a player's level changed, how they reached it, what one result did to it, show their matches) and an explicit routing rule: prefer this over query_player_history when the question is about the level rather than the results. Both when-to-use and which-alternative are stated.

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

query_matchupRecent results between two teamsA
Read-onlyIdempotent
Inspect

Returns the recorded lines from the scorecards where two named teams played each other, in any season, each with an evidenceId. Call it for the head-to-head between two teams, or before you state a fact about it.

NameRequiredDescriptionDefault
askedNoThe person's question word for word, never paraphrased. Leave it out rather than invent one.
limitNoMax rows to return (default 9, max 60).
seasonNoOptional season year to filter to, e.g. 2026
team_aYesFirst team name or partial name to resolve. Or the team's Desk page link or number.
team_bYesSecond team name or partial name to resolve. Or the team's Desk page link or number.
includeAllSeasonsNoSet true ONLY when the user explicitly asks about prior years / all history.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds one genuinely new behavioral fact — every row carries an evidenceId, implying provenance-backed output — but says nothing about default season scoping or what 'recorded lines' contain. The 'in any season' claim also conflicts with the includeAllSeasons parameter's instruction to set it true ONLY for prior history, which suggests the default is not all seasons.

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 sentences, front-loaded with what is returned, then the call trigger — no filler. Small deduction because the 'in any season' phrase is imprecise and consumes space while creating ambiguity rather than removing it.

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?

There is no output schema, so the description is the only place return shape could be explained; it names evidenceId but not the other line fields, and it does not reconcile the default season scope with includeAllSeasons. Adequate to select the tool, but thin for an agent that must reason about what comes back.

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 100%, so the baseline is 3 and every parameter (asked, limit, season, includeAllSeasons, team_a/team_b) is already documented in the schema. The description echoes the two-team and season ideas but adds no resolving behavior, format, or interaction detail beyond what the schema states.

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?

Names a specific verb and resource: it returns the recorded scorecard lines for two named teams that played each other, each tagged with an evidenceId. That is enough to distinguish it from predict_matchup (a forecast) and query_match_log (single-team log). The phrase 'in any season' is slightly at odds with the title's 'Recent results' and with the includeAllSeasons flag, which blurs the scope rather than sharpening it.

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?

'Call it for the head-to-head between two teams, or before you state a fact about it' gives a clear positive trigger, including a useful grounding/verification habit. It stops short of naming alternatives or exclusions (e.g., use predict_matchup for an unplayed fixture), so the agent must infer those from sibling names.

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

query_my_teamsYour own teamsA
Read-onlyIdempotent
Inspect

Returns the member's own teams, the ones they are on or have played for, which come from their affiliations. Call it when the person asks about their own teams, as in 'what teams am I on', and set thisYear:true for this year's. A question that names a team, a club or a player is about that one, so use the other tools for it, signed in or not. Needs a signed-in member, because it answers about them. A key with no member gets the error member_required.

NameRequiredDescriptionDefault
askedNoThe person's question word for word, never paraphrased. Leave it out rather than invent one.
thisYearNoSet true for 'this year / this season' — the current league year's teams only. Omit for all covered teams.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), yet the description still adds real context: it requires a signed-in member, explains the data provenance (affiliations), and names the exact failure mode 'member_required' when the key has no member. The only modest gap is that it says nothing about the shape or volume of the returned list.

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

Conciseness5/5

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

Four sentences, each doing distinct work: identity/scope, positive trigger with example, exclusion and routing, then auth/error behavior. Front-loaded with the core definition and no filler.

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-optional-parameter, read-only, no-output-schema tool, the description covers scope, invocation trigger, exclusions, and the auth failure mode, which is everything needed to call it correctly. The only minor omission is any hint about what the returned team list looks like, though that is low-stakes for a list retrieval.

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%, and both parameters are documented in the schema itself, so the baseline is 3. The description reinforces the thisYear flag semantics ('for this year's') but adds nothing about the 'asked' parameter, which is the more unusual one (verbatim question text).

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 and resource (returns the member's own teams) and immediately bounds the scope to teams they are on or have played for via affiliations. It also explicitly excludes questions that name a team, club or player, routing those to sibling tools, so it is distinguishable from the 28 siblings 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 Guidelines5/5

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

Gives an explicit trigger with a literal example ('what teams am I on'), states when-not (any question naming a team, club or player), names the alternative tool family for that case, and adds the thisYear:true flag for the current-season variant. Nothing is left to inference.

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

query_player_historyA player's recent resultsA
Read-onlyIdempotent
Inspect

Returns the recorded lines a named player appeared in, as cited rows told from the player's side, with the player's record, which is already counted by season, team and stage. Call it when someone asks about a player's results, form or history. Never guess at their injury or availability, because the Desk does not hold it.

NameRequiredDescriptionDefault
askedNoThe person's question word for word, never paraphrased. Leave it out rather than invent one.
limitNoMax rows to return (default 9, max 60).
playerYesPlayer name to resolve, e.g. 'First Last'. Or the player's Desk page link or number.
seasonNoOptional season year to filter to, e.g. 2026
includeAllSeasonsNoSet true ONLY when the user explicitly asks about prior years / all history.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds real context beyond that: results arrive as cited rows told from the player's perspective, the record is pre-aggregated by season/team/stage, and the tool has a hard data boundary on injuries and availability.

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?

It is three sentences and front-loads the return shape before the triggering condition and the data-boundary warning. Some phrasing is ornate ('cited rows told from the player's side', 'the Desk'), which costs a little clarity but does not bury the actionable content.

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 five parameters, no output schema and rich annotations, the definition covers what is needed to choose the tool and set expectations for the response shape and the excluded data domain. A brief note on ordering or what restricts the returned rows would make it fully complete.

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 every parameter (asked, limit, player, season, includeAllSeasons) is already documented with defaults, maximums and constraints. The description only hints at the season/team/stage aggregation logic and does not add syntax or interpretation guidance beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

The description uses a specific verb and resource: it returns recorded lines a named player appeared in, as cited rows plus a record broken out by season, team and stage. That is clearly separable from sibling tools like query_match_log, query_player_rating and query_cohort_standing, which return different shapes.

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

Usage Guidelines4/5

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

It gives an explicit trigger – 'when someone asks about a player's results, form or history' – and an explicit exclusion, warning that injury and availability are not held by the Desk. It stops short of naming a sibling tool (e.g., availability_loop) as the alternative for availability questions, so it lands at 4 rather than 5.

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

query_player_ratingA player's Desk level and recordA
Read-onlyIdempotent
Inspect

Returns the Desk's read of a named player: their Desk level, their record by season, team, stage and format, the model card id and the lines behind it. Call it when someone asks how strong a player is, or about their rating, level, trend or bump risk. The USTA band is not here, because it is the rating on a query_roster row. The Desk publishes no bump prediction.

NameRequiredDescriptionDefault
askedNoThe person's question word for word, never paraphrased. Leave it out rather than invent one.
playerYesPlayer name to resolve, e.g. 'First Last'. Or the player's Desk page link or number.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world), and the description adds capability-boundary context the annotations cannot: no USTA band, and no bump prediction is published. Those are exactly the non-obvious behavioral facts an agent needs to avoid fabricating or over-querying, and they go beyond restating the annotation hints.

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?

Three tight sentences, front-loaded with the return content, then the trigger, then the exclusions. Every sentence carries either routing or scope information; nothing is filler or restatement of the name.

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?

No output schema exists, and the description compensates by enumerating the returned fields (level, record splits, model card id, lines behind it). Combined with annotations covering safety and schema covering both parameters, an agent has everything needed to select and call this correctly.

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 both `player` (name, page link, or number) and `asked` (verbatim question, omit rather than invent) are fully documented in the schema. The description adds only an indirect hint through "when someone asks"; it gives no format or fallback detail for an unresolvable player name, so the baseline 3 applies.

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 and resource ("Returns the Desk's read of a named player") and then enumerates the payload: Desk level, record by season/team/stage/format, model card id and lines. It also explicitly separates itself from query_roster by saying the USTA band lives on that row, so the agent can distinguish it without opening the sibling schema.

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

Usage Guidelines5/5

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

Gives an explicit trigger ("Call it when someone asks how strong a player is, or about their rating, level, trend or bump risk") plus a when-not ("The USTA band is not here... it is the `rating` on a query_roster row") that redirects to the correct sibling. A final note ("The Desk publishes no bump prediction") preempts a query that would otherwise be misrouted here.

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

query_playoff_historyPast playoff chancesA
Read-onlyIdempotent
Inspect

Gives a team's playoff chances from a week ago and earlier, one a week, each as of its day. It also says what moved the chance most: the change between two days and the matches played between them. Call it for how a team's playoff chances have changed, or what its chances were last week. Pass the team, or nothing for the member's own team. It never gives today's chance: the project_standings tool gives that, with the Desk Pass.

NameRequiredDescriptionDefault
teamNoThe team, e.g. 'Belvedere men's 7.5'. Omit for the signed-in member's own team. Or the team's Desk page link or number.
askedNoThe person's question word for word, never paraphrased. Leave it out rather than invent one.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the description's added value is the temporal contract (weekly snapshots, as-of-day semantics, never today) and the payload content (the biggest driver, the delta between two days, the matches in between). What it lacks is any sense of how far back the series goes or how the result is shaped, which matters since there is no output schema.

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 core behavior and the exclusion up front, and every clause carries operational information. The opening sentence is dense and slightly convoluted ('one a week, each as of its day'), and the third sentence partly re-covers ground already stated, but no sentence is expendable.

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 no output schema, the description does the work of describing returns: a weekly series plus the dominant mover and the supporting matches. Two optional parameters and a clear boundary against project_standings round it out; only the lookback depth and output shape remain unspecified.

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 100% and both parameters are fully documented there. The description restates the team/default behavior ('Pass the team, or nothing for the member's own team') without adding format or resolution detail, and says nothing at all about the `asked` parameter. Baseline 3 applies.

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 and resource (a team's historical playoff chances), fixes the granularity (one per week, each as of its day), and names a sibling tool that covers the case it does not. An agent can distinguish it from project_standings 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 Guidelines5/5

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

Explicitly says when to call it ('how a team's playoff chances have changed, or what its chances were last week') and when not to ('It never gives today's chance'), routing the excluded case to project_standings. It even signals the Desk Pass requirement attached to that alternative.

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

query_rosterA team's roster and ratingsA
Read-onlyIdempotent
Inspect

Returns a team's roster for a season, one row per player with an evidenceId: name, NTRP rating, wins, losses, matches and Desk level. Call it when someone asks who is on a team, or before you state a fact about a roster. Pass season when the person named a year, because without it the answer covers the current season. If moreRows is true, call again with a larger limit, up to 60.

NameRequiredDescriptionDefault
teamYesTeam name or partial name to resolve. Or the team's Desk page link or number.
askedNoThe person's question word for word, never paraphrased. Leave it out rather than invent one.
limitNoMax roster rows to return (default 30 = the full roster, max 60). Omit to get the whole team.
seasonNoOptional season year to filter to, e.g. 2026
includeAllSeasonsNoSet true ONLY when the user explicitly asks about prior years / all history.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds non-obvious behavior: omitting `season` silently returns the current season, and a `moreRows` signal requires a follow-up call with a larger `limit` capped at 60. The `moreRows` mention is slightly ambiguous since it is a response field, not a parameter, but the retry instruction is actionable.

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 front-loaded sentences: what it returns, when to call it, then parameter guidance. No filler. The pagination sentence is slightly awkward in referencing `moreRows` without saying where it appears.

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?

For a read-only, no-output-schema lookup with fully documented params, the description covers the returned row shape, the evidenceId grounding, default season behavior, and the pagination loop. An agent has everything needed to call it and to interpret a truncated result.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds real semantics the schema lacks: the consequence of omitting `season` (current season) and the pagination escalation rule up to 60 rows. It does not address `asked` or `includeAllSeasons`, though the schema documents those adequately.

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 plus the exact row shape (one row per player with an evidenceId, name, NTRP rating, wins, losses, matches, Desk level), which is far more than the title alone. It does not name or contrast against near-neighbors like query_club_teams or query_team_record, so an agent must infer the distinction.

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 a clear trigger ('when someone asks who is on a team, or before you state a fact about a roster') and a conditional rule for `season`. It stops short of explicit when-not-to-use guidance or naming an alternative tool for related roster-adjacent questions.

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

query_team_forecastUpcoming matchesA
Read-onlyIdempotent
Inspect

Returns a team's upcoming matches on the league schedule, or those of every team a player is on: the opponent, the day, the start time, and home or away. Call it for a next match, today's or tomorrow's match, or the schedule. Pass team for a named team, or player for a first-person ask like 'who am I playing'. It gives no team win chance. A team match's chance is only in the live playoff report from project_standings, which comes with the Desk Pass.

NameRequiredDescriptionDefault
teamNoTeam name to resolve, e.g. 'Belvedere mixed 8.0' or 'BELVEDERE TC 40MX8.0A'. Or the team's Desk page link or number.
askedNoThe person's question word for word, never paraphrased. Leave it out rather than invent one.
playerNoPlayer whose teams' upcoming matches to fetch, e.g. 'First Last'. Or the player's Desk page link or number.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, closed-world and non-destructive behavior, and the description adds the useful negative capability (no win chance) plus the Desk Pass dependency for the alternative. It does not say what happens when all three optional parameters are omitted, which is a meaningful gap given zero required params.

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 what is returned, then usage, then the exclusion — a sensible order with no filler. The trailing Desk Pass explanation is slightly more than the routing need requires.

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

Completeness4/5

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

For a read-only lookup with no output schema, the description covers return shape, intent routing, and the alternative tool for win probability. The only material omission is the behavior when no team or player is supplied, which matters because no parameter is required.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds routing meaning not present in the schema: team vs player selection depends on whether the ask is about a named team or is first-person. It does not clarify the role of `asked` beyond what the schema already says.

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

Purpose5/5

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

The description names a specific verb and resource (returns a team's or player's upcoming matches) and enumerates the returned fields (opponent, day, start time, home/away). It also carves out a boundary against project_standings, so the agent can distinguish it from the forecast/standings siblings.

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

Usage Guidelines5/5

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

It gives concrete triggering phrasings ('next match', 'today's or tomorrow's match', 'the schedule') and routes parameter choice by intent: team for a named team, player for a first-person ask. It also states explicitly what it does not answer (team win chance) and names the tool that does, project_standings.

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

query_team_recordA team's results and next matchesA
Read-onlyIdempotent
Inspect

Returns the recorded lines of any team the Desk covers, in any league and season, each with an evidenceId you can cite. It also gives the team's record, which is already counted, every team match of the period and its next matches. Call it when someone asks about a named team's matches, results or next match, or before you state a fact about them.

NameRequiredDescriptionDefault
dateNoOptional match day, as YYYY-MM-DD, e.g. '2026-02-05'. The rows are then that day's lines, from any season unless `season` is given. Pass it when the question names the day of a match.
teamYesTeam name or partial name to resolve, e.g. 'Tiburon' or 'Mill Valley men's 18'. Or the team's Desk page link or number.
askedNoThe person's question word for word, never paraphrased. Leave it out rather than invent one.
limitNoMax rows to return (default 9, max 60).
phaseNoOptional competition phase: 'sectionals', 'playoffs', 'postseason', or 'regular season'. Pass it when the member names one — a sectional match keeps its REGULAR-SEASON league name in our data, so there is no other way to find it. Omit to return every phase.
seasonNoOptional season year to filter to, e.g. 2026
includeAllSeasonsNoSet true ONLY when the user explicitly asks about prior years / all history.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds real value on top: every line carries an evidenceId for citation and the record is pre-counted so the agent shouldn't recompute it. That citation and pre-aggregation guidance is the kind of context annotations cannot convey.

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 sentences, front-loaded with what is returned and followed by citations and the calling trigger. Minor awkwardness in 'the record, which is already counted,' but no filler.

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?

Even with seven parameters and no output schema, the description covers return contents (lines with evidenceIds, record, period matches, next matches) and the calling condition, while the fully documented schema handles the filtering details. Adequate for an agent to invoke correctly.

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 parameters like date, phase, season, and includeAllSeasons are already well explained in the schema. The description adds only a light hint about the whole-history scope; baseline 3 applies when the schema carries the 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?

Specific verb and resource: returns recorded lines, the team's already-computed record, every match in the period, and upcoming matches for a named team across any league/season. That scope meaningfully separates it from narrower siblings like query_match_log or query_team_forecast, though no sibling is named explicitly.

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?

States a clear trigger: when someone asks about a named team's matches, results, or next match, or before asserting a fact about them. It lacks explicit when-not guidance or a named alternative for adjacent questions (e.g., forecasting vs. results), so it stops short of a 5.

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

read_docsParagraphs from the Desk's docsA
Read-onlyIdempotent
Inspect

Reads The Tennis Desk's own docs, word for word. They cover what the Desk is, a Desk level, what is free and what the Desk Pass adds, coverage and updates, agents, privacy and how a league table is ordered. Call it when someone asks about the Desk itself rather than a team, a player or a match. Pass about, a few words on what to find, and pages for a page you know. It needs no Desk Pass, and a call does not count toward the account's daily or monthly limit.

NameRequiredDescriptionDefault
aboutNoA few words on what to find, for example 'how it compares with NTRP'. With no `pages`, the sections of any page that match it.
askedNoThe person's question word for word, never paraphrased. Leave it out rather than invent one.
pagesNoOne or two docs pages, each named by its address after /docs/, as https://thetennisdesk.com/docs.md lists them, for example 'desk-level'. The front page is 'index'. A page read_docs does not hold is answered with the pages it holds. Optional: leave it out to find a topic on any page.

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already cover readOnly, idempotent and non-destructive, but the description adds genuinely non-obvious behavior: no Desk Pass required and the call does not count against the account's daily or monthly limit. It also discloses a fallback ('A page read_docs does not hold is answered with the pages it holds'), which prevents an agent from treating a miss as an error.

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-loads the core action, then scope, then parameter hint, then cost profile — a sensible order with no filler. The multi-item list of doc topics is slightly long, but it is the one place where extra length helps an agent decide whether the tool can answer a question.

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 three-optional-parameter read tool with no output schema, the description covers purpose, scoping, fallback behavior and the quota exemption. Return shape is only sketched ('word for word', matching sections), which is the one remaining gap an agent might want.

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%, and each parameter is already well documented in the schema, including examples and the `asked` verbatim rule. The description only restates which params to pass ('Pass `about`... and `pages` for a page you know'), adding little beyond the schema.

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 and resource ('Reads The Tennis Desk's own docs, word for word') and enumerates what the docs cover, so an agent knows exactly what content it returns. It explicitly separates itself from the rest of the toolset by scope: 'when someone asks about the Desk itself rather than a team, a player or a match.'

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 a clear trigger condition and an implicit exclusion (anything about a team, player or match goes elsewhere), plus guidance on passing `about` for topic search versus `pages` when a page is known. It does not name a specific sibling alternative such as read_research, so the routing is by exclusion rather than explicit hand-off.

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

read_researchThe Desk's research figuresA
Read-onlyIdempotent
Inspect

Reads the Desk's published research about players in general, word for word. Each piece comes with its question, headline, answers and figures, the group of past players it counts and the day it was measured. Call it when someone asks about players or teams in general, such as how often players move up or back down, or home advantage. Never call it for one named player, team or match, because every figure is a rate over a group. Pass about, a few words on the question, or pieces for a piece you know. It needs no Desk Pass.

NameRequiredDescriptionDefault
aboutNoA few words on the question, for example 'how players do after a bump, and how many move back down'.
askedNoThe person's question word for word, never paraphrased. Leave it out rather than invent one.
piecesNoOne or two pieces, each named by its address after /research/, as https://thetennisdesk.com/research lists them. Optional.

TDQS

A4/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, closed-world behavior, and the description adds real value beyond them: it lists what each result contains (question, headline, answers, figures, cohort, measurement date) and notes it requires no Desk Pass, which matters because get_desk_pass exists as a sibling. It doesn't discuss result volume or limits on returned pieces beyond what the schema already states.

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?

Sentences are front-loaded and each carries distinct information: purpose, return contents, when-to-use, when-not, parameters, and access requirement. Slightly longer than strictly necessary, but there is no filler or repetition.

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 output schema, the description compensates by describing the shape of each returned piece and the cohort/measurement-date metadata. Combined with the when-not rule and the authentication note, an agent has everything needed to call this correctly.

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 100%, so the baseline is 3. The description reinforces intended values for `about` ('a few words on the question') and `pieces`, but never mentions the third parameter `asked`, leaving the verbatim-question convention to the schema alone.

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 first sentence names a specific verb and resource (reads the Desk's published research) and narrows scope to players 'in general, word for word.' The later exclusion of 'one named player, team or match' implicitly separates it from query_player_history and query_team_record, though no sibling is named outright.

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

Usage Guidelines4/5

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

It gives an explicit use case ('when someone asks about players or teams in general, such as how often players move up or back down, or home advantage') and an explicit never-condition ('never call it for one named player, team or match'). It stops short of pointing to the specific alternative tool for those per-entity questions.

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

scout_teamA written scout of one teamA
Read-onlyIdempotent
Inspect

Writes the Desk's scout of one team it covers: its ranked reads of who matters and how the lines go, each with its evidence. Call it when someone asks for a scout, a breakdown of a team, or how to beat a named team. Pass team, a team the Desk covers, by name or Desk page link. Never call it for a whole club, because a scout is of one team. Needs a Desk Pass. Without one, a call gets the free part, with no chance in it, and deskPass, whose message you give the person.

NameRequiredDescriptionDefault
teamYesThe team to scout, e.g. 'Belvedere 18AM3.5A', or its Desk page link or number.
askedNoThe person's question word for word, never paraphrased. Leave it out rather than invent one.

TDQS

A4.7/5.0
Behavior5/5

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

Adds important behavior beyond the annotations: a Desk Pass is required, and without it the call returns only the free part plus a deskPass message to relay to the user. It also describes the substance of the return (ranked reads with evidence), while the annotations already cover read-only, idempotent, and non-destructive behavior.

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?

Front-loads the purpose, then covers usage, parameters, scope exclusions, and the Desk Pass caveat in compact sentences. Every sentence adds useful information, 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?

Although there is no output schema, the description explains what the scout contains (ranked reads and evidence) and what happens without a Desk Pass. That is enough for an agent to decide whether and how to call it.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds a meaningful constraint by saying `team` must be a single team the Desk covers and may be passed by name or Desk page link; `asked` remains documented mainly in the schema.

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 and resource: writes a scout for one covered team, including ranked reads and evidence. It also distinguishes the single-team scope from a whole-club request, so an agent can tell when this tool is the right one.

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 when-to-use cases (a scout, a team breakdown, how to beat a named team) and a when-not case (never for a whole club). It does not name a specific sibling tool to use instead when the request is out of scope, which keeps it short of a 5.

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. 29 tool updates
    • First observedavailability_loop
    • First observedcompute_aggregate
    • First observedcompute_match_line_ratings
    • First observedcompute_roster_strength
    • First observedget_desk_pass
    • First observedmatch_date_check
    • First observedplan_lineup
    • First observedplan_lineup_from_availability
    • First observedpredict_matchup
    • First observedprepare_score_entry
    • First observedproject_standings
    • First observedquery_club
    • First observedquery_club_teams
    • First observedquery_cohort_standing
    • First observedquery_coverage
    • First observedquery_forecast_results
    • First observedquery_league_standings
    • First observedquery_match_log
    • First observedquery_matchup
    • First observedquery_my_teams
    • First observedquery_player_history
    • First observedquery_player_rating
    • First observedquery_playoff_history
    • First observedquery_roster
    • First observedquery_team_forecast
    • First observedquery_team_record
    • First observedread_docs
    • First observedread_research
    • First observedscout_team

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Tournament software for tennis, padel, pickleball and more: fair draws, live standings, scores and dropout handling.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents and terminal users to search players and tournaments, read tournament pages as structured data, and retrieve Austrian championship leagues without login. Also supports checking and, after confirmation, entering team match reports against club rosters and the public results site.
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Real-time tennis data for ATP, WTA, Challenger and ITF: live scores, player rankings, match-winner odds, and model win-probability. 12 read-only tools; a tier-gated endpoint returns a plain-English explanation of which plan it needs rather than a bare 403. Requires a paid API key.
    24
    98 npm
    152
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to answer tennis tactical questions using shot-by-shot charted match data, producing game plans, serve and return tendencies, scouting reports, match forecasts, and explanations of why a match turned. Exposes read-only tools for player reports, head-to-head game plans, match breakdowns, and tactical leaderboards, each with confidence margins and links to full pages.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources