Koskamo

Bet Better Data MCP

An MCP server providing AI agents with access to sports betting predictions, win chances, player projections, line moves, and checked statistics for 29 competitions. It supports both free and licensed tiers, allowing agents to retrieve public picks, predicted scores, and detailed market data via read-only tools.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Bet Better Data MCP logo, by Bet Better DataCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by Bet Better Data
You need:You sign in (OAuth or your key) and get everything your licence covers.Your key as a header: Authorization: Bearer bbd_live_...
MCP endpoint (Streamable HTTP)
https://betbetter.world/mcp/free
Vendor documentation

What you can do with it

  • Retrieve predicted scores and win chances for upcoming games
  • Access player projections and team totals for various sports
  • Get delayed line moves samples or licensed open calls
  • Fetch free public picks with confidence levels and odds

Source and maintenance

Community listingRegistry 1.1.0
Maintenance checked

Protocol and capabilities

Server
betbetter-data 1.0.0
MCP protocol
2025-06-18
Tools
12 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
3 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "prompts": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Bet Better Data: our model's numbers and checked sport stats for 29 competitions. Use list_leagues first to see the league codes and what this connection covers; get_products for every product, price and page. get_free_picks, get_predicted_scores, get_line_moves_sample, get_storylines_games, get_storylines_facts and get_storylines_on_sale work for everyone (free tier, CC BY 4.0: credit 'Bet Better, betbetter.world'). get_predictions (every game and player), get_line_moves, get_bets_feed and the full Storylines facts need a Bet Better Data licence (https://betbetter.world/data/catalogue). Model numbers are estimates for information, not advice; no wagers are placed. Times are UTC. This is the free endpoint: sign in at https://betbetter.world/mcp for the licensed tools.

Tools

12 advertised

list_leagues — List leagues and coverage
Advertised by the server during the last successful anonymous check.
Advertised read-only

Lists every league Bet Better covers (code, name, season, in season now), which free feeds exist for each, and what this connection's licence covers. Call this first.

