# Bet Better Data

> Predicted scores, win chances and checked sport stats for 29 competitions. Free and licensed tools.

- name: io.github.edushinka/betbetter-mcp
- version: 1.1.0
- connection class: R0 (autonomous)
- trust: 97/100
- quality: 86/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.edushinka%2Fbetbetter-mcp
- tools: https://api.protogrid.dev/v1/servers/io.github.edushinka%2Fbetbetter-mcp/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "betbetter-mcp": {
      "type": "http",
      "url": "https://betbetter.world/mcp/free"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 100
- freshness: 100
- provenance: 90
- drivers: +repository +namespace-matches-repo +website +reachable +uptime-100% +updated-22d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 86/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: 83 (weight 15)

- pass `auth.prm`: Protected Resource Metadata (RFC 9728) published
- pass `auth.as_metadata`: authorization server metadata reachable
- warn `auth.cimd`: only Dynamic Client Registration, deprecated in 2026-07-28 in favour of CIMD
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 12 of 12 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 2,055 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump
- pass `tools.hidden_text`: no hidden text in tool names, descriptions, schemas or annotations

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name
- pass `stability.new_links`: no tool change named a new site

### dependencies: 67 (weight 15)

- fail `deps.known_vulns`: 1 advisory to act on (malicious, or rated high or critical with a fix available): GHSA-mrhx-c7xc-m3w5 in zod@3.25.76 (direct, fixed in 4.6.6); 7 more of lower severity or without a fix
- pass `deps.mcp_sdk_version`: @modelcontextprotocol/sdk 1.32.2, no known advisory
- pass `deps.resolvable`: betbetter-mcp@1.0.1 resolved: 99 packages

- tools: 12, about 2,055 tokens to load them all
- tool set hash: 3cfd8d5f94bf5515d87640c1508a64ec
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.edushinka/betbetter-mcp.svg)](https://protogrid.dev/servers/io.github.edushinka/betbetter-mcp)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Dependencies

- npm betbetter-mcp@1.0.1: resolved, 98 dependencies, MCP SDK @modelcontextprotocol/sdk 1.32.2
  - GHSA-mrhx-c7xc-m3w5 (high) in `` zod@3.25.76 ``, direct, fixed in `` 4.6.6 ``, advisory summary: "Zod can exhaust memory while validating oversized constrained collections" https://osv.dev/vulnerability/GHSA-mrhx-c7xc-m3w5
  - GHSA-jpvv-r467-5p4w (moderate) in `` @hono/node-server@2.1.5 ``, indirect, fixed in `` 2.1.6 ``, advisory summary: "@hono/node-server: Backslash in the request path is parsed as a path separator, bypassing path-based access control at a reverse proxy" https://osv.dev/vulnerability/GHSA-jpvv-r467-5p4w
  - GHSA-qv5m-9pm6-hqp3 (moderate) in `` @hono/node-server@2.1.5 ``, indirect, fixed in `` 2.1.6 ``, advisory summary: "@hono/node-server: Unhandled \`ECONNRESET\` on the socket during an asynchronous WebSocket upgrade crashes the process" https://osv.dev/vulnerability/GHSA-qv5m-9pm6-hqp3
  - GHSA-46wx-v44x-9hh2 (moderate) in `` hono@4.13.13 ``, indirect, fixed in `` 4.13.16 ``, advisory summary: "Hono: \`csrf()\` does not check requests sent by hyperlink auditing (\`text/ping\`)" https://osv.dev/vulnerability/GHSA-46wx-v44x-9hh2
  - GHSA-4h7h-rv7c-7m2v (moderate) in `` hono@4.13.13 ``, indirect, fixed in `` 4.13.16 ``, advisory summary: "Hono: \`validator('form')\` skips validation for \`multipart/form-data\` requests with extra parameters" https://osv.dev/vulnerability/GHSA-4h7h-rv7c-7m2v
  - GHSA-4m76-xfj5-7975 (moderate) in `` hono@4.13.13 ``, indirect, fixed in `` 4.13.16 ``, advisory summary: "Hono: \`mount()\` and \`app.mount()\` can forward a path that bypasses middleware scoped inside the mount prefix" https://osv.dev/vulnerability/GHSA-4m76-xfj5-7975
  - GHSA-h7mg-cq63-vhpq (moderate) in `` hono@4.13.13 ``, indirect, fixed in `` 4.13.16 ``, advisory summary: "Hono: RegExpRouter skips wildcard middleware for some route sets and for paths with an encoded line terminator" https://osv.dev/vulnerability/GHSA-h7mg-cq63-vhpq
  - GHSA-3gg2-335m-rxc6 (low) in `` hono@4.13.13 ``, indirect, fixed in `` 4.13.16 ``, advisory summary: "Hono: \`css\` helper does not escape a closing tag split between the template and an interpolated value, allowing HTML injection" https://osv.dev/vulnerability/GHSA-3gg2-335m-rxc6

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0.

## Remotes

- https://betbetter.world/mcp (streamable-http, auth oauth2, reachable true, uptime30d 1)
- https://betbetter.world/mcp/free (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

- npm betbetter-mcp@1.0.1

## Tools (12)

- `get_bets_feed`: 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_free_picks`: 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_line_moves`: 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_sample`: 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_my_plan`: 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_predicted_scores`: 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_predictions`: 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_products`: 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_storylines_facts`: 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_games`: 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_on_sale`: The competitions Storylines covers right now (each one is on sale only while it passes our accuracy checks).
- `list_leagues`: 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.
