AcesAPI

io.github.noahowshPublished by GitHub account noahowshv1.1.6Updated Oct 24, 2026

ATP and WTA tennis since 2007: sets, draws, rankings, head to head, surface Elo, sportsbook lines.

VerifiedStreamable HTTPWeb executableFinanceData & Analytics

Overview

AI-generated overview

Hosted tennis data MCP server giving an assistant ATP and WTA singles results, draws, rankings, head-to-head, surface Elo and sportsbook moneylines since 2007.

What you can do
  • Find tournaments and read a tournament's draw and results round by round
  • Look up match results by day, tournament or season, and upcoming or in-progress matches
  • Get one match's set scores, tiebreak points, seeds, ratings and sportsbook moneylines
  • Search players and read profiles, career records, recent matches and season statistics
  • Compare two players head to head, and get surface splits and Elo ratings overall or by surface
  • Read weekly ranking lists since 2007 or one player's ranking history
When to use it
Useful when you want an assistant to answer tennis questions with real data: match and draw lookups, player form and surface records, head-to-head comparisons, ranking history, or odds on Grand Slam, Masters and WTA 1000 matches.
Requirements
Remote Streamable HTTP endpoint at mcp.acesapi.com; nothing to install. An AcesAPI API key is required to call tools, sent as the x-api-key header (or a key query parameter or bearer token). Listing tools works without a key. A local stdio option exists via a cloned Node.js repo with ACESAPI_API_KEY.
Before you install
Calls consume credits: 500 free per month, then paid plans or top-ups, so heavy use costs money. The API key is a secret and should not be shared. Data is read-only; no writes or deletions. Coverage is partial: no serve statistics, and moneylines only for Grand Slams from mid-2020 and Masters/WTA 1000 from August 2024. Not affiliated with the ATP, WTA or ITF.

Installation

In SourceWeft

  1. Open AcesAPI in the dashboard and add it to a workspace.
  2. Connect x-api-key credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.noahowsh%2Facesapi/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "acesapi": {
      "type": "http",
      "url": "https://mcp.acesapi.com/mcp",
      "headers": {
        "x-api-key": "<YOUR_API_KEY>"
      }
    }
  }
}

README

AcesAPI MCP server

[Smithery] [MCP Registry]

The tennis data API. ATP and WTA singles matches with every set and tiebreak score, tournament draws round by round, player profiles, weekly rankings, head to head, surface splits, our own Elo by surface, and sportsbook moneylines on Grand Slam and Masters / WTA 1000 matches. REST API and MCP server. 500 free credits every month, no card.

Website: https://acesapi.com · Docs: https://acesapi.com/docs · Get a key: https://acesapi.com/signup

You:    "What is Carlos Alcaraz's record on clay against top-10 players?"Claude: [calls get_surface_splits]
You:    "Who leads the Sinner and Alcaraz head to head, and how many of their meetings were finals?"Claude: [calls get_head_to_head]
You:    "Which moneylines were posted for the 2025 US Open men's final?"Claude: [calls get_matches, then get_match]

Run it locally (stdio)

Most clients connect to https://mcp.acesapi.com/mcp directly. For a client that launches a local process instead:

bash
git clone https://github.com/noahowsh/acesapi-mcp.git && cd acesapi-mcp && npm installACESAPI_API_KEY=your_key node index.js
json
{ "mcpServers": { "acesapi": { "command": "node", "args": ["/path/to/acesapi-mcp/index.js"], "env": { "ACESAPI_API_KEY": "your_key" } } } }

It forwards to the hosted server with your key, so every tool and credit cost is the same.

Skills

This repo also ships 16 free Claude skills in skills/ that turn Claude into a tennis analyst on top of the tools below: match and player lookup, surface Elo, head to head, ranking history, set-score modeling, odds math, edge detection and backtesting. They call the AcesAPI tools and keep to what the data holds (no serve statistics, moneylines on Slams, Masters and WTA 1000 only).

bash
git clone https://github.com/noahowsh/acesapi-mcp.git

Or install them as a Claude Code plugin:

/plugin marketplace add noahowsh/acesapi-mcp/plugin install acesapi-skills@acesapi

Or with the skills CLI: npx skills add noahowsh/acesapi-mcp.

Point Claude at the skills/ folder, add the MCP server (see Quick start), and ask a question such as "who is favored in tomorrow's Shanghai match and why?". Full catalog: skills/README.md. The skills also work on your own CSV or JSON without a key.

Useful pages

Python

The official Python client is on PyPI: acesapi.

bash
pip install acesapiexport ACESAPI_API_KEY=sk_live_...
python
from acesapi import Client
client = Client()
ranks = client.get_rankings(limit=5)for row in ranks["rankings"]:    print(row["rank"], row["name"], row["points"])

