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.
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
@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 free key at https://www.ufcalendar.com/account/api?trial=1 — the free plan is 1,000 requests a month, no card, never expires. 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-plan key, no card
for await (const ev of api.events({ org: 'ufc', limit: 1 })) console.log(ev.title); // the next UFC cardRelated MCP server: kingsplaybook-mcp
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
maxRetries, // per-minute 429 retries on GETs, default 3 (0 disables)
});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).
Rate-limited reads are waited out for you. When a GET hits the per-minute limit (429
rate_limited, Retry-After of 60 s or less; the free plan allows 10 requests a minute) the
client waits for Retry-After plus a little jitter and tries again, up to maxRetries times
(default 3), so a script that walks a few pages does not die mid-run. A 429'd request does not
count against your month.
const api = new FightAPI('ufcalendar_...', { maxRetries: 5 }); // wait out more per-minute 429s
const strict = new FightAPI('ufcalendar_...', { maxRetries: 0 }); // throw on the first 429The monthly quota (429 quota_exceeded), a 429 with a long or missing Retry-After, and every
non-GET request (webhook endpoint create / delete / rotate) throw FightAPIError at once.
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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
This server cannot be deployed
Maintenance
Related MCP Connectors
Calibrated world model for AI agents. 40 tools: world state, markets, trading. Kalshi + Polymarket.
Sports odds, player props and source coverage for AI assistants. Connect with your own API key.
Independent statistical feature evaluation for machine learning and forecasting. ML Referee tests up to 1,000 candidate features in one run against a declared baseline, helping researchers and AI agents decide which inputs to pursue, which bounded feature repairs merit further testing, and where more evidence is needed—without a separate ablation run for every feature. Use the MCP tools to discover input schemas, check access and credits, preflight a dataset, obtain a quote, submit an authorized evaluation, and retrieve structured results and reports. Results are scoped to the submitted evidence and evaluation design; they do not guarantee future model performance. Invite-only beta with manual approval. Public tool discovery requires no authentication; account and evaluation tools require OAuth through approved client connections and available evaluation credits. Connect directly to https://api.mlreferee.com/mcp. Website: https://mlreferee.com Request beta access: https://mlreferee.com/beta Agent setup and documentation: https://mlreferee.com/agents
Web search, point-in-time crypto market data, verified strategy track records and 160+ agent tools.
Related MCP Servers
- 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.532 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.1353 npm1MIT

sharpapi-mcpofficial
AlicenseAqualityBmaintenanceEnables AI agents to query live sports betting odds, best prices, arbitrage, +EV bets, and middles directly through Model Context Protocol tools.9103 npmMIT