# SportsStack MCP connector

The SportsStack connector brings events, odds, markets, futures, injuries, players, leagues, and news into Claude, ChatGPT, Cursor, and any MCP client, so your team can ask questions of live sports records inside their own access, with every call logged.

Source: https://elaichi.ai/connectors/sportsstack/

## Facts

| | |
| --- | --- |
| Application | SportsStack |
| Category | Fitness |
| AI tools | 61 |
| Authentication | Connects with an API key |
| Needs your own OAuth app | No |
| MCP endpoint | https://api.elaichi.ai/mcp |
| Works with | Claude, ChatGPT, Cursor, any MCP client, and the Elaichi Agent |
| Tools advertised by name | No. 61 tools is past the 30-tool threshold, so clients use `search_tools` and `execute_tool` |

## What you can ask once SportsStack is connected

- Show today's SportsStack market odds for the main slate.
- Which players appear in this week's SportsStack injury timelines?
- Summarize the latest SportsStack betting recommendations for football futures.

## Connect SportsStack in Elaichi

This happens once for the organization, before any client is involved.

1. Open Connections, choose Add connection, and pick SportsStack.
2. Optionally set Share with, then press Connect.
3. Paste a SportsStack API key. One person generates a token in SportsStack and pastes it once. Everyone else works through Share with, and never sees it.

Credentials are vaulted and nobody, including the AI, reads them back. The connection becomes a toolbox immediately, so you can curate which SportsStack tools are exposed, rename them, or freeze arguments before anyone points a client at it.

## Connect SportsStack to Claude

Endpoint: https://api.elaichi.ai/mcp

1. Open Customize, then Connectors.
2. Press Add.
3. Name it, paste the MCP server URL, then Continue.
4. Sign in and approve.

On Team and Enterprise, an Owner adds it once. Everyone else turns it on for themselves.

## Connect SportsStack to ChatGPT

Endpoint: https://api.elaichi.ai/mcp

1. Open Plugins, then press the + button.
2. Name it and paste the endpoint into Server URL.
3. Leave Authentication on OAuth, then tick the risk acknowledgement.
4. Press Create, then sign in and approve.

Works on the web today. The plugin directory lives at chatgpt.com/plugins.

## Connect SportsStack to Cursor

Endpoint: https://api.elaichi.ai/mcp

1. Open `~/.cursor/mcp.json`.
2. Add the endpoint under `mcpServers`.
3. Reload Cursor, then sign in and approve.

Set up per machine, so repeat it on each computer you work from.

## Connect SportsStack to any MCP client

Endpoint: https://api.elaichi.ai/mcp

1. Add the endpoint as a remote MCP server.
2. Sign in and approve.

The Elaichi Agent already has these tools, with nothing to set up.

## What the consent screen decides

Only Read is granted by default, which is not enough to call a SportsStack tool. Over MCP there is no trusted place to confirm a write in the moment, so the consent screen is the standing approval rather than a formality. Grant Read and Run tools. Think hard before granting Delete, which reaches into connected apps and cannot be undone.

## What teams do with SportsStack through Elaichi

### Draft the morning odds roundup

Content. Pull tonight's SportsStack events, the current odds on each market, and the latest news into a draft your editors can finish before it goes out.

### Check a market before moving a line

Trading. Ask for every odd on a SportsStack market, the related futures, and any injury reported since yesterday, then decide with the whole picture in front of you.

### Track injuries against the upcoming slate

Analytics. Match SportsStack injury timelines to the events scheduled this week and flag the games where a key player's status is still open.

### Answer a question about a finished game

Support. Pull the SportsStack scoreboard and event details for a game a customer is asking about, so the reply carries the actual score and timing rather than a guess.

### Reconcile player and team identifiers across feeds

Data. Use SportsStack mappings and global identities to confirm that the player in your warehouse is the same player in the odds feed before a report goes out.

### Build a parlay for a weekend promotion

