18+ Only  |  Gambling can be addictive — please gamble responsibly  |  Gambling Help: 1800 858 858  |  GambleAware

PuntersEdge Developers

Live odds for AI agents, with nothing to install

A hosted Model Context Protocol server for the PuntersEdge racing and sports odds API. Give any MCP client or agent platform one URL and your API key, and it can read every bookmaker's live prices, the best price per runner, what is moving, results, form and the closing-line archive. Each call is billed exactly like the REST call behind it.

Endpoint

https://api.puntersedge.online/mcp

Authentication

X-API-Key: your API key
or Authorization: Bearer your API key

Transport

Streamable HTTP · POST · stateless
MCP 2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05

What an agent gets back from odds_board: each bookmaker listed once, and every runner's prices lined up beneath it.
Grafton R1 · winladbrokes_ausportsbettabbetrightunibet
2 Fabulous Fiano7.007.508.007.006.00
3 Foxwedge Arrow46.0041.0051.00——
quote age, s11961412

The documented example race from the API reference, abridged to two runners. Live calls return every runner, place prices and every book quoting the race.

Connect your client

Every route passes your key as a header; nothing runs on your machine. A free key is 3,000 credits a month with no card. Connectors added through the claude.ai or ChatGPT settings screens sign in with OAuth, which this endpoint does not use, so connect through one of the routes below.

Claude Code

One command, from the project directory. Add -s user to use it in every project.

claude mcp add --transport http puntersedge https://api.puntersedge.online/mcp \
  --header "X-API-Key: YOUR_KEY"

Claude API (MCP connector)

Claude connects to the server itself during the request; your code holds no tool logic.

import os

import anthropic

client = anthropic.Anthropic()
response = client.beta.messages.create(
    model="claude-opus-5-5",
    max_tokens=4096,
    betas=["mcp-client-2025-11-20"],
    mcp_servers=[{
        "type": "url",
        "url": "https://api.puntersedge.online/mcp",
        "name": "puntersedge",
        "authorization_token": os.environ["PUNTERSEDGE_API_KEY"],
    }],
    tools=[{"type": "mcp_toolset", "mcp_server_name": "puntersedge"}],
    messages=[{"role": "user", "content": "Best price for every runner in the next race at Randwick?"}],
)

OpenAI Responses API

The key goes in the tool's authorization field. Every tool is read-only, so approval can be skipped.

import os

from openai import OpenAI

client = OpenAI()
response = client.responses.create(
    model="<your OpenAI model>",
    tools=[{
        "type": "mcp",
        "server_label": "puntersedge",
        "server_url": "https://api.puntersedge.online/mcp",
        "authorization": os.environ["PUNTERSEDGE_API_KEY"],
        "require_approval": "never",
    }],
    input="Which runners are firming across several bookmakers right now?",
)

Cursor

.cursor/mcp.json in the project, or ~/.cursor/mcp.json for every project:

{
  "mcpServers": {
    "puntersedge": {
      "url": "https://api.puntersedge.online/mcp",
      "headers": { "X-API-Key": "YOUR_KEY" }
    }
  }
}

VS Code and GitHub Copilot

.vscode/mcp.json. VS Code prompts for the key once and stores it, so it stays out of the file:

{
  "inputs": [
    { "type": "promptString", "id": "puntersedge-key", "description": "PuntersEdge API key", "password": true }
  ],
  "servers": {
    "puntersedge": {
      "type": "http",
      "url": "https://api.puntersedge.online/mcp",
      "headers": { "X-API-Key": "${input:puntersedge-key}" }
    }
  }
}

Claude Desktop

Claude Desktop's Connectors screen signs in with OAuth, so pass the key through the mcp-remote bridge in claude_desktop_config.json (Settings → Developer → Edit Config), then restart Claude Desktop. Needs Node.js.

{
  "mcpServers": {
    "puntersedge": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://api.puntersedge.online/mcp",
               "--header", "X-API-Key:${PUNTERSEDGE_API_KEY}"],
      "env": { "PUNTERSEDGE_API_KEY": "YOUR_KEY" }
    }
  }
}

Microsoft Copilot Studio

  1. In your agent, open Tools → Add a tool → New tool → Model Context Protocol.
  2. Server URL: https://api.puntersedge.online/mcp.
  3. Authentication: API key, sent as a header named X-API-Key.
  4. Create the connection with your key, then add the tools you want the agent to use.

