Skip to main content
Glama
odds-api-io

Odds-API MCP Server

Official

Odds-API.io MCP Server

npm version license: MIT

Model Context Protocol (MCP) server for Odds-API.io - providing AI tools like Claude, Cursor, and VS Code with direct access to sports betting odds data.

Full AI-tooling docs: docs.odds-api.io/ai-vibe-coding

Features

  • 25 API tools covering the full Odds-API.io v3 surface: sports, events, odds, historical data, bet settlement, value bets, arbitrage, dropping odds, and more

  • Documentation resources for AI context

  • Real-time data from 365+ bookmakers across 34 sports

Related MCP server: SportWizzard MCP Server

Quick Start

One-Click Install (Claude Desktop)

Download the latest .mcpb file from Releases and open it. Claude Desktop will prompt you for your API key.

Claude Code CLI

claude mcp add odds-api --env ODDS_API_KEY="your-api-key" -- npx -y odds-api-mcp-server

Claude Desktop

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows):

{
  "mcpServers": {
    "odds-api": {
      "command": "npx",
      "args": ["-y", "odds-api-mcp-server"],
      "env": {
        "ODDS_API_KEY": "your-api-key"
      }
    }
  }
}

Cursor

Add to your Cursor MCP settings (.cursor/mcp.json in your project or global config):

{
  "mcpServers": {
    "odds-api": {
      "command": "npx",
      "args": ["-y", "odds-api-mcp-server"],
      "env": {
        "ODDS_API_KEY": "your-api-key"
      }
    }
  }
}

VS Code

Add to your VS Code settings (.vscode/mcp.json):

{
  "servers": {
    "odds-api": {
      "command": "npx",
      "args": ["-y", "odds-api-mcp-server"],
      "env": {
        "ODDS_API_KEY": "your-api-key"
      }
    }
  }
}

Global Install (alternative)

npm install -g odds-api-mcp-server

Then use odds-api-mcp as the command instead of npx -y odds-api-mcp-server.

Configuration

Variable

Required

Description

ODDS_API_KEY

Yes

Your API key from odds-api.io

Available Tools

Sports & Leagues

Tool

Description

get_sports

List all available sports with slugs

get_leagues

Get leagues for a sport (with optional all flag for inactive leagues)

get_markets

List the exact market names a sport serves, with shape, period and prematch/live availability

Bookmakers

Tool

Description

get_bookmakers

List all supported bookmakers

get_selected_bookmakers

Get your currently selected bookmakers

select_bookmakers

Add bookmakers to your selection

clear_selected_bookmakers

Clear all selected bookmakers (once per 12h)

Events

Tool

Description

get_events

Get events with filtering (league, status, date range, participant, bookmaker, pagination)

get_event

Get a single event by ID

get_live_events

Get currently live events

search_events

Search events by team name or text

Odds

Tool

Description

get_odds

Get odds for an event from selected bookmakers

get_multi_odds

Get odds for up to 10 events in one call

get_odds_movements

Get historical line movements for a market

get_updated_odds

Get recently changed odds (polling), for the markets you name

Historical

Tool

Description

get_historical_events

Get finished events for a sport/league/date range

get_historical_odds

Get closing odds and scores for finished events

Betting Analytics

Tool

Description

get_settlements

Status, final score and final flag for up to 50 events

grade_bets

Settle up to 50 bets as won, lost, void, half won or half lost

get_value_bets

Get positive EV opportunities for a bookmaker

get_arbitrage_bets

Get arbitrage opportunities with optimal stakes

get_dropping_odds

Track sharp bookmaker line movements by sport, league, market, and time window

Participants

Tool

Description

get_participants

Get teams/participants for a sport

get_participant

Get a single participant by ID

Reference

Tool

Description

get_documentation

Fetch full API documentation

Resources

Resource URI

Description

odds-api://documentation

Complete API documentation

odds-api://openapi

OpenAPI/Swagger specification

Example Usage

Once configured, ask your AI assistant things like:

  • "What sports are available on Odds-API?"

  • "Show me upcoming Premier League matches"

  • "Get odds for the next Arsenal match from Bet365 and SingBet"

  • "Find value bets on Bet365 with event details"

  • "Are there any arbitrage opportunities between Bet365 and Unibet?"

  • "Show me how the odds moved for event 12345 on the spread market"

  • "Get historical results for La Liga in January 2026"

  • "Show me the biggest dropping odds in football right now"

  • "What Premier League odds have dropped the most in the last 12 hours?"

Development

git clone https://github.com/odds-api-io/odds-api-mcp-server
cd odds-api-mcp-server
npm install
npm run build
npm test

License

MIT

Available Tools

25 tools
clear_selected_bookmakersA

Clear all selected bookmakers for the authenticated user. Limited to once every 12 hours.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Describes destructive action ('clear') and rate limit. No annotations provided, so description carries burden; could mention error behavior on rate limit hit, but adequate for tool with no parameters.

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

Conciseness5/5

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

Two short sentences, front-loaded with action and constraint. No wasted words.

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 and rate limit for a simple no-param, no-output-schema tool. Lacks return value info but acceptable given simplicity.

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?

No parameters, so description adds no parameter info. Per rules, 0 params baseline is 4, even with 100% 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?

