MCP App Store
Entertainment
Sportily icon

Sportily

by Oglofus

Overview

Sportily helps users discover horse-racing cards, SmartPicks, Value Finder candidates, Race Lens matches, runner profiles, race context, post-race results, and their personal My Picks tracking data through ChatGPT. The app supports access-gated workflows for finding races and horses, analysing race cards, comparing runners, backtesting saved filters, and saving or reviewing private tracked picks.

Tools

add_to_my_picks

ChatGPT
Save a horse to the user's personal My Picks tracker so its result and ROI are tracked over time. Provide the Sportily raceId and horseId (from search_races / get_race_card / discover_* tools). The pick is auto-tagged with the source (claude or chatgpt) so the user can filter by who suggested it. Idempotent — saving the same runner twice will not duplicate it. Use only when the user explicitly asks to save, track, or add a pick.

add_to_my_picks

ChatGPT
Save a horse to the user's personal My Picks tracker so its result and ROI are tracked over time. Provide the Sportily raceId and horseId (from search_races / get_race_card / discover_* tools). The pick is auto-tagged with the source (claude or chatgpt) so the user can filter by who suggested it. Idempotent — saving the same runner twice will not duplicate it. Use only when the user explicitly asks to save, track, or add a pick.

analyze_my_picks

ChatGPT
Analyse the user's My Picks track record: overall strike rate, stake-weighted ROI, beat-SP (closing-line value), max drawdown and win/lose streaks, plus a performance breakdown grouped by a chosen dimension (going, course, country, distance, class, type, or tag) and plain-language best/weakest insights. Use when the user wants to understand patterns in their picks — e.g. 'how do my picks do on soft going' or 'where am I losing money'.

analyze_my_picks

ChatGPT
Analyse the user's My Picks track record: overall strike rate, stake-weighted ROI, beat-SP (closing-line value), max drawdown and win/lose streaks, plus a performance breakdown grouped by a chosen dimension (going, course, country, distance, class, type, or tag) and plain-language best/weakest insights. Use when the user wants to understand patterns in their picks — e.g. 'how do my picks do on soft going' or 'where am I losing money'.

backtest_race_lens

ChatGPT
Backtest one of the authenticated user's saved Race Lens filters, or a draft filterAst, over historical completed races. Race Lens model predicates use the base price-agnostic race model, not SmartPicks or Value Finder tipster percentages. Capped at 60 days for MCP (see the returned days / maxBacktestDays). Note: get_saved_lenses_summary reports metrics over each lens's own original lookback (which can be longer than 60 days), so its numbers will not exactly match this tool's — compare lenses using results computed by this tool over the same days. Returns performance, sample selections, and concrete filterAst improvement ideas to try next.

backtest_race_lens

ChatGPT
Backtest one of the authenticated user's saved Race Lens filters, or a draft filterAst, over historical completed races. Race Lens model predicates use the base price-agnostic race model, not SmartPicks or Value Finder tipster percentages. Capped at 60 days for MCP (see the returned days / maxBacktestDays). Note: get_saved_lenses_summary reports metrics over each lens's own original lookback (which can be longer than 60 days), so its numbers will not exactly match this tool's — compare lenses using results computed by this tool over the same days. Returns performance, sample selections, and concrete filterAst improvement ideas to try next.

compare_runners

ChatGPT
Use for horse-vs-horse comparison in a Sportily race. Returns focused evidence for selected runners; treat model percentages as directional analytics signals, not absolute truth.

compare_runners

ChatGPT
Use for horse-vs-horse comparison in a Sportily race. Returns focused evidence for selected runners; treat model percentages as directional analytics signals, not absolute truth.

discover_racing_picks

ChatGPT
Use by default when a user asks for horse-racing picks, good horses, value, SmartPicks, Value Finder, or Sportily analytics candidates. For a specific request, drill into that pick immediately. For a broad scan, score the candidates first and analyse the top 2-3 races in parallel. The goal is to test whether model% is realistic, not just restate it. Only return a bare list if the user explicitly asks for a list.

