Skip to main content
Glama
Valerio357

bet-mcp

by Valerio357

bet-mcp

MCP server (FastMCP + TypeScript) that focuses on Serie A pre-match analysis:

  • fixtures_list – next fixtures in a configurable window

  • match_snapshot – last 5 results, standings, GF/GA averages

  • odds_prematch – normalized odds for 1X2 / OU 2.5 / BTTS across bookmakers

  • fair_compute – Poisson-lite probabilities + fair odds

  • value_detect – top value picks by comparing best odds vs fair model

Getting started

  1. Install dependencies (Node 20+ recommended):

    npm install
  2. Copy .env.example to .env and provide your keys:

    cp .env.example .env
    # edit the file with FOOTBALL_DATA_TOKEN and ODDS_API_KEY
  3. Run locally:

    # stdio (Claude Desktop / terminal)
    npm run dev
    
    # or HTTP transport for remote testing
    MCP_TRANSPORT=http PORT=8080 npm run dev
  4. Build for production:

    npm run build
    npm start
  5. Deploy on glama.ai:

Glama uses the included glama.yaml/glama.json files to run npm install && npm run build, then starts the server with MCP_TRANSPORT=http on port 8080. Configure FOOTBALL_DATA_TOKEN and ODDS_API_KEY (others optional) in the Glama dashboard so inspections and tool detection can succeed.

Related MCP server: mcp-football

Implementation notes

  • Stack – FastMCP + Axios + Zod, TypeScript strict mode.

  • API clients – Football-Data.org for fixtures/stats; The Odds API for consolidated odds.

  • Modeling – Poisson using GF/GA averages + configurable home advantage, derived OU/BTTS probs.

  • Caching – In-memory TTL cache to reduce API calls (configurable via CACHE_TTL_SECONDS).

  • Value picks – Filters by edge >= 5% and odds >= 1.50, returns rationale referencing λ/form.

Environment variables

key

description

FOOTBALL_DATA_TOKEN

Football-Data.org API token

FOOTBALL_DATA_COMPETITION

Defaults to SA

FOOTBALL_DATA_SEASON

Defaults to current year

ODDS_API_KEY

The Odds API key

ODDS_API_REGION

Regions filter (default eu)

ODDS_API_MARKETS

Markets request list (default h2h,totals,btts)

ODDS_API_SPORT

Sport key (soccer_italy_serie_a)

HOME_ADVANTAGE_FACTOR

Poisson λ multiplier for home team

CACHE_TTL_SECONDS

Cache TTL (default 120)

MCP_TRANSPORT

stdio (default) or http

PORT

HTTP port when MCP_TRANSPORT=http

Testing

Use npx fastmcp dev src/index.ts or npx fastmcp inspect src/index.ts after installing dependencies to interactively test the tools.

Available Tools

5 tools
fair.computeC

Calcola probabilità e quote fair (Poisson semplice) per 1X2 / OU 2.5 / BTTS.

ParametersJSON Schema
NameRequiredDescriptionDefault
match_idYesFixture id da API-Football

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the calculation method (Poisson semplice) and output types (probabilities and odds for specific markets), but lacks critical details like whether this is a read-only operation, if it requires specific permissions, rate limits, or what the response format looks like. For a computational tool with zero annotation coverage, this is insufficient.

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 concise and front-loaded in a single sentence that directly states the tool's function. It efficiently covers the core purpose without unnecessary words, though it could benefit from slight structural improvements like separating the calculation method from the output markets for clarity.

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 computational nature of the tool, no annotations, and no output schema, the description is incomplete. It doesn't explain what the output looks like (e.g., structured probabilities/odds), error handling, or dependencies on external data (e.g., requiring match statistics from API-Football). For a tool that performs calculations with a single input, more context is needed.

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, with the single parameter 'match_id' clearly documented as 'Fixture id da API-Football'. The description doesn't add any additional parameter semantics beyond what the schema provides, such as format examples or constraints. With high schema coverage, the 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 tool's purpose: calculating fair probabilities and odds using simple Poisson distribution for specific betting markets (1X2, Over/Under 2.5, Both Teams to Score). It specifies the verb 'calcola' (calculates) and the resource type (probabilities/odds), though it doesn't explicitly differentiate from sibling tools like 'odds.prematch' or 'value.detect' which might handle similar betting 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 is provided on when to use this tool versus alternatives. The description doesn't mention prerequisites, context, or comparisons to sibling tools like 'odds.prematch' (which might provide pre-match odds) or 'value.detect' (which might detect value bets). It only states what the tool does, not when it's appropriate.

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

fixtures.listB