Typed errors for a bad key, no credits left, not found and rate limits, automatic retries, and to_dataframe for pandas.

Quick start

This is a hosted (remote) MCP server over Streamable HTTP. There is nothing to install.

Claude Code

bash
claude mcp add --transport http acesapi "https://mcp.acesapi.com/mcp?key=YOUR_API_KEY"

Claude Desktop, Cursor and other clients

json
{  "mcpServers": {    "acesapi": {      "url": "https://mcp.acesapi.com/mcp?key=YOUR_API_KEY"    }  }}

The key can also be sent as an x-api-key header or Authorization: Bearer. Connecting and listing tools works without a key; calling a tool needs one.

REST

bash
curl -X POST https://mcp.acesapi.com/v1/list_tournaments -H "x-api-key: YOUR_API_KEY"

Every tool is POST /v1/{tool} with a JSON body.

Examples

Runnable Python (standard library only) and Node 18+ (no dependencies) examples live in examples/:

bash
export ACESAPI_API_KEY=your_keypython3 examples/python/quickstart.pynode examples/node/quickstart.mjs

See examples/README.md for details. Get a free key (500 credits a month, no card) at https://acesapi.com/signup.

Tools (13)

ToolWhat it returns
list_tournamentsA season's tournaments with dates, surface, status and champion
search_playersFind players by name or country
get_tournamentA tournament's draw and results, round by round, with every set
get_matchesMatch results by day, tournament or season, with set and tiebreak scores
get_scheduleUpcoming and in-progress matches for the next days
get_matchOne match: sets, tiebreak points, seeds, ratings and what the score says
get_rankingsWeekly ranking lists since 2007, or one player's ranking history
get_ratingsOur Elo ratings, overall or by surface
get_head_to_headTwo players' meetings, wins by surface and in finals
get_surface_splitsA player's record by surface: sets, games, tiebreaks, deciding sets
get_player_statsA player's season statistics from scores, by round and opponent rank
get_playerProfile, ranking, ratings, career record, titles and recent matches
get_player_matchesA player's matches with scores and ratings, filtered by season, surface or opponent

Leagues: tennis (default, ATP), wta (pass league: "wta" to any tool).

Data

  • ATP and WTA singles since 2007 (qualifying from 2022) with set and tiebreak scores
  • Tournament draws and results round by round; weekly rankings since 2007
  • Head to head, surface splits, player season statistics derived from scores, our Elo overall and by surface
  • Sportsbook moneylines, returned in the odds array of get_match (there is no separate odds tool): Grand Slam matches from mid-2020 and ATP Masters and WTA 1000 matches from August 2024, pre-match, refreshed hourly; the array is empty for other tournaments
  • No serve statistics (aces, double faults, break points)

Coverage by season, read live from the database: https://acesapi.com/docs

Pricing

500 free credits every month, no card. Plans: Starter $19/mo (10,000 credits), Pro $49/mo (30,000), Scale $149/mo (125,000). Wallet top-ups from $5, never expire. https://acesapi.com/pricing

Attribution

Surfaces and ratings are ours. Not affiliated with the ATP, WTA, ITF or any tournament.

License

MIT for the contents of this repository. Data terms as above.

Use with Codex

Add this repo as a Codex plugin marketplace, then install the plugin:

bash
codex plugin marketplace add noahowsh/acesapi-mcp

