Skip to main content
Glama

Lumify Sports Intelligence

Server Details

Schedules, scores, odds, splits & explainable AI bet confidence — 8+ sports, free instant key.

Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Repository
lumifyai/lumify
GitHub Stars
2
Server Listing
Lumify Sports Intelligence

Glama MCP Gateway

Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.

MCP client
Glama
MCP server

Full call logging

Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.

Tool access control

Enable or disable individual tools per connector, so you decide what your agents can and cannot do.

Managed credentials

Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.

Usage analytics

See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.

100% free. Your data is private.
Tool DescriptionsA

Average 4.6/5 across 18 of 18 tools scored.

Server CoherenceA
Disambiguation5/5

Each tool targets a distinct resource and action: single-entity getters (get_event, get_team, get_player), batch/list/query variants for discovery, and specialized data views (odds, odds history, splits, stats, live score, intelligence). Overlapping tools like get_event, batch_get_events, list_events, and query_events are clearly scoped by id vs. multi-id vs. structured filters vs. natural language, so there is no ambiguity.

Naming Consistency5/5

All 18 tools follow a consistent snake_case verb_noun pattern: get_* for single resources, list_* for collections, search_players/query_events for specialized lookups, and estimate_cost/batch_get_events for actions. The naming is predictable and uniform, making it easy to infer what each tool does from its name alone.

Tool Count5/5

18 tools is well-scoped for a sports intelligence API. It covers core entities (events, teams, players, sports, seasons), data dimensions (odds, splits, stats, live score, intelligence), and discovery methods, plus a unique cost-estimation tool. There is no bloat; every tool serves a clear purpose within the domain.

Completeness5/5

The tool surface provides complete coverage for a read-only sports intelligence domain: entity lookup and listing (events, teams, players, sports, seasons), batch retrieval, free-text event search, and specialized data (live scores, odds, odds history, splits, raw stats, AI intelligence). Missing CRUD operations are not applicable since this is a query-only API, and the addition of estimate_cost fills a practical gap for cost-aware agents.

Available Tools

18 tools
batch_get_eventsA
Read-onlyIdempotent
Inspect

Get multiple events by id in one call — for agents that already have a list of ids and want full detail for each without one call per event. Max 25 ids. Returns full detail for every id that exists plus a not_found list for any that don't (never billed). Use get_event for a single id, or list_events / query_events to discover ids first.

ParametersJSON Schema
NameRequiredDescriptionDefault
bookmakerNoBookmaker for inlined odds and intelligence market prices. Defaults to pinnacle. Valid: pinnacle, fanduel, draftkings, betmgm, caesars, bet365, circa, hardrock, betonline, all.
event_idsYesEvent ids to fetch (max 25); duplicates are billed once.
include_oddsNoInline current odds scoped by bookmaker (default: pinnacle). +1 credit per event for a single book when available; +2 for bookmaker=all or a comma-separated list.
include_intelligenceNoInline bet intelligence on each event (+1 credit per event when available).

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalNo
eventsNoFull event detail (same shape as get_event) for every found id.
not_foundNoRequested event_ids that don't exist. Never billed.
Behavior5/5

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

Beyond the annotations (readOnly, openWorld, idempotent), the description adds meaningful behaviors: max 25 IDs, returns full detail for existing IDs plus a not_found list for missing ones, and that missing IDs are never billed. These are valuable context that annotations don't capture, and there is no contradiction.

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, front-loaded with action and purpose, and every sentence adds value. It covers the main use case, limits, return behavior, and alternatives without wasted words.

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

Completeness5/5

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

With an output schema present, the description doesn't need to detail return fields, but it still gives the key outcome (full detail + not_found list). It covers the main context (batch size, alternatives) and handles edge cases (missing IDs). The tool's complexity is fully addressed given the rich schema and annotations.

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?

The input schema already covers all parameters with detailed descriptions (100% coverage), including the maxItems limit and billing for duplicates. The description reiterates 'Max 25 ids' but adds little new parameter-level meaning. It does contextualize event_ids as the primary input, but that is more about purpose than parameter semantics. 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?

The description clearly states the tool retrieves multiple events by ID in a single call, distinguishing it from get_event (single ID) and list_events/query_events (discovery). The verb 'get' and resource 'events' are specific, and the scope (by id, batch) is explicit.

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 explicitly states when to use this tool ('for agents that already have a list of ids and want full detail for each without one call per event') and provides direct alternatives: 'Use get_event for a single id, or list_events / query_events to discover ids first.' This covers both when and when-not with named alternatives.

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

estimate_costA
Read-onlyIdempotent
Inspect