discover_racing_picks

ChatGPT
Use when a user asks for broad horse-racing picks, good horses, value, SmartPicks, Value Finder, or Sportily analytics candidates. This is a candidate-discovery step, not a final verdict. Call once per date/source/filter set in a user turn; for broad scans, score candidates and analyse at most the top 3 raceIds. Only return a bare list if the user explicitly asks for a list.

find_horses

ChatGPT
Use by default when a horse-racing user names a horse, asks about a runner, or needs Sportily runner matching. Finds runners by partial horse name, or lists runners for a date so the MCP client can match a horse.

find_horses

ChatGPT
Use when a horse-racing user names a horse and the Sportily horseId/raceId is not yet known. Finds runners by partial horse name, or lists runners for a date so the MCP client can match a horse. Once the runner is resolved, do not repeat this lookup for the same horse in the same user turn.

find_races

ChatGPT
Use by default when a user asks what horse races are on, asks for a course without a race id, or needs Sportily race ids. Lists racecourses and race ids for a date.

find_races

ChatGPT
Default tool for "what races are on?" — lists a full day's racecourses and race ids grouped by course, with today/tomorrow selection and an upcomingOnly filter. Use search_races instead when the user already named a specific course/date and you only need a quick flat list of matching race ids.

get_external_race_context

ChatGPT
Fetch validated industry context for a Sportily race. Call automatically after get_race_card when externalResearchTargets are available. Returns status and extracted facts — fold insights into analysis without naming the source.

get_external_race_context

ChatGPT
Fetch validated industry context for a Sportily race. Use at most once after get_race_card when externalResearchTargets are available and the user wants a full/deep verdict or outside context would materially help. Returns status and extracted facts — fold checked, matched facts into analysis without naming the source.

get_horse_profile

ChatGPT
Use after finding a Sportily horse id when a horse-racing user asks for an opinion, profile, form view, or analysis of a named horse. Fetches career stats, upcoming races, and recent runs; open the race card before a race verdict.

get_horse_profile

ChatGPT
Use after finding a Sportily horse id when a horse-racing user asks for an opinion, profile, form view, or analysis of a named horse. Fetches career stats, upcoming races, and recent runs; open the race card before a race verdict.

get_race_card

ChatGPT
Use by default when the user asks to analyse a horse race, Sportily race, runner, racecard, or named horse in a specific race. Fetches a pre-race analytics payload with race, runner, model, market price, stats, past-performance, response-shape, and external-research guidance. Target-race result fields are intentionally omitted so historical analysis can be run blind.

get_race_card

ChatGPT
Use when a raceId is known and the user asks to analyse a horse race, Sportily race, runner, racecard, or named horse in a specific race. Fetches the primary pre-race analytics payload with race, runner, model, market price, stats, past-performance, response-shape, and external-research guidance. Call once per raceId in a user turn unless the previous call failed. Target-race result fields are intentionally omitted so historical analysis can be run blind.

get_race_results

ChatGPT
Use when the user asks who won, what happened, or wants explicit result data for a Sportily race. This is the post-race companion to get_race_card and exposes outcome fields intentionally hidden from the analysis payload.

get_race_results

ChatGPT
Use when the user asks who won, what happened, or wants explicit result data for a Sportily race. This is the post-race companion to get_race_card and exposes outcome fields intentionally hidden from the analysis payload.

get_saved_lenses_summary

ChatGPT
List the authenticated user's saved Sportily Race Lens filters with compact backtest metrics and lens ids. Step 1 of the lens flow: use this before get_upcoming_lens_matches (to run lenses on upcoming races) or backtest_race_lens (to re-test over history) when the user wants to choose a specific saved lens, system, filter, or angle. Each lens's backtest metrics use its own stored lookback (backtest.days), which may exceed the 60-day MCP backtest cap.

get_saved_lenses_summary

