bet-mcp
# 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):
```bash
npm install
```
2. Copy `.env.example` to `.env` and provide your keys:
```bash
cp .env.example .env
# edit the file with FOOTBALL_DATA_TOKEN and ODDS_API_KEY
```
3. Run locally:
```bash
# 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:
```bash
npm run build
npm start
```
5. Deploy on [glama.ai](https://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.
## 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.
TDQS
Scored across 5 tools
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.
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.
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.
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.