Skip to content
MMA Calendar

UFC & MMA Blog · Explainers

MMA MCP server: ask Claude or ChatGPT about any UFC fight

Connect Claude, ChatGPT, Cursor or Codex to the MMA Fight Data MCP server: setup, the 47 tools, and real fight-week prompts over current UFC data.

Author
Mate Bersenadze
Published
Oct 9, 2026
Read time
9 min read
Tags
Fight ApiMcpAi AgentsUFCClaudeChatgptBrendan Allen
Post on X

Ask a chat assistant who won a fight from last month and you will usually get one of three answers: the right one, a confident wrong one, or a polite note that its training data stops before the event. Fight data goes stale faster than almost anything else. Cards change on Tuesday, a main event falls apart on Thursday, and rankings move every week.

The fix is not a smarter model. It is giving the model a tool that reads the real record. That is what the Model Context Protocol (MCP) is for, and it is why UFCalendar runs a hosted MMA MCP server in front of the MMA Fight Data API: one endpoint, 47 tools, covering UFC, PFL, OKTAGON, BKFC and RIZIN. This guide shows how to connect it to Claude, ChatGPT and the coding agents, what the tools are, and what actually happens when you ask a question.

The endpoint, which is all most clients need:

https://api.ufcalendar.com/mcp

It speaks Streamable HTTP, so there is nothing to install, no local process and no Docker image. It is listed in the official MCP Registry as com.ufcalendar/fight-api. UFCalendar is independent: no promotion publishes an MCP server, and we are not affiliated with UFC, Zuffa or TKO.

Connect it to Claude

Claude.ai and the Claude desktop app. Open Settings, go to Connectors and add a custom connector with the URL above (custom connectors depend on your Claude plan). Claude will ask you to sign in: that is an OAuth flow against your UFCalendar account, so you never paste a secret into a chat client. If the account has never had a plan, signing in starts the free trial automatically: one day, 100 requests, no card.

Claude Code. A coding agent is easier with an API key. Start the trial at ufcalendar.com/account/api, copy the key, and register the server once:

export UFCALENDAR_API_KEY="ufcalendar_..."
claude mcp add --transport http ufcalendar https://api.ufcalendar.com/mcp \
  --header "Authorization: Bearer $UFCALENDAR_API_KEY"

Run /mcp inside Claude Code to confirm the server is connected and the tools are listed.

Connect it to ChatGPT, Cursor, Codex and the rest

ChatGPT. Add a custom connector with the same URL and sign in when prompted; it is the same OAuth flow as Claude.ai. Whether custom connectors are available depends on your ChatGPT plan and workspace settings.

Cursor (~/.cursor/mcp.json):

{
  "mcpServers": {
    "ufcalendar": {
      "url": "https://api.ufcalendar.com/mcp",
      "headers": { "Authorization": "Bearer ${UFCALENDAR_API_KEY}" }
    }
  }
}

Codex (~/.codex/config.toml):

[mcp_servers.ufcalendar]
url = "https://api.ufcalendar.com/mcp"
http_headers = { Authorization = "Bearer ${UFCALENDAR_API_KEY}" }

Anything else that speaks Streamable HTTP MCP works the same way: Cline, Windsurf, VS Code, or your own agent on any MCP SDK. Restart the client after adding the server so it reads the tool list. A terminal with no browser can use the device flow to mint a token; the agents page walks through it.

Three tools need no sign-in, the rest need a credential

The server lists all 47 tools to anyone, but only three answer without a credential, and none of them return fight data:

ToolWhat it answers
get_plansPlans, monthly quotas, per-minute limits and the trial terms
list_orgsThe five promotions covered and what each one supports (stats, rounds, rankings, scorecards, odds…)
how_to_connectHow to authenticate: API key or OAuth, with the URLs

They exist so an assistant can tell you what the service covers and costs before you commit to anything, and they do not count against a quota. Every other tool needs an API key or an OAuth sign-in, and each call counts as one request against your plan.

The other 44, grouped by what you would ask:

  • Schedule and cards: get_next_event, list_events, get_event_card, how_to_watch, get_event_storylines, get_event_changes, list_changes
  • Bouts: get_fight (with include for stats, rounds, scorecards and odds in one call), find_fights for "last" and "first" questions, list_split_decisions
  • Fighters: search, search_fighters, get_fighter (history, stats, rankings, bonuses, credentials), compare_fighters, whos_next
  • Rankings and records: get_rankings (any date since 2013), get_champions, get_division, get_leaderboard, get_record_book, get_year_stats, get_power_index, get_matchmaker
  • Officials: list_judges, get_judge, get_judge_scorecards
  • Odds: get_event_odds, get_fight_odds, get_odds_history. These return the UFCalendar consensus line, the average across the sportsbooks we track, with no book named. Information only, not betting advice.
  • Everything else: venues, broadcast rights, model win probabilities for upcoming UFC bouts, UFCalendar's own articles, calendar feed URLs, your usage, and four webhook-management tools

Every read tool is annotated read-only. The only tools that write anything are create_webhook_endpoint, rotate_webhook_secret and delete_webhook_endpoint, and they act on your own account's webhooks. Those, list_webhook_endpoints and get_odds_history need a Pro plan; everything else works on any plan, including the trial.

