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 1,500 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
The API publishes a live OpenAPI 3.1 document generated from the running application:
https://api.puntersedge.online/openapi.json
For a ChatGPT custom GPT: in the GPT editor add an Action, choose
Import from URL and paste that address. The document does not carry
a servers block, so enter https://api.puntersedge.online as
the server URL when the importer asks. Under Authentication choose
API Key, auth type Custom, header name
X-API-Key, and paste your key. The same document works for the OpenAI
Assistants API, LangChain's OpenAPI toolkit, and any agent framework that turns a
schema into tools.
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
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. 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.