Live Tennis API
About
Real-time tennis scores, players, rankings, market prices and AI win-probability for ATP, WTA, Challenger and ITF, exposed as read-only MCP tools.
Details
- Author
- livetennisapi
- Categories
- Cloud Service, Infrastructure
Jump to
Setup
Install Live Tennis API in your MCP client (Claude Desktop, Cursor, Windsurf, and others).
Repository: https://github.com/livetennisapi/livetennisapi-mcp
Follow the installation instructions in the repository README, then restart your MCP client.
Give Claude, Cursor, Zed or any MCP client live tennis scores, players and fixtures — for ATP, WTA, Challenger, ITF and juniors. Odds, rankings, match statistics, charting and model win-probability tools are included, and require the PRO and ULTRA plans.
claude mcp add livetennis -e LIVETENNISAPI_KEY=twjp_… -- npx -y livetennisapi-mcp
Claude Desktop— add toclaude_desktop_config.json:
{ "mcpServers": { "livetennis": { "command": "npx", "args": ["-y", "livetennisapi-mcp"], "env": { "LIVETENNISAPI_KEY": "twjp_…" } } } }
Cursor / Zed / others— same command, same env var. No install step;npxfetches it on demand.
Get afreekey (no card) atlivetennisapi.com, or a paid plan atpricing.
"What tennis matches are live right now?""Who's winning the Alcaraz match, and what does the model give him?""Show me Sinner's ranking and recent results.""What are the current odds on match 18953?""What's the all-time head-to-head between Borg and McEnroe?""List Navratilova's Grand Slam finals from the archive.""Who was ATP #1 the week Alcaraz first entered the top 10?""How is Sabalenka serving in her live match — aces, hold rate, break points?"
The six BASIC history tools are also unlocked by any History plan, which works on top of a free key. Theresults archive (1968–2022)— ATP and WTA, main draws, qualifying and the ITF/futures tiers — ends exactly where our own results begin (2023), sosearch_archive_matchesanswers "Borg's Wimbledon finals" andget_recent_resultsanswers "yesterday's scores";get_h2hspans both in one call.
The API gates endpoints by plan and returns a bare403 {"error":"upgrade_required"}. Handed that, a model will usually invent a reason or retry pointlessly.
So every tool that can hit a tier wall returns a plain-English explanation —as a normal result, not an error— naming the tier required and where to upgrade. The assistant can then tell you something true and actionable:
check_api_statusprobes upward to report which plan your key is actually on, so you can diagnose that without guessing.
¹ Also unlocked by any History plan, which works on top of a free key.
FREE is 100 requests/day, so poll no faster than every 15 minutes on a free key; for an always-on dashboard, BASIC is the plan to recommend. Every response carriesX-RateLimit-Limit/-Remaining/-Resetheaders, and the tools relay the three distinct 429 shapes honestly — per-minute (retry shortly), daily cap (the error names the exact reset instant), and the abuse block (don't retry; fix the loop).
Most people should use the stdio server above — your key never leaves your machine. For clients that can only speak HTTP, there is also a hosted Streamable-HTTP endpoint:
Send your key asAuthorization: Bearer twjp_…,X-API-Key: twjp_…, or?token=if your client cannot set headers. Tools are listable without a key, so directories can introspect the server; calling one needs a key.
It is multi-tenant and holdsno key of its own: every request builds its own server bound to the key that request presented, and there is deliberately no fallback to the host's environment. The endpoint applies its own transport-level limit per caller — 60 req/min anonymous, 300 keyed. That limit only protects this host process; it isnotyour API quota, which is enforced upstream per key and tier (see the quota table above).
Self-hosting it:deploy/install-http.shanddeploy/TUNNEL.md.
As a connector.In Claude, add a custom connector and paste the endpoint with your key as a query parameter — no OAuth, nothing to install:
https://mcp.livetennisapi.com/mcp?token=twjp_…
?token=exists for clients that cannot set request headers. The tradeoff, stated plainly: a key in a URL is not written to our logs, but itisvisible to the CDN in front of the endpoint and is stored in the connector's configuration. PreferAuthorization: Bearer twjp_…wherever your client lets you set a header.
From the Messages API.Claude can call the endpoint directly. Both halves are required — the serveranda matching toolset entry; sendingmcp_serversalone is rejected as a validation error:
client.beta.messages.create( model="claude-opus-4-8", max_tokens=4096, betas=["mcp-client-2025-11-20"], mcp_servers=[{ "type": "url", "name": "livetennisapi", "url": "https://mcp.livetennisapi.com/mcp", "authorization_token": os.environ["LIVETENNISAPI_KEY"], }], tools=[{"type": "mcp_toolset", "mcp_server_name": "livetennisapi"}], messages=[{"role": "user", "content": "What tennis is live right now?"}], )
Theauthorization_tokenis sent as a bearer token, which is exactly what this server already accepts — no separate credential to obtain.
codex mcp add livetennisapi \ --url https://mcp.livetennisapi.com/mcp \ --bearer-token-env-var LIVETENNISAPI_KEY
Or write it to~/.codex/config.tomlyourself — Codex shares that file across the CLI, the IDE extension and the desktop app:
[mcp_servers.livetennisapi] url = "https://mcp.livetennisapi.com/mcp" bearer_token_env_var = "LIVETENNISAPI_KEY"
Usebearer_token_env_var, notbearer_token: it keeps the key in your environment rather than committing it to a config file.
There is also aCodex plugin, on its own marketplace:
codex plugin marketplace add livetennisapi/livetennisapi-codex-plugin
That registers the marketplace; install the plugin from Codex's plugin picker. Source:livetennisapi-codex-plugin.
The stdio route works too, unchanged:npx -y livetennisapi-mcp.
- Read-only.Every tool is a GET; nothing here can modify anything.
- Your key stays local**with the stdio server. It is read from the environment by the server process on your machine and sent only toapi.livetennisapi.com.
- Requires Node 20+.
npm install npm run build LIVETENNISAPI_KEY=twjp_… node dist/index.js # speaks MCP over stdio node dist/http.js # speaks MCP over HTTP, port 8081 npm test # protocol + transport isolation + rate limiting npm run test:mutation # proves those tests fail when the code breaks
test:mutationis worth understanding before changingsrc/http.ts. It reintroduces each bug the tests claim to catch and asserts the suite goes red. It is not ceremony: the first version of the rate-limit test passed while the limiter was bucketing every caller together.
Built on the officiallivetennisapiclient.
Everything in the Live Tennis API developer surface:
MIT — seeLICENSE. Use of the API service is governed by theTerms of Service.
Navigate your Aiven projects and interact with the PostgreSQL®, Apache Kafka®, ClickHouse® and OpenSearch® services
Yunxiao MCP Server provides AI assistants with the ability to interact with the Yunxiao platform.
Get prescriptive CDK advice, explain CDK Nag rules, check suppressions, generate Bedrock Agent schemas, and discover AWS Solutions Constructs patterns.
This AWS Labs Model Context Protocol (MCP) server for CloudTrail enables your AI agents to query AWS account activity for security investigations, compliance auditing, and operational troubleshooting.
Core AWS MCP server providing prompt understanding and server management capabilities.
Analyze CDK projects to identify AWS services used and get pricing information from AWS pricing webpages and API.
Query and analyze your Axiom logs, traces, and all other event data in natural language
Manage and interact with Microsoft Azure services.
Bastion: External Attack Surface Monitoring
Ask your AI assistant about your attack surface: run scans, catch expiring certificates and domains, triage findings, and generate reports.
Agent-ready global image CDN that AI agents can install and operate through MCP.
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.