What happens when you ask

These are real prompts, the tools the assistant called, and what came back on 9 October 2026, fight week for UFC Fight Night: Allen vs Duncan.

"When does the next UFC card start where I live, and who's in the main event?"

One call: get_next_event with org: "ufc" and include_card: true. It skips the Contender Series while a numbered card or Fight Night is booked, which is what a fan means by "the next UFC card". The answer: UFC Fight Night: Allen vs Duncan at the Meta Apex in Las Vegas, prelims at 21:00 UTC on Saturday 10 October and the main card at 00:00 UTC, which the assistant converts to your time zone (5 PM in Las Vegas, 1 AM in London). The main event is Brendan Allen against Christian Leroy Duncan, five rounds at middleweight, with eleven more bouts underneath.

"Compare Allen and Duncan."

compare_fighters with the two slugs, sometimes after a search to resolve the names. It returns both records (Allen 27-7, 15-4 in the UFC; Duncan 15-2, 8-2 in the UFC), career rates (Duncan lands 4.45 significant strikes a minute to Allen's 3.75; Allen averages 1.52 takedowns per 15 minutes to Duncan's 0.43), previous meetings and common opponents (none either way) and the booked bout. Add "and where are they ranked?" and the assistant calls get_rankings for middleweight: Allen #4, Duncan #10.

"How did the judges score Allen's last fight, round by round, and do the strike numbers agree?"

Two calls: get_fighter for brendan-allen (its last_fight holds the bout id), then get_fight with include: ["rounds", "scorecards"], which brings both blocks back in one request. That bout was his June win over Edmen Shahbazyan, a Fight of the Night. Junichiro Kamijo and Ron McCarthy scored it 30-27 Allen; Sal D'Amato had it 29-28, giving round 2 to Shahbazyan. The round rows explain the split: Shahbazyan out-landed Allen 22 to 20 in the first and 32 to 28 in the second, Allen took the third 41 to 36, and the totals finished 90 to 89 for the man who lost. Scorecards are the official commission record: the judge, the points per round and the totals.

"Who was ranked around Brendan Allen when he first made the top 15?"

get_fighter with include: ["rankings"] finds his first board, 27 February 2023, then get_rankings with that date reads the board as it stood: Alex Pereira champion, Allen #12, directly behind Nassourdine Imavov (#11) and Dricus Du Plessis (#10). Point-in-time rankings go back to February 2013, which is the only honest way to settle a "he never beat a ranked opponent" argument.

"What changed on the UFC 333 card this week?"

get_event_changes for UFC 333: Volkanovski vs Evloev. On 7 October the featherweight bout between Arnold Allen and Aaron Pico came off the main card, and Pico was rebooked against Losene Keita on the prelims. Every change carries a timestamp, so "since Monday" is a question the assistant can actually answer.

Three habits make the answers better. Say "use the UFCalendar tools" the first time, so the assistant does not answer from memory. For "the last time" or "the first time" questions, the server's instructions point the model at find_fights, which answers them in one call. And when a name is ambiguous, let it call search first; two fighters can share a name, and slugs cannot.

What it costs

The trial is free: one day, 100 requests, no card, once per account. Each tool call is one request, so a fight-week conversation like the one above uses about ten. After the trial, plans are $19 a month for 30,000 requests, $49 for 200,000 and $149 for 1,000,000, with hard caps and no overage, so an agent stuck in a loop gets refused instead of billed. One key or one sign-in covers all five promotions, the MCP server and the REST API alike.

If you want the same data in your own code instead of a chat window, the MMA Fight Data API is a plain REST API with Python and TypeScript clients, and the stats API guide covers the per-round columns these tools return. The full reference lives at api.ufcalendar.com/docs, and the MMA MCP server page has the tool table and setup in one place.

FAQ

Does the UFC offer an official MCP server?

No promotion publishes one, the UFC included. UFCalendar's MMA Fight Data MCP server is an independent, first-party server for our own API, listed in the official MCP Registry as com.ufcalendar/fight-api. It covers UFC data among five promotions and is not affiliated with UFC, Zuffa or TKO.

Does it work with ChatGPT as well as Claude?

Yes. Both add it as a custom connector and sign in with OAuth. Claude Code, Cursor, Codex and other Streamable HTTP clients register it with an API key.

Is the MMA MCP server free?

The three discovery tools are free and need no sign-in. Fight data needs a plan or the free 1-day trial (100 requests, no card), which starts automatically the first time you sign in. Paid plans start at $19 a month.

OAuth or an API key?

Chat clients are easiest with OAuth: you sign in with your UFCalendar account and never handle a secret. Coding agents and servers are easiest with an API key sent as Authorization: Bearer. Both reach the same tools, and both are revocable from your account.

Does it give betting tips?

No. The odds tools return one consensus line averaged across sportsbooks, for information only. No tool recommends a bet, and no tool names a sportsbook.

Can the assistant change anything on my account?

Only your webhooks, and only on Pro plans and up: register, rotate a secret, or delete one. Every other tool is read-only.

Ask UFCalendar AI