Marketing. Start from SportsStack betting recommendations, pick the legs, and create the parlay odd that the promotion will feature, with the person who made it named in the log.

## Frequently asked questions

### How do I connect SportsStack to Claude?

Two steps. In Elaichi, choose SportsStack and paste in your SportsStack API key, which is all the sign-in asks for, since there is no OAuth application to register and no client ID or secret to generate. Then in Claude go to Customize, then Connectors, then Add, and paste the Elaichi endpoint, https://api.elaichi.ai/mcp. Sign in as yourself and SportsStack is ready to ask questions of.

### Does SportsStack work with ChatGPT and Cursor as well as Claude?

Yes. SportsStack is connected once in Elaichi, and the same endpoint, https://api.elaichi.ai/mcp, is what Claude, ChatGPT, Cursor, any other MCP client, and the Elaichi Agent connect to. You do not set SportsStack up again for each client, and each person signs in as themselves wherever they use it.

### What can an AI agent actually do with my SportsStack data?

With SportsStack connected, an agent can look up events, scoreboards, leagues, and players, pull the current odds on a market or a future, list injuries and their timelines, read the latest news, and check the mappings that tie identifiers together across feeds. It can also pull betting recommendations and create a parlay odd when someone asks for one. Because SportsStack has a lot of ways to answer, short concrete asks such as "odds on tonight's Lakers game" get better results than a long paragraph.

### Does connecting SportsStack give the AI everything in my account?

No. Access to SportsStack follows the API key and the person who signed in to Elaichi, so an agent can only reach the leagues, markets, and records that person could already reach. Elaichi can narrow that further, for example to reading only or to a subset of what SportsStack offers, but it can never widen it beyond what the account allows.

### Can my team share one SportsStack connection?

Yes. One person connects SportsStack in Elaichi and shares it with a team, and nobody else ever handles or sees the SportsStack API key. Each teammate still signs in to Elaichi as themselves, so the audit log names the actual person who asked for the odds or created the parlay, not a shared account.

### Can I stop an agent from deleting or changing things in SportsStack?

Yes. Restrictions in Elaichi apply per action, so you can leave SportsStack read only for a team by blocking the one action that writes, creating a parlay odd, while lookups of events, odds, injuries, and news keep working. A blocked action is never advertised to Claude, ChatGPT, Cursor, or any other client, so no prompt, however worded, can reach it.

### What happens to a SportsStack connection when someone leaves?

Offboarding that person in Elaichi ends their SportsStack access at once, across every client they used. If they were using a shared SportsStack connection, it keeps working for everyone else on the team. If you want SportsStack gone entirely, disconnecting it once in Elaichi removes it from Claude, ChatGPT, Cursor, and every other client at the same time.

## All 61 SportsStack tools

Every tool below is callable through https://api.elaichi.ai/mcp once SportsStack is connected, subject to the toolbox it is in and the restrictions on the caller.

