soccer-mcp
One-call soccer toolkit as an MCP server: fixtures and results for any day (all comps), bet settlement vs real scorelines, de-vig (power method)…
What it can do
- Get Fixtures: All football fixtures of one day (YYYY-MM-DD) across every competition, with scores when played. Args: date: ISO date, e.g. 2026-09-20 league: optional case-insensitive substring filter
- Get Results: Finished matches with final score for one day — the input for settling bets. Args: date: ISO date, e.g. 2026-09-20 league: optional substring filter on the competition name
- Settle Picks: Settle a list of picks against the real scorelines and return per-pick results plus totals. Each pick: {"home": "...", "away": "...", "market": "O2.5", "odds": 1.75, "date": "2026-09-20"
What data it sees
Do you need an account
No: the server works without sign-in
One-call soccer toolkit as an MCP server: fixtures and results for any day (all comps), bet settlement vs real scorelines, de-vig (power method), EV/minimum-odds/Kelly pricing, parlay math — plus Team-Mood: LLM-scored news sentiment per club with sources, hard absences vs soft noise, freshness decay. Deterministic odds math + mood indicators, not betting advice. Pay-per-call on Apify, $0.005/tool call.
How to connect
How to connect soccer-mcp to Claude
The server address to paste into Claude settings:
https://soccer-mcp-buri.run.tools
- Open Claude (claude.ai or the desktop app).
- Go to Settings → Connectors.
- Click Add custom connector.
- Paste the server address copied below into Remote MCP server URL and click Add.
- In a chat, click + → Connectors and switch the new connector on.
Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.
Authorization
After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.
How to connect soccer-mcp to ChatGPT
The server address to paste into ChatGPT settings:
https://soccer-mcp-buri.run.tools
- Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
- Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
- Open Settings → Connectors and click Create.
- Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
- Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
- In a new chat open + → Apps/Connectors and enable the connector.
OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.
Authorization
On first use ChatGPT opens the service's sign-in window. Sign in and approve access.
How to connect soccer-mcp to Cursor
The server address to paste into Cursor settings:
https://soccer-mcp-buri.run.tools
Fastest: click Open in Cursor below and confirm the prompt.
Manually:
- In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
- Paste the JSON copied below into
~/.cursor/mcp.json(per project:.cursor/mcp.jsonin the repo root). - Save the file. The server appears in the MCP list; authorize it there if asked.
Authorization
If the service needs sign-in, an authorize button appears next to the server in the MCP list.
Server tool list (8)
Raw names from tools/list. Only developers need these.
| get_fixtures | All football fixtures of one day (YYYY-MM-DD) across every competition, with scores when played. Args: date: ISO date, e.g. 2026-09-20 league: optional case-insensitive substring filter on the competition name only_finished: only return matches with a final score |
| get_results | Finished matches with final score for one day — the input for settling bets. Args: date: ISO date, e.g. 2026-09-20 league: optional substring filter on the competition name |
| settle_picks | Settle a list of picks against the real scorelines and return per-pick results plus totals. Each pick: {"home": "...", "away": "...", "market": "O2.5", "odds": 1.75, "date": "2026-09-20"} Supported markets: O/U lines (1.0-4.5, quarter lines included), BTTS, 1X2, 2X2, DC. Team names are matched fuzzily against the day's fixtures, so slight spelling differences are fine. Args: picks: list of picks, each needing home, away, market and odds date: fallback ISO date when a pick carries no date of its own |
| devig_market | Strip the bookmaker margin from one market's prices and return the market's own probabilities. Uses the **power method**, which loads the margin onto the longshots the way bookmakers do — proportional de-vigging (`method="proportional"`) spreads it evenly and overstates them by around 1.5 percentage points on an 4.20 outsider. Args: prices: the decimal prices of all outcomes of the same market, e.g. [1.75, 3.6, 4.4] for 1X2 method: "power" (default) or "proportional" |
| evaluate_price | Judge a price against your own probability: fair odds, EV, minimum odds and a scaled Kelly stake. Args: probability: your probability for the outcome, e.g. 0.55 (not 55) odds: the decimal price on offer, e.g. 1.90 margin_pct: how much better than fair a price must be before you take it kelly_fraction: stake scaling; 0.25 means quarter Kelly tax_pct: share of the stake the book passes on (Germany: 0.053) — it comes off the payout, so it raises the minimum price and lowers the stake |
| parlay_math | Combined odds and EV of an accumulator, plus how fast the edge decays with each leg. Args: legs: e.g. [{"probability": 0.6, "odds": 1.8}, {"probability": 0.5, "odds": 2.0}] |
| engine_status | Report whether the optional private analysis engine and private plugins are wired up. |
| get_team_sentiment | News-sentiment per team (krypto-style team mood): net score -1..+1, level (rot/gelb/gruen), trend, hard absences, factor list with sources. Args: date: ISO date (YYYY-MM-DD). Default: today (UTC). teams: optional list — return only teams whose name contains one of these substrings (case-insensitive), e.g. ["Bayern", "Union"]. |