Ritorna i prossimi match di Serie A entro X giorni (id, squadre, kickoff, venue).

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoNumero di giorni in avanti da scandire

TDQS

B3.1/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. The description states it returns match data, which suggests a read-only operation, but it doesn't address other behavioral aspects like rate limits, authentication needs, error conditions, or pagination. For a tool with zero annotation coverage, this leaves significant gaps in understanding how the tool behaves beyond its basic function.

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 extremely concise and front-loaded, consisting of a single sentence that efficiently conveys the tool's purpose, scope, and output. Every word earns its place, with no wasted information or redundancy. The structure is clear and direct, making it easy for an agent to parse quickly.

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's low complexity (one parameter, no output schema, no annotations), the description is adequate but incomplete. It covers the basic purpose and output fields, but lacks details on behavioral traits, error handling, or usage context relative to siblings. Without annotations or output schema, the description should do more to compensate, but it provides just enough for a minimal viable 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?

The schema description coverage is 100%, with the 'days' parameter fully documented in the schema (type, range, default). The description adds marginal value by contextualizing 'X giorni' as the timeframe for upcoming matches, but it doesn't provide additional semantic details beyond what's in the schema. This meets the baseline score of 3 when schema coverage is high.

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 tool's purpose: 'Ritorna i prossimi match di Serie A entro X giorni' (Returns upcoming Serie A matches within X days). It specifies the verb ('ritorna'), resource ('match di Serie A'), scope ('entro X giorni'), and output fields ('id, squadre, kickoff, venue'). However, it doesn't explicitly differentiate from sibling tools like 'match.snapshot' or 'odds.prematch', which prevents a perfect score.

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 minimal usage guidance. It implies the tool should be used when you need upcoming Serie A matches within a specified timeframe, but it doesn't mention when to use this tool versus alternatives like 'match.snapshot' or 'odds.prematch'. No exclusions, prerequisites, or explicit alternatives are provided, leaving the agent with little context for tool selection.

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

match.snapshotC

Restituisce forma, classifica, gol fatti/subiti e ultimi risultati per il match richiesto.

ParametersJSON Schema
NameRequiredDescriptionDefault
match_idYesmatch_id fornito da API-Football

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 states the tool returns data but doesn't specify if it's a read-only operation, whether it requires authentication, rate limits, error handling, or the format of returned data (e.g., JSON structure). For a tool with no annotation coverage, this leaves significant gaps in understanding its behavior beyond basic functionality.

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, efficient sentence that directly states the tool's purpose without unnecessary words. It is appropriately sized and front-loaded, making it easy to understand quickly. However, it could be slightly improved by structuring key points (e.g., bullet points) for clarity, but this is minor.

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 tool's complexity (a data retrieval tool with no annotations and no output schema), the description is incomplete. It doesn't explain the return values in detail (e.g., what 'forma' or 'classifica' mean), error cases, or how to interpret results. With no output schema and minimal behavioral context, the description fails to provide enough information for an agent to use the tool effectively beyond basic 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?

The input schema has 100% description coverage, with 'match_id' documented as an integer from API-Football. The description adds no additional parameter semantics beyond what the schema provides, such as examples or constraints. Since schema coverage is high, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract from the schema's information.

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 tool returns specific match data (shape, classification, goals scored/conceded, and recent results) for a requested match. It uses specific verbs ('Restituisce' - returns) and resources ('match richiesto' - requested match), making the purpose evident. However, it doesn't explicitly differentiate from sibling tools like 'fixtures.list' or 'odds.prematch', which might also provide match-related information.

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 doesn't mention prerequisites, such as needing a valid match_id from API-Football, or compare its functionality to sibling tools like 'fixtures.list' (which might list matches) or 'odds.prematch' (which might provide odds). Usage is implied only by the tool's name and description, with no explicit context or exclusions.

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

odds.prematchC

Quote pre-match (1X2, Over/Under 2.5, BTTS) normalizzate con lista bookmaker.