Clear and specific: 'Clear all selected bookmakers for the authenticated user.' Distinguishes from siblings 'get_selected_bookmakers' and 'select_bookmakers' by being the opposite action.

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?

Mentions rate limit of once every 12 hours, giving a clear constraint. Lacks explicit comparison to alternatives, but context with sibling tools makes it clear.

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

get_arbitrage_betsA

Get arbitrage opportunities across bookmakers. Returns profit margin, optimal stake distribution, and direct bet links for each leg.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results (default 50, max 500)
bookmakersYesComma-separated bookmaker names (e.g., 'Bet365,SingBet')
includeEventDetailsNoInclude full event details in response

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It mentions return types but omits behavioral details like data freshness, rate limits, or authentication needs. The description is adequate but not comprehensive.

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 that front-load the purpose and return fields. No unnecessary words or repetition.

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 tool with 3 parameters all described in schema and no output schema, the description covers input and output adequately. However, it could mention that 'bookmakers' is required and describe output format in more detail.

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%, with each parameter described in the schema. The description adds no additional meaning beyond what the schema already provides, so 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 arbitrage opportunities across bookmakers and specifies the return fields (profit margin, optimal stake distribution, bet links). It differentiates from siblings like 'get_value_bets' by focusing on arbitrage.

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

Usage Guidelines2/5

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

No guidance on when to use this tool over alternatives such as 'get_value_bets' or 'get_dropping_odds'. No mention of prerequisites or context for optimal use.

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

get_bookmakersA

List all supported bookmakers with their name and active status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It correctly implies a read-only operation but does not disclose any behavioral details such as caching, authentication needs, or whether the list is dynamic. For a simple list tool, this is adequate but not exemplary.

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 a single concise sentence that is front-loaded with the action and resource. Every word is necessary, and there is no redundancy or wasted text.

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?

Given no parameters or output schema, the description is largely complete. It states what the tool returns. However, it could mention that the list is unfiltered or read-only, but the sibling context provides differentiation.

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?

There are no parameters (0 params), so the description does not need to add parameter meaning. According to the guidelines, 0 parameters earns a baseline 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 uses a specific verb 'List' and clearly identifies the resource 'all supported bookmakers'. It also specifies the output fields ('name and active status'), which distinguishes it from sibling tools like get_selected_bookmakers that list only selected bookmakers.

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

Usage Guidelines2/5

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

The description does not provide any guidance on when to use this tool versus alternatives. It lacks explicit instructions for when to use get_bookmakers vs. get_selected_bookmakers or select_bookmakers, leaving the agent to infer from names alone.

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

get_documentationA

Fetch the complete Odds-API.io API documentation.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are present, so the description must disclose behavioral traits. It only states 'Fetch ... documentation' without mentioning output format, size, rate limits, or any side effects.

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 a single, front-loaded sentence that efficiently communicates the tool's purpose with no wasted words.

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

Completeness2/5

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

Given the lack of output schema and annotations, the description is too minimal. It does not explain what the documentation format is or any other context an agent might need.

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?

There are zero parameters, and the schema coverage is 100%. The description does not need to add parameter info, so baseline 4 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 clearly states the verb 'Fetch' and the resource 'complete Odds-API.io API documentation', which is distinct from sibling tools that deal with odds, events, etc.

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

Usage Guidelines3/5

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

The usage is implied (when you need the API documentation) but no explicit guidance on when to use vs alternatives or when not to use is provided.

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

get_dropping_oddsA

Get odds that have dropped the most from opening, based on sharp bookmaker data. Useful for tracking where sharp money is moving. Updated every ~10 seconds. Only available on paid plans. Response includes drop percentages for multiple time windows (sinceOpening, 12h, 24h, 48h). For player prop markets, the response includes market.label with the player name (e.g. 'Carlos Baleba'). Use markets=Player Props to get all player prop markets across all sports (football includes Anytime Goalscorer, Player Passes, Player Shots, Player Shots on Target, etc.). IMPORTANT: Always pass the sport parameter when the user mentions or implies a specific sport — the global (no-sport) endpoint is heavily dominated by player props and will return very few main market results.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, 1-indexed (default: 1)
sortNoSort order: 'drop' (highest drop %), 'recent' (latest movement), 'kickoff' (soonest event). Default: 'drop'
limitNoResults per page, 1-200 (default: 50)
sportNoSport slug to filter by (e.g., 'football', 'basketball'). Always include this when the user mentions a sport — without it, results are dominated by player props and main market drops are hidden.
leagueNoSingle league slug to filter by (e.g., 'england-premier-league'). Requires sport. Mutually exclusive with leagues.
leaguesNoComma-separated league slugs to filter by multiple leagues (e.g., 'england-premier-league,spain-la-liga'). Mutually exclusive with league. When used with sport, fetches full per-league data instead of the pre-truncated global snapshot.
marketsNoComma-separated market names to filter by (case-insensitive). e.g. 'ML,Spread,Totals'. Supported: ML, Spread, Totals, Spread HT, Totals HT, Totals 1Q, Spread 1Q, Team Total Home, Team Total Away, Corners Spread, Corners Totals, Corners Spread HT, Corners Totals HT, Bookings Spread, Bookings Totals, Player Props. Note: 'Player Props' returns all player prop markets across all sports.
minDropNoMinimum drop percentage threshold (default: 0)
timeWindowNoTime window for drop filtering and sorting: 'opening', '12h', '24h', '48h' (default: 'opening')
includeEventDetailsNoInclude expanded event details (home, away, date, sport, league) in response

