ufcalendar
Provides UFC MMA data through the UFCalendar Fight API: upcoming and completed UFC events with full fight cards, near real-time results, per-fight and round-by-round statistics, judges' scorecards, the UFCalendar consensus odds line (current, opening, closing, movement), fighter careers and profiles, and point-in-time UFC rankings history back to February 2013. Also includes derived views such as event storylines, matchmaker suggestions, power index, record books, and community picks.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ufcalendarwhat's the UFC card this Saturday and the odds for each fight?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@ufcalendar/sdk — MMA Fight Data API client for TypeScript
UFC, PFL, OKTAGON, BKFC and RIZIN events, fight stats, results, rankings history and judges' scorecards from one typed client.
The MMA Fight Data API by UFCalendar (the UFCalendar Fight API) is a REST API for MMA data: UFC, PFL, OKTAGON, BKFC and RIZIN events, full fight cards, results within minutes, per-fight and round-by-round statistics, complete fighter careers, the only MMA data API with point-in-time UFC rankings history back to 2013, and the only one serving judges' scorecards — every official, every round — plus the UFCalendar consensus odds line (current, opening and closing on every plan, line movement on Pro). This package is a dependency-free fetch wrapper over it: one method per endpoint, cursor pagination handled for you, ESM + CJS, Node 18+, browsers and edge runtimes.
npm install @ufcalendar/sdkGet a key (free 1-day trial, 100 requests, no card) at https://www.ufcalendar.com/account/api?trial=1. Paid plans from $19/month for 30,000 requests (Pro $49 for 200,000, Business $149 for 1,000,000) — hard caps, no overage.
Quickstart in 3 lines
import { FightAPI } from '@ufcalendar/sdk';
const api = new FightAPI('ufcalendar_...'); // free 1-day trial key, no card
for await (const ev of api.events({ org: 'ufc', limit: 1 })) console.log(ev.title); // the next UFC cardRelated MCP server: MCP Prediction Markets
Quickstart
import { FightAPI } from '@ufcalendar/sdk';
const api = new FightAPI(process.env.UFCALENDAR_API_KEY); // or new FightAPI({ apiKey })
// Upcoming UFC schedule, soonest first
for await (const ev of api.events({ org: 'ufc', limit: 5 })) {
console.log(ev.starts_at, ev.title, ev.is_ppv ? 'PPV' : '');
}
// Full card + results of the newest completed UFC event
const [latest] = await Array.fromAsync(api.events({ org: 'ufc', status: 'completed', limit: 1 }));
const card = await api.event(latest!.slug);
for (const f of card.card) {
if (f.result) {
console.log(f.fighter_a?.name, 'vs', f.fighter_b?.name, '->', f.result.method, `R${f.result.round}`);
}
}
// The judges' scorecards for one bout — the official commission record
const cards = await api.fightScorecards(card.card[0]!.id);
// UFC rankings on any date since February 2013 (rank 0 = champion)
const board = await api.rankings('ufc', { date: '2016-11-14' });
// A fighter's complete multi-promotion career
const history = await api.fighterHistory('islam-makhachev');List endpoints are async generators that follow meta.pagination.next_cursor for you; pass limit to stop after N rows. Everything else returns the envelope's data. The last response's meta and rate-limit headers stay on the client (api.lastMeta, api.lastRateLimit).
What's covered
Method | Endpoint |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| misc ( |
|
|
|
|
|
|
|
|
| escape hatch for anything new |
Hand-written types cover events, fights, fighters, rankings, scorecards, consensus odds and plans; the generated paths / operations types from the OpenAPI document are exported for everything else.
Consensus odds
const o = await api.fightOdds(83379);
console.log(o.consensus?.a.american, o.consensus?.b.american, o.consensus?.sources);
console.log(o.movement?.delta_points_a, o.closing); // closing = last line before the start (settled bouts)
for await (const point of api.fightOddsHistory(83379)) { // Pro plans and up
console.log(point.recorded_at, point.a.american, point.b.american);
}One anonymised UFCalendar consensus line per corner across the sportsbooks we track; book identities are never exposed. Information only, not betting advice.
Agents and MCP
The same data is a Model Context Protocol server, so an agent can call it without an HTTP client:
claude mcp add --transport http ufcalendar https://api.ufcalendar.com/mcp \
--header "Authorization: Bearer $UFCALENDAR_API_KEY"There is an installable agent skill too: npx skills add UFCalendar/fight-api-skill. Agent quickstart: https://www.ufcalendar.com/developers/agents.
Options
new FightAPI({
apiKey, // or UFCALENDAR_API_KEY / UFCAL_API_KEY in the environment
baseUrl, // default https://api.ufcalendar.com/v1
fetch, // inject your own fetch
timeoutMs, // default 30_000
headers, // extra headers on every request
});Errors and rate limits
Every error throws FightAPIError with .status, .code, .message and .requestId — quote the request id when you write to api@ufcalendar.com. After each call api.lastRateLimit holds the X-RateLimit-* headers (monthly quota).
Notes
Odds are the UFCalendar consensus line only (no book identities). Information only, not betting advice.
Fighter
imagesare Wikimedia Commons / Creative Commons files: displaying thelicenseandartistfields as a credit is a licence requirement, not a style preference.Scorecards are the official commission record. Media-member and fan scorecards are not part of the API.
source/source_slugvalues (typed asPublicSource) name official publishers only —ufc-stats,ufc-official,ufc-official-cards, a promotion's*-official,wikipedia,ufcalendar. Every other publisher arrives aspublic-records(career records, history rows) orcommission-record(judges' scorecards).Not affiliated with UFC, Zuffa, TKO or any promotion. Terms: https://www.ufcalendar.com/developers/terms
Full reference: https://api.ufcalendar.com/docs · OpenAPI 3.1: https://api.ufcalendar.com/openapi.json · Also on PyPI (Python client), RapidAPI Hub, Postman and the hosted MCP server
MIT licensed.
This server cannot be deployed
Maintenance
Related MCP Connectors
BJJ gym, coach, event, and city data for AI agents. Free base tools, x402-paid premium.
UFC fights since 2000, plus PFL and Bellator: results, round stats, fighters and odds. REST and MCP.
Verified fight records for AI assistants: look up a fighter or fight card, cite the pxl8.io page.
Fight API MCP: UFC, PFL, BKFC, RIZIN, OKTAGON events, results, stats, rankings, judges scorecards.
Related MCP Servers
- AlicenseBqualityDmaintenanceProvides comprehensive NBA statistics via Model Context Protocol, enabling queries for player stats, game scores, team info, and advanced analytics through natural language.2111MIT
- AlicenseAqualityDmaintenanceProvides search, trending, odds, arbitrage, and category browsing for prediction markets (Polymarket & Kalshi) via the Model Context Protocol, enabling AI agents to access live market data without API keys.51MIT
- AlicenseAqualityFmaintenanceProvides AI agents with direct access to KingsPlaybook's sports data including confirmed lineups, player projections, game lines, and pick history via native MCP tools.517 npmMIT
- AlicenseBqualityCmaintenanceProvides AI agents with live, grounded sports data including model probabilities, track records, and European soccer and tennis arbitrage opportunities, so they answer from real numbers instead of stale guesses.1319 npm1MIT