Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Lumify Sports Intelligence

REMOTE · LUMIFY.AI · SCANNED SEP 21

Schedules, scores, odds, splits & explainable AI bet confidence — 8+ sports, free instant key.

Available components

0 this week 84 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security74
Transport & Reachability100
Schema Quality & AI Usability78
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 6169 tokens (~205/item across 30 items; 28 tools + 2 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage98
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 94% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 28 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 30 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities60
  • Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28. See how to fix → Fail
Install

How do I install the Lumify Sports Intelligence MCP server?

Lumify Sports Intelligence is a hosted endpoint at https://lumify.ai/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · lumify.ai

# add to Claude Code
claude mcp add --transport http ai-lumify-sports-intelligence 'https://lumify.ai/mcp'
// .cursor/mcp.json
{
  "mcpServers": {
    "ai-lumify-sports-intelligence": {
      "url": "https://lumify.ai/mcp"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "ai-lumify-sports-intelligence": {
      "type": "http",
      "url": "https://lumify.ai/mcp"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.ai-lumify-sports-intelligence]
url = "https://lumify.ai/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ai-lumify-sports-intelligence": {
      "type": "remote",
      "url": "https://lumify.ai/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add ai-lumify-sports-intelligence --url 'https://lumify.ai/mcp' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  ai-lumify-sports-intelligence:
    url: "https://lumify.ai/mcp"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "ai-lumify-sports-intelligence": {
      "Transport": "http",
      "Url": "https://lumify.ai/mcp"
    }
  }
}
# add to Vellum
assistant mcp add ai-lumify-sports-intelligence -t streamable-http -u 'https://lumify.ai/mcp'
// mcp.json
{
  "mcpServers": {
    "ai-lumify-sports-intelligence": {
      "type": "http",
      "url": "https://lumify.ai/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 21 Sept 26 0
    • Tool “get_intelligence” rewrote its description, which is the text the model reads security
    • Tool “list_forecasts” rewrote its description, which is the text the model reads security
    • “list_forecasts” reworded the description of “market” cosmetic
    • “list_forecasts” reworded the description of “sport” cosmetic
  • 20 Sept 26 0
    • Tool “grade_slip” rewrote its description, which is the text the model reads security
  • 19 Sept 26 0
    • Tool “get_player_props” rewrote its description, which is the text the model reads security
  • 18 Sept 26 0
    • Tool “grade_slip” rewrote its description, which is the text the model reads security
    • Schema quality: 182 → 204 functional
    • “grade_slip” reworded the description of “text” cosmetic
  • 17 Sept 26 0
    • Tool “grade_slip” rewrote its description, which is the text the model reads security
    • “grade_slip” reworded the description of “text” cosmetic
  • 16 Sept 26 0
    • Tool “resolve_player” rewrote its description, which is the text the model reads security
  • 15 Sept 26 0
    • Tool “grade_slip” rewrote its description, which is the text the model reads security
    • New tool “resolve_event” functional
  • 11 Sept 26 0
    • Tool “get_live_score” rewrote its description, which is the text the model reads security
    • Tool “list_events” rewrote its description, which is the text the model reads security
    • Schema quality: 4705 → 5230 functional
    • New tool “grade_slip” functional
    • New tool “resolve_player” functional
    • New tool “resolve_team” functional
    • “list_events” reworded the description of “include_scores” cosmetic
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 21 Sept 2026 · Probed https://lumify.ai/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=lumify.ai CN=WE1,O=Google Trust Services,C=US 9 Sept 2026 9 Dec 2026 ECDSA 256 ECDSA-SHA256 2f1d36b4097665450e0c59106d2772a7
SANs: lumify.ai, *.lumify.ai
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of lumify.ai. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
ai. present 3799 8 Verified
lumify.ai. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://lumify.ai/mcp Verified 200
http (plaintext) http://lumify.ai/mcp HTTPS enforced 301 https://www.lumify.ai/mcp
MCP tools · 28 exposed · ~6,024 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
batch_get_events ~232

Get multiple events by id in one call — for agents that already have a list of ids and want full detail for each without one call per event. Max 25 ids. Returns full detail for every id that exists plus a not_found list for any that don't (never billed). Use get_event for a single id, or list_events / query_events to discover ids first.

NameTypeReqDescription
bookmakerstringBookmaker for inlined odds and intelligence market prices. Defaults to pinnacle. Valid: pinnacle, fanduel, draftkings, betmgm, caesars, bet365, circa, westgate, wynn, south_point, stations, hardrock,…
event_idsarrayyesEvent ids to fetch (max 25); duplicates are billed once.
include_intelligencebooleanInline bet intelligence on each event. Does not add credits.
include_oddsbooleanInline current odds scoped by bookmaker (default: pinnacle). Does not add credits — each found event stays 1 credit.
NameTypeReqDescription
eventsarrayFull event detail (same shape as get_event) for every found id.
not_foundarrayRequested event_ids that don't exist. Never billed.
totalinteger

No examples provided.

estimate_cost ~129

Estimate the credit cost of one or more planned tool calls before making them — no credits are spent. Costs are data-dependent (e.g. odds/intelligence/splits not yet ingested for an event are free, and batch_get_events ids that don't exist cost nothing), so this returns a [min_credits, max_credits] range per call rather than a single number. Pass the exact tool name and arguments you're considering, e.g. {"tool": "get_event", "arguments": {"event_id": 123, "include_odds": true}}.

NameTypeReqDescription
callsarrayyes
NameTypeReqDescription
estimatesarray
total_max_creditsinteger
total_min_creditsinteger

No examples provided.

get_event ~215

Get a single event with participants and venue. Optionally inline current odds and/or bet intelligence (same 1 credit as the event call). Raises a not-found error if event_id doesn't exist. Use list_events / query_events to discover ids first, or batch_get_events to fetch several ids in one call.

NameTypeReqDescription
bookmakerstringBookmaker for inlined odds and intelligence market prices. Defaults to pinnacle. Valid: pinnacle, fanduel, draftkings, betmgm, caesars, bet365, circa, westgate, wynn, south_point, stations, hardrock,…
event_idintegeryesEvent id, from list_events, query_events, or search results.
include_intelligencebooleanInline bet intelligence. Does not add credits.
include_oddsbooleanInline current odds scoped by bookmaker (default: pinnacle). Does not add credits — the event call stays 1 credit.
NameTypeReqDescription
idinteger
inprogress_sincestring|nullISO-8601 UTC when status first became inprogress (first live tick). Null until then; stays set after final.
leaguestring
namestring
participantsarray
sportstring
starts_atstring
statusstring
updated_atstring|null
venueobject|null

No examples provided.

get_injuries ~273

Beta. Get late-breaking player injury and availability status for an event (out / doubtful / questionable / probable / day_to_day / ir / suspended / available), with previous_status, body_part, note, source_url, and severity (info / material / critical). Beta coverage: NFL and MLB (more sports rolling out). NFL monitoring starts ~4.5 days before kickoff (Wednesday/Thursday practice reports); MLB stays on a 48-hour window. Returns available:false with no charge until the injury monitor has written a first structured report. Checks run on cadence, on a significant main-market odds move, and at a guaranteed pre-kickoff checkpoint. Subscribe to webhook event_type=injury for material/critical changes. No in-game feed. Use exclude_status to drop noisy long-standing designations (e.g. ir) from the response — does not affect available or credit cost.

NameTypeReqDescription
event_idintegeryesEvent id, from list_events, query_events, or search results.
exclude_statusstringComma-separated statuses to drop, e.g. "ir" to hide injured-reserve/long-term-IL rows (long-standing roster designations, not late-breaking news). Valid values: out, doubtful, questionable, probable,…
NameTypeReqDescription
availableboolean
confirmed_atstring|null
event_idinteger
injuriesarrayPer-player rows: player, player_id, team, team_id, status, previous_status, body_part, note, source_url, severity, last_changed_at. team/team_id prefer the player's current roster team when that team…
last_checked_atstring|null
next_check_atstring|null

No examples provided.

get_intelligence ~288

Get predictive bet intelligence for an event: vig-stripped probability, fair_price, Price overlay, main-line ev (Beta), and forecasts[] — forecasted wagers from the model (same objects as list_forecasts): player props plus high-confidence main-line picks on tennis, NFL, NCAAF, MLB, and soccer. bets[] is live for MLB, tennis, soccer (MLS + big-five), NFL, and NCAAF. forecasts[] covers MLB, NFL, NCAAF, NBA, NCAAB, NHL, tennis, and soccer and can populate when available is false. Fair-price + line-shopping on bets[] today (edge/tier null; has_recommend false). bookmaker is ignored. Match-level tokens (OVER, UNDER, ML_DRAW) have null player/team attribution. Free only when available is false and forecasts is empty. Field catalog: https://lumify.ai/docs/reference#event-intelligence

NameTypeReqDescription
bookmakerstringIgnored. Intelligence always reports the book the assessment was priced against. Valid: pinnacle, fanduel, draftkings, betmgm, caesars, bet365, circa, westgate, wynn, south_point, stations, hardrock,…
event_idintegeryesEvent id, from list_events, query_events, or search results.
NameTypeReqDescription
availablebooleanFalse when no predictive bets[] have been computed for this event yet. forecasts[] can still populate on MLB/NFL/NCAAF/NBA/NCAAB/NHL. Free only when available is false and forecasts is empty.
betsarray
event_idintegerLumify event ID this intelligence describes.
forecastsarrayForecasted wagers for this event (same object as list_forecasts) — a model prediction, not a beat-the-market claim. Player-prop rows on team sports; high-confidence main-line picks on tennis, NFL, NC…
has_recommendboolean|nullTrue when at least one bet meets the recommendation threshold; null when intelligence has not been computed. False while Edge is not published (current MLB/soccer/tennis Stage 1) — a recommendation r…
intelligence_updated_atstring|nullISO-8601 UTC timestamp of the most recent change anywhere in this payload (max of per-bet computed_at). Use per-bet computed_at to reason about a specific bet.
leaguestring|nullLeague slug for this event, if any.
match_overviewstring|nullNatural-language pre-game matchup preview — form, context, what to watch. Written before kickoff by a Search-backed overlay on every event sport (MLB, NFL, NCAAF, NBA, NCAAB, NHL, soccer, tennis); sp…
matchupobject|nullNot returned. Use get_stats for pitcher/lineup Data.
odds_sourcestring|nullBookmaker bets[].market prices were sourced from. For probability-model sports this is the book the assessment was priced against, not a bookmaker overlay; per-bet market.book is authoritative if the…
playersobjectHome/away (or p1/p2) participant identification, keyed by role: {role: {name, player_id, team_id}}.
rationalearray|nullEvent-level factual pre-game matchup chips (injuries, recent form, lineup/availability news — sport-shaped). Written before kickoff; the request path only reads the stored row.
sportstring|nullSport slug for this event.

No examples provided.

get_live_score ~128

Get a lightweight live score snapshot for an event: status, period, clock, per-participant score and period-by-period scores, and last-updated time. Cheaper and faster than get_event when you only need the score, not participants or venue. Capped at 20 calls/min per key (shared with GET /v1/events/{id}/score and list_events include_scores=true). For live updates prefer the SSE stream. Raises a not-found error if event_id doesn't exist.

NameTypeReqDescription
event_idintegeryesEvent id, from list_events, query_events, or search results.
NameTypeReqDescription
clockstring|null
event_idinteger
finishedboolean
periodstring|null
scoresarray
statusstring
updated_atstring|null

No examples provided.

get_odds ~349

Get current betting odds for an event: per-bookmaker lines and last-updated time. Includes in-play quotes while the event is underway; books that have not quoted since kickoff are omitted. bookmaker defaults to pinnacle. Use 'all' or a comma-separated list for multiple books — still 1 credit. Default is main lines (is_main=true); set include_alts for alternate spread/total rungs. Final events include result (won/lost/push/void) graded from the pre-kickoff close. MLB, tennis, and soccer (MLS + big-five) mains also include fair_price and consensus mirrored from published assessments. Returns available:false with no charge if odds aren't posted for this event yet. If bookmaker is omitted and Pinnacle hasn't posted a line yet (common for the first/last games of a preseason slate), falls back to the best-covered other book and adds requested_bookmaker='pinnacle' plus fallback_bookmaker to the response instead of reporting no odds; an explicit bookmaker='pinnacle' never falls back. Use get_odds_history for line movement over time.

NameTypeReqDescription
bookmakerstringBookmaker slug. Defaults to pinnacle. Valid: pinnacle, fanduel, draftkings, betmgm, caesars, bet365, circa, westgate, wynn, south_point, stations, hardrock, betonline, betr, betrivers, lowvig, bovada…
event_idintegeryesEvent id, from list_events, query_events, or search results.
include_altsbooleanInclude alternate spread/total rungs. Default false (mains only).
NameTypeReqDescription
availableboolean
bookmakersarrayPer-book markets. Outcomes include is_main. In-play omits books that have not quoted since kickoff. Final events add result (won/lost/push/void) and close on the pre-kickoff point.
event_idinteger
fallback_bookmakerstringThe book actually returned when requested_bookmaker is present.
last_updatedstring|null
requested_bookmakerstringPresent only when the default (no bookmaker arg) request fell back to a different book because Pinnacle has no line yet — always 'pinnacle' when present.

No examples provided.

get_odds_history ~171

Get line-movement history for an event: a list of past odds snapshots (movements), each with its own timestamp, up to limit entries. bookmaker defaults to pinnacle. Use get_odds instead if you only need the current line.

NameTypeReqDescription
bookmakerstringBookmaker slug. Defaults to pinnacle. Valid: pinnacle, fanduel, draftkings, betmgm, caesars, bet365, circa, westgate, wynn, south_point, stations, hardrock, betonline, betr, betrivers, lowvig, bovada…
event_idintegeryesEvent id, from list_events, query_events, or search results.
limitintegerMax line-movement entries to return. Default 50.
NameTypeReqDescription
event_idinteger
movementsarrayOdds snapshots over time; each entry carries its own timestamp.
totalinteger

No examples provided.

get_period_odds ~171

Get first-half / first-five / first-set lines and live progress for an NFL, NCAAF, NBA, NCAAB, MLB, soccer, or tennis event. Joins persisted first_half_spreads / first_half_totals mains to this-event period scores (1H = Q1+Q2, NCAAB or soccer native 1H; MLB F5 = innings 1–5; tennis S1 = first-set games) and grades the period, not the full game. GET /odds / get_odds stay on moneyline/spread/total. Returns available:false with no charge if no period mains have been ingested. Other sports return HTTP 400.

NameTypeReqDescription
event_idintegeryesEvent id, from list_events, query_events, or search results.
NameTypeReqDescription
availablebooleanFalse when no first-half / first-five / first-set mains have been ingested; period_odds is empty and the call isn't billed.
clockstring|nullGame clock from the live score snapshot.
event_idintegerLumify event ID.
periodstring|nullCurrent period from the live score snapshot.
period_oddsarrayOne row per (scope, market, line). Fields: scope (1H, F5, or S1), market (first_half_spreads / first_half_totals), line (home-perspective for spreads), home_score, away_score, current (totals only),…
sportstring|nullSport slug: nfl, ncaaf, nba, ncaab, mlb, soccer, or tennis.
statusstring|nullEvent status (scheduled, inprogress, delayed, final, …).

No examples provided.

get_player ~100

Get a single player identity profile: name, sport, country, position/handedness, physical stats, current team, rankings (tennis {singles, points}; null on every other sport), and image_url (Lumify media URL, null until the sport's headshot/enrichment job). Raises a not-found error if player_id doesn't exist. Resolve ids via search_players.

NameTypeReqDescription
player_idintegeryesPlayer id, from search_players.
NameTypeReqDescription
birthdatestring|nullYYYY-MM-DD date of birth.
country_codestring|nullISO 3166-1 alpha-3 country code.
current_team_idinteger|nullLumify team ID when the player is on a club roster. Null for tennis.
current_team_namestring|nullCurrent team display name. Null for tennis.
first_namestring|null
full_namestringDisplay name.
handednessstring|nullleft | right | switch. Meaning is sport-specific (bats for MLB, shoots for NHL, playing hand for tennis). Null when unknown.
height_cminteger|nullHeight in centimetres. Null when not ingested.
idintegerLumify player ID.
image_urlstring|nullLumify media URL for the player headshot (https://lumify.ai/media/players/{sport}/{id}.{ext}). Null until the sport's headshot/enrichment job. Never a vendor CDN.
is_activebooleanFalse when deactivated or retired.
last_namestring|null
positionstring|nullRoster position abbreviation when the sport has one (e.g. C, P, SS for MLB; QB, WR for NFL). Null for tennis and when not yet ingested.
rankingsobject|nullSport ranking block. Tennis: {singles, points} from ATP/WTA standings. Null for every other sport. Tennis /stats also exposes ranking / ranking_points on the tennis player block.
retired_atstring|nullYYYY-MM-DD retirement date when known.
slugstringURL-safe unique slug.
sportstringSport slug, e.g. mlb, tennis, nfl.
weight_kgnumber|nullWeight in kilograms. Null when not ingested.

No examples provided.

get_player_events ~132

List a player's events (schedule/results), paginated by id (after_id). Defaults to ±30 days around today when no date filter is given. Resolve player_id via search_players first.

NameTypeReqDescription
after_idintegerCursor: last event id from the previous page's next_after_id.
fromstringStart date YYYY-MM-DD.
limitintegerMax events to return per page.
player_idintegeryesPlayer id, from search_players.
statusstringFilter to events in this status.
tostringEnd date YYYY-MM-DD.
NameTypeReqDescription
dataarrayEvents in the same shape as list_events' EventSummary.
has_moreboolean
next_after_idinteger|nullPass as after_id to fetch the next page; null on the last page.
player_idinteger

No examples provided.

get_player_props ~169

Get player-prop lines and live progress for an NFL, NCAAF, NBA, NCAAB, NHL, MLB, or soccer event. Joins persisted player-prop mains to this-event player box counts and grades over/under/push (1:1 slugs, combo sums including rush+rec and pass+rush yards, weighted total bases, anytime TD, double-double/triple-double, hockey points). Sport × market catalog: https://lumify.ai/docs/player-props. GET /odds / get_odds stay on moneyline/spread/total. Returns available:false with no charge if no prop mains have been ingested. Other sports return HTTP 400.

NameTypeReqDescription
event_idintegeryesEvent id, from list_events, query_events, or search results.
NameTypeReqDescription
availablebooleanFalse when no player-prop mains have been ingested; player_props is empty and the call isn't billed.
clockstring|nullGame clock from the live score snapshot.
event_idintegerLumify event ID.
periodstring|nullCurrent period from the live score snapshot.
player_propsarrayOne row per (player, market, line). Fields: player, player_id (null if unmatched), market (prop category), line, current (this-event box count), pct_of_line, settleable, result (in_progress / over /…
sportstring|nullSport slug: nfl, ncaaf, nba, ncaab, nhl, or mlb.
statusstring|nullEvent status (scheduled, inprogress, delayed, final, …).

No examples provided.

get_splits ~142

Get public betting splits (bets% and handle%) for an event: a consensus split plus a per-bookmaker breakdown (bookmakers[].bookmaker uses the same odds slugs as get_odds, e.g. draftkings — not upstream short keys like dk), with a captured_at timestamp. Available for MLB, NBA, NHL, NFL, NCAAF, and NCAAB. Not available for tennis or soccer (upstream 400). Returns available:false with no charge if splits haven't been captured for this event yet or the sport is unsupported.

NameTypeReqDescription
event_idintegeryesEvent id, from list_events, query_events, or search results.
NameTypeReqDescription
availableboolean
bookmakersarrayPer-bookmaker splits. Each item has bookmaker (odds slug), name, moneyline, spread, total.
captured_atstring|null
consensusobject|nullAggregate bets%/handle% across bookmakers.
event_idinteger

No examples provided.

get_stats ~150

Get raw, deterministic team/match statistics for a soccer, MLB, tennis, NFL, NCAAF, NBA, NCAAB, or NHL event — no odds (use get_odds) and no scoring (use get_intelligence). Payload is sport-specific: teams.home/away except tennis (players.player_1/player_2). Tennis doubles/qualifying return available:false. Form/record/H2H exclude walkovers and NFL/NCAAF/NBA/NCAAB preseason. Other sports return HTTP 400. Field catalog: https://lumify.ai/docs/reference#event-stats

NameTypeReqDescription
event_idintegeryesEvent id, from list_events, query_events, or search results.
NameTypeReqDescription
availablebooleanFalse when participants haven't resolved, or tennis draw_type is not exactly 'singles' (doubles/qualifying out of scope); every other field is omitted and the call isn't billed.
draw_typestring|nullTennis only. Always 'singles' when available is true. Values other than 'singles' (including 'doubles' and 'qualifying') return available:false.
event_idintegerLumify event ID.
head_to_headobject|nullPast meetings: {window, meetings, total}. Soccer: {home_goals, away_goals}. MLB: {home_runs, away_runs}. NFL/NCAAF/NBA/NCAAB: {home_points, away_points}. NHL: {home_goals, away_goals}. Tennis: {event…
league_contextobject|nullSoccer only. {avg_goals_per_team}: league-wide baseline goals/team/game, used by get_intelligence's attack/defense scoring. Null for fixed-baseline competitions.
league_slugstring|nullLeague/tour slug, e.g. 'mls', 'mlb', 'nfl', 'atp', 'wta'.
matchobject|nullTennis only. Match context: surface, competition_id/name, tier, round (ingested labels like 'Round of 16'/'Quarterfinal'/'Final', not 'R16'), court (not currently populated), status, result_type, sco…
neutral_siteboolean|nullSoccer only. Whether this fixture is at a neutral venue. Informational here; factored into home-advantage scoring on get_intelligence.
playersobject|nullTennis only (player_1/player_2). Each side: player_id, name, country_code, ranking, ranking_points, rest_days, recent_form, surface_form, record (tour_lookback wins/losses), career_rates (Stage-2 ser…
profilestringSoccer only. 'world_cup' or 'club'.
teamsobject|nullSoccer/MLB/NFL/NCAAF/NBA/NCAAB/NHL only (home/away). Each side includes image_url (Lumify media URL, null until ingest; never a vendor CDN). Soccer: recent_form, team_strength, venue, rest_days, sos,…
windowsobject|nullExplicit sample depths. Soccer: recent_form (5), rates_l5 (5), rates_season ('season'), head_to_head (10), sos (5). MLB/NFL/NCAAF/NBA/NCAAB/NHL: recent_form (5), rates_l5 (5), rates_season ('season')…

No examples provided.

get_team ~51

Get a single team profile with its home venue. Raises a not-found error if team_id doesn't exist. Resolve ids via list_teams.

NameTypeReqDescription
team_idintegeryesTeam id, from list_teams.
NameTypeReqDescription
abbreviationstring|null
citystring|null
conferencestring|null
divisionstring|null
idinteger
image_urlstring|nullLumify media URL for the team logo (https://lumify.ai/media/teams/{sport}/{id}.png). Null until ingest. Never a vendor CDN.
is_activeboolean
leaguestring|null
namestring
slugstring
sportstring
venueobject|null

No examples provided.

get_team_props ~126

Get team-total lines and live progress for an NFL, NCAAF, MLB, or soccer event. Joins persisted Pinnacle team-total mains (each team's full-game points/runs/goals Over/Under) to this-event participant scores and grades over/under/push. GET /odds / get_odds stay on moneyline/spread/total. Returns available:false with no charge if no team-total mains have been ingested. Other sports return HTTP 400.

NameTypeReqDescription
event_idintegeryesEvent id, from list_events, query_events, or search results.
NameTypeReqDescription
availablebooleanFalse when no team-total mains have been ingested; team_props is empty and the call isn't billed.
clockstring|nullGame clock from the live score snapshot.
event_idintegerLumify event ID.
periodstring|nullCurrent period from the live score snapshot.
sportstring|nullSport slug: nfl, ncaaf, mlb, or soccer.
statusstring|nullEvent status (scheduled, inprogress, delayed, final, …).
team_propsarrayOne row per (team, line). Fields: team, team_id, side (home/away), market (team_total), line, current (this-event team score), pct_of_line, settleable, result (in_progress / over / under / push, or n…

No examples provided.

grade_slip ~982

Grade settleable player-prop legs (over / under / push / in_progress / dnp / no_stat) for nfl, nba, ncaaf, ncaab, nhl, mlb, and soccer — the same sport coverage as get_player_props — plus structured game markets (h2h / spreads / totals) on any sport get_odds already settles. Prefer structured event_id + market_key + side; player_id and line are required on props, line is required on spreads/totals, and both player_id and line are omitted on h2h. team_total requires team_id + line + over/under and is only gradable on nfl/ncaaf/mlb/soccer. draw is only gradable on soccer h2h — off soccer it comes back unmapped. Free-text game phrases (Chiefs -3.5, Over 47.5 vs Bills, Yankees ML, Yankees to win, Yankees over 4.5 runs, Over 52.5 Syracuse vs Pittsburgh, Novak Djokovic ML) grade when the team or player and event resolve uniquely — Over 47.5 alone stays unmapped and is never the first slate game. A tennis moneyline leftover is a player, not a team; vs is the opponent player. Last-name-only tennis stays unmapped. A last-name-only player prop (Bergeron over 1.5 shots on goal last night) grades when a date is present and that surname is unique in scope — a named sport, team, or event narrows it (Johnson nhl last night); with no such clue, uniqueness is across every prop sport the key can see. No date, or a surname shared by more than one player in that scope, stays unmapped unless a date is present and exactly one of those candidates played in the window (optionally vs a named opponent). A colliding team nickname plus a date promotes only the unique in-window club; a football-sized line will not pick a baseball club. anytime goal / anytime assist (soccer_goals/soccer_assists over 0.5) and over a hit / over a homer (hits/home_runs over 1.0) need no explicit number. Free-text player props are graded only when player and event resolve uniquely — never guesses an ambiguous name. A roster-team mention (CIN, Niners) is resolved first; unique team_id scopes the player, and ambiguou…

NameTypeReqDescription
cluesobjectOptional sport / league / event_id / team_id / team_text hints for free-text mode.
legsarray
textstringFree-text slip (e.g. Chase over 74.5 receiving yards tonight, or Chiefs -3.5 / Over 47.5 vs Bills / Yankees ML / Yankees to win / Yankees over 4.5 runs / Over 52.5 Syracuse vs Pittsburgh / Novak Djok…
NameTypeReqDescription
brandingobject
honestyobject
legsarray
slip_idstring|null
statusstringgraded | partial | pending | unmapped
summaryobject

No examples provided.

list_ev ~285

Beta. List pregame main-line +EV opportunities for a predictive-framework sport (soccer, mlb, tennis, nfl, ncaaf), sorted by ev_pct descending. market=h2h (default, moneyline), spreads, or totals. Tennis totals are not offered (Stage 1 is moneyline + spreads). Same gates as bets[].ev on get_intelligence: sharp-fair price gap, positive and ≤25%, suppressed MLB moneyline null books skipped in favor of the next eligible book. 1 credit. Field catalog: https://lumify.ai/docs/reference#intelligence-ev

NameTypeReqDescription
bookstringRestrict opportunities to one sportsbook slug (e.g. fanduel).
leaguestringOptional league slug (mls, epl, atp, …). Soccer without a league scans every published soccer league (MLS + big-five).
limitintegerMax opportunities to return (1–200). Default 50.
marketstringMain-line family: h2h (default, moneyline), spreads, or totals. Tennis + totals returns 400.
min_evnumberMinimum EV% to include. Default 0. Clamped to 0–25.
sportstringyesSport slug: soccer, mlb, tennis, nfl, or ncaaf.
NameTypeReqDescription
betabooleanAlways true.
bookstring|nullBook filter, or null.
leaguestring|nullLeague filter, or null for the whole sport.
marketstringh2h, spreads, or totals — the family scanned.
max_evnumberStale-line cap (25).
min_evnumberMinimum EV% applied.
opportunitiesarrayPositive-EV main-line rows: {event_id, sport, league, commence_time, home_team, away_team, side, team, bet_type, line, fair_probability, ev}.
sportstringSport slug this scan was run for.
totalintegerCount of opportunities on this page.

No examples provided.

list_events ~386

List events (schedules and live scores), paginated by id (after_id). Filter by sport, league, status, date range, season, or team_id (resolve teams via list_teams / get_team). Returns event id, name, sport/league, start time, status, and venue for each; pass include_scores to also inline participants + scores (intended for small result sets — use get_event for one event's full detail, or query_events for free-text/natural-language filters instead of structured params). include_scores shares the 20/min score-poll budget with get_live_score; prefer the SSE stream for live boards.

NameTypeReqDescription
after_idintegerCursor: return events with id > after_id (from the previous page's next_after_id).
datestringUTC date YYYY-MM-DD (single day).
fromstringUTC start date YYYY-MM-DD.
has_recommendbooleanWhen true, only events with at least one recommended bet.
include_scoresbooleanInline participants + scores in each event (intended for small result sets). Shares the 20/min score-poll budget with get_live_score.
leaguestringLeague slug, e.g. nfl, atp, mls.
limitintegerMax events to return per page.
season_idintegerFilter by season ID (from list_seasons).
sortstringSort order. sort=status is incompatible with after_id.
sportstringSport slug, e.g. mlb, nfl, tennis, soccer.
statusstringFilter to events in this status.
team_idintegerFilter to events where this team participates. Resolve ids via list_teams.
tostringUTC end date YYYY-MM-DD (inclusive).
NameTypeReqDescription
eventsarray
next_after_idinteger|nullPass as after_id to fetch the next page; null on the last page.
totalinteger

No examples provided.

list_forecasts ~357

Daily board of forecasted wagers from Lumify's model — a prediction, not a beat-the-market claim (no OOS/independence gate; see list_ev for the gated main-line +EV claim). Player props (rate model) on MLB, NCAAF, NFL, NBA, NCAAB, NHL. High-confidence main-line picks on tennis, NFL, NCAAF, MLB, and soccer: one side per moneyline / spread / total when the uncertainty band does not include a coin flip. Tennis moneyline is ranking Bradley-Terry; tennis spreads/totals are a Normal-approx games model. Other sports use the published assessment probability. Each wager has p_hit, conviction, and posted books prices. Use list_ev to scan main lines by sharp-fair price gap; use this tool to scan high-probability forecasts. reliability is emerging on v0. 1 credit; empty slate is still 200. How + field catalog: https://lumify.ai/docs/forecasts Worked wager: https://lumify.ai/docs/understanding-odds#forecasts

NameTypeReqDescription
datestringUTC slate date YYYY-MM-DD. Defaults to today UTC.
limitintegerMax wagers (1–100). Default 25.
marketstringMain-line family filter (h2h, spreads, or totals). Main-line sports publish a high-confidence side of each family when the lean clears the coin-flip gate. Ignored on prop-only sports (nba, ncaab, nhl…
sportstringyesSport slug: mlb, ncaaf, nfl, nba, ncaab, nhl, tennis, or soccer.
NameTypeReqDescription
datestringUTC slate date (YYYY-MM-DD).
model_versionstringScorer version (forecast-v0).
reliabilitystringDefault badge on this slate. v0 ships emerging; each wager repeats the same field.
sportstringSport slug this slate was scored for.
totalintegerCount of wagers on this page.
wagersarraySelected forecasted wagers, highest conviction first. Read p_hit as P(the picked outcome — side on prop rows, bet_type on main-line rows — hits); conviction is the board rank. How + field catalog: ht…

No examples provided.

list_seasons ~114

List seasons per sport/league. By default returns only currently active seasons; pass current_only=false to include historical seasons. Optionally filter by sport. Returns each season's id, year, phase, start/end dates, and whether it is_current. Use list_sports for just each sport's current season.

NameTypeReqDescription
current_onlybooleanReturn only currently active seasons (default true). Pass false for historical seasons.
sportstringFilter by sport slug, e.g. nhl, nba, soccer.
NameTypeReqDescription
seasonsarray
totalinteger

No examples provided.

list_sports ~76

List supported sports with their leagues and current season. Returns each sport's id, slug, name, team-sport flag, and its leagues (each with its current_season). Use list_seasons with current_only=false for historical seasons.

NameTypeReqDescription
active_onlybooleanWhen true (default), omit sports with no active coverage.
NameTypeReqDescription
sportsarray
totalinteger

No examples provided.

list_teams ~225

List teams, paginated by id (after_id). Filter by sport, league, conference, division, country, active status, or name (q, partial match). Returns each team's id, slug, name, city, conference/division, venue, and image_url (Lumify media URL, null until ingest). Use get_team for full detail on one id once resolved here.

NameTypeReqDescription
activebooleanFilter by active status.
after_idintegerCursor: last team id from the previous page's next_after_id.
conferencestringConference name, e.g. AFC, Eastern.
countrystringISO country code, e.g. USA.
divisionstringDivision name, e.g. AFC East.
leaguestringLeague slug, e.g. nfl, mls.
limitintegerMax teams to return per page.
qstringTeam name search (partial match).
sportstringSport slug, e.g. nfl, nba, soccer.
NameTypeReqDescription
dataarray
has_moreboolean
next_after_idinteger|nullPass as after_id to fetch the next page; null on the last page.

No examples provided.

query_events ~182

Search events with a natural-language query instead of structured filters — e.g. 'live nfl games today' or 'college basketball this week'. Rule-based (not an LLM): recognizes sport (nfl/nba/mlb/nhl/tennis/soccer/ncaaf/ncaab + aliases like hockey, american football, college basketball), status (live/final/upcoming/…), dates (today/tomorrow, this week, next N days, YYYY-MM-DD ranges). Bare 'football' is ambiguous and left unrecognized. Response includes interpreted filters, equivalent REST call, and unrecognized_terms. Prefer list_events when you already know the structured filters you want.

NameTypeReqDescription
limitintegerOverrides any limit parsed from the query text. Max 100.
querystringyesFree text, e.g. 'live nfl games today'.
NameTypeReqDescription
equivalent_requeststringThe literal GET /v1/events request this query was translated to.
eventsarray
interpretedobjectThe list_events-equivalent filters parsed from the query text (sport, status, date, from, to, limit).
next_after_idinteger|null
querystringThe original natural-language query text.
totalinteger
unrecognized_termsarrayQuery words that didn't map to a known filter.

No examples provided.

resolve_event ~123

Resolve event identity from an event_id, or a player_id/team_id clue plus an optional date window, to a Lumify event_id. Falls back to a player's roster team schedule for team sports (only individual sports like tennis track per-player game participation directly). Combine team_id + opponent_team_id for a specific matchup. Returns ambiguous instead of guessing when the window has more than one candidate — never auto-pick candidates[0].

NameTypeReqDescription
cluesobjectevent_id (ground truth), or player_id/team_id plus a date window.
optionsobject
NameTypeReqDescription
away_teamstring|null
candidatesarray
clues_usedarray
confidencenumber|null
event_idinteger|null
event_statusstring|null
home_teamstring|null
leaguestring|null
match_reasonsarray
messagestring|null
methodstring|null
participant_conflictboolean
sportstring|null
starts_atstring|null
statusstringresolved | ambiguous | not_found | error

No examples provided.

resolve_player ~135

Resolve messy sports player names to a Lumify player_id using sport, team, or event clues. Prefer this before grade_slip when the name is a fragment, initial, or nickname. Returns ambiguous instead of guessing — never auto-pick candidates[0]. A sport-scoped key binds the in-scope side of a collision and returns not_found when every hit is out of scope. Does not grade props.

NameTypeReqDescription
cluesobjectOptional sport, team, event, or position clues.
optionsobject
querystringyesMessy player name or fragment, e.g. J. Chase.
NameTypeReqDescription
candidatesarray
clues_usedarray
confidencenumber|null
display_namestring|null
match_reasonsarray
messagestring|null
player_idinteger|null
sportstring|null
statusstringresolved | ambiguous | not_found | error
team_idinteger|null

No examples provided.

resolve_team ~125

Resolve messy team names, abbreviations, metros, or aliases to a Lumify team_id using sport, league, event, or player clues. Prefer this before list_teams when the string is a nickname or city token. Returns ambiguous instead of guessing — never auto-pick candidates[0]. City-only metros sit below the auto-resolve floor.

NameTypeReqDescription
cluesobjectOptional sport, league, event, player, or team-id clues.
optionsobject
querystringTeam string, e.g. Niners, CIN, NY Giants.
NameTypeReqDescription
abbreviationstring|null
candidatesarray
clues_usedarray
confidencenumber|null
display_namestring|null
leaguestring|null
match_reasonsarray
messagestring|null
methodstring|null
sportstring|null
sport_conflictboolean
statusstringresolved | ambiguous | not_found | error
team_idinteger|null

No examples provided.

search_players ~208

Search players by name, sport, country, ranking, or active status, paginated by id (after_id). Returns the same identity object on every sport (null means unknown, not wrong sport). Tennis standings nest under rankings.{singles, points}; rankings is null on every other sport. Use get_player for full detail on one id, or get_player_events for a player's schedule/results.

NameTypeReqDescription
activebooleanFilter by active status.
after_idintegerCursor: last player id from the previous page's next_after_id.
countrystringISO 3166-1 alpha-3 country code, e.g. USA.
limitintegerMax players to return per page.
qstringName search (partial match).
rankedbooleanIf true, only tennis players with an ATP/WTA singles ranking (rankings.singles).
sportstringSport slug, e.g. tennis, nba.
NameTypeReqDescription
dataarray
has_moreboolean
next_after_idinteger|nullPass as after_id to fetch the next page; null on the last page.

No examples provided.

Common questions

What is the Lumify Sports Intelligence MCP server?

Lumify Sports Intelligence is an MCP server listed in the public MCP registry as ai.lumify/sports-intelligence. Schedules, scores, odds, splits & explainable AI bet confidence, 8+ sports, free instant key. This page covers its hosted endpoint (https://lumify.ai/mcp).

Is the Lumify Sports Intelligence MCP server safe to use?

Lumify Sports Intelligence scores 84 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Lumify Sports Intelligence MCP server expose?

Lumify Sports Intelligence exposes 28 tools: list_sports, list_events, get_event, batch_get_events, query_events, and 23 more. Their descriptions and schemas cost roughly 6,024 tokens of context every time the server is loaded.

Does the Lumify Sports Intelligence MCP server require authentication?

No. We connected to Lumify Sports Intelligence without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the Lumify Sports Intelligence MCP server still maintained?

Lumify Sports Intelligence is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.