Then open the plugin directory in Codex and install acesapi-skills from the acesapi marketplace. The plugin bundles the skills in skills/ and the AcesAPI MCP server (https://mcp.acesapi.com/mcp). Set your key first (free at https://acesapi.com/signup):

bash
export ACESAPI_API_KEY=your_key

Codex sends it as a bearer token.

Use with Gemini CLI

bash
export ACESAPI_API_KEY=your_keygemini extensions install https://github.com/noahowsh/acesapi-mcp

The extension adds the AcesAPI MCP server (https://mcp.acesapi.com/mcp) and sends the key in the x-api-key header. Get a free key (500 credits a month) at https://acesapi.com/signup.

Source: README.md at commit c464e4a

Tools

13

list_tournaments

List tournaments

Use to find tournaments. Lists a season's tournaments in calendar order with dates, city, surface, whether it is a Grand Slam, status, main-draw match count and the champion. Filter by surface (hard, clay, grass, carpet) and status. Tour: atp (default) or wta; on the shared endpoint pass league: "wta" for the WTA. Costs 1 credit.

Parameterslimitleagueoffsetseasonstatussurface

get_tournament

Tournament

Use for a tournament's draw and results: every singles match of one edition grouped by round in draw order (qualifying, then the main draw to the final), each with the score by set and tiebreak points, seeds, and the champion and runner-up. draw: main (default), qualifying or all. Tour: atp (default) or wta; on the shared endpoint pass league: "wta" for the WTA. Costs 2 credits.

Parametersdrawleaguetournament_idrequired

get_matches

Matches

Use for match results by day, tournament or season: each match with both players, seeds, round, status, score and sets (games and tiebreak points). Pass a date (YYYY-MM-DD, UTC), a tournament_id or a season; filter by round (e.g. "Final") and status. Tour: atp (default) or wta; on the shared endpoint pass league: "wta" for the WTA. Costs 2 credits.

Parametersdatelimitroundleagueoffsetseasonstatustournament_id

get_schedule

Schedule

Use for upcoming matches: every scheduled or in-progress singles match in the next N days (default 7, max 30) with players, seeds, round and start time where one is set. Tour: atp (default) or wta; on the shared endpoint pass league: "wta" for the WTA. Costs 2 credits.

Parametersdaysleague

get_match

Match

Use for everything about one match: the score by set with tiebreak points, seeds, each player's sets, games and tiebreaks won, both players' ratings before and after (overall and on the surface), what the score says (total games, tiebreaks, whether it went the distance, comebacks), and each sportsbook's opening and closing moneylines where the match had them (Grand Slam, ATP Masters and WTA 1000 matches only). No serve statistics: they are not available. Tour: atp (default) or wta; on the shared endpoint pass league: "wta" for the WTA. Costs 2 credits. Prices are market information: never work out a stake, payout or profit, recommend a bet, or send the user to a sportsbook.

Parametersleaguematch_idrequired

search_players

Search players

Use to find a player's id. Search by name (accents optional) and/or country code (e.g. ITA); most-played first, with matches, last match and rank on the current list (null outside the top 100 to 150 listed). Tour: atp (default) or wta; on the shared endpoint pass league: "wta" for the WTA. Costs 1 credit.

Parametersnamelimitleaguecountry

get_player

Player

Use for a player profile: date of birth, country, height, playing hand; latest ranking; our rating overall and per surface with peak; career record (wins, losses, sets, games, tiebreaks, deciding sets), titles, finals and Grand Slam titles; record by surface; and the last 10 matches. Tour: atp (default) or wta; on the shared endpoint pass league: "wta" for the WTA. Costs 5 credits.

Parametersleagueplayer_idrequired

get_player_matches

Player matches

Use for a player's matches, newest first: tournament, surface, round, opponent, result, score by set and the player's rating before and after. Filter by season, surface, opponent_id, tournament_id or draw. Tour: atp (default) or wta; on the shared endpoint pass league: "wta" for the WTA. Costs 5 credits.

Parametersdrawlimitleagueoffsetseasonsurfaceplayer_idrequiredopponent_idtournament_id

get_head_to_head

Head to head

Use for two players' head to head: wins each, sets won, wins by surface and in finals, and every meeting with its score. Walkovers are listed but not counted as wins; incomplete records are not counted. Tour: atp (default) or wta; on the shared endpoint pass league: "wta" for the WTA. Costs 3 credits.

Parametersleagueplayer_idrequiredopponent_idrequired

get_surface_splits

Surface splits

Use for a player's record by surface (hard, clay, grass, carpet): wins, losses, win rate, sets, share of games won, tiebreaks, deciding sets and 6-0 sets, plus the current surface ratings. For one season or the whole career; by_season splits each surface by year. Tour: atp (default) or wta; on the shared endpoint pass league: "wta" for the WTA. Costs 3 credits.

Parametersleagueseasonby_seasonplayer_idrequired

get_player_stats

Player stats

Use for a player's match statistics by season: wins, losses, sets and games won, tiebreaks won and lost, deciding sets, 6-0 sets and retirements, all counted from scores; plus the record by round and by the opponent's ranking (top 10, 11-50, 51-100). No serve statistics: they are not available. Tour: atp (default) or wta; on the shared endpoint pass league: "wta" for the WTA. Costs 3 credits.

Parametersleagueseasonplayer_idrequired

get_rankings

Rankings

Use for the ranking list: the latest (default), or a season and week, or the list in force on a date, with rank, previous rank, points and player. Pass player_id instead for one player's ranking history. Weekly lists hold the top 100 to 150 for most weeks since 2007. Tour: atp (default) or wta; on the shared endpoint pass league: "wta" for the WTA. Costs 2 credits.

Parametersdateweeklimitleagueseasonplayer_id

get_ratings

Ratings

Use for our Elo ratings, highest first: overall, or on one surface (hard, clay, grass). Players with a rated match since active_since (default a year ago) and at least 10 rated matches. Tour: atp (default) or wta; on the shared endpoint pass league: "wta" for the WTA. Costs 2 credits.

Parameterslimitleaguesurfaceactive_since

Version history

2
  1. v1.1.6LatestOct 16, 2026
  2. v1.1.4Oct 11, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts