PuntersEdge Developers
Use the PuntersEdge API from ChatGPT, Claude, Cursor and Copilot
An assistant that can call this API answers "what is the best price on the favourite in
the next greyhound race" with a live number instead of a guess. There are three ways to
give it that ability, and they suit different hosts: a local MCP server for Claude,
Cursor and Copilot; the OpenAPI schema for a custom GPT or any agent that imports
Actions; and llms.txt for an assistant that can only read URLs. All three
hit the same endpoints and bill the same credits.
Which path fits your assistant
| Claude Desktop, Claude Code, Cursor, VS Code Copilot | MCP server — a local process; the richest option, with costs in every tool description |
|---|---|
| ChatGPT custom GPT, hosted agents, OpenAI Assistants | Import the OpenAPI schema — the assistant calls the REST API directly with your key |
| Anything that reads a URL | llms.txt — a plain-text reference to paste or link, no tools needed |
Each needs an API key for priced calls. Sign up at /api — the free tier is 3,000 credits a month with
no credit card. The three sandbox endpoints under /v1/demo/ need
no key, so an assistant can be wired up before the key arrives.
The MCP server
pip install puntersedge-mcp (or uvx puntersedge-mcp), then
one config block with your key in PUNTERSEDGE_API_KEY. The server exposes
ten read-only tools — next-to-go racing, best odds, results, price history, movers,
sports odds, a usage check and a keyless demo — and returns the remaining credit balance
with every call.
{
"mcpServers": {
"puntersedge": {
"command": "puntersedge-mcp",
"env": { "PUNTERSEDGE_API_KEY": "your-key-here" }
}
}
}
That block is Claude Desktop's claude_desktop_config.json and Cursor's
.cursor/mcp.json as-is. Claude Code takes it as a command:
claude mcp add puntersedge -e PUNTERSEDGE_API_KEY=your-key-here -- puntersedge-mcp.
VS Code with Copilot reads the same command and env from a
servers block in .vscode/mcp.json. The full tool table with
per-tool credit costs, and the snippet for each client, are on the
MCP server page.
Import the OpenAPI schema into a custom GPT or agent
Use the compact schema: the API's data endpoints (racing, archive, sports, best odds, bulk files, sandbox) as one OpenAPI 3.1 document, rebuilt from the live schema whenever it is served:
https://puntersedge.online/openapi-core.json
For a ChatGPT custom GPT: in the GPT editor add an Action, choose
Import from URL and paste that address. Under
Authentication choose API Key, auth type
Custom, header name X-API-Key, and paste your key. Every
operation description fits OpenAI's 300-character Action limit, and each carries its
credit cost in x-credits-cost. The same file works for LangChain's OpenAPI
toolkit, for any agent framework that turns a schema into tools, and as context for a
coding assistant.
The full schema, https://api.puntersedge.online/openapi.json, adds the
account, key, billing and webhook routes and keeps every long description. It is the
one to generate a client from, and too large to import as an Action or read into a
model's context.
Two things worth putting in the GPT's instructions, because the schema cannot say
them: racing is its own endpoint family under /v1/racing/, not a sport
key; and a 402 means the month's credits are spent and retrying cannot
clear it, while a 429 clears in sixty seconds. The
errors page has the full contract.
llms.txt — context without tools
Two plain-text files are written for language models rather than browsers. Paste either into a system prompt, or give the assistant the URL if it can fetch pages:
| puntersedge.online/llms.txt | a short brief — what the API serves, the endpoints, auth, the pricing shape and where to go next |
|---|---|
| puntersedge.online/llms-full.txt | the complete reference in one fetch: every endpoint from the live schema, request and response shapes, the credit cost of each, and measured coverage |
Both are generated when served, so the figures in them are the API's own. An assistant
working from llms-full.txt can write a correct request without a second
crawl; combine it with Path 2 and it can also make the call.
A worked prompt
With any of the three paths set up, this prompt produces a real call:
Through the MCP server the assistant calls
racing_next_to_go(num_races=5, categories="greyhound"); through an
imported schema it makes the equivalent HTTP request:
GET https://api.puntersedge.online/v1/racing/next-to-go?num_races=5&categories=greyhound&country=AU
X-API-Key: your-key-here
Either way the response is an array of races, each with its runners and every
bookmaker's win price per runner, so the assistant reduces to the best price itself, and the call costs 2 credits (JSON). The remaining balance
arrives in the same response — as credits_remaining from the MCP server,
or the X-Credits-Remaining header over HTTP — so the last part of the
prompt needs no second call. The current credit cost of every endpoint is on
/api/pricing.