TDQS

A4.1/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden. It discloses update frequency (~10 sec), paid plan requirement, response structure (multiple time windows, player prop labeling), and the dominance of player props without sport parameter. This is solid transparency.

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 reasonably concise, with front-loaded purpose. Each sentence adds value, though it could be slightly more terse. Structure is logical: purpose, update frequency, availability, response hints, then usage tips.

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?

Given 10 parameters and no output schema, the description covers key behavioral aspects (update, paid, player props) and parameter usage (sport importance). It misses some details like pagination behavior but is largely complete for an agent to use 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 baseline is 3. The description adds context about sport parameter importance and player props but does not significantly enhance understanding beyond the schema's parameter descriptions.

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 odds that have dropped most from opening using sharp bookmaker data. It distinguishes from sibling tools like get_odds and get_odds_movements by focusing on drops and sharp 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?

The description gives explicit guidance: always include the sport parameter when a sport is implied, and notes the tool is only on paid plans. It does not explicitly state when not to use or compare to alternatives, but the guidance is helpful.

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

get_eventA

Get a single event by its unique ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesEvent ID

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations, the description only states it retrieves an event by ID. It does not disclose whether the tool returns all fields, error handling, or if it could return null. Minimal transparency.

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 a single concise sentence without unnecessary words. Efficient and front-loaded.

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?

The tool is simple with one parameter and no output schema. The description covers basic functionality but lacks any mention of return format or potential errors. Adequate for its simplicity.

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% with a clear description for 'id'. The description adds 'unique ID', providing slight additional value beyond the schema. Baseline score 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 action ('Get') and the resource ('single event') and distinguishes it from sibling tools like 'get_events' (plural).

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

Usage Guidelines3/5

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

No explicit guidance on when to use this tool versus alternatives like 'search_events' or 'get_events'. Usage is implied but lacks exclusions or context.

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

get_eventsB

Get events for a sport with filtering by league, participant, status, date range, bookmaker availability, and pagination support.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoEnd date/time in RFC3339 format (e.g., '2025-10-28T23:59:59Z')
fromNoStart date/time in RFC3339 format (e.g., '2025-10-28T10:00:00Z')
skipNoNumber of events to skip for pagination
limitNoMaximum number of events to return
sportYesSport slug (e.g., 'football', 'basketball')
leagueNoLeague slug (e.g., 'england-premier-league')
statusNoComma-separated event statuses: pending, live, settled
bookmakerNoOnly return events with odds from this bookmaker (e.g., 'Bet365')
participantIdNoFilter by participant/team ID (matches home or away)

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description must cover behavioral traits. It mentions pagination but does not disclose ordering, data freshness, rate limits, or what happens if no events match. It adds minimal context beyond the 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?

Single sentence that front-loads purpose then lists filters efficiently. Slightly long but packs information without redundancy.

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

Completeness2/5

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

With 9 parameters, no output schema, and no annotations, the description should provide more context about return format, pagination mechanics, default behavior (e.g., ordering). It is insufficient for safe autonomous 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 schema already describes each parameter. The description lists filter categories but does not add new semantics or format details beyond the schema. 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 verb 'get' and resource 'events', and specifies the filtering criteria (league, participant, status, date range, bookmaker, pagination). It distinguishes from siblings like get_event (single event) and get_live_events (only live).

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

Usage Guidelines3/5

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

The description implies this tool is for general event listing with filters, but lacks explicit guidance on when to use it versus alternatives like get_live_events or get_historical_events. No exclusions or when-not scenarios are provided.

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

get_historical_eventsA

Get finished events for a sport and league within a date range (max 31-day span).

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesEnd date in RFC3339 format (e.g., '2026-01-31T23:59:59Z')
fromYesStart date in RFC3339 format (e.g., '2026-01-01T00:00:00Z')
sportYesSport slug (e.g., 'football')
leagueYesLeague slug (e.g., 'england-premier-league')

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries full responsibility. It states 'Get finished events' implying read-only, but fails to disclose any side effects, rate limits, authentication requirements, or data freshness. For a query tool, more behavioral context is expected.

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?

Single sentence, 14 words, front-loaded with key information. No redundant text. Each phrase earns its place.

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

Completeness3/5

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

The tool has 4 required parameters and no output schema. The description does not explain the return format (e.g., list of events), pagination, or any filtering beyond sport/league/date range. For a simple query tool, it's minimally adequate but lacks detail about output.

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

Parameters4/5

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

Schema description coverage is 100%, so each parameter is already documented. The description adds value by specifying the 'max 31-day span' constraint not present in the schema, which helps agents construct valid queries.

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 clearly states the verb (Get), resource (finished events), and constraints (sport, league, date range, max 31-day span). It distinguishes from sibling tools like get_events (likely ongoing) and get_live_events.

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

Usage Guidelines3/5

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

The description mentions the 31-day max span but provides no explicit guidance on when to use this tool vs siblings like get_historical_odds or get_events. An agent would need to infer usage from the name and constraints.

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

get_historical_oddsB

Get closing odds and final scores for a finished event from selected bookmakers.

