racing-alpha-mcp
Racing Alpha MCP server
GB & Irish horse racing signals for AI agents — the official Model Context Protocol server from Racing Alpha.
Remote server (Streamable HTTP, no install):
https://racingalpha.co.uk/api/mcpListed on the official MCP Registry as
uk.co.racingalpha/signals.
Connect
Claude Code:
claude mcp add --transport http racing-alpha https://racingalpha.co.uk/api/mcpGeneric MCP client config:
{
"mcpServers": {
"racing-alpha": {
"type": "http",
"url": "https://racingalpha.co.uk/api/mcp"
}
}
}Works keyless (50 requests/day per IP). A free key raises that to
1,000/day — get one at
racingalpha.co.uk/developers
and pass it as Authorization: Bearer ra_live_….
Stdio-only client? Use the bundled zero-dependency bridge:
npx github:qtexuk/racing-alpha-mcp
# or with a key:
RACING_ALPHA_API_KEY=ra_live_… npx github:qtexuk/racing-alpha-mcpOr via Docker:
docker build -t racing-alpha-mcp . && docker run -i racing-alpha-mcpRelated MCP server: crypto-quant-signal-mcp
Tools
Tool | What it returns |
| Today's GB & IRE races with Racing Alpha's published model picks (advised prices database-frozen at publication) |
| Per-runner AI scores (0–100), de-overrounded fair prices, value vs fair, plus the race's draw-bias verdict |
| The public tips ledger — every pick frozen at publication with result, level-stakes P/L, and closing-line-value summary. Losses included; that is the point. |
| 3-year draw-bias aggregates (IV / A–E / PRB) by course, surface, and distance band |
| Trainer×jockey strike rates over settled races |
What this is (and isn't)
Everything served is a Racing Alpha computation — model scores, de-overrounded consensus prices, statistical aggregates, and our own published tips record. It is not a raw racecards/odds/ratings feed.
The differentiator: every prediction Racing Alpha publishes is
database-frozen at publication with a public audit table. Agents can
verify the full track record — including losing runs — before trusting
a single signal, via get_tips_ledger or
racingalpha.co.uk/performance.
Fair use
Attribution required on the free tier: "Signals by Racing Alpha" linked to racingalpha.co.uk.
Not for betting operators or sportsbooks.
Don't present the signals as guaranteed winners — the public ledger exists precisely so nobody has to take our word for anything.
18+ audiences · BeGambleAware.org
REST equivalent + OpenAPI spec: racingalpha.co.uk/developers
Available Tools
5 toolsget_combo_statsB
Trainer×jockey combination strike rates over settled GB & IRE races in Racing Alpha's archive.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max combos (default 100) | |
| min_runs | No | Minimum runs together (default 5) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the context of 'settled GB & IRE races' and 'archive', which clarifies data scope. However, with no annotations provided, the description carries the full burden for behavioral disclosure. It does not state whether the tool is read-only, how results are ordered, or any limitations like pagination, defaults, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, highly focused sentence that front-loads the core purpose. It avoids redundancy and is appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description gives the essential scope but lacks context about the return format, default sort order, or what 'strike rates' precisely means (e.g., win percentage). With no output schema or annotations, it is minimally adequate for a simple query tool, but leaves some ambiguity about the exact response structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters (limit and min_runs) are fully described in the input schema, including defaults. The description adds no additional parameter meaning beyond the schema. Since schema coverage is 100%, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: retrieving trainer×jockey combination strike rates. It names the specific resource (combination strike rates) and the data scope (settled GB & IRE races), which distinguishes it from sibling tools like get_today_races or get_draw_bias.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidance is provided. The description does not mention when to use this tool over alternatives, nor does it name any sibling tools or exclusions. An agent would have to infer from the name that this is for combo stats, but there is no explicit context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_draw_biasA
3-year draw-bias aggregates for GB & IRE flat courses: impact value (IV), actual/expected (A-E) and percentage-of-rivals-beaten (PRB) by stall third, per course, surface and distance band.
| Name | Required | Description | Default |
|---|---|---|---|
| course | No | Optional course name filter, e.g. 'lingfield' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full transparency burden. It discloses the aggregation period (3 years), scope (GB & IRE flat courses), metrics, and grouping by stall third, course, surface, and distance band. It does not, however, describe the output format or default behavior when no course parameter is supplied, which is covered only in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, information-dense sentence that front-loads the tool's purpose and immediately lists the metrics and grouping dimensions. No wasted words; every element adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one optional parameter, no annotations, and no output schema, the description provides substantial context: time range, geography, race type, and metrics. It lacks explicit return-structure details, but given the simplicity of a single-parameter query, the description is almost complete. Would be a 5 with clarity on what is returned when the course filter is omitted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully covers the single optional 'course' parameter with an example ('lingfield'), giving 100% schema coverage. The description does not add information about parameters beyond what the schema already provides, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it provides 3-year draw-bias aggregates for GB & IRE flat courses, listing the specific metrics (IV, A-E, PRB) and grouping dimensions. This distinguishes it from sibling tools like get_today_races and get_race_signals, which focus on different data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for accessing historical draw-bias statistics on flat courses, but offers no explicit guidance on when to use this tool versus alternatives like get_combo_stats or get_race_signals. No 'when to use' or 'when not to use' is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_race_signalsA
Racing Alpha's derived signals for one race: per-runner AI score (0-100), de-overrounded fair price, value vs fair, plus race-level draw-bias verdict and the frozen model pick if the race made the public card.
| Name | Required | Description | Default |
|---|---|---|---|
| race_id | Yes | Race id from get_today_races, e.g. rac_32294027584 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden. It discloses the 'frozen model pick' and the conditional 'if the race made the public card', hinting at statefulness. However, it does not explain caching, error handling, or prerequisites, leaving some transparency gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the core purpose and enumerates all key outputs. It is efficient, though slightly dense with specialized terms like 'de-overrounded', which is acceptable for the domain.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description lists the available signals, which compensates reasonably. It falls short of describing the response structure or edge cases (e.g., invalid race_id, race not on the public card), leaving some completeness gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers the single 'race_id' parameter with a clear description and example. The tool description adds no additional parameter semantics, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning derived signals for a single race, listing specific outputs like AI score, fair price, and value. It distinguishes this from sibling tools like get_today_races (list) and get_draw_bias (race-level verdict).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for one race' implies usage for specific race analysis, but there is no explicit guidance on when to choose this over get_draw_bias or get_combo_stats. No alternatives or exclusions are mentioned, leaving usage to implication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tips_ledgerA
Racing Alpha's public tips ledger — every pick database-frozen at publication with result, level-stakes P/L, and closing-line-value summary. Includes losses; that is the point.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Picks to return (default 50, newest first) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses that picks are database-frozen at publication, includes losses intentionally, and provides specific metrics. This adds meaningful behavioral context beyond the name, though it omits details like default ordering or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tight, front-loaded, and every phrase adds value. It communicates essence, content, and a key nuance (losses) in just two sentences without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, the description fully covers what the tool returns and its key characteristics. No further context seems necessary for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single limit parameter, which already includes a clear description (default 50, newest first). The tool description adds no additional parameter information, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as Racing Alpha's public tips ledger, with specific details on content (picks, results, P/L, CLV). This distinguishes it from sibling tools like get_today_races or get_race_signals, which focus on different data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied by the description but not explicitly stated. It does not explain when to choose this over siblings or when not to use it, but the ledger-specific language provides reasonable inference for a tips history tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_today_racesA
Today's GB & IRE horse races with Racing Alpha's published model picks (advised prices are database-frozen at publication). Returns race ids usable with get_race_signals.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the transparency burden. It discloses a non-obvious behavioral trait: advised prices are database-frozen at publication, and it also states the return type (race ids). This is adequate context for a read-only getter, though it could mention timezone or what other fields are included.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with the first sentence front-loading the core purpose. The parenthetical adds critical pricing nuance without bloat, and the second sentence provides a useful workflow pointer. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless getter with no output schema, the description specifies the scope (today, GB & IRE), the special pricing behavior, and the downstream use of race ids. It could mention what other race data is returned, but this is sufficient given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so schema coverage is trivially 100%. The description adds no parameter meaning, but none is needed; the baseline for 0-param tools is 4, and the description correctly focuses on output semantics instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb+resource: it retrieves today's GB & IRE horse races with Racing Alpha's model picks. It also distinguishes from siblings by specifying the output is race ids usable with get_race_signals, making its role unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for obtaining today's race list and provides a clear follow-up action ('usable with get_race_signals'), establishing context. It does not explicitly contrast with alternatives like get_tips_ledger or get_draw_bias, so it lacks explicit 'when not to use' guidance.
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.
5 tool updates
v0.1.0- First observed
get_combo_stats - First observed
get_draw_bias - First observed
get_race_signals - First observed
get_tips_ledger - First observed
get_today_races
TDQS
Scored across 5 tools
Each tool targets a distinct question: race lists, per-race signals, tips ledger, draw bias stats, and trainer-jockey combos. There is no functional overlap, making selection unambiguous.
All tools follow the same get_<object> pattern (e.g., get_today_races, get_race_signals). The naming is predictable and consistent.
Five tools is a well-scoped size for a horse racing tips-and-stats server. Each tool fills a clear role without redundancy or bloat.
The core workflow is covered: browse today's races, drill into signals, check historical tips, and consult statistical context. Minor gaps exist like historical racecards or non-today races, but they don't undermine the primary purpose.
Maintenance
Related MCP Connectors
GB & IRE horse racing signals: AI scores, fair prices, draw bias, and a frozen public tips ledger.
Grounded sports predictions plus European soccer and tennis arbitrage data for AI agents.
Live trading-pipeline intelligence for AI agents: signal scoring, calibration, recorded outcomes.
Validated trading edges across futures, equities, crypto. Live signals, full audit trail.
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceMartingale Intelligence for AI trading agents. Provides proprietary scores and sequence parameters for 250+ crypto and stock instruments to evaluate martingale strategy suitability.-
- AlicenseAqualityAmaintenanceAI-native quantitative trading signal engine for crypto and TradFi perpetuals. Multi-factor composite BUY/SELL/HOLD signals, cross-venue funding rate arbitrage scanning, and market regime detection powered by Hyperliquid data.82,045 npm8MIT
- AlicenseAqualityAmaintenanceAnti-firehose options-flow data for AI agents: curated daily pool, features, realized outcomes.9MIT
- AlicenseAqualityBmaintenanceMCP server that brings live Australian racing and sports odds from 12 bookmaker/exchange sources into AI assistants, with per-price age data and tools for next races, best odds, results, and movers.9MIT