ParametersJSON Schema
NameRequiredDescriptionDefault
match_idYesFixture id di API-Football

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 mentions 'normalizzate' (normalized) and 'lista bookmaker' (bookmaker list), hinting at data formatting and sources, but doesn't clarify if this is a read-only operation, rate limits, error handling, or output structure. For a tool with no annotations, this is insufficient.

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, efficient sentence in Italian that conveys the core purpose without unnecessary words. It's appropriately sized and front-loaded, though some might argue it could be slightly more structured for clarity.

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 no annotations, no output schema, and a single parameter with full schema coverage, the description is incomplete. It doesn't explain the return values (e.g., odds format, bookmaker list structure) or behavioral aspects like data freshness or limitations, leaving significant gaps for the agent.

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, with 'match_id' documented as 'Fixture id di API-Football'. The description doesn't add any parameter details beyond this, so it meets the baseline of 3 where the schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Quote pre-match (1X2, Over/Under 2.5, BTTS) normalizzate con lista bookmaker.' It specifies the verb ('Quote') and resource (pre-match odds for specific bet types), though it doesn't explicitly differentiate from sibling tools like 'match.snapshot' or 'value.detect'. The purpose is clear but lacks sibling differentiation.

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. The description doesn't mention prerequisites, context, or exclusions. Given sibling tools like 'match.snapshot' and 'value.detect', the lack of usage guidelines leaves the agent uncertain about tool selection.

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

value.detectC

Confronta quote mercato vs fair per trovare fino a 3 value pick (edge >= 5%).

ParametersJSON Schema
NameRequiredDescriptionDefault
match_idYesFixture id

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 mentions the tool finds 'value picks' with an 'edge >= 5%', which implies some calculation or comparison, but doesn't describe what happens during execution (e.g., whether it fetches data, performs computations, or returns specific formats). For a tool with no annotations, this leaves significant gaps in understanding its behavior, such as error handling or output structure.

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, efficient sentence in Italian that conveys the core purpose without unnecessary words. It's front-loaded with the main action and result, making it easy to understand quickly. There's no wasted verbiage, and every part of the sentence contributes to the tool's definition.

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 complexity of a tool that compares market vs fair quotes to find value picks, the description is incomplete. There's no output schema, and the description doesn't explain what the output looks like (e.g., a list of picks with details). With no annotations and minimal parameter explanation, it fails to provide enough context for an agent to fully understand how to use and interpret results, especially for a potentially data-intensive 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 schema description coverage is 100%, with the single parameter 'match_id' documented as 'Fixture id'. The description doesn't add any meaning beyond this, as it doesn't explain how the match_id is used (e.g., to fetch market and fair quotes for that specific match). Since the schema already fully describes the parameter, the baseline score of 3 is appropriate, indicating adequate but no extra value from the description.

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 tool's purpose: 'Confronta quote mercato vs fair per trovare fino a 3 value pick (edge >= 5%)' which translates to 'Compare market quotes vs fair to find up to 3 value picks (edge >= 5%)'. It specifies the action (compare market vs fair quotes), the resource (value picks), and the scope (up to 3 picks with edge >= 5%). However, it doesn't explicitly distinguish this from sibling tools like fair.compute or odds.prematch, which prevents a score of 5.

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 doesn't mention prerequisites, such as needing a match_id from fixtures.list, or compare it to siblings like fair.compute (which might compute fair values) or odds.prematch (which might provide market quotes). There's only an implied context of finding value picks, but no explicit usage instructions.

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.0.0
    • First observedfair.compute
    • First observedfixtures.list
    • First observedmatch.snapshot
    • First observedodds.prematch
    • First observedvalue.detect

TDQS

A3.5/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a clearly distinct purpose with no overlap: fair.compute calculates fair odds, fixtures.list shows upcoming matches, match.snapshot provides team form and stats, odds.prematch lists market odds, and value.detect identifies value bets. The descriptions are specific and unambiguous, making it easy for an agent to select the right tool.

Naming Consistency5/5

All tool names follow a consistent dot-separated pattern (e.g., fair.compute, fixtures.list) with a clear category.action structure. This predictable naming convention enhances readability and usability across the tool set.

Tool Count5/5

With 5 tools, the server is well-scoped for its betting/soccer analysis domain. Each tool serves a unique and essential function, from data retrieval to analysis, without being overly sparse or bloated, making the count appropriate for the purpose.

Completeness4/5

The tool set covers core workflows for betting analysis: fetching fixtures, getting match stats, computing fair odds, retrieving market odds, and detecting value bets. A minor gap is the lack of tools for in-play odds or historical data, but agents can work around this with the provided tools.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for football-data.org API providing access to football data like standings, matches, teams, and scorers.
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Provides live football data through MCP tools, enabling users to fetch today's matches and top scorers for competitions like the Premier League or World Cup.
    2
    -
  • A
    license
    A
    quality
    C
    maintenance
    MCP server that connects AI assistants to the Statos football analytics platform, enabling natural language queries for match predictions, betting picks, league information, and admin market-suppression controls.
    7
    9 npm
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Provides live football data from API-Football over HTTP, enabling queries for upcoming matches, recent results, current standings, injuries, live matches, and team search through MCP tools.
    -