ParametersJSON Schema
NameRequiredDescriptionDefault
eventIdYesEvent ID (from get_historical_events)
bookmakersYesComma-separated bookmaker names (max 30)

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description must cover behavioral traits. It only states the function, not prerequisites (event must be finished), potential errors (e.g., invalid bookmakers), or response structure. Minimal disclosure.

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 a single, clear sentence with no extraneous words, earning a top score for conciseness.

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

Completeness3/5

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

For a two-parameter tool with no output schema, the description is minimally adequate but omits details like required event status (finished), potential empty results, and response format. Gaps remain.

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 baseline 3. The description adds no new information beyond the parameter descriptions; it echoes 'selected bookmakers' but does not clarify constraints beyond what the schema already provides.

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 retrieves closing odds and final scores for finished events from selected bookmakers, which is specific and distinguishes it from sibling tools like get_odds (which likely handles live or upcoming events).

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as get_odds for live events or get_historical_events for listing events. The description lacks explicit usage context.

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

get_leaguesB

Get leagues for a sport. Returns league name, slug, and active event count.

ParametersJSON Schema
NameRequiredDescriptionDefault
allNoIf true, include leagues without active events
sportYesSport slug (e.g., 'football', 'basketball', 'tennis')

TDQS

B3.2/5.0
Behavior3/5

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

No annotations provided, so the description carries the burden. It discloses return fields (league name, slug, active event count) but does not mention pagination, error handling, or rate limits. The behavior is clear as a read operation, but additional context would improve transparency.

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 a single sentence that immediately conveys the purpose and return value. No wasted words, though it could be slightly expanded without losing conciseness. Front-loaded with the verb.

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?

Given no output schema, the description explains the return fields but not the format (e.g., array). It does not mention prerequisites like needing a sport slug from another tool. Adequate but could be more 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?

Input schema coverage is 100% and the schema already describes both parameters. The description adds no extra meaning beyond reinforcing the context of 'for a sport'. Baseline score of 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?

The description clearly states the verb 'Get leagues' and the resource 'for a sport', and specifies the returned fields (league name, slug, active event count). It distinguishes from sibling tools like get_sports or get_events, but could be more explicit about the specific resource 'league data'.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. It does not mention that the sport parameter requires a slug from get_sports, nor when to set the 'all' parameter. Sibling tools are not referenced.

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

get_live_eventsA

Get all currently live events across all sports, optionally filtered by sport.

ParametersJSON Schema
NameRequiredDescriptionDefault
sportNoSport slug to filter live events (e.g., 'football')

TDQS

A3.5/5.0
Behavior2/5

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

No annotations provided, so description must bear full burden. It only states 'currently live events' but omits details on update frequency, rate limits, pagination, or definition of 'live'. Minimal behavioral insight.

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?

Single sentence, no wasted words. Clearly structured and front-loaded with the core action.

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?

Simple tool with one optional param and no output schema. Description is adequate for basic understanding but lacks details on return format or edge cases.

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 has 100% coverage for the single optional 'sport' parameter with description of a slug example. Tool description restates filtering but adds no new meaning 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?

Description clearly states verb 'Get' and resource 'currently live events', and mentions optional filtering by sport. It distinguishes from siblings like get_events, get_historical_events, and search_events.

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

Usage Guidelines3/5

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

No explicit guidance on when to use or when not to use this tool versus alternatives. The description implies usage for live events but lacks exclusions or context.

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

get_marketsA

List the exact market names served for a sport, with how to read each one (shape), the period it covers and whether it is available prematch and live. Use it before passing markets to other tools; names must match in full, e.g. 'ML' not 'Match Winner'.

ParametersJSON Schema
NameRequiredDescriptionDefault
sportYesSport slug (e.g., 'football', 'basketball', 'tennis')

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and does well: it discloses the return semantics (how to read each market, its period, prematch/live availability) rather than just naming the resource. It stops short of stating auth needs, rate limits, or response structure, so it isn't fully exhaustive.

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

Conciseness5/5

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

Two tight sentences: the resource and its return fields are front-loaded, then the usage rule with an example. No filler and nothing that could be cut without losing information.

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

Completeness4/5

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

For a single-parameter lookup with no output schema and no annotations, the description supplies enough semantic detail about what comes back (shape/period/availability) to call it correctly. It lacks any statement of output shape or error behavior, which keeps it from a 5.

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?

Only one parameter, and its schema description coverage is 100% ('Sport slug (e.g., football, basketball, tennis)'). The description's 'for a sport' adds no syntax or format detail 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 states a specific verb and resource ('List the exact market names served for a sport') and further specifies the returned content (shape, period covered, prematch/live availability). An agent can tell this is the market-catalog lookup, distinct from odds/events/participants siblings, 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 Guidelines4/5

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

It gives a clear workflow directive: 'Use it before passing markets to other tools', plus a concrete gotcha ('names must match in full, e.g. ML not Match Winner'). No alternatives or when-not conditions are named, but the 'when' is unambiguous.

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

get_multi_oddsA

Get odds for multiple events in a single request (up to 10 events). Counts as only 1 API call.

