MCP Server Setup
sfs-mcp exposes Scottfree Sports data as Model Context Protocol tools for AI assistants. Premium subscribers can ask an assistant for model research, current odds, line movement, historical results, summaries, public consensus, weather, scores, injuries, rosters, and prediction-market context.
The assistant supplies the reasoning and writing. Scottfree Sports supplies the data tools.
Access
| Product | MCP access |
|---|---|
| Scottfree Sports Data | No |
| Scottfree Sports Basic | No |
| Scottfree Sports Premium | Yes |
If you need Premium, view pricing.
Install
The MCP server ships with the Python CLI package.
Requires Python 3.11 or newer:
python3 --version
python3 -m pip install --upgrade scottfree-sports-cli
Verify:
sfs --version
which sfs-mcp
Your Scottfree Sports API key should look like:
sk_alphapysports_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Find it on the Account page:
https://sports-app.scottfreellc.com/app/account
What The MCP Server Can Do
The server exposes 16 public customer tools.
| Tool | Parameters | Purpose |
|---|---|---|
get_daily_brief | sport | Daily model research brief for the slate |
get_predictions | sport, model_type | Current slate predictions and line fields |
get_results | sport, model_type, limit | Recent graded results |
get_summary | sport, model_type | Model performance summary |
get_odds | sport | Current odds |
get_sports | none | Supported sports and model types |
get_account_info | none | Customer account details |
get_usage | none | Monthly API quota usage |
get_kalshi_markets | sport | Kalshi market prices |
get_polymarket_odds | sport | Polymarket market odds |
compare_market_odds | sport, model_type | Model predictions plus Kalshi/Polymarket context |
get_game_weather | sport | Outdoor venue weather |
get_live_scores | sport, date | Live or same-day scores through BALLDONTLIE |
get_injuries | sport | Injury reports through BALLDONTLIE GOAT tier |
get_players | sport, team_id, search, per_page | Player rosters through BALLDONTLIE |
get_betting_consensus | sport | Covers public betting consensus |
Sports:
mlb, nba, nfl, nhl, ncaaf, ncaab
Model types:
over_under, won_on_points, won_on_spread
For moneyline and spread, probabilities are home-team relative. For over/under, probabilities are over-relative.
Tool Call Examples
Your assistant calls tools for you. These examples show the exact argument shape each public tool expects.
get_daily_brief({"sport":"mlb"})
get_predictions({"sport":"mlb","model_type":"won_on_points"})
get_results({"sport":"mlb","model_type":"won_on_points","limit":25})
get_summary({"sport":"mlb","model_type":"won_on_points"})
get_odds({"sport":"mlb"})
get_sports({})
get_account_info({})
get_usage({})
get_kalshi_markets({"sport":"nfl"})
get_polymarket_odds({"sport":"nba"})
compare_market_odds({"sport":"mlb","model_type":"won_on_points"})
get_game_weather({"sport":"mlb"})
get_live_scores({"sport":"nba","date":"2026-05-23"})
get_injuries({"sport":"nba"})
get_players({"sport":"nba","search":"James","per_page":10})
get_betting_consensus({"sport":"mlb"})
Setup - Claude Desktop
Claude Desktop runs local command MCP servers well.
- Open Claude Desktop.
- Go to Settings, Developer, Edit Config.
- Add this server config:
{
"mcpServers": {
"scottfree-sports": {
"command": "sfs-mcp",
"env": {
"SFS_API_KEY": "sk_alphapysports_PASTE_YOUR_KEY",
"SFS_API_URL": "https://sports-api.scottfreellc.com"
}
}
}
}
- Fully quit and restart Claude Desktop.
- Start a new chat and ask: "List the Scottfree Sports tools you can use."
If Claude Desktop cannot find sfs-mcp, use the full path:
which sfs-mcp
Then set:
"command": "/Users/you/.local/bin/sfs-mcp"
Config file locations:
| OS | Path |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
Setup - Claude Code
claude mcp add scottfree-sports sfs-mcp \
--env SFS_API_KEY=sk_alphapysports_PASTE_YOUR_KEY \
--env SFS_API_URL=https://sports-api.scottfreellc.com
Verify:
claude mcp list
Then start a new Claude Code session and ask:
Show me today's MLB moneyline model research and current odds.
Setup - Cursor Or Other Local MCP Hosts
Use the same local command pattern:
{
"mcpServers": {
"scottfree-sports": {
"command": "sfs-mcp",
"env": {
"SFS_API_KEY": "sk_alphapysports_PASTE_YOUR_KEY",
"SFS_API_URL": "https://sports-api.scottfreellc.com"
}
}
}
}
Some hosts require args instead of a single command. If so, use:
{
"command": "python3",
"args": ["-m", "sflow_cli.mcp_server"],
"env": {
"SFS_API_KEY": "sk_alphapysports_PASTE_YOUR_KEY",
"SFS_API_URL": "https://sports-api.scottfreellc.com"
}
}
Setup - ChatGPT
ChatGPT custom MCP support is managed through OpenAI's app/connector flow and may require developer mode, workspace approval, or a remote MCP server. OpenAI's current help docs state that local MCP servers are not directly connected in ChatGPT; remote MCP or a supported tunnel/app flow is required.
Use Scottfree Sports with ChatGPT only if your ChatGPT plan and workspace support custom MCP apps/connectors. See OpenAI's docs:
For most customers today, Claude Desktop or Claude Code is the fastest path for local sfs-mcp.
Optional BALLDONTLIE Key
The core Scottfree Sports tools do not require BALLDONTLIE. These tools do:
| Tool | BALLDONTLIE requirement |
|---|---|
get_live_scores | BALLDONTLIE key |
get_players | BALLDONTLIE key |
get_injuries | BALLDONTLIE GOAT tier |
Configure:
sfs config set --balldontlie-api-key YOUR_BALLDONTLIE_KEY --use-keyring
If no BALLDONTLIE key is configured, those tools return a clear BALLDONTLIE API key not configured message instead of failing silently.
Tool Details
get_daily_brief
Parameters:
| Name | Type | Required | Notes |
|---|---|---|---|
sport | string | Yes | Best for active slate sports such as mlb, nba, nhl |
Returns a structured daily model brief across over/under and spread markets. Includes model pick labels, model probability, market-implied probability, signed Delta(Model-Implied), and model-position counts.
Good prompts:
Show me today's MLB daily brief. Sort the biggest model-vs-implied deltas first.
For tonight's NBA games, summarize where the model disagrees most with the market and explain what other context I should check.
get_predictions
Parameters:
| Name | Type | Required |
|---|---|---|
sport | string | Yes |
model_type | string | Yes |
Returns current slate prediction rows and line fields.
Good prompts:
Get MLB moneyline predictions and explain the biggest difference between BLEND and IMPLIED.
Get NHL over/under predictions. For each game, show the over probability, implied probability, and current total.
get_results
Parameters:
| Name | Type | Required | Default |
|---|---|---|---|
sport | string | Yes | |
model_type | string | Yes | |
limit | integer | No | 100 |
Returns recent graded result rows. Useful for checking whether a model has been running hot or cold recently.
get_summary
Parameters:
| Name | Type | Required |
|---|---|---|
sport | string | Yes |
model_type | string | Yes |
Returns the summary table for all model columns, including win percentage and recent windows when available.
get_odds
Parameters:
| Name | Type | Required |
|---|---|---|
sport | string | Yes |
Returns current odds and line fields for the sport.
get_sports
No parameters. Returns supported sports and model types.
get_account_info
No parameters. Returns current account, plan, subscription status, and monthly limit.
get_usage
No parameters. Returns monthly request count, limit, remaining requests, tier, and reset date.
get_kalshi_markets
Parameters:
| Name | Type | Required |
|---|---|---|
sport | string | Yes |
Returns Kalshi prediction-market data when available.
get_polymarket_odds
Parameters:
| Name | Type | Required |
|---|---|---|
sport | string | Yes |
Returns compact Polymarket event and market data.
compare_market_odds
Parameters:
| Name | Type | Required | Default |
|---|---|---|---|
sport | string | Yes | |
model_type | string | No | won_on_spread |
Returns Scottfree predictions, Kalshi markets, and Polymarket markets in one payload.
get_game_weather
Parameters:
| Name | Type | Required |
|---|---|---|
sport | string | Yes |
Best for outdoor sports: mlb, nfl, ncaaf.
get_live_scores
Parameters:
| Name | Type | Required | Notes |
|---|---|---|---|
sport | string | Yes | nba, nfl, mlb, nhl |
date | string | No | YYYY-MM-DD; defaults to today |
Requires BALLDONTLIE key.
get_injuries
Parameters:
| Name | Type | Required |
|---|---|---|
sport | string | Yes |
Requires BALLDONTLIE GOAT tier.
get_players
Parameters:
| Name | Type | Required | Default |
|---|---|---|---|
sport | string | Yes | |
team_id | integer | No | |
search | string | No | |
per_page | integer | No | 25 |
Requires BALLDONTLIE key.
get_betting_consensus
Parameters:
| Name | Type | Required |
|---|---|---|
sport | string | Yes |
Returns public betting consensus from Covers.
Example Premium Session
Try this sequence in Claude Desktop or Claude Code:
You are helping me research today's MLB slate. Use Scottfree Sports tools only as data sources. Do not invent missing data.
1. Call get_daily_brief for MLB.
2. Call get_predictions for MLB moneyline.
3. Call get_odds for MLB.
4. Call get_summary for MLB moneyline.
5. If useful, call get_betting_consensus and get_game_weather.
6. Present a table with game time, matchup, current line, BLEND probability, IMPLIED probability, Delta(Model-Implied), and any notable context.
7. Separate model disagreement from betting recommendation. Tell me what is data-backed and what is uncertain.
For multi-tool examples, see MCP Workflows. For a longer walkthrough, see the Premium MCP Demo.
Troubleshooting
sfs-mcp: command not found
Install or upgrade:
python3 -m pip install --upgrade scottfree-sports-cli
Then locate it:
which sfs-mcp
Use the full path in your MCP config if your assistant cannot find it.
The server starts but every tool returns 401
The API key is missing, revoked, expired, or copied incorrectly. Verify in a terminal:
SFS_API_KEY=sk_alphapysports_PASTE_YOUR_KEY sfs account info
The server starts but tools return 403
Your key is valid but the subscription tier does not allow MCP. MCP is Premium-only.
Claude Desktop does not show the tools
Fully quit and restart Claude Desktop. On macOS, use Cmd+Q; closing the window is not enough.
Scores or injuries fail
Core Scottfree tools should still work. Scores, players, and injuries use BALLDONTLIE and need your own BALLDONTLIE key. Injuries require their GOAT tier.
Answers feel stale
Predictions refresh after scheduled pipeline runs. Ask the assistant to call get_predictions, then inspect the predictions_date field.
Sports Docs