Skip to content
On this page

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

ProductMCP access
Scottfree Sports DataNo
Scottfree Sports BasicNo
Scottfree Sports PremiumYes

If you need Premium, view pricing.

Install

The MCP server ships with the Python CLI package.

Requires Python 3.11 or newer:

bash
python3 --version
python3 -m pip install --upgrade scottfree-sports-cli

Verify:

bash
sfs --version
which sfs-mcp

Your Scottfree Sports API key should look like:

text
sk_alphapysports_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Find it on the Account page:

text
https://sports-app.scottfreellc.com/app/account

What The MCP Server Can Do

The server exposes 16 public customer tools.

ToolParametersPurpose
get_daily_briefsportDaily model research brief for the slate
get_predictionssport, model_typeCurrent slate predictions and line fields
get_resultssport, model_type, limitRecent graded results
get_summarysport, model_typeModel performance summary
get_oddssportCurrent odds
get_sportsnoneSupported sports and model types
get_account_infononeCustomer account details
get_usagenoneMonthly API quota usage
get_kalshi_marketssportKalshi market prices
get_polymarket_oddssportPolymarket market odds
compare_market_oddssport, model_typeModel predictions plus Kalshi/Polymarket context
get_game_weathersportOutdoor venue weather
get_live_scoressport, dateLive or same-day scores through BALLDONTLIE
get_injuriessportInjury reports through BALLDONTLIE GOAT tier
get_playerssport, team_id, search, per_pagePlayer rosters through BALLDONTLIE
get_betting_consensussportCovers public betting consensus

Sports:

text
mlb, nba, nfl, nhl, ncaaf, ncaab

Model types:

text
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.

text
get_daily_brief({"sport":"mlb"})
text
get_predictions({"sport":"mlb","model_type":"won_on_points"})
text
get_results({"sport":"mlb","model_type":"won_on_points","limit":25})
text
get_summary({"sport":"mlb","model_type":"won_on_points"})
text
get_odds({"sport":"mlb"})
text
get_sports({})
text
get_account_info({})
text
get_usage({})
text
get_kalshi_markets({"sport":"nfl"})
text
get_polymarket_odds({"sport":"nba"})
text
compare_market_odds({"sport":"mlb","model_type":"won_on_points"})
text
get_game_weather({"sport":"mlb"})
text
get_live_scores({"sport":"nba","date":"2026-05-23"})
text
get_injuries({"sport":"nba"})
text
get_players({"sport":"nba","search":"James","per_page":10})
text
get_betting_consensus({"sport":"mlb"})

Setup - Claude Desktop

Claude Desktop runs local command MCP servers well.

  1. Open Claude Desktop.
  2. Go to Settings, Developer, Edit Config.
  3. Add this server config:
json
{
  "mcpServers": {
    "scottfree-sports": {
      "command": "sfs-mcp",
      "env": {
        "SFS_API_KEY": "sk_alphapysports_PASTE_YOUR_KEY",
        "SFS_API_URL": "https://sports-api.scottfreellc.com"
      }
    }
  }
}
  1. Fully quit and restart Claude Desktop.
  2. 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:

bash
which sfs-mcp

Then set:

json
"command": "/Users/you/.local/bin/sfs-mcp"

Config file locations:

OSPath
macOS~/Library/Application Support/Claude/claude_desktop_config.json
Windows%APPDATA%\Claude\claude_desktop_config.json

Setup - Claude Code

bash
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:

bash
claude mcp list

Then start a new Claude Code session and ask:

text
Show me today's MLB moneyline model research and current odds.

Setup - Cursor Or Other Local MCP Hosts

Use the same local command pattern:

json
{
  "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:

json
{
  "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:

ToolBALLDONTLIE requirement
get_live_scoresBALLDONTLIE key
get_playersBALLDONTLIE key
get_injuriesBALLDONTLIE GOAT tier

Configure:

bash
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:

NameTypeRequiredNotes
sportstringYesBest 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:

text
Show me today's MLB daily brief. Sort the biggest model-vs-implied deltas first.
text
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:

NameTypeRequired
sportstringYes
model_typestringYes

Returns current slate prediction rows and line fields.

Good prompts:

text
Get MLB moneyline predictions and explain the biggest difference between BLEND and IMPLIED.
text
Get NHL over/under predictions. For each game, show the over probability, implied probability, and current total.

get_results

Parameters:

NameTypeRequiredDefault
sportstringYes
model_typestringYes
limitintegerNo100

Returns recent graded result rows. Useful for checking whether a model has been running hot or cold recently.

get_summary

Parameters:

NameTypeRequired
sportstringYes
model_typestringYes

Returns the summary table for all model columns, including win percentage and recent windows when available.

get_odds

Parameters:

NameTypeRequired
sportstringYes

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:

NameTypeRequired
sportstringYes

Returns Kalshi prediction-market data when available.

get_polymarket_odds

Parameters:

NameTypeRequired
sportstringYes

Returns compact Polymarket event and market data.

compare_market_odds

Parameters:

NameTypeRequiredDefault
sportstringYes
model_typestringNowon_on_spread

Returns Scottfree predictions, Kalshi markets, and Polymarket markets in one payload.

get_game_weather

Parameters:

NameTypeRequired
sportstringYes

Best for outdoor sports: mlb, nfl, ncaaf.

get_live_scores

Parameters:

NameTypeRequiredNotes
sportstringYesnba, nfl, mlb, nhl
datestringNoYYYY-MM-DD; defaults to today

Requires BALLDONTLIE key.

get_injuries

Parameters:

NameTypeRequired
sportstringYes

Requires BALLDONTLIE GOAT tier.

get_players

Parameters:

NameTypeRequiredDefault
sportstringYes
team_idintegerNo
searchstringNo
per_pageintegerNo25

Requires BALLDONTLIE key.

get_betting_consensus

Parameters:

NameTypeRequired
sportstringYes

Returns public betting consensus from Covers.

Example Premium Session

Try this sequence in Claude Desktop or Claude Code:

text
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:

bash
python3 -m pip install --upgrade scottfree-sports-cli

Then locate it:

bash
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:

bash
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.

See Also

Sports model data and research tools