ParametersJSON Schema
NameRequiredDescriptionDefault
eventIdsYesComma-separated event IDs (max 10)
bookmakersYesComma-separated bookmaker names (max 30)

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description carries full burden. It only mentions limits (10 events, 1 API call) and does not disclose behavioral traits such as whether the operation is read-only, authentication requirements, rate limiting, or error handling. The description is too sparse for a tool with no 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 sentences, both front-loaded with key information: purpose and benefit. No unnecessary words, earning its place.

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

Completeness3/5

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

The description covers limits and API call benefit, but lacks details on return format, error behavior, or prerequisites. Given no output schema and moderate complexity, it is somewhat complete but missing context for a robust understanding.

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 description does not add meaning beyond the schema's parameter descriptions. Baseline score of 3 is appropriate since the schema already documents parameters sufficiently.

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 odds for multiple events in a single request, with an explicit constraint of up to 10 events. It distinguishes itself from siblings like get_odds (single event) by emphasizing batching and the benefit of counting as one API call.

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

Usage Guidelines3/5

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

The description implies usage for batch odds retrieval and notes the API call benefit, but does not explicitly state when to use this tool versus alternatives like get_odds or get_historical_odds. No exclusions or when-not-to-use guidance is provided.

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

get_oddsC

Get betting odds for a specific event from selected bookmakers.

ParametersJSON Schema
NameRequiredDescriptionDefault
eventIdYesEvent ID
bookmakersYesComma-separated bookmaker names, max 30 (e.g., 'Bet365,SingBet,Unibet')

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It implies a read operation, but says nothing about rate limits, data freshness, auth requirements, or return format—gaps that matter for an odds feed that presumably updates frequently.

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

Conciseness4/5

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

A single efficient sentence with the resource and scope front-loaded. It is not padded, though its brevity borders on under-specification given the number of competing odds tools.

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

Completeness2/5

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

For a read tool with 100% schema coverage and no output schema, the core is technically covered, but the description fails to position itself among many odds-related siblings or explain the relationship to the bookmaker-selection tools. An agent cannot confidently route to this tool over get_updated_odds or get_multi_odds.

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 eventId and bookmakers are already documented in the schema. The description's phrase 'selected bookmakers' adds a small hint linking bookmakers to the selection workflow, but no format or constraint detail beyond 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 clear verb and resource ('Get betting odds'), scoped to 'a specific event from selected bookmakers.' However, it does nothing to distinguish itself from close siblings like get_updated_odds, get_historical_odds, get_multi_odds, or get_dropping_odds, leaving the agent to infer which 'get odds' variant applies.

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

Usage Guidelines2/5

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

The description gives no when-to-use context and names no alternatives, despite a crowded field of odds siblings (get_historical_odds, get_updated_odds, get_multi_odds). It also does not state whether calling select_bookmakers first is a prerequisite for the 'selected bookmakers' argument.

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

get_odds_movementsA

Get historical odds line movements for an event from a bookmaker. Returns opening, latest, and all intermediate price changes for a specific market.

ParametersJSON Schema
NameRequiredDescriptionDefault
marketYesMarket type (e.g., 'ML', 'Spread', 'Totals')
eventIdYesEvent ID
bookmakerYesBookmaker name (e.g., 'Bet365')
marketLineNoHandicap/total line (e.g., '0.5', '2.5'). Not required for ML markets.

TDQS

A4/5.0
Behavior4/5

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

The description discloses that the tool returns 'opening, latest, and all intermediate price changes', which is key behavioral information. Since no annotations are provided, the description carries the full burden and adequately conveys the read-only, historical nature. However, it does not mention edge cases 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 two sentences, front-loaded with the core purpose. Every sentence adds value without redundancy. It is efficient and clear.

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?

Given 4 parameters and no output schema, the description explains what is returned ('opening, latest, and all intermediate price changes'), which is sufficient for a read tool. It could be more complete with details on format or pagination, but it is adequate for most use cases.

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 has 100% description coverage, so the schema already documents all parameters. The description adds minimal value beyond noting that marketLine is not required for ML markets. Baseline is 3 since schema covers the parameters well.

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 'Get historical odds line movements for an event from a bookmaker', specifying the verb (get), resource (odds line movements), and scope (historical, from a bookmaker, for a specific market). It distinguishes itself from sibling tools like get_odds (current odds) and get_historical_odds (odds at a point in time).

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

Usage Guidelines3/5

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

The description implies use for tracking odds changes over time via 'historical' and 'movements', but does not explicitly state when to use this tool versus alternatives like get_dropping_odds or get_arbitrage_bets. No explicit when-not or alternative tool names are provided.

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

get_participantA

Get a single participant/team by their unique ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesParticipant ID

TDQS

A3.6/5.0
Behavior3/5

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

No annotations provided. Description implies a read operation, but does not explicitly state side effects, authorization needs, or error behavior. Adequate for a simple get operation.

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?

Single sentence, no unnecessary words. Efficient and front-loaded with purpose.

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?

Given simple tool with one parameter and no output schema, the description is nearly complete. Could mention return type or expected result, but not required for basic usage.

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 already describes the 'id' parameter. Description adds 'by their unique ID' reinforcing usage, but does not provide new semantics beyond schema coverage of 100%.

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 clearly states it retrieves a single participant/team by ID. This distinguishes it from sibling 'get_participants' which presumably returns a list.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like get_participants. Does not mention prerequisites or context.

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

get_participantsA

Get teams/participants for a sport, optionally filtered by name search.

