SportIntel MCP Server
Planned support for MLB sports analytics and fantasy projections (roadmap feature).
Provides AI-powered NBA fantasy sports analytics including player projections, lineup optimization, live odds comparison, and explainable DFS recommendations for NBA games.
Planned support for NHL sports analytics and fantasy projections (roadmap feature).
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@SportIntel MCP Serveroptimize my NBA lineup for tonight's main slate"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
π SportIntel MCP Server
AI-Powered Sports Intelligence for Claude & AI Agents
SportIntel MCP is the first AI-powered sports analytics MCP server, bringing explainable Daily Fantasy Sports (DFS) intelligence to Claude and other AI agents. Built on the Model Context Protocol, it provides real-time player projections, lineup optimization, live odds aggregation, and SHAP-based explainability.
β¨ Features
π― Core Capabilities (MVP)
Tool | Description | Use Case |
| AI-powered DFS projections with SHAP explainability | Get projected fantasy points for all players in today's slate |
| Multi-objective lineup optimization | Generate optimal cash/GPP lineups under salary cap |
| Real-time odds from 10+ sportsbooks | Compare spreads, totals, and find best available lines |
| SHAP/LIME explanations for projections | Understand why the model recommends a player |
π₯ Key Differentiators
β First MCP Server for Sports Analytics - Zero competition in MCP ecosystem
π§ Explainable AI - SHAP values show feature importance (not a black box)
π° 10x Cost Advantage - Free tier vs $50-200/month DFS subscription sites
π Multi-Source Intelligence - Aggregates odds, stats, news, injuries
β‘ Real-Time - Live odds updates, instant injury impact analysis
π€ AI-Native - Built for Claude/AI agent consumption
Related MCP server: betting-brain-v3
π Quick Start
Installation
# Clone repository
git clone https://github.com/roizenlabs/sportintel-mcp.git
cd sportintel-mcp
# Install dependencies
npm install
# Set up environment
cp .env.example .env
# Edit .env with your API keysConfiguration for Claude Desktop
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"sportintel": {
"command": "node",
"args": ["/path/to/sportintel-mcp/dist/main.js"],
"env": {
"ODDS_API_KEY": "your_api_key_here"
}
}
}
}Run Standalone
# Development mode
npm run dev
# Production build
npm run build
npm startπ Usage Examples
Example 1: Get NBA Player Projections
Claude Prompt:
Get AI projections for tonight's NBA main slate with explainabilityMCP Call:
{
"tool": "get_player_projections",
"arguments": {
"sport": "NBA",
"slate": "main",
"includeExplanations": true
}
}Response:
{
"sport": "NBA",
"slate": "main",
"projections": [
{
"playerName": "LeBron James",
"team": "LAL",
"position": "SF",
"salary": 9500,
"projectedPoints": 48.2,
"floor": 38.6,
"ceiling": 57.8,
"confidence": 0.89,
"value": 5.07,
"explanation": {
"topFactors": [
{
"factor": "recent_ppg",
"impact": +6.2,
"description": "Averaging 32.1 PPG over last 5 games"
},
{
"factor": "vegas_total",
"impact": +3.1,
"description": "230.5 Vegas total (high-scoring game expected)"
}
],
"reasoning": "LeBron is projected above baseline due to elite recent performance and favorable game environment..."
}
}
]
}Example 2: Optimize Lineup
Claude Prompt:
Build me 3 cash game lineups for NBA using the projections you just gotMCP Call:
{
"tool": "optimize_lineup",
"arguments": {
"sport": "NBA",
"salaryCap": 50000,
"lineupCount": 3,
"strategy": "cash",
"projections": [/* from previous call */]
}
}Response:
{
"lineups": [
{
"rank": 1,
"players": [
{"playerName": "Giannis Antetokounmpo", "salary": 11500, "projectedPoints": 54.2},
{"playerName": "Damian Lillard", "salary": 9000, "projectedPoints": 42.1}
// ... 6 more players
],
"totalSalary": 49800,
"projectedPoints": 283.5,
"riskScore": 22,
"estimatedOwnership": 18.5
}
]
}Example 3: Compare Odds Across Books
Claude Prompt:
Show me the best odds for tonight's Lakers vs Warriors gameMCP Call:
{
"tool": "get_live_odds",
"arguments": {
"sport": "NBA",
"markets": ["spreads", "totals", "h2h"]
}
}ποΈ Architecture
βββββββββββββββββββββββββββββββββββββββββββββββββββ
β Claude Desktop / AI Agent β
βββββββββββββββββββ¬ββββββββββββββββββββββββββββββββ
β MCP Protocol
βββββββββββββββββββΌββββββββββββββββββββββββββββββββ
β SportIntel MCP Server β
β ββββββββββββββββββββββββββββββββββββββββββββ β
β β Tool Registry β β
β β - Player Projections β β
β β - Lineup Optimizer β β
β β - Live Odds β β
β β - Explain Recommendation β β
β ββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββ¬ββββββββββββββββββββββββββββββββ
β
βββββββββββββ΄ββββββββββββ¬βββββββββββββ
β β β
βββββββΌβββββββ ββββββββββββΌββ βββββββΌβββββββββ
β Odds API β β BallDontLieβ β XGBoost β
β (Betting) β β (NBA Stats)β β + SHAP β
ββββββββββββββ ββββββββββββββ ββββββββββββββββTech Stack
Protocol: Model Context Protocol (MCP)
Runtime: Node.js 18+ with TypeScript
ML Framework: XGBoost + SHAP (explainability)
Optimization: Linear Programming (GLPK.js)
Data Sources:
the-odds-api.com - Real-time odds
balldontlie.io - NBA stats
ESPN scraping (via Apify Actor)
π― Apify Challenge Strategy
Why SportIntel MCP Wins
Novel & First-to-Market β
Zero MCP servers for sports analytics on Apify Store
Existing actors are simple scrapers, not intelligence layers
Technical Excellence β
Explainable AI (SHAP/LIME)
Multi-agent architecture
MCP protocol implementation
Real-World Value β
DFS market is $29.3B (2024)
Saves users $50-200/month vs existing subscriptions
Measurable ROI for users
MAU Growth Strategy β
NFL/NBA seasons = guaranteed traffic
Content marketing (YouTube, Reddit, Twitter)
Integration with OpenConductor ecosystem
Revenue Projections
Tier | MAU | Challenge Payout | Pro Subscriptions | Total |
Conservative | 300 | $600 | $150/mo | $750 |
Moderate | 700 | $1,400 | $375/mo | $1,775 |
Aggressive | 1,000+ | $2,000+ | $750/mo | $4,750+ |
Post-Challenge: $19K-81K annual run rate from subscriptions + B2B
π οΈ Development
Project Structure
sportintel-mcp/
βββ src/
β βββ main.ts # Entry point
β βββ mcp-server.ts # MCP protocol handler
β βββ tools/ # MCP tools
β β βββ player-projections.ts
β β βββ lineup-optimizer.ts
β β βββ live-odds.ts
β β βββ explain-recommendation.ts
β βββ models/ # ML models
β β βββ xgboost-trainer.ts
β β βββ explainer.ts
β βββ integrations/ # Data sources
β β βββ odds-api.ts
β β βββ balldontlie.ts
β βββ types/ # TypeScript types
βββ docs/ # Documentation
βββ tests/ # Unit & integration tests
βββ apify/ # Apify Actor configScripts
npm run dev # Development with hot reload
npm run build # Production build
npm test # Run tests
npm run train-model # Train ML modelsAdding a New Tool
Create
src/tools/your-tool.tsextendingBaseToolDefine
MCPToolschemaImplement
execute(args)methodRegister in
src/tools/index.ts
Example:
export class YourTool extends BaseTool {
definition: MCPTool = {
name: "your_tool",
description: "What it does",
inputSchema: { /* Zod schema */ }
};
async execute(args: any) {
// Your logic here
return { success: true };
}
}π Performance
Projection Accuracy: 85% correlation with actual fantasy points (backtested)
Optimization Speed: <2s for 10 lineups, <10s for 150 lineups
API Rate Limits:
Odds API: 500 requests/hour
BallDontLie: 60 requests/minute
Caching: 5-minute TTL for odds, 1-hour for projections
π§ Roadmap
Phase 1: MVP (Weeks 1-2) β
Core MCP server
Player projections tool
Lineup optimizer tool
Live odds tool
SHAP explainability
Phase 2: Growth (Weeks 3-8)
Injury impact analyzer
Prop bet optimizer
Stacking strategy engine
Historical performance database
Webhook integrations
Phase 3: Scale (Month 3+)
NFL support
MLB support
Real-time lineup adjustment
Browser extension
Mobile app
π€ Contributing
We welcome contributions! See CONTRIBUTING.md for guidelines.
Areas We Need Help
NFL projection models
MLB/NHL data sources
Additional explainability methods
Performance optimization
Documentation improvements
π License
MIT License - see LICENSE
π Acknowledgments
Apify Challenge 2025 for the opportunity
Anthropic for Claude and MCP protocol
the-odds-api.com for betting data
balldontlie.io for free NBA stats
SHAP for explainable AI framework
π Contact
Website: sportintel.ai
GitHub: roizenlabs/sportintel-mcp
Twitter: @SportIntelAI
Discord: Join Community
β‘ Quick Links
Built with β€οΈ by RoizenLabs | From railroad diagnostics to AI-powered DFS intelligence
Available Tools
4 toolsexplain_recommendationA
Get detailed explainability for AI projection decisions using SHAP values. Shows which features contributed most to a player's projection and why the model recommends them. Perfect for understanding the 'why' behind projections.
| Name | Required | Description | Default |
|---|---|---|---|
| playerId | Yes | Player ID to explain | |
| sport | Yes | Sport context | |
| explainerType | No | Explainability method | shap |
| includeVisualizations | No | Include waterfall/force plots (base64 images) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses the tool's behavioral traits: it provides SHAP-based explainability for AI decisions, shows feature contributions, and helps understand model reasoning. However, it doesn't mention potential limitations, computational cost, or what happens with different explainerType values beyond the enum options.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly front-loaded with the core purpose in the first sentence, followed by supporting details. Every sentence earns its place by adding value - the second sentence elaborates on what the tool shows, and the third provides usage context. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters with 100% schema coverage but no output schema or annotations, the description is adequate but could be more complete. It explains the tool's purpose well but doesn't describe the return format (e.g., structured data with feature contributions, visualizations as base64). For a tool with no output schema, more detail about what to expect would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds minimal value beyond the schema - it mentions SHAP values (matching the default explainerType) and visualization aspects, but doesn't provide additional semantic context about parameter interactions or usage patterns.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('Get detailed explainability', 'Shows which features contributed most') and resources ('AI projection decisions', 'player's projection'). It distinguishes from siblings by focusing on explainability rather than getting projections, odds, or optimizing lineups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool ('Perfect for understanding the "why" behind projections'), but doesn't explicitly state when not to use it or name specific alternatives. It implies usage when explanation is needed rather than just getting projections.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_live_oddsB
Get real-time betting odds from multiple sportsbooks. Returns current spreads, totals, moneylines, and player props with line movement history. Identifies best available odds across bookmakers.
| Name | Required | Description | Default |
|---|---|---|---|
| sport | Yes | Sport to get odds for | |
| gameIds | No | Specific game IDs (optional, defaults to all upcoming) | |
| markets | No | Markets to include | |
| bookmakers | No | Filter by specific sportsbooks |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but lacks critical behavioral details. It mentions 'real-time' and 'line movement history' but doesn't specify update frequency, rate limits, authentication requirements, or data freshness guarantees. For a tool with no annotation coverage, this leaves significant gaps in understanding operational behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences with zero waste. The first sentence clearly states purpose and output, while the second adds valuable context about odds comparison. Every element serves a purpose, and the description is appropriately front-loaded with core functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter tool with no annotations and no output schema, the description provides adequate purpose clarity but insufficient behavioral context. It covers what the tool does but lacks details on how it behaves operationally, what the return format looks like, or any limitations. The 100% schema coverage helps, but the description should do more to compensate for missing annotations and output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, providing good parameter documentation. The description adds marginal value by implying 'multiple sportsbooks' relates to the bookmakers parameter and 'current spreads, totals, moneylines, and player props' relates to markets. However, it doesn't provide additional syntax, format, or constraint details beyond what the schema already specifies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Get real-time betting odds') and resource ('from multiple sportsbooks'), with detailed output specification ('spreads, totals, moneylines, and player props with line movement history'). It distinguishes from siblings by focusing on odds retrieval rather than projections, recommendations, or lineup optimization.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives is provided. The description mentions 'Identifies best available odds across bookmakers,' which implies a comparison function, but doesn't specify when to choose this over other tools like get_player_projections or explain_recommendation. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_player_projectionsB
Get AI-powered DFS player projections with confidence scores and SHAP explainability. Returns projected fantasy points, floor/ceiling ranges, and factors driving each projection.
| Name | Required | Description | Default |
|---|---|---|---|
| sport | Yes | Sport to get projections for | |
| slate | No | DFS slate type | main |
| date | No | ISO 8601 date (defaults to today) | |
| includeExplanations | No | Include SHAP explainability (default: true) | |
| minSalary | No | Filter by minimum salary | |
| maxSalary | No | Filter by maximum salary | |
| positions | No | Filter by positions (e.g., ['PG', 'SG']) | |
| maxPlayers | No | Limit number of players to project (default: 50 for performance) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the tool returns projections with confidence scores and SHAP explainability, but lacks details on permissions, rate limits, data freshness, or error handling, which are critical for a tool with 8 parameters and no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and efficiently lists key return values in a single, well-structured sentence. Every part earns its place by clarifying what the tool delivers without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (8 parameters, no annotations, no output schema), the description is adequate but incomplete. It covers the purpose and return types but lacks behavioral context and output details, making it minimally viable but with clear gaps for effective tool use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds minimal value beyond the schema by implying the tool handles filtering and performance limits, but does not provide additional syntax, format, or usage context for parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Get AI-powered DFS player projections') and resource ('player projections'), distinguishing it from sibling tools like 'explain_recommendation', 'get_live_odds', and 'optimize_lineup' by focusing on projection retrieval rather than explanation, odds, or lineup optimization.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives is provided. The description does not mention any prerequisites, exclusions, or comparisons to sibling tools, leaving the agent to infer usage based on the purpose alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
optimize_lineupA
Generate optimal DFS lineups using linear programming. Supports cash game and tournament strategies, stacking preferences, and player constraints. Returns multiple lineup variations with risk scores.
| Name | Required | Description | Default |
|---|---|---|---|
| sport | Yes | Sport for lineup optimization | |
| projections | Yes | Player projections from get_player_projections | |
| salaryCap | Yes | Total salary cap (e.g., 50000 for DraftKings) | |
| lineupCount | No | Number of lineups to generate (1-150) | |
| strategy | No | Optimization strategy: cash (low risk), tournament (high upside), balanced | balanced |
| constraints | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds some context beyond basic functionality: it mentions the tool 'returns multiple lineup variations with risk scores,' which hints at output behavior, and 'supports cash game and tournament strategies,' indicating different modes. However, it doesn't cover critical aspects like performance characteristics (e.g., computation time), error handling, or data freshness requirements for a complex optimization tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with two sentences that are front-loaded with core functionality. The first sentence covers the main purpose and key features, while the second adds output details. There's no wasted text, though it could be slightly more structured (e.g., separating input and output aspects more clearly).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, nested objects) and lack of annotations and output schema, the description is moderately complete. It covers the tool's purpose and hints at output behavior but lacks details on error conditions, performance, or how results are structured (beyond 'multiple lineup variations with risk scores'). For a sophisticated optimization tool, this leaves gaps in understanding full behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high at 83%, so the baseline is 3. The description adds minimal parameter semantics beyond the schema: it mentions 'stacking preferences' (related to constraints.preferStacks) and 'player constraints' (related to constraints object), but doesn't provide additional meaning for key parameters like projections or salaryCap. It doesn't compensate for the 17% coverage gap in undocumented schema aspects.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('generate optimal DFS lineups using linear programming') and resources ('DFS lineups'), distinguishing it from sibling tools like get_player_projections (which provides input data) or explain_recommendation (which explains outputs). It explicitly mentions the optimization method and key features like cash/tournament strategies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by mentioning 'cash game and tournament strategies' and 'player constraints,' suggesting when different strategies might apply. However, it lacks explicit guidance on when to use this tool versus alternatives like get_player_projections (which provides input data) or explain_recommendation (which explains outputs), and doesn't specify prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
- First observed
explain_recommendation - First observed
get_live_odds - First observed
get_player_projections - First observed
optimize_lineup
TDQS
Scored across 4 tools
Each tool has a clearly distinct purpose with no overlap: explain_recommendation focuses on model explainability, get_live_odds on betting odds, get_player_projections on player forecasts, and optimize_lineup on lineup construction. The descriptions reinforce these unique roles, making tool selection straightforward for an agent.
All tool names follow a consistent verb_noun pattern (explain_recommendation, get_live_odds, get_player_projections, optimize_lineup) with clear, descriptive verbs. There are no deviations in style or convention, ensuring predictable and readable naming throughout the set.
With 4 tools, the count is reasonable for a sports analytics server, covering key areas like projections, odds, explainability, and optimization. It's slightly lean but well-scoped; adding tools for historical data or team-level analysis could enhance completeness without being necessary.
The tools provide solid coverage for DFS and betting workflows, including projection generation, odds retrieval, lineup optimization, and model explainability. Minor gaps exist, such as missing historical performance data or team-level projections, but agents can work effectively with the current surface for core tasks.
Maintenance
Related MCP Connectors
AI-driven DFS lineup optimizer for MLB & NBA β build FanDuel & DraftKings lineups via MCP.
Real-time sports betting data: odds, player props, edges and arbitrage from 35+ books and DFS apps.
Live NFL, MLB, and NBA sports intelligence: injury signals, identity resolution, projections.
Live sports stats and pre-computed analysis for AI assistants across NBA, MLB, NFL, and NHL.
Related MCP Servers
- AlicenseAqualityDmaintenanceProvides AI-powered sports betting intelligence including live odds, injury reports, and documented picks for NBA, NHL, and NCAAB. It enables AI agents to analyze line movements, win rates, and betting edges using real-time data from sportsbettingaianalyzer.com.1124 PyPI5MIT
- AlicenseNot gradedqualityCmaintenanceProvides betting intelligence and analytics tools including exposure, CLV, sharp scoring, live betting, and Fantasy402 integration, running on Cloudflare Edge.8MIT
- AlicenseAqualityDmaintenanceEnables AI agents and sportsbooks to discover, evaluate, and monitor alternative sports leagues with tools for discovery, valuation, fingerprinting, and market data.35MIT
- AlicenseNot gradedqualityBmaintenanceProps-first sports odds API with a hosted MCP server. Live odds and player props (moneyline, spreads, totals) across US sportsbooks, normalized to JSON. Tools: get_odds, get_props, get_events, get_books. API-key auth, free tier.MIT No Attribution