Skip to content
MMA Calendar
UFCalendar Fight API

MMA Fight Data MCP Server for UFC

UFCalendar runs a hosted MMA Fight Data MCP server at api.ufcalendar.com/mcp. Point Claude, ChatGPT, Cursor or Codex at it and your agent can read every UFC card back to 1993, results within about two minutes of the final horn, round-by-round statistics, official judges’ scorecards since 1995 and the rankings board as it stood on any date since 2013.

Free plan: 1,000 requests/month, no card, never expires. Paid plans from $19/mo for 30,000 requests, cancel anytime.

MCP endpoint https://api.ufcalendar.com/mcpListed in the official MCP Registry as com.ufcalendar/fight-api

Last updated October 2026

What is an MCP server for UFC data?

An MCP server for UFC data is a Model Context Protocol endpoint that gives an AI assistant tools for UFC data, so the assistant fetches a real card, result or statistic instead of recalling one. UFCalendar’s is hosted, authenticated with OAuth 2.1 or an API key, and reads the same database that powers ufcalendar.com.

800
UFC events, back to UFC 1 in 1993
3,802
UFC bouts with official judges’ scorecards
2013
Official rankings archived since

Why this one and not a scraper actor

Most results for this query are per-run scraping jobs wrapped in an MCP shell. That is a different product with a different failure mode, so here is the difference stated plainly.

A hosted server, not a scraping run

You connect once and query whenever you like. There is no run to start, no dataset to wait for and no per-row bill: the endpoint answers in milliseconds from a database we already keep current.

Reconciled data with an audit trail

Every field has a declared canonical source and every card change — bout added, cancelled, opponent swapped, time moved — is logged and readable through the same tools. A scrape of one page cannot tell you what changed since yesterday.

Depth a page scrape does not carry

Official judges’ scorecards round by round since 1995, the rankings board on any date since 2013, per-round striking and grappling lines, and full multi-promotion careers for every fighter on the card.

Listed, versioned and supported

The server is published in the official MCP Registry as com.ufcalendar/fight-api with a DNS-verified namespace, its tool set is versioned, and a human answers support mail.

Connect in 60 seconds

The server speaks Streamable HTTP, so every current MCP client can reach it without a local process, a Docker image or a proxy. Pick the door your client uses and paste one block.

  1. 1. Add it as a custom connector

    In Claude.ai or ChatGPT, add a custom connector and paste the MCP endpoint. Sign in with your UFCalendar account when prompted; every account is on the free plan, so there is nothing to buy to try it.

    MCP endpoint
    https://api.ufcalendar.com/mcp
  2. 2. Or take an API key instead

    For a coding agent, a bearer token is simpler than a browser round-trip. Get your free key on the account page and copy it — it is the same credential the REST API uses.

    API key
    # 1. Sign in, get your free-plan key (no card), copy it
    open https://www.ufcalendar.com/account/api?trial=1
    
    # 2. Hand it to any MCP client as a bearer token
    export UFCALENDAR_API_KEY="ufcalendar_..."
  3. 3. Register it in your client

    Claude Code, Cursor and Codex each take one line or one small config block. Restart the client afterwards so it lists the tools.

    Claude Code
    claude mcp add --transport http ufcalendar https://api.ufcalendar.com/mcp \
      --header "Authorization: Bearer $UFCALENDAR_API_KEY"
    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}" }
  4. 4. Ask a question

    Ask for the next UFC card, a fighter’s record or a judge’s scorecard. If the tools are wired the answer arrives with real ids and slugs you can follow up on.

Tools the MCP server exposes

52 tools over the same REST API, with the same plan limits. One tool call counts as one request. Three discovery tools answer with no sign-in at all.