ChatGPT
List the authenticated user's saved Sportily Race Lens filters with compact backtest metrics and lens ids. Step 1 of the lens flow: use this before get_upcoming_lens_matches (to run lenses on upcoming races) or backtest_race_lens (to re-test over history) when the user wants to choose a specific saved lens, system, filter, or angle. Each lens's backtest metrics use its own stored lookback (backtest.days), which may exceed the 60-day MCP backtest cap.

get_upcoming_lens_matches

ChatGPT
Run the authenticated user's saved Sportily Race Lens filters against upcoming races in the next 24 hours. Use when the user asks for their Race Lens results, saved-lens matches, custom systems, filters, angles, or upcoming runners found by their lenses. Race Lens model fields use the base price-agnostic race model and can differ from SmartPicks or Value Finder tipster percentages. User-specific: only the connected user's saved lenses are considered. Step 2 of the lens flow — call get_saved_lenses_summary first if you need lens ids or want the user to choose specific lenses.

get_upcoming_lens_matches

ChatGPT
Run the authenticated user's saved Sportily Race Lens filters against upcoming races in the next 24 hours. Use when the user asks for their Race Lens results, saved-lens matches, custom systems, filters, angles, or upcoming runners found by their lenses. Race Lens model fields use the base price-agnostic race model and can differ from SmartPicks or Value Finder tipster percentages. User-specific: only the connected user's saved lenses are considered. Step 2 of the lens flow — call get_saved_lenses_summary first if you need lens ids or want the user to choose specific lenses.

list_my_picks

ChatGPT
Return the user's saved My Picks with live result and stake-weighted ROI for each, plus headline performance (strike rate, ROI points, beat-SP rate, drawdown, streaks). Use when the user asks what they have saved, how their picks are doing, or for their track record.

list_my_picks

ChatGPT
Return the user's saved My Picks with live result and stake-weighted ROI for each, plus headline performance (strike rate, ROI points, beat-SP rate, drawdown, streaks). Use when the user asks what they have saved, how their picks are doing, or for their track record.

list_race_lens_filters

ChatGPT
List the available Sportily Race Lens filter fields, operators, value types, and example predicates, plus the filterAst shape and rules. Use this when helping a user build or edit a lens. Model fields in this catalog use the base price-agnostic race model, not SmartPicks or Value Finder tipster percentages. Build flow: call this for the catalog, then backtest_race_lens with a draft filterAst to test the idea over history before saving. Note: a filterAst is a flat list of AND-ed predicates — there is no nested OR.

list_race_lens_filters

ChatGPT
List the available Sportily Race Lens filter fields, operators, value types, and example predicates, plus the filterAst shape and rules. Use this when helping a user build or edit a lens. Model fields in this catalog use the base price-agnostic race model, not SmartPicks or Value Finder tipster percentages. Build flow: call this for the catalog, then backtest_race_lens with a draft filterAst to test the idea over history before saving. Note: a filterAst is a flat list of AND-ed predicates — there is no nested OR.

remove_from_my_picks

ChatGPT
Remove a previously saved horse from the user's My Picks tracker, identified by raceId and horseId. Use only when the user explicitly asks to remove or delete a saved pick.

remove_from_my_picks

ChatGPT
Remove a previously saved horse from the user's My Picks tracker, identified by raceId and horseId. Use only when the user explicitly asks to remove or delete a saved pick.

search_races

ChatGPT
Use by default for horse-racing race lookup requests, including races, racecards, runners at a course, or requests that say "on Sportily". Finds Sportily race cards by date, course, and region.

search_races

ChatGPT
Quick, flat race lookup when the user already names a course and/or date and you just need the matching Sportily race ids (returns up to 25 races, ordered by off time). For browsing a whole day's card grouped by course, or to filter to upcoming-only / today / tomorrow, use find_races instead.

Capabilities

Writes

App Stats

34

Tools

ChatGPT

Platforms

Works with

ChatGPT

Data refreshed daily