Skip to main content
Glama
roizenlabs

SportIntel MCP Server

by roizenlabs

🏈 SportIntel MCP Server

AI-Powered Sports Intelligence for Claude & AI Agents

Apify Challenge 2025 MCP Server License: MIT

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

get_player_projections

AI-powered DFS projections with SHAP explainability

Get projected fantasy points for all players in today's slate

optimize_lineup

Multi-objective lineup optimization

Generate optimal cash/GPP lineups under salary cap

get_live_odds

Real-time odds from 10+ sportsbooks

Compare spreads, totals, and find best available lines

explain_recommendation

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 keys

Configuration 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 explainability

MCP 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 got

MCP 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 game

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


🎯 Apify Challenge Strategy

Why SportIntel MCP Wins

  1. Novel & First-to-Market βœ…

    • Zero MCP servers for sports analytics on Apify Store

    • Existing actors are simple scrapers, not intelligence layers

  2. Technical Excellence βœ…

    • Explainable AI (SHAP/LIME)

    • Multi-agent architecture

    • MCP protocol implementation

  3. Real-World Value βœ…

    • DFS market is $29.3B (2024)

    • Saves users $50-200/month vs existing subscriptions

    • Measurable ROI for users

  4. 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 config

Scripts

npm run dev          # Development with hot reload
npm run build        # Production build
npm test             # Run tests
npm run train-model  # Train ML models

Adding a New Tool

  1. Create src/tools/your-tool.ts extending BaseTool

  2. Define MCPTool schema

  3. Implement execute(args) method

  4. Register 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



Built with ❀️ by RoizenLabs | From railroad diagnostics to AI-powered DFS intelligence

Available Tools

4 tools
explain_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
playerIdYesPlayer ID to explain
sportYesSport context
explainerTypeNoExplainability methodshap
includeVisualizationsNoInclude waterfall/force plots (base64 images)

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sportYesSport to get odds for
gameIdsNoSpecific game IDs (optional, defaults to all upcoming)
marketsNoMarkets to include
bookmakersNoFilter by specific sportsbooks

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sportYesSport to get projections for
slateNoDFS slate typemain
dateNoISO 8601 date (defaults to today)
includeExplanationsNoInclude SHAP explainability (default: true)
minSalaryNoFilter by minimum salary
maxSalaryNoFilter by maximum salary
positionsNoFilter by positions (e.g., ['PG', 'SG'])
maxPlayersNoLimit number of players to project (default: 50 for performance)

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sportYesSport for lineup optimization
projectionsYesPlayer projections from get_player_projections
salaryCapYesTotal salary cap (e.g., 50000 for DraftKings)
lineupCountNoNumber of lineups to generate (1-150)
strategyNoOptimization strategy: cash (low risk), tournament (high upside), balancedbalanced
constraintsNo

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 4 tool updates
    • First observedexplain_recommendation
    • First observedget_live_odds
    • First observedget_player_projections
    • First observedoptimize_lineup

TDQS

A3.7/5.0

Scored across 4 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness4/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Provides 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.
    11
    24 PyPI
    5
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides betting intelligence and analytics tools including exposure, CLV, sharp scoring, live betting, and Fantasy402 integration, running on Cloudflare Edge.
    8
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Props-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