list_leagues input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
list_leagues annotations
{
  "title": "List leagues and coverage",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_products — Products and prices
Advertised by the server during the last successful anonymous check.
Advertised read-only

Every Bet Better Data product with its live price (US$), what it contains, coverage (leagues, Line Moves sports, Storylines competitions on sale) and the page to buy or read more, plus the free CC BY 4.0 API. Use it to answer 'what does it cost' or 'which plan do I need'.

get_products input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
get_products annotations
{
  "title": "Products and prices",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_free_picks — Free picks for a league
Advertised by the server during the last successful anonymous check.
Advertised read-only

The free public picks for one league: game, start time (UTC), market, selection, line, the model's chance (percent), fair decimal odds and a confidence word (HIGH, LEAN, LONG-SHOT). Members-only picks are counted, not shown. Free tier, CC BY 4.0.

get_free_picks input schema
{
  "type": "object",
  "required": [
    "league"
  ],
  "properties": {
    "league": {
      "enum": [
        "afl",
        "mlb",
        "nba",
        "nfl",
        "nhl",
        "ncaaf",
        "nrl",
        "ufc",
        "wnba",
        "cricket",
        "tennis/atp",
        "tennis/wta",
        "soccer/epl",
        "soccer/la-liga",
        "soccer/serie-a",
        "soccer/bundesliga",
        "soccer/ligue-1"
      ],
      "type": "string",
      "description": "League path as the public API spells it."
    }
  },
  "additionalProperties": false
}
get_free_picks annotations
{
  "title": "Free picks for a league",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_predicted_scores — Predicted scores
Advertised by the server during the last successful anonymous check.
Advertised read-only

The model's projected final score, margin and total for every upcoming game in a league. Free tier: the public feed (home win chance for the next 3 games only). With a Predictions licence for the league: every game with home, away and draw chances. League codes: nfl, cfb, nba, cbb, wnba, nhl, mlb, afl, nrl, epl, laliga, bundesliga, seriea, ligue1, mls, eflchamp, brasileirao, aleague, worldcup, tennis, ufc, cricket (also ncaaf, ncaab, soccer).

get_predicted_scores input schema
{
  "type": "object",
  "required": [
    "league"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1,
      "description": "Most games to return (default 40)."
    },
    "league": {
      "type": "string",
      "description": "League code, for example nfl, nba, epl, cfb. 'soccer' = every soccer league (free feed)."
    }
  },
  "additionalProperties": false
}
get_predicted_scores annotations
{
  "title": "Predicted scores",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_predictions — Predictions feed (licensed)
Advertised by the server during the last successful anonymous check.
Advertised read-only

The licensed Predictions feed for one league: kind=games (our line, total, win chances and fair prices for every game), kind=props (player projections with over and under chances) or kind=markets (team totals, halves, quarters and other game markets). Needs a Predictions licence covering the league. League codes: nfl, cfb, nba, cbb, wnba, nhl, mlb, afl, nrl, epl, laliga, bundesliga, seriea, ligue1, mls, eflchamp, brasileirao, aleague, worldcup, tennis, ufc, cricket.

get_predictions input schema
{
  "type": "object",
  "required": [
    "league"
  ],
  "properties": {
    "kind": {
      "enum": [
        "games",
        "props",
        "markets"
      ],
      "type": "string",
      "description": "games (default), props or markets."
    },
    "team": {
      "type": "string",
      "description": "Optional: only rows whose teams (or player's team or name) contain this text."
    },
    "limit": {
      "type": "integer",
      "maximum": 200,
      "minimum": 1,
      "description": "Most rows to return (default 50)."
    },
    "league": {
      "type": "string",
      "description": "League code, for example nfl, nba, epl."
    }
  },
  "additionalProperties": false
}
get_predictions annotations
{
  "title": "Predictions feed (licensed)",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_line_moves_sample — Line Moves free sample
Advertised by the server during the last successful anonymous check.
Advertised read-only

A delayed free sample of Line Moves: our calls on which way a line would move, for games that started 3+ hours ago (last 30 days). Shows the call, the line when we called it and our predicted closing line. Free tier.

get_line_moves_sample input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1,
      "description": "Most calls to return (default 25)."
    },
    "sport": {
      "enum": [
        "nfl",
        "nba",
        "soccer",
        "mlb",
        "nhl",
        "tennis",
        "all"
      ],
      "type": "string",
      "description": "nfl, nba, soccer, mlb, nhl, tennis or all (default)."
    }
  },
  "additionalProperties": false
}
get_line_moves_sample annotations
{
  "title": "Line Moves free sample",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_line_moves — Line Moves (licensed)
Advertised by the server during the last successful anonymous check.
Advertised read-only

The licensed Line Moves feed: our open calls on which way a game or player line will move before the start (call, strength, line now, predicted close, our number), newest first. graded=true returns the last 30 days of graded calls instead. Needs Line Moves for the sport.

get_line_moves input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 200,
      "minimum": 1,
      "description": "Most calls to return (default 50)."
    },
    "sport": {
      "enum": [
        "nfl",
        "nba",
        "soccer",
        "mlb",
        "nhl",
        "tennis",
        "all"
      ],
      "type": "string",
      "description": "nfl, nba, soccer, mlb, nhl, tennis or all (default = every sport your plan covers)."
    },
    "graded": {
      "type": "boolean",
      "description": "true = graded calls of the last 30 days."
    }
  },
  "additionalProperties": false
}
get_line_moves annotations
{
  "title": "Line Moves (licensed)",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_bets_feed — Bets feed (licensed)
Advertised by the server during the last successful anonymous check.
Advertised read-only

The licensed Bets feed: the model's selections that fit a proven group, sent before the start, with our chance, the minimum price that still fits, the confidence word and the group in words. graded=true returns the last 30 days graded. Needs the Bets feed.

get_bets_feed input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 200,
      "minimum": 1,
      "description": "Most rows to return (default 50)."
    },
    "graded": {
      "type": "boolean",
      "description": "true = graded selections of the last 30 days."
    },
    "league": {
      "type": "string",
      "description": "Optional league or board filter, for example nfl or epl."
    }
  },
  "additionalProperties": false
}
get_bets_feed annotations
{
  "title": "Bets feed (licensed)",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_storylines_on_sale — Storylines competitions
Advertised by the server during the last successful anonymous check.
Advertised read-only

The competitions Storylines covers right now (each one is on sale only while it passes our accuracy checks).

get_storylines_on_sale input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
get_storylines_on_sale annotations
{
  "title": "Storylines competitions",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_storylines_games — Storylines games for a day
Advertised by the server during the last successful anonymous check.
Advertised read-only

Upcoming games Storylines has checked stats for, for one sport and day (US Eastern date). Use the team names exactly as returned when you ask for facts.

get_storylines_games input schema
{
  "type": "object",
  "required": [
    "sport"
  ],
  "properties": {
    "date": {
      "type": "string",
      "description": "Optional YYYY-MM-DD; default = the next day with games (up to 4 days ahead)."
    },
    "sport": {
      "type": "string",
      "description": "Sport key, for example nfl, nba, nhl, mlb, ncaaf, soccer, cricket."
    }
  },
  "additionalProperties": false
}
get_storylines_games annotations
{
  "title": "Storylines games for a day",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_storylines_facts — Storylines stat facts
Advertised by the server during the last successful anonymous check.
Advertised read-only

Checked sport-stat facts (plain sentences with the stat, value and as-of date) for one game (home + away), or with Storylines Pro or Publisher for one player or team. Stats only: no prices, picks or chances. Free: 3 facts a game; Creator 12; Pro and Publisher 30.

get_storylines_facts input schema
{
  "type": "object",
  "required": [
    "sport"
  ],
  "properties": {
    "away": {
      "type": "string",
      "description": "Away team (for a game)."
    },
    "home": {
      "type": "string",
      "description": "Home team, as get_storylines_games lists it (for a game)."
    },
    "kind": {
      "enum": [
        "matchup",
        "player",
        "team"
      ],
      "type": "string",
      "description": "matchup (default), player or team. player and team need Storylines Pro or Publisher."
    },
    "team": {
      "type": "string",
      "description": "Soccer player only: his club, so we can check the competition is covered."
    },
    "sport": {
      "type": "string",
      "description": "Sport key, for example nfl, nba, nhl, mlb, ncaaf, soccer, cricket."
    },
    "entity": {
      "type": "string",
      "description": "The player or team name (kind player or team)."
    }
  },
  "additionalProperties": false
}
get_storylines_facts annotations
{
  "title": "Storylines stat facts",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_my_plan — Your plan
Advertised by the server during the last successful anonymous check.
Advertised read-only

What this connection is signed in as: the leagues the Predictions licence covers, the Storylines plan and today's facts calls left, and where to add more.

get_my_plan input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
get_my_plan annotations
{
  "title": "Your plan",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

3 advertised

week_preview — This week's predicted scores

Advertised by the server during the last successful anonymous check.

Predicted scores for a league's upcoming games, and the games the model is most sure about.

league
League code, for example nfl (required)
game_preview — Game preview from checked stats

Advertised by the server during the last successful anonymous check.

A short preview of one game written only from Bet Better Storylines facts.

sport
nfl, nba, nhl, mlb, soccer ... (required)
home
Home team (required)
away
Away team (required)
league_board — Model board for a league

Advertised by the server during the last successful anonymous check.

Every game in a league with our projected score and win chance, sorted by start time.

league
League code, for example nba (required)

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
700 ms
95th percentile latency
700 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 700 ms · metadata changed · 12 tool(s), 3 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http bet-better-data-mcp https://betbetter.world/mcp/free

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add bet-better-data-mcp --url https://betbetter.world/mcp/free

Cursor

Merge this server into .cursor/mcp.json in your project, then enable bet-better-data-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "bet-better-data-mcp": {
      "url": "https://betbetter.world/mcp/free"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "bet-better-data-mcp": {
      "type": "streamableHttp",
      "url": "https://betbetter.world/mcp/free",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start bet-better-data-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "bet-better-data-mcp": {
      "type": "http",
      "url": "https://betbetter.world/mcp/free"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http bet-better-data-mcp https://betbetter.world/mcp/free

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "bet-better-data-mcp": {
      "url": "https://betbetter.world/mcp/free"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "bet-better-data-mcp": {
      "serverUrl": "https://betbetter.world/mcp/free"
    }
  }
}

Let your agent find its tools

Find servers like Bet Better Data MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.