n8n

  1. Add an MCP Client Tool node to your AI Agent.
  2. Endpoint: https://api.puntersedge.online/mcp; transport: HTTP Streamable.
  3. Authentication: Header Auth with the name X-API-Key and your key as the value.

LangChain and LangGraph

With langchain-mcp-adapters, the tools load like any other LangChain tools:

import os

from langchain_mcp_adapters.client import MultiServerMCPClient

client = MultiServerMCPClient({
    "puntersedge": {
        "transport": "streamable_http",
        "url": "https://api.puntersedge.online/mcp",
        "headers": {"X-API-Key": os.environ["PUNTERSEDGE_API_KEY"]},
    }
})
tools = await client.get_tools()

Any HTTP client

Every request stands alone, so one POST is a complete tool call:

curl -s https://api.puntersedge.online/mcp \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $PUNTERSEDGE_API_KEY" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
       "params":{"name":"odds_board","arguments":{"num_races":3,"country":"AU"}}}'

Tools

All read-only. Each tool calls one endpoint and costs what that endpoint costs. A tool your plan does not include answers with the plans that do, and is not billed.

Live market
ToolWhat it returnsCreditsPlan
odds_boardLive odds board The next races to run with EVERY bookmaker's current win and place price for every runner, as a compact matrix: each race lists its bookmakers (with the age of each book's quote) and each runner carries price arrays in that order. The fastest way to see the whole live market. For the best price per runner use best_odds; for one race in depth use race_odds. 2 credits Every plan
race_oddsOne race, every bookmaker One upcoming race in full: every runner with every bookmaker's win, place and (where offered) top 2/3/4 price, each book's quote age, scratchings and race conditions. Give the venue plus race_number or race_id; with only a venue you get that venue's next race. The call is billed even when the race is not on the live board (already run or not yet priced); the reply then lists the races that are. 2 credits Every plan
best_oddsBest price per runner The best available win and place price for every runner in upcoming races and which bookmaker has it, after PuntersEdge's guards (books pricing under 100%, quotes read before a scratching and placeholder prices never win). Also how many books quote each runner, the best-vs-worst spread, and each race's market percentage on best prices. 3 credits Every plan
odds_changesPrices that changed since a cursor Only the racing prices that moved since your last call, so an agent or pipeline can follow the whole market cheaply. First call: omit cursor (covers the last 60 seconds). Every reply has next_cursor; pass it back as cursor on the next call, within 30 minutes. Delivery is at-least-once: de-duplicate on (race_id, runner number, bookmaker, updated_at). 2 credits Every plan
market_moversFirming and drifting runners Runners whose price has moved across several bookmakers since they opened (steam and drift), with the consensus open and current price and how many books confirm the move. 3 credits Every plan
race_cardRace card (no prices) Upcoming races without prices: race_id, venue, race number, start time, distance, track condition, status, runners and scratchings. The cheapest way to find race_ids for the other tools. 1 credit Every plan
race_marketsAll markets for one race Every bookmaker's prices for one race across win, place and top 2/3/4, plus exotic dividends once settled. Live prices before the jump, each book's closing price after it. Give race_id, or venue + meeting_date + race_number. 2 credits Plus and above
Pricing analysis
ToolWhat it returnsCreditsPlan
consensus_priceMargin-free consensus price Each runner's consensus probability and fair price for one race, built by removing every bookmaker's margin and combining the books, with the books included and excluded and why. 3 credits Every plan
race_intelligenceRace market intelligence A one-race market read: consensus at each mark, how the market has moved, which books lead or lag, and the signals PuntersEdge derives from them. 3 credits Every plan
price_historyPrice history for one race Every bookmaker's price path for each runner in one race: open, close, high and low, and optionally the time series. Give race_id, or venue + race_number + date. 5 credits Every plan for races in the last 24 hours; Standard and above for older races
market_summarySettled market summary Per-runner market summary for past races: opening and closing consensus, the move between them and its signal class (strong_firm, firm, steady, drift, strong_drift). 5 credits Standard and above (last 90 days); Plus and above for the full archive
closing_linesClosing prices archive Each bookmaker's closing price per runner from the archive, for model building, CLV and settlement checks. Closing-only rows by default (last quote within 5 minutes of the jump). 5 credits Standard and above (last 90 days); Plus and above for the full archive
evaluate_clvClosing line value for your bets Grade up to 200 bets against the closing line: for each bet, the closing price (that book's, or the market best/median), CLV percent and P&L line. Name each race by race_id or venue + meeting_date + race_number, and each runner by runner_number or runner_name. 5 credits per request Plus and above
Results and form
ToolWhat it returnsCreditsPlan
race_resultsRace results Settled results: placings with settled prices, starting prices where published, and dividends. Use date for a past day or hours_back for the latest. 2 credits Every plan
race_formForm for a whole field Recent runs and form stats for every runner in one race. Give race_id, or venue + meeting_date + race_number. 3 credits Every plan
horse_formOne horse's form A thoroughbred's recent starts and statistics, by name or the pe:/ra: reference other tools return. 3 credits Every plan
track_conditionsTrack conditions Track rating, rail, weather and every logged change for a meeting day (defaults to today). 1 credit Every plan
acceptancesAcceptances and fields Accepted fields for upcoming Australian meetings: runners, barriers, jockeys, trainers and weights, before the markets open. 2 credits Every plan
Sports
ToolWhat it returnsCreditsPlan
sports_listSports covered Every sport and league with live odds, its sport_key and how many events and bookmakers it has. 1 credit Every plan
sports_oddsSports odds by bookmaker Every bookmaker's head-to-head, line and total prices for a sport's upcoming events. 1 credit per market requested Every plan
sports_best_oddsBest sports prices The best price for each outcome of a sport's upcoming events and which bookmaker has it. 3 credits Every plan
sports_movementsSports price movements How a sport's prices have moved since a time (default the last 24 hours), per bookmaker and outcome. 5 credits Standard and above
Account and operations
ToolWhat it returnsCreditsPlan
account_statusYour plan, credits and limits This API key's plan, credits used and remaining this month, burn rate, projected run-out date, requests-per-minute limit and the endpoints using the most credits. Call it before a large job. 0 credits Every plan
feed_healthBookmaker feed health Live health of every bookmaker feed: seconds since its last good poll, whether it is stale or degraded. For operations teams deciding whether to trust a price right now. 1 credit Every plan
bulk_datasetsBulk dataset catalogue The downloadable Parquet/CSV datasets (closing lines, price paths, results) and which days and months exist. Files are downloaded over REST with your key, never through MCP: GET https://api.puntersedge.online/v1/bulk/{dataset}/{period} (20 credits per day file, 100 per month file). 0 credits Business and above
racing_sampleLive racing sample (no key) A small live sample of the next races with a few bookmakers' win prices, to see the data before you connect a key. 0 credits No key needed

Follow the whole market for a few credits a minute

odds_changes returns only the prices that moved since your last call. Call it once without a cursor, then pass each reply's next_cursor back. Delivery is at-least-once, so de-duplicate on race, runner number, bookmaker and updated_at. A cursor older than 30 minutes is refused without charge; call odds_board to start again.

{"name": "odds_changes", "arguments": {"country": "AU"}}
→ {"next_cursor": "2026-10-22T05:06:08Z", "change_count": 41, "races": [...]}

{"name": "odds_changes", "arguments": {"country": "AU", "cursor": "2026-10-22T05:06:08Z"}}

Billing, limits and control

Hosted or local?

Hosted (this page)Local package
InstallNothing: a URL and a headerpip install puntersedge-mcp, Python 3.10+
RunsOn PuntersEdge's serversOn your machine, next to the client
Works withAgent platforms and IDEs: the Claude API, the OpenAI Responses API, Copilot Studio, n8n, LangChain, Claude Code, Cursor, VS CodeMCP hosts that start a local process: Claude Desktop, Claude Code, Cursor
OutputTyped results (structuredContent with an output schema) plus a compact text formJSON text
BillingIdentical: each tool call costs what its endpoint costs

Protocol details

Endpointhttps://api.puntersedge.online/mcp
TransportStreamable HTTP. Clients POST JSON-RPC and get JSON back; GET answers 405.
Protocol versions2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05. Clients that open with initialize and clients that send the version on every request are both served.
SessionsNone. Every request stands alone, so a reconnect costs nothing.
Resourcespuntersedge://reference/plans, puntersedge://reference/tools, puntersedge://reference/data-dictionary, puntersedge://reference/licence. Free to read.
Promptspre_race_market_brief, trading_desk_sheet, steam_watch, clv_review
Manifesthttps://api.puntersedge.online/mcp/manifest.json (no key needed)

Using the data

What you may do with PuntersEdge data, including showing prices to your own users, depends on your plan and is set out in section 8.1 of the Terms. Read it before an agent's output reaches anyone outside your business.

This site contains wagering-related analysis and is intended for Australian users aged 18+. Gambling involves risk. Please gamble responsibly.