Estimate the credit cost of one or more planned tool calls before making them — no credits are spent. Costs are data-dependent (e.g. odds/intelligence/splits not yet ingested for an event are free, and batch_get_events ids that don't exist cost nothing), so this returns a [min_credits, max_credits] range per call rather than a single number. Pass the exact tool name and arguments you're considering, e.g. {"tool": "get_event", "arguments": {"event_id": 123, "include_odds": true}}.

ParametersJSON Schema
NameRequiredDescriptionDefault
callsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
estimatesNo
total_max_creditsNo
total_min_creditsNo
Behavior5/5

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

Beyond the annotations (readOnlyHint, idempotentHint, destructiveHint), the description adds valuable behavioral detail: no credits are spent, results are a [min_credits, max_credits] range, costs are data-dependent, and specific free-call cases are given. This goes well beyond the structured safety hints and enriches the agent's mental model.

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 accomplish all goals: purpose, behavior, and usage example. Nothing is redundant; every sentence carries essential information. The structure is front-loaded with the core function and then elaborates with context and a concrete example.

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?

Given the tool's moderate complexity (array input, max 50 items) and the presence of an output schema, the description fully covers what an agent needs to invoke it correctly: the input format, the output format (range), and special cost edge cases. No critical information is missing.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by explaining the required 'calls' array structure, the 'tool' and 'arguments' fields, and providing a concrete JSON example. The agent knows exactly what to pass without needing to infer from a bare 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?

The description opens with a specific verb ('Estimate') and resource ('credit cost of planned tool calls'), making it unmistakable. It explicitly states 'before making them' and 'no credits are spent,' distinguishing it from all sibling tools that actually fetch data. This is a model of clear purpose differentiation.

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 clearly conveys when to use the tool (before executing calls, to estimate cost) and provides a usage example. However, it does not explicitly state when not to use it or name alternatives. The context makes the use case obvious, but explicit exclusion guidance is missing.

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

get_eventA
Read-onlyIdempotent
Inspect

Get a single event with participants and venue. Optionally inline current odds and/or bet intelligence (+1 credit each, only charged when that data is actually available). Raises a not-found error if event_id doesn't exist. Use list_events / query_events to discover ids first, or batch_get_events to fetch several ids in one call.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesEvent id, from list_events, query_events, or search results.
bookmakerNoBookmaker for inlined odds and intelligence market prices. Defaults to pinnacle. Valid: pinnacle, fanduel, draftkings, betmgm, caesars, bet365, circa, hardrock, betonline, all.
include_oddsNoInline current odds scoped by bookmaker (default: pinnacle). +1 credit for a single book when available; +2 for bookmaker=all or a comma-separated list.
include_intelligenceNoInline bet intelligence (+1 credit when available).

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
sportNo
venueNo
leagueNo
statusNo
starts_atNo
updated_atNo
participantsNo
Behavior4/5

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

Annotations already declare the operation is read-only, idempotent, and non-destructive. The description adds valuable context beyond annotations: raises a not-found error for invalid event_ids, and credits are only charged when data is actually available.

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 cover purpose, optional behavior, error handling, and usage alternatives. Every sentence earns its place; no redundancy or filler.

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

Completeness5/5

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

With an output schema and strong annotations, the description is fully complete for a single-event read tool: it specifies error behavior, discovery workflow, batch alternative, and cost semantics for optional features.

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?

Input schema already provides thorough descriptions for all 4 parameters (100% coverage). The description adds meaningful semantics about the credit implications and availability of inlined odds/intelligence, which is not present 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?

Description opens with a specific verb and resource: 'Get a single event with participants and venue.' It clearly distinguishes itself from sibling tools by noting it fetches one event, and explicitly contrasts with batch_get_events/list_events.

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?

Provides explicit usage direction: discover IDs via list_events/query_events, and use batch_get_events for multiple IDs. Also explains when optional inline data applies and when credits are charged, giving the agent clear decision criteria.

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

get_intelligenceA
Read-onlyIdempotent
Inspect

Get AI bet intelligence for an event. bets[] comes in two shapes — branch on the presence of probability (probability model) vs. confidence_score (points model). Probability model, currently soccer/MLS only: bets carry probability/interval/p_model/p_market/blend_w/fair_price/edge/sufficiency/phase/model_version/drivers and no confidence_score, coverage, signals, or validator. probability is calibrated and sums to 1 across a market's outcomes; p_market is the de-vigged market price, which you cannot recompute from a single price. Where no fitted model has cleared out-of-sample validation for a league, blend_w is 0, probability equals p_market, and p_model/edge/tier are null — a probability taken from the market has no honest edge against the price it came from; treat those events as fair-price reference, not as picks. drivers is normally empty then; Stage 6 Match Context drivers (soccer.match_context.) may still cite the Fact Ledger with effect 0. Points model, every other sport/league: confidence scores, signal breakdowns, rationale, and narratives per bet. Signal keys (signal_serve_rtn, signal_surface, etc.) are shared across sports but mean different things per sport (for soccer signal_serve_rtn is Attack/Defense Edge, not tennis Serve/Return) — for NFL, NCAAF, and points-model soccer leagues, bets[].signals.labels maps each present signal key to its sport-specific label; prefer rationale/attribution for prose when you don't need raw scores. Both shapes include event-level analyst_take and match_overview. Match-level tokens (OVER, UNDER, ML_DRAW) have null player_role/player_id/team_id/player_name, so summing exposure by team_id never double-counts a draw. bookmaker defaults to pinnacle and is a no-op for probability-model sports, which report the book their assessment was priced against. Returns available:false with no charge if intelligence hasn't been computed yet for this event/bookmaker.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesEvent id, from list_events, query_events, or search results.
bookmakerNoBookmaker slug for market prices on recommended bets. Defaults to pinnacle. Valid: pinnacle, fanduel, draftkings, betmgm, caesars, bet365, circa, hardrock, betonline. No effect for probability-model sports (currently soccer/MLS), which report the book their assessment was priced against.

Output Schema

ParametersJSON Schema
NameRequiredDescription
betsNo
sportNoSport slug for this event.
leagueNoLeague slug for this event, if any.
matchupNoMLB-only probable-starter context (home_starter/away_starter with name/hand/era/confirmed). Absent for every other sport.
playersNoHome/away (or p1/p2) participant identification, keyed by role: {role: {name, player_id, team_id}}.
event_idNoLumify event ID this intelligence describes.
availableNoFalse when no intelligence has been computed for this event yet — every other field is then null/empty and the request is not charged.
odds_sourceNoBookmaker bets[].market prices were sourced from. For probability-model sports this is the book the assessment was priced against, not a bookmaker overlay; per-bet market.book is authoritative if they ever differ.
analyst_takeNoShort natural-language read on the event as a whole. Null when no narrative has been generated.
has_recommendNoTrue when at least one bet meets the recommendation threshold; null when intelligence has not been computed. False for any probability-model event whose bets are all market-anchored (blend_w 0), since a recommendation requires an edge.
match_overviewNoLonger natural-language matchup preview — form, context, what to watch. Null when no narrative has been generated.
intelligence_updated_atNoISO-8601 UTC timestamp of the most recent change anywhere in this payload (max of per-bet computed_at). Use per-bet computed_at to reason about a specific bet.
Behavior5/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint:false. The description adds substantial behavioral context: the two response shapes, calibration of probability, p_market being de-vigged, the blend_w=0 fallback semantics, signal key interpretation differences per sport, null fields for match-level tokens, bookmaker no-op behavior, and the available:false behavior when intelligence isn't computed. This far exceeds what annotations alone provide.

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?

The description is long but every sentence earns its place, covering essential complexity in a well-structured way. It front-loads the core purpose, then systematically explains the two shapes, signal semantics, null field caveats, and error behavior. There is no redundant filler.

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

Completeness5/5

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

With no output schema explicitly shown (but marked as present), the description still thoroughly explains return shape variants, edge cases, and interpretation guidelines. It gives enough context for an agent to correctly use the tool and parse results, including what to do when probability is just the market price and when signals need sport-specific mapping.

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

Parameters4/5

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

The input schema already documents both parameters with 100% coverage, providing a baseline of 3. The description adds extra context: event_id originates from list_events/query_events/search results, and the bookmaker no-op behavior for probability-model sports is explained in more depth than the schema. This added value nudges the score to 4.

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

Purpose5/5

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

The description opens with 'Get AI bet intelligence for an event,' which uses a specific verb and resource, and clearly differentiates from siblings like get_event and get_odds by focusing on 'intelligence' rather than raw data. It also describes the two distinct response shapes (probability vs. points model), making its purpose unmistakable.

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

Usage Guidelines4/5

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

The description implies usage: call this when you need AI bet intelligence for an event. It provides a concrete context of event_id and bookmaker, and explains when results are unavailable (available:false). However, it does not explicitly name alternatives or state when not to use this tool versus siblings like get_odds or get_event, so it stops short of full exclusionary guidance.

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

get_live_scoreA
Read-onlyIdempotent
Inspect

Get a lightweight live score snapshot for an event: status, period, clock, per-participant score and period-by-period scores, and last-updated time. Cheaper and faster than get_event when you only need the score, not participants or venue. Raises a not-found error if event_id doesn't exist.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesEvent id, from list_events, query_events, or search results.

Output Schema

ParametersJSON Schema
NameRequiredDescription
clockNo
periodNo
scoresNo
statusNo
event_idNo
finishedNo
updated_atNo
Behavior5/5

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

Annotations already declare readOnlyHint and idempotentHint, but the description adds valuable context: 'Cheaper and faster' performance expectations and the 'not-found error' behavior. It also clarifies the lightweight nature and what fields are included, exceeding the structured metadata's coverage.

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, front-loaded with the main purpose, followed by usage and error info. Every sentence adds distinct value with no redundancy, making it highly efficient.

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 single-parameter tool with output schema and strong annotations, the description covers purpose, usage, alternatives, and error behavior. It is complete and self-contained for an agent to correctly invoke the tool.

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

Parameters3/5

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

The schema provides 100% coverage for the single parameter event_id with a clear origin ('from list_events, query_events, or search results'). The description adds no new parameter-level semantics beyond what the schema already states, so the baseline of 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 ('Get a lightweight live score snapshot') with a clear resource ('an event') and enumerates exact contents (status, period, clock, scores, last-updated). It also distinguishes from sibling get_event by highlighting the scope difference, making its purpose unambiguous.

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?

The description explicitly states when to use this tool instead of get_event ('when you only need the score, not participants or venue') and notes the error condition for a non-existent event_id. This provides clear decision guidance relative to alternatives.

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

get_oddsA
Read-onlyIdempotent
Inspect

Get current betting odds for an event: per-bookmaker lines and last-updated time. bookmaker defaults to pinnacle (1 credit). Use 'all' or a comma-separated list for multiple books (2 credits). Returns available:false with no charge if odds aren't posted for this event yet. Use get_odds_history for line movement over time.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesEvent id, from list_events, query_events, or search results.
bookmakerNoBookmaker slug. Defaults to pinnacle. Valid: pinnacle, fanduel, draftkings, betmgm, caesars, bet365, circa, hardrock, betonline, all, or a comma-separated list.

Output Schema

ParametersJSON Schema
NameRequiredDescription
event_idNo
availableNo
bookmakersNo
last_updatedNo
Behavior5/5

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

Beyond the annotations (read-only, idempotent, etc.), the description discloses credit costs for different bookmaker selections, the availability:false response with no charge if odds aren't posted, and the last-updated time field. This adds operational context not present in annotations.

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?

The description is two sentences, front-loaded with the core function, then efficient additional details. Every sentence adds value without redundancy.

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 a rich output schema and annotations, the description covers purpose, parameter usage, costs, edge cases, and an alternative tool. No critical gaps remain.

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

Parameters5/5

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

The schema already documents both parameters thoroughly. The description adds value by specifying the default bookmaker, credit implications, and how to request multiple books, which is not 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?

The description opens with a clear verb-object pair: 'Get current betting odds for an event' and specifies the content ('per-bookmaker lines and last-updated time'). It also distinguishes from siblings by naming get_odds_history for a different use case.

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 explicitly instructs to use get_odds_history for line movement over time, providing an alternative. It also gives practical guidance on bookmaker defaults and credit costs, clarifying when to use multi-book queries.

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

get_odds_historyA
Read-onlyIdempotent
Inspect

Get line-movement history for an event: a list of past odds snapshots (movements), each with its own timestamp, up to limit entries. bookmaker defaults to pinnacle. Use get_odds instead if you only need the current line.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax line-movement entries to return. Default 50.
event_idYesEvent id, from list_events, query_events, or search results.
bookmakerNoBookmaker slug. Defaults to pinnacle. Valid: pinnacle, fanduel, draftkings, betmgm, caesars, bet365, circa, hardrock, betonline, all, or a comma-separated list.

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalNo
event_idNo
movementsNoOdds snapshots over time; each entry carries its own timestamp.
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds that it returns a list of past snapshots with timestamps and limit entries, but this doesn't go beyond the schema or output schema. It adds some context but not rich behavioral details.

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, front-loaded with the core purpose, and every word earns its place. No fluff or redundant explanation.

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 history tool with an output schema and well-documented params, the description is complete. It clearly distinguishes from get_odds and gives the key default behavior, making it fully sufficient for an agent to select and call it.

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%, with each parameter already documented (limit, event_id, bookmaker). The description echoes 'bookmaker defaults to pinnacle' and 'up to limit entries', but adds little meaning beyond what the schema provides. 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?

The description clearly states the tool's purpose: 'Get line-movement history for an event' and differentiates it from the sibling tool get_odds by noting the latter is for the current line. The verb 'Get' and resource 'line-movement history' are specific and unambiguous.

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?

Provides explicit guidance on when to use this tool vs. the alternative: 'Use get_odds instead if you only need the current line.' Also notes the default bookmaker, giving practical context for invocation.

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

get_playerA
Read-onlyIdempotent
Inspect

Get a single player profile: name, sport, country, position/handedness, physical stats, current team, and tennis ranking if applicable. Raises a not-found error if player_id doesn't exist. Resolve ids via search_players.

ParametersJSON Schema
NameRequiredDescriptionDefault
player_idYesPlayer id, from search_players.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
slugNo
sportNo
positionNo
birthdateNo
full_nameNo
height_cmNo
is_activeNo
weight_kgNo
handednessNo
country_codeNo
tennis_rankingNo
current_team_idNo
current_team_nameNo
Behavior4/5

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

Annotations already cover read-only/idempotent semantics. The description adds valuable behavioral details: it raises a not-found error for invalid player_id and notes that tennis ranking is returned conditionally (if applicable). This goes beyond the annotations and helps set expectations.

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?

The description is two sentences, front-loaded with the core purpose and field list, followed by error and id-resolution guidance. Every sentence earns its place with no redundancy or fluff.

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 simple single-parameter getter with an output schema present, the description adequately covers purpose, error behavior, and id resolution. It is complete for the tool's complexity and aligns well with the provided annotations and 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?

The schema fully documents player_id with a description referencing search_players. The tool description repeats this guidance but does not add new semantic details beyond what the schema already provides. Baseline 3 is appropriate given the high schema coverage.

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 clearly states the tool retrieves a single player profile and enumerates the specific fields returned (name, sport, country, position/handedness, physical stats, current team, tennis ranking). It distinguishes itself from sibling tools like get_player_events and search_players by focusing on a single profile retrieval.

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

Usage Guidelines4/5

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

The description explicitly instructs to resolve ids via search_players, providing a clear alternative for id lookup. However, it does not explicitly contrast with other player-related getters (e.g., get_player_events, get_stats), so the guidance is helpful but not fully comprehensive.

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

get_player_eventsA
Read-onlyIdempotent
Inspect

List a player's events (schedule/results), paginated by id (after_id). Defaults to ±30 days around today when no date filter is given. Resolve player_id via search_players first.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoEnd date YYYY-MM-DD.
fromNoStart date YYYY-MM-DD.
limitNoMax events to return per page.
statusNoFilter to events in this status.
after_idNoCursor: last event id from the previous page's next_after_id.
player_idYesPlayer id, from search_players.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoEvents in the same shape as list_events' EventSummary.
has_moreNo
player_idNo
next_after_idNoPass as after_id to fetch the next page; null on the last page.
Behavior4/5

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

Annotations already indicate read-only and idempotent. The description adds useful behavioral details: pagination by after_id and the default ±30-day date window when no filter is provided. No contradictions with annotations.

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 concise sentences, front-loaded with the core action. Every clause adds value: scope, pagination, default window, and prerequisite. Zero waste.

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 a full output schema and rich annotations, the description doesn't need to detail return format or safety. It covers core behavior, pagination, defaults, and the player_id prerequisite, making it complete for the tool's complexity.

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 descriptions cover 100% of parameters, including player_id origin and after_id cursor semantics. The description reiterates these but doesn't add substantially new parameter-level information beyond connecting the pagination flow.

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 clearly states it lists a player's events, with 'player's' distinguishing it from broader event tools. The parenthetical (schedule/results) and pagination mention add specificity. This is a specific verb+resource+scope, meeting the top criteria.

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?

Provides clear context: it's for retrieving a specific player's events, and instructs to resolve player_id via search_players first. However, it does not explicitly contrast with alternative event-listing tools like list_events or query_events, so it lacks explicit exclusions or alternatives.

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

get_splitsA
Read-onlyIdempotent
Inspect

Get public betting splits (bets% and handle%) for an event: a consensus split plus a per-book breakdown, with a captured_at timestamp. Available for MLB, NBA, NHL, and NFL. Not available for tennis, soccer, or NCAAF (upstream does not expose splits). Returns available:false with no charge if splits haven't been captured for this event yet or the sport is unsupported.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesEvent id, from list_events, query_events, or search results.

Output Schema

ParametersJSON Schema
NameRequiredDescription
booksNoPer-bookmaker splits breakdown.
event_idNo
availableNo
consensusNoAggregate bets%/handle% across books.
captured_atNo
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive. The description adds meaningful behavior: returns available:false with no charge if data is not captured, and clarifies the data is public. This adds context beyond annotations.

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?

Description is four sentences, each packed with useful information: what it returns, sport availability, and fallback behavior. No redundancy or 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?

For a single-parameter tool with a rich output schema and solid annotations, the description covers purpose, return contents, availability restrictions, and error/fallback behavior. It is fully self-contained.

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 the schema already explains event_id and its provenance. The tool description does not add additional parameter semantics beyond the schema, which is acceptable given full coverage.

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?

Description starts with a specific verb and resource: 'Get public betting splits (bets% and handle%) for an event'. It clearly states what is returned (consensus split, per-book breakdown, captured_at timestamp) and distinguishes this tool from siblings by focusing on splits data.

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

Usage Guidelines4/5

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

Provides explicit context on when the tool works (MLB, NBA, NHL, NFL) and when it does not (tennis, soccer, NCAAF). It also explains the available:false fallback for unsupported/captured events, giving clear usage guidance. No comparison to alternative tools is made, but the sport exclusions are a strong when-not.

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

get_statsA
Read-onlyIdempotent
Inspect

Get raw, deterministic team and match statistics for a soccer event: team strength (league-table PPG or FIFA rank), recent form, head-to-head history, rest days, home/away splits, and boxscore rates (shots/SoT for & against, possession, corners, cards, save rate) over explicit windows rates_l5 and rates_season — computed from completed results and ESPN team box scores. No market/odds data (use get_odds for that) and no scoring, weighting, confidence, or narrative attached; use get_intelligence for Lumify's judgment layer. Soccer only today. Returns available:false with no charge if either team hasn't resolved for this fixture yet.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesEvent id, from list_events, query_events, or search results.

Output Schema

ParametersJSON Schema
NameRequiredDescription
teamsNohome/away raw stats: recent_form, team_strength (club: rank/GD/W-D-L; WC: fifa_rank), venue, rest_days, sos (club avg opp PPG; null for WC), lineup (formation + starters), rates_l5, rates_season (shots/SoT for&against, possession, save_rate, …; each rate block includes field_games).
profileNo'world_cup' or 'club'.
windowsNoExplicit sample depths: recent_form (5), rates_l5 (5), rates_season ('season' — a deliberately variable-length window, see each team's rates_season.games), head_to_head (10), sos (5).
event_idNoLumify event ID.
availableNoFalse when either team hasn't resolved yet; every other field is omitted and the call isn't billed.
league_slugNoLeague slug, e.g. 'mls'.
head_to_headNoPast meetings between these two teams: {window, meetings: [{home_goals, away_goals}], total}.
neutral_siteNoWhether this fixture is at a neutral venue. Informational here; factored into home-advantage scoring on get_intelligence.
league_contextNo{avg_goals_per_team}: league-wide baseline goals/team/game, used by get_intelligence's attack/defense scoring. Null for fixed-baseline competitions.
Behavior5/5

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

Goes beyond annotations by disclosing deterministic computation ('raw, deterministic'), data sources ('computed from completed results and ESPN team box scores'), scope constraint ('Soccer only today'), and the no-charge behavior when data is unavailable. Annotations only say readOnly/idempotent/destructive, so this adds substantial behavioral context without contradicting anything.

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 dense but all content is relevant. It front-loads the main purpose, then lists exclusions and caveats. While it is longer than typical, every clause earns its place. Slightly less structured than ideal (a long first sentence), but no wasted words.

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 tool with a single parameter and an output schema, the description fully covers the tool's scope, limitations, and alternatives. It tells the agent exactly what statistics are included, what is excluded, and when the tool will not work, making it self-sufficient for invocation decisions.

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% for event_id, so baseline is 3. The description adds context about the event being a soccer fixture and the reliance on completed results, but it does not provide additional guidance on how to use the event_id parameter beyond what the schema already states. No extra parameter-level meaning is introduced.

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 is highly specific: 'Get raw, deterministic team and match statistics for a soccer event' and enumerates exact stat categories (team strength, form, H2H, rest days, splits, boxscore rates). It explicitly distinguishes from siblings: 'No market/odds data (use get_odds for that)' and 'use get_intelligence for Lumify's judgment layer.' This leaves no ambiguity about what the tool does or how it differs.

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?

Provides explicit when-to-use and when-not-to-use guidance: 'No market/odds data (use get_odds for that)' and 'no scoring, weighting, confidence, or narrative attached; use get_intelligence.' Also states a conditional availability ('Returns available:false with no charge if either team hasn't resolved'), which tells the agent when the tool may not return data. This is model guidance.

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

get_teamA
Read-onlyIdempotent
Inspect

Get a single team profile with its home venue. Raises a not-found error if team_id doesn't exist. Resolve ids via list_teams.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idYesTeam id, from list_teams.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
cityNo
nameNo
slugNo
sportNo
venueNo
leagueNo
divisionNo
is_activeNo
conferenceNo
abbreviationNo
Behavior4/5

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

With annotations already covering read-only, open-world, and idempotent hints, the description adds valuable behavioral context by disclosing the not-found error behavior. It also notes the inclusion of 'home venue' in the response, going beyond the annotation coverage.

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

Conciseness5/5

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

The description is two concise sentences, front-loaded with the core purpose. No wasted words; every sentence contributes useful 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?

This is a simple single-parameter tool with an output schema, and the description covers purpose, error behavior, and id resolution. It is complete for the tool's complexity and schema richness.

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?

The input schema already provides full coverage (100%) for team_id, including 'Team id, from list_teams.' The description adds no new parameter semantics beyond what the schema states, so the baseline of 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?

The description clearly states the tool's function: 'Get a single team profile with its home venue.' It uses a specific verb and resource, and the singular 'team profile' distinguishes it from sibling tools like list_teams.

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

Usage Guidelines4/5

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

The description gives practical guidance: 'Resolve ids via list_teams,' indicating that team_id should be obtained from list_teams first. It also warns about not-found errors. However, it does not explicitly state when not to use this tool versus other alternatives, so it falls 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.

list_eventsA
Read-onlyIdempotent
Inspect

List events (schedules and live scores), paginated by id (after_id). Filter by sport, league, status, date range, season, or team_id (resolve teams via list_teams / get_team). Returns event id, name, sport/league, start time, status, and venue for each; pass include_scores to also inline participants + scores (intended for small result sets — use get_event for one event's full detail, or query_events for free-text/natural-language filters instead of structured params).

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoUTC end date YYYY-MM-DD (inclusive).
dateNoUTC date YYYY-MM-DD (single day).
fromNoUTC start date YYYY-MM-DD.
sortNoSort order. sort=status is incompatible with after_id.time
limitNoMax events to return per page.
sportNoSport slug, e.g. mlb, nfl, tennis, soccer.
leagueNoLeague slug, e.g. nfl, atp, fifa_world_cup.
statusNoFilter to events in this status.
team_idNoFilter to events where this team participates. Resolve ids via list_teams.
after_idNoCursor: return events with id > after_id (from the previous page's next_after_id).
season_idNoFilter by season ID (from list_seasons).
has_recommendNoWhen true, only events with at least one recommended bet.
include_scoresNoInline participants + scores in each event (intended for small result sets).

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalNo
eventsNo
next_after_idNoPass as after_id to fetch the next page; null on the last page.
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds useful behavioral details beyond annotations, including pagination via after_id, the return shape, and a performance caveat: include_scores is 'intended for small result sets.' This is meaningful, though it does not delve into auth or rate limits.

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?

The description is front-loaded with the core purpose, then lists filters and return details, and ends with alternatives. Despite its length, every clause carries useful information—no filler or repetition. The structure guides the reader from general to specific usage.

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?

Given 13 parameters, rich schema descriptions, and helpful annotations, the description covers the essentials: pagination, filtering, output fields, a performance caveat, and alternatives. The presence of an output schema reduces the need to explain return values further, but the description already does so sufficiently.

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. The description adds value by grouping filter parameters (sport, league, status, date range, season, team_id), explaining after_id as a cursor, and cautioning that include_scores is intended for small result sets. This enriches, rather than merely restates, 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?

The description opens with a specific verb and resource: 'List events (schedules and live scores), paginated by id (after_id).' It clearly distinguishes from siblings by explicitly directing users to get_event for full detail and query_events for natural-language queries, making the tool's purpose unambiguous.

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 states when to use this tool (structured filters, pagination), and when to use alternatives: 'use get_event for one event's full detail, or query_events for free-text/natural-language filters instead of structured params.' It also mentions resolving team IDs via list_teams/get_team, giving concrete usage context.

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

list_seasonsA
Read-onlyIdempotent
Inspect

List seasons per sport/league. By default returns only currently active seasons; pass current_only=false to include historical seasons. Optionally filter by sport. Returns each season's id, year, phase, start/end dates, and whether it is_current. Use list_sports for just each sport's current season.

ParametersJSON Schema
NameRequiredDescriptionDefault
sportNoFilter by sport slug, e.g. nhl, nba, soccer.
current_onlyNoReturn only currently active seasons (default true). Pass false for historical seasons.

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalNo
seasonsNo
Behavior4/5

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

Annotations already cover safety (read-only, idempotent, non-destructive), and the description adds meaningful behavior: default active-only filtering, optional historical inclusion, and return field details. It does not contradict annotations and provides useful context beyond structured fields.

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

Conciseness5/5

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

Four short sentences, front-loaded with the core purpose, then defaults, return fields, and an alternative. Every sentence earns its place with no filler or redundancy.

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 simple read-only list tool with an output schema and full annotations, the description fully covers defaults, filtering, and alternatives. There are no meaningful gaps for selection or invocation.

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 mirrors the schema's current_only and sport semantics without adding new parameter-level details, but it does reinforce them in natural language.

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 'List' with a clear resource 'seasons' and scope 'per sport/league'. It explicitly distinguishes itself from the sibling list_sports by directing users there for just current-season info.

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 states the default behavior (only active seasons), how to opt into historical seasons (current_only=false), optional sport filtering, and explicitly names list_sports as an alternative when simpler data suffices. This provides clear when-to-use guidance.

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

list_sportsA
Read-onlyIdempotent
Inspect

List supported sports with their leagues and current season. Returns each sport's id, slug, name, team-sport flag, and its leagues (each with its current_season). Use list_seasons with current_only=false for historical seasons.

ParametersJSON Schema
NameRequiredDescriptionDefault
active_onlyNoWhen true (default), omit sports with no active coverage.

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalNo
sportsNo
Behavior4/5

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

Annotations already declare read-only and non-destructive behavior. The description adds useful context about the returned data structure (sport id, slug, name, team-sport flag, leagues with current_season) that is not redundant with the output schema, and it clarifies the tool's scope beyond the 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?

Two sentences: the first leads with the action and key outcome, the second details return fields and the alternative for historical data. Every sentence earns its place with no redundancy or 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?

Given the single optional parameter, rich annotations, and presence of an output schema, the description fully covers the tool's purpose, return shape, and related tool guidance. No important gaps remain for a simple list operation.

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?

The input schema already provides a full description for active_only (100% coverage), so the schema does the heavy lifting. The description does not add additional parameter meaning beyond what is in the schema, meeting the baseline for high schema coverage.

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 clearly states the tool lists supported sports with their leagues and current season, naming the exact fields returned. It distinguishes from sibling tools by explicitly pointing to list_seasons for historical seasons, and the scope (sports vs teams/events) is unambiguous.

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

Usage Guidelines4/5

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

Provides explicit guidance to use list_seasons with current_only=false for historical seasons, which is a clear alternative. Does not enumerate all when-not-to-use scenarios, but the primary use case is evident and the alternative is well-targeted.

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

list_teamsA
Read-onlyIdempotent
Inspect

List teams, paginated by id (after_id). Filter by sport, league, conference, division, country, active status, or name (q, partial match). Returns each team's id, slug, name, city, conference/division, and venue. Use get_team for full detail on one id once resolved here.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoTeam name search (partial match).
limitNoMax teams to return per page.
sportNoSport slug, e.g. nfl, nba, soccer.
activeNoFilter by active status.
leagueNoLeague slug, e.g. nfl, mls.
countryNoISO country code, e.g. USA.
after_idNoCursor: last team id from the previous page's next_after_id.
divisionNoDivision name, e.g. AFC East.
conferenceNoConference name, e.g. AFC, Eastern.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
has_moreNo
next_after_idNoPass as after_id to fetch the next page; null on the last page.
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, which covers the safety profile. The description adds behavioral context about pagination ('paginated by id (after_id)') and the return fields, which is beyond what annotations provide. No contradictions detected.

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?

The description is only two sentences, front-loaded with the core action and immediate pagination note, followed by a concise list of filters and return fields. Every sentence earns its place, no redundancy.

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?

Given the tool has 9 optional parameters and an output schema, the description covers the essential contextual aspects: what it lists, how pagination works, what fields are returned, and when to use a sibling. The presence of an output schema means return value details are already structured; the description still states the main fields for quick reference.

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?

The input schema already documents all 9 parameters with descriptions (100% coverage). The description adds minimal extra meaning by clarifying that 'after_id' is a pagination cursor and that 'q' is a partial name match, but these are already in the schema. Thus 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?

The description clearly states the tool 'List teams' with a specific verb and resource, and immediately distinguishes it from siblings by saying 'Use get_team for full detail on one id once resolved here.' It also enumerates the filtering capabilities, making the purpose unambiguous.

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?

The description explicitly provides an alternative tool for a different use case ('Use get_team for full detail on one id once resolved here'), and the filter list implies when to use this tool (to find or list teams by criteria). This satisfies the 'when vs alternatives' guidance requirement.

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

query_eventsA
Read-onlyIdempotent
Inspect

Search events with a natural-language query instead of structured filters — e.g. 'live nfl games today' or 'college basketball this week'. Rule-based (not an LLM): recognizes sport (nfl/nba/mlb/nhl/tennis/soccer/ncaaf/ncaab + aliases like hockey, american football, college basketball), status (live/final/upcoming/…), dates (today/tomorrow, this week, next N days, YYYY-MM-DD ranges). Bare 'football' is ambiguous and left unrecognized. Response includes interpreted filters, equivalent REST call, and unrecognized_terms. Prefer list_events when you already know the structured filters you want.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoOverrides any limit parsed from the query text. Max 100.
queryYesFree text, e.g. 'live nfl games today'.

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryNoThe original natural-language query text.
totalNo
eventsNo
interpretedNoThe list_events-equivalent filters parsed from the query text (sport, status, date, from, to, limit).
next_after_idNo
equivalent_requestNoThe literal GET /v1/events request this query was translated to.
unrecognized_termsNoQuery words that didn't map to a known filter.
Behavior5/5

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

Beyond the annotations (read-only, idempotent, non-destructive), the description adds critical behavioral details: it is rule-based not an LLM, specific language features are recognized, bare 'football' is ambiguous and left unrecognized, and the response includes interpreted filters, equivalent REST call, and unrecognized_terms.

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?

The description is dense but every sentence contributes useful information. It opens with the primary purpose, provides illustrative examples, explains internal behavior, and closes with usage guidance—all without fluff.

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?

Given the tool's natural-language processing complexity, the description thoroughly covers usage scope, behavioral limitations, and response contents. The output schema handles return values, so no additional detail is needed there. The description is comprehensive for an AI agent to decide when and how to invoke it.

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

Parameters5/5

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

Although the schema documents both parameters, the description enriches the 'query' parameter by detailing supported sports, statuses, date formats, and the ambiguity behavior. It also clarifies the 'limit' parameter's override semantics, adding value beyond the schema 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?

The description clearly states the tool's purpose: search events using natural-language queries instead of structured filters. It provides concrete examples and explicitly distinguishes it from sibling tools like list_events.

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 guidance on when to use this tool versus the alternative, stating 'Prefer list_events when you already know the structured filters you want.' This directly addresses tool selection.

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

search_playersA
Read-onlyIdempotent
Inspect

Search players by name, sport, country, ranking, or active status, paginated by id (after_id). Returns each player's id, name, position, current team, and tennis ranking if applicable. Use get_player for full detail on one id, or get_player_events for a player's schedule/results.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoName search (partial match).
limitNoMax players to return per page.
sportNoSport slug, e.g. tennis, nba.
activeNoFilter by active status.
rankedNoIf true, only players with a tennis ranking.
countryNoISO 3166-1 alpha-3 country code, e.g. USA.
after_idNoCursor: last player id from the previous page's next_after_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
has_moreNo
next_after_idNoPass as after_id to fetch the next page; null on the last page.
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive behaviors. The description adds valuable behavioral context about pagination ('paginated by id (after_id)') and response shape (returns specific fields, tennis ranking only if applicable). While it doesn't discuss response ordering or edge cases, the combination with annotations is sufficient for safe invocation.

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?

The description is two sentences, front-loaded with the core functionality, then response details, then alternatives. Every phrase serves a purpose with no waste or redundancy.

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 search tool with 7 optional parameters, an output schema, and rich annotations, the description covers purpose, criteria, pagination, response fields, and explicitly names alternatives. It is complete enough for an agent to understand when and how to use it, leaving no critical gaps.

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 parameters are already documented. The description adds meaning by grouping searchable parameters ('by name, sport, country, ranking, or active status') and explaining the pagination mechanism with after_id. This gives a higher-level understanding of how the parameters relate, exceeding the baseline.

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

Purpose5/5

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

The description clearly states 'Search players by name, sport, country, ranking, or active status' with a specific verb and resource, listing search criteria. It distinguishes itself from sibling tools by explicitly directing to get_player and get_player_events for different needs.

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?

Explicit usage guidance is provided: 'Use get_player for full detail on one id, or get_player_events for a player's schedule/results.' This clearly indicates when to use this tool versus alternatives, making the intended use case unambiguous.

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

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Provides AI assistants with sports model win probabilities and fair odds across nine sports without requiring an API key.
    Last updated
    3
    0
    MIT
  • F
    license
    -
    quality
    C
    maintenance
    Provides comprehensive sports intelligence including live scores, standings, schedules, betting odds, news, highlights, and more via SSE transport.
    Last updated
  • A
    license
    A
    quality
    A
    maintenance
    Live sports betting odds, cross-book +EV, and graded player-prop resolution across 13 books.
    Last updated
    11
    644
    1
    MIT
  • A
    license
    -
    quality
    C
    maintenance
    Props-first sports odds API with a hosted MCP server. Live odds and player props (moneyline, spreads, totals) across US sportsbooks, normalized to JSON. Tools: get_odds, get_props, get_events, get_books. API-key auth, free tier.
    Last updated
    MIT No Attribution

View all MCP Servers

Try in Browser

Your Connectors

Sign in to create a connector for this server.