Tools the MCP server exposes
ToolWhat it doesAccess
get_plansList the UFCalendar Fight API plans, their monthly request quotas and per-minute limits, including the free plan (1,000 requests a month, no card). Answers "what does this cost" without a credential.ReadNo sign-in
list_orgsList the promotions the UFCalendar Fight API covers, with per-org capability flags (stats, rounds, rankings, broadcasts, predictions, scorecards, odds). Odds are the UFCalendar consensus line: information only, not betting advice.ReadNo sign-in
how_to_connectExplain how to authenticate against the UFCalendar Fight API from this MCP server: an API key bearer token, or signing in with a UFCalendar account. Returns the URLs to do it.ReadNo sign-in
get_orgFetch one promotion by slug (ufc, pfl, oktagon, bkfc or rizin): name, short name, country, website and its capability flags (stats, rounds, rankings, broadcasts, predictions, scorecards, odds; odds are information only, not betting advice). list_orgs returns the same rows for every promotion without a credential.Read
get_divisionOne weight class in one promotion: the current rankings board when the promotion publishes one, upcoming bouts booked at that weight, the most recent results and the active roster by recency. The division-page answer in one call.Read
list_eventsList fight cards by promotion, status and date range. A bare call returns the upcoming schedule, soonest first; pass order=desc for the archive, newest first. Filter to title cards or PPVs with is_title_card / is_ppv, and pass include=headline for each card's main event (and its result once fought) in the same call. Cursor paginated.Read
get_next_eventThe single next upcoming card for one promotion, or across all of them: the soonest event that has not finished. For UFC, developmental sub-series cards (Dana White's Contender Series, Road to UFC) are skipped while a numbered card or Fight Night is booked; pass skip_series=false to include them. Pass include_card=true to get the full bout list in the same metered call.Read
get_event_cardFetch one event by slug or id with its complete bout order, both corners, venue, broadcast listings and results when the card has been fought. Pass include=eta for per-bout estimated start times and include=odds for each bout's current UFCalendar consensus odds line (information only, not betting advice).Read
get_event_changesThe audit trail for one card: bouts added or cancelled, opponents swapped, start times moved, fighter profiles merged — newest first.Read
list_changesThe cross-event change feed, newest first: bouts added, cancelled or reinstated, opponents swapped, start times or venues moved, fighter profiles merged — across every covered promotion or one of them, since a date (default the last 90 days). The same audit trail webhooks deliver, for agents that poll instead.Read
how_to_watchWho airs one event, country by country: the promotion's rights deals merged with the event's own confirmed broadcast listings, with provider, kind (tv, stream, ppv…), link and a worldwide row. Pass a two-letter country code to get that market plus worldwide. Series-aware, so a Contender Series card shows its own deal, not the numbered-card one.Read
get_event_storylinesThe talking points of one card, computed from the record: title fights and title eliminators, the closest bout by UFCalendar's model, rematches and trilogy deciders, who is on a streak, who is debuting or returning from a long layoff, the ranked fighters and champions on the card, nations represented, the tallest and longest-reach fighters and the fastest career finish on the bill.Read
get_pickem_splitsHow the UFCalendar community is picking each bout on one card: picks for each corner, the total and the percentage, in card order. Crowd sentiment from our own pick'em game, not a market and not a forecast.Read
get_event_oddsThe UFCalendar consensus odds line for every bout on one card, in card order: the current line, the opening line, the closing line once a bout is settled, and how far the market moved since opening, each with how many sportsbooks backed it, plus every bout's prop markets (method of victory, total rounds, goes the distance). Unpriced bouts are listed with nulls. Book identities are never exposed. Information only, not betting advice.Read
get_fight_oddsThe UFCalendar consensus odds line for one bout: the current line, the opening line, the closing line once the bout is settled, and the movement since opening in implied-probability points, each point with its American and decimal price, implied and margin-removed probability and how many sportsbooks backed it. Also the prop markets: method of victory per corner (KO/TKO, submission, decision), total rounds over/under per line and whether it goes the distance. Book identities are never exposed. Information only, not betting advice.Read
get_odds_historyEvery UFCalendar consensus odds point recorded for one bout, oldest first: the line-movement series, with how many sportsbooks backed each point. A point is stored only when the line moves. Narrow with from/to dates; cursor paginated. Pro plans and up. Information only, not betting advice.ReadPro+
get_fightFetch one bout by id. Pass include=stats for per-fight totals, include=rounds for round-by-round statistics, include=scorecards for the official judges’ cards, include=odds for the current UFCalendar consensus odds line (the closing line once the bout is settled) (information only, not betting advice).Read
get_fight_statsPer-fight totals for both corners of one bout (strikes by target and position, takedowns, knockdowns, control and position time), each with UFCalendar fantasy points and their category breakdown, plus data-quality flags in meta.quality (rounds present, position data present, whether the round sums match the totals).Read
find_fightsTHE tool for last/first/most-recent questions — search completed bouts across UFCalendar's launch promotions by title fight, finish method (ko, sub, dec, finish), division, fighter, winner, main-event only and date range, newest first by default. One call answers "the last title fight to end by knockout"; never page the schedule for it. At least one narrowing filter is required; 25 rows per page, 10 pages deep.Read
searchTypeahead search across fighters and events in one call. Use it to turn a name a user typed into a slug you can pass to the other tools.Read
search_fightersSearch the fighter roster by name, nationality or promotion. Cursor paginated. Returns identity fields; use get_fighter for the full record.Read
get_fighterFetch one fighter by slug or id: bio, record, career statistics and freely licensed portraits. Pass include=history for the full multi-promotion career timeline, include=stats, include=rankings or include=power_index, include=bonuses for the UFC bonus ledger, and include=credentials for grappling and wrestling pedigree, gyms and coaches (sourced, confidence-graded). Always carries next_fight and last_fight.Read
compare_fightersHead-to-head in one call: both bios and career statistics, strike location and position mix, current win streaks, previous meetings, common opponents with each result, the booked bout between them if one exists, UFCalendar's model win probability for it and the Power Index ratings. The tale-of-the-tape tool.Read
get_rankingsThe official rankings board for one promotion, point-in-time: pass a date to read the board as it stood that day. Rank 0 is the champion. Pass a division to narrow it. Each entry comes with movement against the previous snapshot (is_new for a debut), and meta names the previous and next snapshot dates.Read
get_championsEvery current champion across the promotions the API covers, with the division and the snapshot date the board was published. Pass org (e.g. "ufc") and/or division (e.g. "lightweight") to narrow it.Read
get_power_indexThe UFCalendar Power Index board for one promotion — our own rating engine, refreshed hourly, with peak rating and fights rated. Pass view=movers for the biggest risers over a window, view=peaks for all-time peak ratings, division= to narrow.Read
get_matchmakerUFCalendar's matchmaker: the fights worth making in one promotion, scored for rank proximity, momentum, competitiveness and story (rematches, eliminators), per division or across the roster. Our own engine over rankings, Power Index and recent form — not a list of booked bouts. Runs without the website's style-clash (Fight DNA) factor, so scores can differ slightly from ufcalendar.com.Read
whos_nextFor one fighter: the most sensible next opponents by UFCalendar's matchmaker, with the model win probability for each pairing and the score behind it, plus the bout already booked if there is one. Runs without the website's style-clash (Fight DNA) factor, so scores can differ slightly from ufcalendar.com.Read
get_leaderboardOne statistical leaderboard for one promotion from UFCalendar's Record Book rollup — career, single-fight, single-round, division or event boards across 48 metrics (wins, finishes, significant strikes, takedowns, control time, finish rate and more), optionally narrowed to a division, a country or active fighters. Ranked, with the sample size behind each value.Read
get_record_bookThe Record Book for one promotion in one call: the top rows of every leaderboard, grouped by category — the all-time and single-night records an agent quotes. Narrow by division, country, active fighters or one scope.Read
get_year_statsOne calendar year of a promotion (or all covered promotions) in numbers: events and title fights, finish methods and busiest divisions, the fastest finishes, the biggest upsets and Power Index climbers, the busiest fighters, host countries and the most-used judges.Read
get_predictions_upcomingUFCalendar model win probabilities for upcoming UFC bouts, published about three weeks out and repriced at least weekly. Corner-stamped, so a probability is never shown against the wrong pair. Pass event= to narrow to one card. Informational model output, not betting advice.Read
get_broadcast_rightsWho airs one promotion in each country: provider, kind and link. Pass a country code to narrow it to that market plus the worldwide row.Read
list_judgesThe judge directory with career aggregates: cards turned in, rounds scored, 10-8s, split cards and lone dissents, plus the league-wide baseline rates in meta.league. Filter by name, promotion or a minimum number of fights.Read
get_judgeOne official's career aggregates by id: fights and rounds scored, rounds scored 10-8 or wider, three-judge cards that came back split, lone dissents, first and last date scored, and the promotions worked. Same shape as a list_judges row; use get_judge_scorecards for the cards themselves.Read
get_judge_scorecardsEvery official card one judge has turned in, newest first: per-round points, card totals, decision type and point deductions. Each row flags lone dissents and split panels and shows the colleagues' totals. Commission records only.Read
list_refereesThe referee directory across the covered promotions, busiest first: bouts worked, promotions, first and last bout, finish rate, how their bouts ended (KO/TKO, submission, decision, other) and average fight time. Filter by name or promotion. The referee id is a slug of the name.Read
get_refereeOne referee's career aggregates by slug (e.g. herb-dean): bouts worked per promotion, first and last bout, finish rate, method breakdown and average fight time. Same shape as a list_referees row; use get_referee_fights for the bouts themselves.Read
get_referee_fightsEvery settled bout one referee worked in the covered promotions, newest first, with both corners, the result and the event. Cursor paginated.Read
list_split_decisionsCompleted bouts decided on split or majority cards, newest first, with every judge's official card and the dissenting judge named — commission records only, across covered promotions or one of them, in a date range. Facts as filed; UFCalendar adds no verdict of its own.Read
get_coverageWhat the database holds for each covered promotion, year by year: events, settled bouts and the share of them with per-fight stats, round-by-round stats, official commission scorecards and a UFCalendar consensus odds line (information only, not betting advice), plus when the latest result landed. Computed from the data, refreshed every 30 minutes.Read
get_usageHow many requests the calling account has used this month, the plan limit, the per-minute limit and when the counter resets — and, on an owner-granted trial, when the trial ends (trial_ends_at).Read
get_venueFetch one venue by id: name, city, region, country, capacity, coordinates and IANA time zone.Read
search_venuesFind arenas and venues that have hosted a covered promotion, by name, city or country. Returns id, name, city, region, country, time zone and capacity; pass the id to get_venue_events for what was fought there.Read
get_venue_eventsEvery covered event held at one venue, newest first — upcoming cards on top, then the history. Same filters and row shape as list_events (status, from, to, order, cursor).Read
search_articlesSearch UFCalendar's own editorial archive — previews, recaps, investigations, fighter-pay and technique pieces — by keyword or tag, newest first, in any of the 13 site languages. Returns title, summary, tags, date and the canonical URL; pass the slug to get_article for the body. Betting editorial is not served.Read
get_articleOne UFCalendar article by slug: full body in Markdown (client widgets removed), title, summary, author, tags and publication date, in the requested language when a translation exists (English otherwise). Betting editorial is not served.Read
get_calendar_feed_urlThe three subscribable ICS calendar feed URL templates for one promotion — per event, per card section, or per bout at its estimated start — with a <your-api-key> placeholder where the key goes. Returns URL templates only, never the caller's credential; the human pastes the finished URL into their calendar app.Read
list_webhook_endpointsList the signed webhook endpoints registered on the calling account, with the event kinds each one subscribes to.ReadPro+
create_webhook_endpointRegister an https endpoint to receive signed webhooks (event announced, fight result, card changed, event completed, odds moved: the UFCalendar consensus odds line on an upcoming bout moved 5+ points or the favourite flipped; information only, not betting advice). The signing secret is returned ONCE — store it before the reply is discarded. At most 3 active endpoints per account.WritePro+
rotate_webhook_secretReplace the signing secret of one webhook endpoint. The old secret stops verifying immediately, so update the receiver first. The new secret is returned once.WritePro+
delete_webhook_endpointPermanently remove one webhook endpoint from the calling account. Deliveries to it stop and its delivery history is dropped.WritePro+

Names and descriptions appear exactly as the server advertises them to a client, in English — that is the text your agent reads when it picks a tool.

Ask your agent

Once the server is wired, these are answered from the live database rather than from the model’s memory — which is what stops an agent inventing a card that was never booked.

  • Who is on the UFC 331 main card, and what time does the main event start in my time zone?
  • Show the judges’ scorecards for the last UFC title fight that went to a decision, round by round.
  • What was the UFC lightweight rankings board on 14 November 2016, and where is each of those fighters now?
  • Compare the per-round striking output of both corners in the last five fights of the UFC main event.

Who it's for

Built for indie developers, side projects and small teams. Whether you're building a fantasy app, a stats site, a Discord bot or an analytics project, our plans are priced for you. We don't sell enterprise contracts, and we don't plan to.

MCP server options for UFC data

Every cell outside our own column is what that vendor’s public page stated in October 2026. A dash means their page says nothing about it — not that the feature is missing.

MCP server options for UFC data
UFCalendarSportradar MMA MCPFighterAPIApify UFC actorssportsdata-mcp
HostingHosted by usHosted by the vendorHosted by the vendorHosted on the actor platformSelf-hosted
AuthenticationOAuth 2.1 or API keyVendor API keyVendor API keyPlatform OAuth or tokenNone (runs locally)
How you evaluate itFree plan: 1,000 requests/mo, no card30-day marketplace trial500 credits/month free, no cardPay per runFree, open source
Entry priceFrom $19/moContact salesFrom $19/moFrom $3.50 per 1,000 rowsFree
Where the data comes fromOur reconciled databaseLicensed official feedCompiled from public stats pagesScraped public pagesScraped public pages
Round-by-round statistics✓ YesMain events; totals elsewhere✓ Yes✗ No—
Rankings historyPoint-in-time since 2013Current board only—Current board onlyCurrent board only
Judges’ scorecards✓ Yes—✓ Yes——
SupportDirect email supportVendor account teamEmail supportCommunity issue trackerCommunity issue tracker
Betting odds✓ Consensus line, since 2012—✓ Yes——

All of these are real options and some are the right answer for a different job: a licensed enterprise feed if you need contractual guarantees, a scraper actor for a one-off extract, a self-hosted open-source server if you want to run everything yourself.

Sources

  1. Sportradar — MCP Server
  2. Sportradar — MMA API overview
  3. FighterAPI — REST + MCP
  4. Apify — UFC Scraper MCP server
  5. sportsdata-mcp (open source)

Questions

Does UFC offer an official MCP server?
No, UFC and TKO do not publish one. UFCalendar’s is a first-party MCP server for the UFCalendar Fight API, run by us, listed in the MCP Registry as com.ufcalendar/fight-api, and independent of UFC, Zuffa and TKO.
Is the MMA Fight Data MCP server free?
Yes, to start. The free plan gives 1,000 requests a month with no card and never expires, it works as soon as you sign in, and three discovery tools — plans, promotions and how to connect — answer with no credential at all. Paid plans start at $19 a month for 30,000 requests.
Which clients can connect to it?
Anything that speaks Streamable HTTP MCP. That covers Claude.ai and ChatGPT as a custom connector, and Claude Code, Cursor, Codex, Windsurf and VS Code as a registered server. No local process, Docker image or proxy is needed.
OAuth or an API key?
Both. Browser clients use OAuth 2.1 with the standard discovery documents, so you sign in with your UFCalendar account and never paste a secret. Coding agents send Authorization: Bearer with an API key from your account page. The two reach the same tools.
How do rate limits work through MCP?
One tool call counts as one request against the same monthly quota and per-minute limit as the REST API: 30,000 requests at 60 per minute on Hobby, 200,000 at 300 on Pro, 1,000,000 at 600 on Business. The get_usage tool reports what is left.
Does it return betting odds?
Yes, as one consensus line per bout. get_fight_odds and get_event_odds return the mean moneyline across about 18 sportsbooks on a UFC card, with implied probability and the opening and closing line; get_odds_history (Pro and up) returns every movement point. Book identities are not exposed, and the odds are information only, not betting advice.

More Fight API pages

One page per job: schedules, results, per-round statistics, rankings history, judges' scorecards and consensus odds, each with its own endpoints, sample responses and code.

UFCalendar is an independent publication, not affiliated with UFC/Zuffa/TKO, PFL, OKTAGON MMA, BKFC, RIZIN FF or any promotion. Organization names are used to describe the data. Terms of service · Refund Policy