ParametersJSON Schema
NameRequiredDescriptionDefault
sportYesSport slug (e.g., 'football')
searchNoSearch term to filter by team/participant name

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, and the description fails to disclose any behavioral traits such as data freshness, pagination, authentication needs, or limits. The agent cannot infer safety or side effects.

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 a single, concise sentence (12 words) that front-loads the core purpose. Every word earns its place with zero redundancy.

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?

Given the tool is simple with 2 parameters and no output schema, the description is minimally adequate but omits details like return format, ordering, or pagination. An agent might need more context for robust use.

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% with clear descriptions for both parameters. The description adds minimal extra meaning beyond restating the filter option, but does not clarify search semantics (e.g., partial match, case sensitivity).

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 action 'Get' and the resource 'teams/participants for a sport' with an optional filter. It distinguishes from sibling tools like get_participant via scope and plural form.

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

Usage Guidelines3/5

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

The description implies usage for listing participants with optional name search, but does not specify when to use this tool over alternatives like get_participant (singular) or other query tools.

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

get_selected_bookmakersA

Get the authenticated user's currently selected bookmakers.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

The description indicates it is a read operation on the authenticated user's selection, but with no annotations, it does not detail side effects, authentication needs beyond implication, or rate limits. It is adequate but minimal.

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

Conciseness5/5

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

A single sentence that precisely conveys the purpose. Every word earns its place; no waste.

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

Completeness2/5

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

Without an output schema, the description should hint at the return format or structure. It only mentions 'selected bookmakers' but does not specify if these are IDs, names, or objects. Complexity is low, but completeness suffers from lack of detail on output.

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?

There are no parameters, and the schema coverage is 100%. The description adds no parameter information because none exists. Per calibration, 0 parameters with full coverage gives a baseline of 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 clearly states the verb 'Get' and the resource 'the authenticated user's currently selected bookmakers'. It distinguishes from sibling tools like 'clear_selected_bookmakers' and 'select_bookmakers' by implying viewing vs. modifying.

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?

While no explicit when/when-not guidance is given, the description's focus on 'currently selected' implies it is for viewing the current selection, contrasting with the setting/clearing siblings. It is straightforward for a simple getter.

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

get_settlementsA

Get what happened in up to 50 events: status (pending, live, awaiting_result, settled, cancelled), final score by period and a final flag that says the result is confirmed. Unknown ids are listed in notFound. Paid plans.

ParametersJSON Schema
NameRequiredDescriptionDefault
eventIdsYesComma-separated event IDs (max 50)

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does reasonable work: it discloses the status enum values, that scores are returned by period, the meaning of the `final` confirmation flag, and that unknown IDs surface in `notFound` rather than erroring. It omits auth mechanics beyond 'Paid plans' and any rate/error behavior, so it falls 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?

One dense, front-loaded sentence that leads with the outcome ('what happened') then enumerates the return contents and the notFound behavior. Little waste, though the enumerated parenthetical is slightly list-heavy.

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 usefully characterizes the return payload (status, per-period scores, `final` flag) plus the unknown-ID path and the paid-plan requirement. For a one-param batch lookup this is nearly complete, missing only permission/error specifics.

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 single `eventIds` parameter already documents 'Comma-separated event IDs (max 50)'. The description restates the 50-event cap without adding format or edge-case detail 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.

Purpose4/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 — retrieving settlement results ('what happened') for events, with status, scores and a confirmation flag. It is clearly distinct from event/odds listing siblings, but it never names the closest alternatives (get_events, get_historical_events) to sharpen the boundary.

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

Usage Guidelines3/5

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

The 'up to 50 events' batching and the 'Paid plans' gating condition imply when the tool is usable, but there is no explicit when-to-use versus alternatives guidance (e.g. settling vs live vs historical fetching). Usage is only implied.

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

get_sportsA

List all available sports with their name and slug identifier.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations, description carries full burden. It implies a read operation but doesn't explicitly state read-only, non-destructive nature. Adequate for a simple list, but lacks explicit behavioral traits.

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?

Single sentence, 10 words, no filler. Front-loaded with verb and resource. Excellent conciseness.

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?

Given zero complexity (no params, no output schema), description covers purpose and output adequately. Could mention response format but not critical.

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?

No parameters; baseline 4 per instructions. Schema coverage 100% with empty schema, so description need not add parameter info.

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 clearly states verb 'List', resource 'available sports', and output details 'name and slug identifier'. Distinct from siblings like get_leagues or get_events.

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

Usage Guidelines3/5

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

No explicit when-to-use or alternatives, but the purpose is straightforward and implied: use when you need the list of all sports.

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

get_updated_oddsA

Get odds updated since a Unix timestamp for a bookmaker and sport, limited to the markets you name. The timestamp must be at most 90 seconds old. Useful for efficient polling.

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceYesUnix timestamp in seconds, at most 90 seconds old
sportYesSport slug (e.g., 'football')
marketsYesComma-separated market names, max 20 (e.g., 'ML,Spread,Totals'). Required by the API. Use get_markets for the exact names a sport serves.
bookmakerYesBookmaker name (e.g., 'Bet365')

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full burden and does disclose a real constraint: the timestamp must be at most 90 seconds old, which implies a hard polling window. It does not cover auth requirements, rate limits beyond that window, what happens when the window is violated, or what the response contains.

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