- **List all SportsStack stat types** (List). List all statistical data type definitions in the SportsStack data dictionary, normalized across multiple data providers. Returns: name, description, type, providers for each stat type, spanning baseball, basketball, football, golf, ice hockey, motorsports, soccer, and tennis.
- **List all SportsStack futures** (List). List future markets in sportsstack, including tournament outrights, season totals, and player props. Returns: id, future_type, league_id, tournament_id, market_type_id. Optionally include per-market outcomes via include_outcomes=true. Max 1000 results per page.
- **Get single SportsStack future by ID** (Get). Get a single sportsstack future market by id. Returns: id, future_type, league_id, tournament_id, market_type_id. Required: id. Optionally include outcomes with include_outcomes=true.
- **List all SportsStack markets** (List). List sportsstack betting markets filtered by league. Returns: common_model_id, name, market_type, event_id, league_id, status, updated_at, is_future, tournament_id, start_date, and outcomes with nested odds. Required: league_id. Deprecated — use /api/v1/market_odds for better performance.
- **Get single SportsStack market by ID** (Get). Get a single sportsstack betting market by id. Returns: common_model_id, name, market_type, event_id, league_id, status, updated_at, is_future, tournament_id, start_date, and outcomes with nested odds. Required: id.
- **List all SportsStack market odds** (List). List sportsstack betting markets with nested outcomes and odds data. Returns: common_model_id, name, market_type, status, league_id, and outcomes (each containing selection, line, status, and nested odds with price, sportsbook, aggregator). Required: league_id. Max page size 250. Deprecated — prefer GET /api/v1/odds for larger page sizes and a flat response.
- **Get single SportsStack event odd by ID** (Get). Get pre-structured odds for a sportsstack event by id, optimized for single-call rendering of the full betting page. Returns: main_lines (6-box data with away/home team spread, moneyline, and total markets) and other_markets (non-main-line markets grouped by market_type). Required: id.
- **List all SportsStack odds** (List). List sportsstack betting odds filtered by league or event. Returns: id, event_id, league_id, market_id, outcome_id, sportsbook, aggregator, market_type, is_main, is_live, updated_at. At least one of league_id or event_id must be provided. Defaults to latest odds only per outcome/sportsbook/aggregator combination; set latest_only=false for full historical data.
- **Get single SportsStack odd by ID** (Get). Get a single sportsstack betting odd by its UUID. Returns: id, event_id, league_id, market_id, outcome_id, sportsbook, aggregator, market_type, is_main, is_live, updated_at. Required: id.
- **List all SportsStack betting recommendations** (List). List Inside Edge betting recommendations in sportsstack. Returns recommendation-only rows including league_id, event_id, player_id, team_id, market_type, and recommendation_type fields; priced odds fields are intentionally excluded. Max 1000 rows per page.
- **Create a SportsStack parlay odd** (Create). Price a same-game parlay for a SportsStack MLB pregame event directly against supported sportsbooks (FanDuel and DraftKings by default). Returns: common_model_id, event_id, status, quote_type, legs, quotes, requested_at, and metadata. Required: id, legs. The legs array must contain exactly 2 legs.
- **List all SportsStack injuries** (List). List player injuries in sportsstack filtered by league. Returns: common_model_id, player_id, source, status, injury_type, confidence, reported_at, practice_participation, recent_practice_status, return_date, source_tier, and more. Required: league_id.
- **List all SportsStack injury timelines** (List). List the chronological history of injury status observations for a player in sportsstack. Returns: id, player_id, status, injury_type, source, source_tier, confidence, reported_at, inserted_at, and updated_at. Required: id.
- **List all SportsStack news** (List). List sportsstack news items sorted by date (newest first), with flexible filtering by league, entity type, entity ID, and date range. Returns: id, headline, summary, analysis, date, for_entity_type, for_entity_id, league_id, tags, author, source, betting_analysis, priority, inserted_at, updated_at, and optional entity_tags. Required: league_id.
- **Get single SportsStack news by ID** (Get). Get a single sportsstack news item by id. Returns the complete news item including headline, summary, analysis, betting_analysis, author, source, date, for_entity_type, for_entity_id, league_id, tags, priority, edit_history, original_content, metadata, inserted_at, and updated_at. Required: id.
- **Get single SportsStack event scoreboard by ID** (Get). Get the latest event scoreboard for a sportsstack event by id. Returns the live game state including common_model_id, event_id, sport, league, period, time_on_clock, home_score, away_score, period_half, period_half_over, details (sport-specific JSONB), inserted_at, and updated_at. Required: id.
- **List all SportsStack mappings** (List). List sportsstack entity identity mappings ordered by most recently updated first. Returns: id, entity_type, integration, league, source_id, common_model_id, inserted_at, updated_at. Supports optional filters (entity_type, integration, league, source_id) and enrichment params (include_all_mappings, return_source_id_format, include_source_mappings_by_source).
- **Get single SportsStack mapping by ID** (Get). Get a single sportsstack entity identity mapping by id. Returns: id, entity_type, integration, league, source_id, common_model_id, inserted_at, updated_at. Required: id.
- **List all SportsStack events** (List). List sportsstack events for a league, optionally filtered by season year, week, date, season type, status, or participant. Returns: common_model_id, title, scheduled_start_time, status, season_year, participants, and event_scoreboard. Required: league_id.
- **Get single SportsStack event by ID** (Get). Get a single sportsstack event by id. Returns: common_model_id, title, scheduled_start_time, status, season_year, league_id, participants, and event_scoreboard. Required: id.
- **List all SportsStack global identities** (List). List global player identity groups in sportsstack, optionally filtering by name or ID. Returns: global_player_id, canonical_name, player_ids, and players (each with common_model_id, full_name, is_active, league_id, league_abbreviation, and team_id). Max 1000 items per page.
- **List all SportsStack leagues** (List). List sportsstack leagues, optionally filtered by sport. Returns: name, abbreviation, common_model_id, sport_id, and image_url for each league in the collection.
- **Get single SportsStack league by ID** (Get). Get a single sportsstack league by id. Returns: name, abbreviation, common_model_id, sport_id, and image_url. Required: id.
- **List all SportsStack players** (List). List sportsstack players for a given league. Returns: common_model_id, full_name, position, team_id, is_active, birthday, height_in, weight_lbs, image_url, and additional biographical and draft fields. Optionally filter by team_id or search by name via search_phrase. Required: league_id.
- **Get single SportsStack player by ID** (Get). Get a single sportsstack player by id. Returns: common_model_id, full_name, position, team_id, is_active, birthday, height_in, weight_lbs, image_url, and additional biographical and draft fields. Required: id.
- **List all SportsStack seasons** (List). List seasons in sportsstack, optionally filtered by league, year, type, or status. Returns: common_model_id, name, season_year, season_type, status, start_date, end_date, league_id, abbreviation, image_url, and metadata.
- **Get single SportsStack season by ID** (Get). Get a single sportsstack season by id. Returns: common_model_id, name, season_year, season_type, status, start_date, end_date, league_id, abbreviation, image_url, and metadata. Required: id.
- **List all SportsStack sports** (List). List all sports available in sportsstack. Returns: name, abbreviation, common_model_id, image_url. Optionally filter results by sport name.
- **Get single SportsStack sport by ID** (Get). Get a single sport by id from sportsstack. Returns: name, abbreviation, common_model_id, image_url. Required: id.
- **List all SportsStack teams** (List). List sportsstack teams for a given league. Returns: common_model_id, name, abbreviation, market, nickname, status, colors, image_url, league_id, and metadata. Optional filters include search_phrase, fuzzy matching, and status. Required: league_id.
- **Get single SportsStack team by ID** (Get). Get a single sportsstack team by id. Returns: common_model_id, name, abbreviation, market, nickname, status, colors, image_url, league_id, and metadata. Required: id.
- **Get single SportsStack tournament by ID** (Get). Get a single sportsstack tournament by id. Returns: common_model_id, name, bracket_type, tournament_type, status, start_date, end_date, season_year, and league_id. Required: id.
- **List all SportsStack tournaments** (List). List sportsstack tournaments. Returns: common_model_id, name, bracket_type, tournament_type, status, start_date, end_date, season_year, and league_id.
- **Get single SportsStack grader odd by ID** (Get). Grade a single bet in sportsstack using the OpticOdds-compatible grader endpoint. Returns: fixture_id, status, result, line, player_score, graded_at, sportsstack settlement enrichment (action, consensus_value, settlement_confidence), and opticodds grading data. Required: fixture_id, market, name.
- **Create a SportsStack settlement batch** (Create). Evaluate settlement confidence for a batch of markets in sportsstack. Returns a batch settlement confidence response; the upstream API does not enumerate response body fields. Required: league, markets. Batch size is limited to 200 markets per request.
- **List all SportsStack gradeable props** (List). List gradeable stat types and entities for a settlement event in sportsstack. Returns an array of gradeable prop objects; the upstream API does not enumerate the field-level structure of each record. Required: id. Optionally filter by league abbreviation (e.g., 'nba').
- **Get single SportsStack settlement by ID** (Get). Query settlement confidence for a single betting market in SportsStack. Returns: action (settle/caution/hold recommendation), settlement_confidence score, consensus_value across providers, reasoning, result (win/loss/push), provider_count, margin_safety, and reliability details. Required: event_id, entity_id, entity_type, stat_name, line, league.
- **Get single SportsStack settlement result by ID** (Get). Get settlement results for an entire event in sportsstack. Returns settlement result data with format-specific attributes whose shape varies by the format parameter ('full' for one row per real outcome, 'flat' for legacy collapsed rows, 'outcomes' for per-outcome confidence grouped by entity/stat). Required: id, league.
- **List all SportsStack market types** (List). List all market type definitions used in sports betting in sportsstack. Returns: canonical_name, display_name, category, provider_aliases, and stat_mapping for each market type. Optionally filter results by category (e.g., core, player_props, game_props) or provider (e.g., the_odds_api, sportradar_sr).
- **Get single SportsStack data health by ID** (Get). Get data health status for a sportsstack tenant/league combination. Returns: health_score (0–100), league_id, league_abbreviation, tenant_id, provider, validation_timestamp, results (entity counts for teams, players, events, seasons, coverage percentages, and relationship completeness), and issues (list of detected data problems with type, severity, message, and count). Required: league_id.
- **List all SportsStack event plays** (List). List play-by-play actions for a sportsstack event. Returns: id, description, play_type, event_id, period, play_number, offense_id, defense_id, game_context, play_details, minutes_remaining, seconds_remaining, time_on_clock, source, league_id, tenant_id, and common_model_id. Required: id (Event UUID).
- **List all SportsStack play stats** (List). List play-level player statistics in sportsstack across all events. Returns: common_model_id, player_id, event_id, play_id, play_number, play_type, period, league_id, inserted_at, and player_info (including role and per-play statistics). Optionally filter by player_id, event_id, or league_id. Defaults to 1000 records per page.
- **List all SportsStack event stats** (List). List sportsstack event stats for players and teams across sporting events. Returns: common_model_id, event_id, for_entity_id, for_entity_type, is_projection, source, season_year, week, scheduled_start_time, team_id, data, inserted_at, updated_at.
- **Get single SportsStack event stat by ID** (Get). Get a single sportsstack event stat record by id. Returns: common_model_id, event_id, for_entity_id, for_entity_type, is_projection, source, season_year, week, scheduled_start_time, team_id, data, inserted_at, updated_at. Required: id.
- **List all SportsStack rankings** (List). List sportsstack rankings and standings snapshots for a league. Returns: id, for_entity_id, for_entity_type, season_year, season_type, table_type, ranking_overall, record_wins, record_losses, primary_group, secondary_group, and split/scoring fields. Required: league_id.
- **Get single SportsStack ranking by ID** (Get). Get a single sportsstack ranking or standings snapshot by id. Returns the full record including id, for_entity_id, for_entity_type, league_id, season_year, season_type, table_type, ranking_overall, record_wins, record_losses, primary_group, secondary_group, split stats, scoring fields, and metadata. Required: id.
- **List all SportsStack season stats** (List). List season-level statistics for players and teams in sportsstack. Returns: common_model_id, for_entity_id, for_entity_type, season_year, source, is_projection, team_id, inserted_at, updated_at, and a data object of aggregated season stats (e.g. passing_yards, rushing_yards, games_played, touchdowns). Required: league_id, season_year. Use player_id/team_id for single-entity lookups or player_ids/team_ids for bulk.
- **Get single SportsStack season stat by ID** (Get). Get a single season stats record by id in sportsstack. Returns: common_model_id, for_entity_id, for_entity_type, season_year, source, is_projection, team_id, inserted_at, updated_at, and a data object of aggregated season stats (e.g. passing_yards, rushing_yards, games_played, touchdowns). Required: id.
- **List all SportsStack standings** (List). List sportsstack standings snapshots for a league, optionally filtered by entity, season, group, and source provider. Returns: id, for_entity_id, for_entity_type, league_id, season_year, season_type, record_wins, record_losses, record_ties, ranking_overall, primary_group, secondary_group, table_type, metadata, and full split/scoring fields. Required: league_id.
- **Get single SportsStack standing by ID** (Get). Get a single sportsstack standings snapshot by id. Returns: id, for_entity_id, for_entity_type, league_id, season_year, season_type, record_wins, record_losses, record_ties, ranking_overall, primary_group, secondary_group, table_type, metadata, and full split/scoring fields. Required: id.
- **Create a SportsStack webhook** (Create). Send a test webhook delivery in sportsstack, bypassing the batcher and RabbitMQ to verify the HTTP delivery path independently of the pipeline. Returns: status, destination_id, destination_name, and message. If destination_id is omitted, the first active webhook destination for the tenant is used.
- **Get single SportsStack tournament bracket by ID** (Get). Get the bracket structure for a sportsstack tournament by id. Returns: tournament (name, bracket_type, status, start_date, end_date), rounds (each with round_number, round_name, round_type, and matchups containing position, home_team, away_team, status, winner_id, and series_score), plus groups and metadata. Required: id.
- **List all SportsStack global identity players** (List). List global player identity groups in sportsstack, grouping cross-league player records under a single canonical identity. Returns: global_player_id, canonical_name, player_ids, and a players array where each entry includes common_model_id, full_name, is_active, league_id, league_abbreviation, and team_id. Optionally filter by search_phrase, global_player_id, or player_id.
- **Get single SportsStack event linescore by ID** (Get). Get the linescore for a sportsstack event by id. Returns: common_model_id, event_id, sport, league. Required: id.
- **List all SportsStack event related stats** (List). List player or team performance statistics for a specific sportsstack event. Returns: common_model_id, for_entity_type, for_entity_id, event_id, source, updated_at, and week. Required: id, for_entity_type.
- **List all SportsStack event play stats** (List). List play statistics for a sportsstack event by event id. Returns sport-specific statistical records whose fields vary by sport type; consult the upstream sportsstack docs for the field-level breakdown. Required: id.
- **List all SportsStack player play stats** (List). List play statistics records for a sportsstack player by their id. Returns records with id and sport-specific stat attributes that vary by sport and league (e.g., basketball, football, baseball). Required: id.
- **List all SportsStack latest odds** (List). List the latest betting market odds from sportsstack. Returns: market_id, market_name, market_status, market_type, market_updated_at, and a nested outcomes array — each outcome containing outcome_id, outcome_name, outcome_status, outcome_line, and an odds array with odds_price, odds_price_type, odds_sportsbook, odds_is_main, and odds_aggregator.
- **List all SportsStack news by entity** (List). List news articles for a specific entity in sportsstack by entity type and entity ID. Returns: for_entity_id, for_entity_type, event_id, entity_tags, and edit_history. Pass include_entity_tags=true to include tagged entity mentions in each article. Required: type, id.
- **List all SportsStack news by league** (List). List news items for a specific league in sportsstack. Supports optional filtering by entity type and entity ID to narrow results to news for specific players, teams, or events within the league. Returns: id. Required: id.
- **List all SportsStack league injuries** (List). List the league-wide injury report for a sportsstack league. Returns: common_model_id, player_id, source, updated_at for each injured player. Required: id (league UUID).
