Sports Probabilities MCP
Monte Carlo playoff, title and relegation odds for the NFL, MLB and 17 soccer leagues, plus model-vs-market edge against live Kalshi prices.
Documentation
Sports Probabilities MCP - NFL, MLB & Soccer Odds for AI Agents (commodus67/sports-probabilities-mcp) Actor
Monte Carlo win, playoff and title probabilities for NFL, MLB and soccer leagues, plus model-vs-market edge against live Kalshi prices. Ask in plain language from Claude, ChatGPT or Cursor. No API key.
- URL: https://apify.com/commodus67/sports-probabilities-mcp.md
- Developed by: ELIO LIBERATORE (community)
- Categories:
- Stats: 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- User rating: No ratings yet
Pricing
from $50.00 / 1,000 probability reads
This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event
What's an Apify Actor?
Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows. In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours, and optionally produces a well-defined JSON output, datasets with results, or files in key-value store. In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server. Actors are written with capital "A".
How to integrate an Actor?
If asked about integration, you help developers integrate Actors into their projects. You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready. The best way to integrate Actors is as follows.
- AI agents and MCP clients — the Apify MCP server at
https://mcp.apify.com(remote, streamable HTTP, OAuth on first use). - Agentic workflows and local Actor development — Agent Skills with the Apify CLI:
npm install -g apify-cli, thenapify login. - JavaScript/TypeScript projects — the official JS/TS client:
npm install apify-client. - Python projects — the official Python client:
pip install apify-client. - Any other language — the REST API.
For usage examples, see the API section below.
For more details, see Apify documentation as Markdown index and Markdown full-text.
README
Sports Probabilities MCP — NFL, MLB & Soccer Odds for AI Agents
Ask your AI assistant what a team's odds actually are, and get a number that came from a simulation rather than a guess.
This is a Model Context Protocol (MCP) server. Connect it to Claude, ChatGPT, Cursor or any other MCP client and you can ask, in plain language:
- "What are the Chiefs' playoff odds right now?"
- "Rank the Premier League by title probability, not by points."
- "Where does your model disagree most with Kalshi on NFL playoff qualifiers?"
- "Re-run the NFL model trusting current records more and show me who moves."
Behind it sit three published Monte Carlo Actors that replay every remaining game on the real schedule, tens of thousands of times. This server is the conversational front door to them, so the numbers you get here are the same numbers those Actors produce — there is no second, divergent model hiding in here.
No API key for any sports data provider. No scraping on your side. Just standings, schedules and probabilities.
What it covers
| Sport | Teams | Probabilities |
|---|---|---|
| NFL | all 32 | playoffs, division, wild card, No. 1 seed |
| MLB | all 30 | postseason, division, wild card, top seed |
| Soccer | 17 leagues | title, top four, continental qualification, playoff, relegation |
Soccer leagues: Premier League, EFL Championship, LaLiga, Serie A, Bundesliga, Ligue 1, Eredivisie, Primeira Liga, Süper Lig, Belgian Pro League, Scottish Premiership, Brasileirão, Liga MX, Liga Profesional (Argentina), Primera A (Colombia), MLS, Austrian Bundesliga. Any other ESPN soccer slug works too.
Tools
| Tool | What it answers |
|---|---|
get_team_probabilities | One team: every probability, current record, projected finish, and where it ranks. |
get_league_probabilities | The whole league ordered by probability instead of by points or record. |
compare_model_vs_market | Where the model disagrees with live Kalshi prices, with net edge after fees and a quarter-Kelly stake. |
run_scenario | A fresh simulation under your own model assumptions, showing who moves and by how much. |
get_probability_history | How a team's probability moved across the season, from an archived run history. |
Model vs market
compare_model_vs_market pulls live contract prices from Kalshi's public API — KXNFLPLAYOFF for
the NFL and KXMLBPLAYOFFS for MLB — and for every team reports:
- the model probability and the market's implied probability, and the gap between them;
- which side of the contract is better value, YES or NO;
- the fee, using Kalshi's taker schedule (a parabola in the contract price, largest at 50 cents);
- expected value per contract net of that fee, and the break-even probability;
- a quarter-Kelly stake, clipped by a per-position ceiling and then by a portfolio ceiling, so the suggested positions actually fit inside one bankroll.
For soccer, or to compare against a bookmaker instead of an exchange, pass your own prices in
marketProbabilities and the same arithmetic runs on those.
This is research output, not betting advice. Probabilities are estimates from a model, market prices move, and nothing here knows anything about your circumstances.
Connecting it
Add the Actor's Standby URL to your MCP client, with an Apify API token as a bearer token:
{
"mcpServers": {
"sports-probabilities": {
"url": "https://commodus67--sports-probabilities-mcp.apify.actor/mcp",
"headers": {
"Authorization": "Bearer YOUR_APIFY_API_TOKEN"
}
}
}
}
The transport is Streamable HTTP and the server is stateless, so any instance can answer any request.
Running it as an ordinary Actor
Starting it as a normal run — not in Standby — answers one question and writes it to the dataset. It is a quick way to check a build, and it is useful on a schedule:
{ "sport": "nfl", "limit": 40 }
{ "sport": "soccer", "league": "Premier League", "metric": "relegation" }
How fresh the numbers are
Simulations are cached for a few hours and shared across every instance of the server, because
probabilities barely move between games. Every answer carries a source block telling you when the
model actually ran, how many simulations it used, and whether the answer came from cache. A
run_scenario call always runs a fresh simulation.
Keywords
sports probabilities API, NFL playoff odds, MLB playoff odds, soccer title odds, Monte Carlo simulation, prediction markets, Kalshi, model vs market edge, Kelly criterion, MCP server, AI agent tools, sports analytics, betting odds research, relegation odds, wild card odds.
Actor input Schema
sport (type: string):
Which model to ask. NFL and MLB cover every team in the league; soccer covers 17 competitions, chosen with the league field below.
team (type: string):
Leave empty to get the whole league ranked by probability. Put a team name, city or abbreviation here to get just that team, for example Chiefs, KC or Arsenal.
league (type: string):
Soccer only, ignored for NFL and MLB. A league name or an ESPN slug: Premier League or eng.1, LaLiga or esp.1, Serie A, Bundesliga, Ligue 1, Liga MX, Brasileirao, MLS, and more.
metric (type: string):
Which probability orders the table. NFL and MLB: playoff, division, wildCard, topSeed. Soccer: title, top4, qualify, playoff, relegation.
season (type: integer):
NFL and MLB only. Leave empty for the current season, or set a past year to project that season from where it stood, which is useful for backtesting.
limit (type: integer):
How many teams come back when no single team is named.
holdSeconds (type: integer):
Advanced, and only for an ordinary run. Leave at 0 for a normal smoke test. Set it to something like 120 and the run keeps its web server alive for that long, so you can POST the MCP endpoint on the run's live view URL and check the protocol before connecting a client to Standby.
Actor input object example
{
"sport": "nfl",
"league": "eng.1",
"limit": 40,
"holdSeconds": 0
}
Actor output Schema
probabilities (type: string):
One row per team from the current Monte Carlo run, with the probabilities, the current record and the projected finish.
API
You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.
JavaScript example
import { ApifyClient } from 'apify-client';
// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
token: '<YOUR_API_TOKEN>',
});
// Prepare Actor input
const input = {};
// Run the Actor and wait for it to finish
const run = await client.actor("commodus67/sports-probabilities-mcp").call(input);
// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
console.dir(item);
});
// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs
Python example
from apify_client import ApifyClient
# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")
# Prepare the Actor input
run_input = {}
# Run the Actor and wait for it to finish
run = client.actor("commodus67/sports-probabilities-mcp").call(run_input=run_input)
# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
print(item)
# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start
CLI example
echo '{}' |
apify call commodus67/sports-probabilities-mcp --silent --output-dataset
MCP server setup
{
"mcpServers": {
"apify": {
"type": "http",
"url": "https://mcp.apify.com/?tools=fetch-actor-details,commodus67/sports-probabilities-mcp"
}
}
}
The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an Authorization: Bearer <APIFY_API_TOKEN> header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).
OpenAPI specification
Download the OpenAPI definition: https://api.apify.com/v2/actors/ApH4kzaZfAR5j80o4/builds/9ykZzrGlDbT1WuD5m/openapi.json