Conciseness4/5

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

Three short sentences, front-loaded with the operation and scope, then the constraint, then the use case. Minor redundancy in restating the 90-second limit that the schema already carries, but nothing is padded.

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?

No output schema and no annotations, so the description should say more about the returned odds shape and the failure mode when 'since' is stale. It adequately covers the required inputs and the polling intent, but leaves the response contract 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 description coverage is 100%, so all four parameters are already documented, including the market limit and the pointer to get_markets. The description adds only the 'limited to the markets you name' scoping and restates the 90-second rule, so baseline 3 is correct.

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 ('Get odds updated since a Unix timestamp') with the scoping axes (bookmaker, sport, markets), which implicitly separates it from the snapshot-oriented get_odds sibling. It never names an alternative explicitly, so an agent must infer the boundary from 'updated since' 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 line 'Useful for efficient polling' gives a clear use context, and the 90-second freshness rule tells the agent when this call is valid. It does not state when NOT to use it (e.g., for a full snapshot use get_odds) or name a fallback when the timestamp is too old.

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

get_value_betsA

Get positive expected value betting opportunities for a bookmaker. Updated every 5 seconds. EV formula: (Probability x Odds) - 1.

ParametersJSON Schema
NameRequiredDescriptionDefault
bookmakerYesBookmaker name (e.g., 'Bet365')
includeEventDetailsNoInclude full event details (sport, league, teams, date) in response

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It discloses update frequency ('Updated every 5 seconds') and the EV formula, but omits behaviors like required permissions, error handling, rate limits, or what happens if the bookmaker is invalid.

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

Conciseness5/5

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

The description is concise with three sentences, each adding value. It front-loads the purpose, then provides update frequency, then the formula. No redundant or irrelevant information.

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

Completeness3/5

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

Given no output schema and moderate complexity, the description is incomplete. It explains the EV formula but does not describe the structure of returned bets, pagination, or error states. It provides enough context for basic use but lacks detail for comprehensive understanding.

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 both parameters. The description adds context about EV and update frequency but does not enhance parameter meaning beyond the schema descriptions. 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 function: 'Get positive expected value betting opportunities for a bookmaker.' It specifies the verb 'get', the resource 'value bets', and adds constraints like 'positive expected value' and 'for a bookmaker'. It also distinguishes itself from siblings like get_arbitrage_bets and get_dropping_odds by focusing on EV opportunities.

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

Usage Guidelines2/5

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

The description provides no explicit guidance on when to use this tool versus alternatives. It does not mention when not to use it, prerequisites, or context for selection among sibling tools like get_odds or search_events.

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

grade_betsA

Settle up to 50 bets. Each selection is graded as won, lost, void, half_won, half_lost, pending or ungradeable, with a reason, a final flag and the score it was based on. Covers 64 markets in 20 sports, including Asian handicap quarter lines, totals, corners, bookings and player props. Football settles on 90 minutes. Paid plans.

ParametersJSON Schema
NameRequiredDescriptionDefault
selectionsYesBets to grade, described with the fields of an odds row from get_odds

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does substantial work: it enumerates every possible verdict (won, lost, void, half_won, half_lost, pending, ungradeable), the fields returned per selection (reason, final flag, score), the market breadth (64 markets / 20 sports), and a non-obvious domain rule (football settles on 90 minutes). It still omits whether grading persists anything, permission/auth specifics beyond 'Paid plans', and rate or batch-cost behavior.

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 short sentences, front-loaded with the action and capped by the most actionable constraint first. The market enumeration and 90-minute rule are dense but each conveys distinct scope information; the fragment 'Paid plans.' is terse but relevant. Slightly list-heavy, though 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?

There is no output schema and no annotations, so the description must explain returns — and it does, naming the verdict set plus per-selection reason/final/score fields. Combined with the market and settlement-rule coverage, an agent can call it correctly, with the remaining gaps (persistence, auth mechanics) being secondary.

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 single parameter's nested fields are fully documented in the schema itself, so the baseline is 3. The description repeats the 50-item cap (already in maxItems) and gives market-coverage context, but adds no input semantics beyond what the schema already provides.

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 opening sentence gives a specific verb and resource ('Settle ... bets') with a hard scope bound (up to 50). The following sentences pin down exactly what 'settle' produces (graded statuses, reason, final flag, score) and which markets are covered, so an agent knows precisely what the tool does 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 Guidelines3/5

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

Usage is implied rather than stated: an agent infers it should submit selections it already has, and the closing 'Paid plans.' signals an access prerequisite. However, the description never names the obvious sibling alternative (get_settlements) or explains when grading is the right call versus reading existing settlements, leaving a real routing ambiguity unaddressed.

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

search_eventsA

Search events by team name or text query. Returns up to 10 matching results.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch term (minimum 3 characters)

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It mentions 'returns up to 10 matching results,' which provides useful limit information, but it does not disclose other behaviors such as pagination, sorting, or search scope (e.g., only current events vs. historical).

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 a single sentence that efficiently conveys the core purpose and key constraint. Every part is meaningful, and there is no superfluous information.

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

Completeness3/5

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

Given the low complexity (one parameter, no output schema, no annotations), the description covers the essential purpose and a behavioral constraint (result limit). However, it lacks details on search behavior, such as whether it searches across all events or only certain fields, and does not describe the return format.

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% (one parameter with description). The description adds value by specifying that the query can be 'by team name or text query,' which provides context beyond the schema's generic 'Search term' description. It helps the agent understand the search scope.

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 that the tool searches events by team name or text query, which distinguishes it from sibling tools like get_events (which lists all events) and get_live_events (which filters by live status). The verb 'search' and resource 'events' 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 Guidelines3/5

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

The description implies usage for searching when you have a query, but it does not explicitly state when to use this tool versus alternatives. It lacks guidance on when not to use it or mention of sibling tools for different scenarios.

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

select_bookmakersC

Add bookmakers to the authenticated user's selection.

ParametersJSON Schema
NameRequiredDescriptionDefault
bookmakersYesComma-separated bookmaker names (e.g., 'Bet365,SingBet')

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description must carry all behavioral information. It only states 'add' but does not disclose side effects (e.g., whether it replaces or appends, if it requires authentication, or any limits). The minimal description leaves the agent uncertain about the tool's behavior.

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 a single sentence, very concise, and front-loaded with the action. It efficiently conveys the core purpose, though it could be slightly more structured by including a brief usage hint. There is no wasted text.

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

Completeness2/5

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

Given the single parameter and no output schema, the description is too minimal. It does not explain the meaning of 'selection', how it interacts with other tools (e.g., getting odds), or any constraints. The agent lacks context to use the tool effectively.

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 describes the parameter format (comma-separated names). The tool description adds no extra meaning beyond the schema. Baseline 3 is appropriate as the description does not enhance understanding of the parameter.

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

Purpose4/5

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

The description clearly states the action ('Add') and the resource ('bookmakers to the authenticated user's selection'). It distinguishes from sibling tools like 'clear_selected_bookmakers' and 'get_selected_bookmakers', which have different purposes. However, it does not elaborate on what 'selection' means in the broader context.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, when it should be invoked, or any context about its role (e.g., before getting odds). No exclusions or alternatives are referenced.

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. 5 tool updatesv1.6.0
    • Addedget_markets
    • Changedget_odds1 field changed
      • changedInput schema / properties / bookmakers / description
        Previous value: -"Comma-separated bookmaker names, max 30 (e.g., 'Bet365,Pinnacle,Unibet')"New value: +"Comma-separated bookmaker names, max 30 (e.g., 'Bet365,SingBet,Unibet')"
    • Addedget_settlements
    • Changedget_updated_odds3 fields changed
      • addedInput schema / properties / markets
        Added value: +{
        +  "description": "Comma-separated market names, max 20 (e.g., 'ML,Spread,Totals'). Required by the API. Use get_markets for the exact names a sport serves.",
        +  "type": "string"
        +}
      • changedInput schema / properties / since / description
        Previous value: -"Unix timestamp (must be within the last 60 seconds)"New value: +"Unix timestamp in seconds, at most 90 seconds old"
      • changedInput schema / required
        Previous value: -[
        -  "since",
        -  "bookmaker",
        -  "sport"
        -]New value: +[
        +  "since",
        +  "bookmaker",
        +  "sport",
        +  "markets"
        +]
    • Addedgrade_bets
  2. 22 tool updatesv1.5.1
    • First observedclear_selected_bookmakers
    • First observedget_arbitrage_bets
    • First observedget_bookmakers
    • First observedget_documentation
    • First observedget_dropping_odds
    • First observedget_event
    • First observedget_events
    • First observedget_historical_events
    • First observedget_historical_odds
    • First observedget_leagues
    • First observedget_live_events
    • First observedget_multi_odds
    • First observedget_odds
    • First observedget_odds_movements
    • First observedget_participant
    • First observedget_participants
    • First observedget_selected_bookmakers
    • First observedget_sports
    • First observedget_updated_odds
    • First observedget_value_bets
    • First observedsearch_events
    • First observedselect_bookmakers

TDQS

A3.6/5.0

Scored across 25 tools

Disambiguation4/5

Tools are mostly distinct, but get_events/get_historical_events/get_live_events/search_events slightly overlap, and get_odds/get_updated_odds/get_multi_odds/get_odds_movements require inference to separate. Descriptions do clarify the boundaries, so misselection is unlikely but possible.

Naming Consistency5/5

Every tool follows the same verb_noun snake_case pattern (get_, select_, clear_, grade_, search_), with no camelCase or stylistic deviations.

Tool Count3/5

25 tools is at the heavy end for an odds API but each covers a distinct resource or analysis function; it is borderline rather than excessive.

Completeness4/5

The surface covers sports, leagues, events, odds, settlements, grading, and value/arbitrage betting, but lacks explicit market/league discovery tools and dedicated bookmaker removal, leaving minor gaps.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables fetching sportsbook odds, live scores, and event information across 70+ books and 30+ leagues, with tools to list sports, get scores, and discover events.
    15 npm
    1
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to query live sports betting data including odds, edges, arbitrage opportunities, player/team stats, and reference data using the SportWizzard API.
    20
    240 npm
    MIT
  • 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.
    3
    60 npm
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Provides AI agents with live, grounded sports data including model probabilities, track records, and European soccer and tennis arbitrage opportunities, so they answer from real numbers instead of stale guesses.
    13
    19 npm
    1
    MIT