_ registry / mcp streamable-http · checked 6h ago

ufcalendar-fight-api

https://api.ufcalendar.com

Registry code: 1ff70b0977d4e62f

api record

UFCalendar Fight API: MMA and bare-knuckle events, full cards, results, per-fight and per-round statistics, fighter careers, rankings history, official judges’ scorecards and broadcast rights. Resolve a name with `search` first, then pass the slug to the detail tools. For last/first/most-recent questions call find_fights once; for head-to-head call compare_fighters; for 'what's next' call get_next_event. One tool call counts as one request against the plan quota.

endpoint
https://api.ufcalendar.com/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is ufcalendar-fight-api live?
Yes — it answered the hub's last check (checked 6h ago). It answered 99% of checks over the last 30 days.
Is ufcalendar-fight-api free to use?
Partly — some of its tools are open, others need a key or payment.
What tools does ufcalendar-fight-api have?
52 tools: delete_webhook_endpoint, get_record_book, get_coverage, create_webhook_endpoint, rotate_webhook_secret, how_to_connect, get_plans, list_orgs, ….
Is ufcalendar-fight-api safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
99.4%

90 days 98.4%· all time 98.4%

latency
624ms

last good check

priced tools
0

of 52 tools

_ answered our checks, 90 days 383 checks · signed record
  • degraded → live
  • live → degraded· fetch failed
  • degraded → live
  • degraded → live
  • live → degraded· timeout after 20000ms
_ what it is for
used for
  • look up mma fight results
  • compare two fighters
  • get the next event card
  • get fight odds and rankings
  • register webhooks for fight updates
takes → gives
text → data
tools
23 reads2 changes data
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 52 tools
3 open44 auth-required 5 never probed 47 of 52 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • how_to_connect open 2d ago

    Explain 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.

    mcp-tool

    {
      "type": "object",
      "properties": {}
    }
    arguments 4 lines
  • get_plans open 34d ago

    List 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.

    mcp-tool

    {
      "type": "object",
      "properties": {}
    }
    arguments 4 lines
  • list_orgs reads open 2d ago

    List 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.

    mcp-tool

    {
      "type": "object",
      "properties": {}
    }
    arguments 4 lines
  • search reads auth-required 3d ago

    Typeahead 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "q"
      ],
      "properties": {
        "q": {
          "type": "string",
          "minLength": 2,
          "description": "At least 2 characters."
        }
      }
    }
    arguments 14 lines
  • get_rankings auth-required 3d ago

    The 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "org"
      ],
      "properties": {
        "org": {
          "enum": [
            "ufc",
            "pfl",
            "oktagon",
            "bkfc",
            "rizin"
          ],
          "type": "string",
          "description": "Promotion slug."
        },
        "date": {
          "type": "string",
          "description": "Read the board as it stood on this date, YYYY-MM-DD."
        },
        "board": {
          "type": "string",
          "description": "Board name; defaults to the official board."
        },
        "division": {
          "type": "string",
          "description": "One division, e.g. \"lightweight\". Omit for the whole board."
        }
      }
    }
    arguments 32 lines
  • list_events auth-required 2d ago

    List 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "to": {
          "type": "string",
          "description": "Latest event date, YYYY-MM-DD."
        },
        "org": {
          "enum": [
            "ufc",
            "pfl",
            "oktagon",
            "bkfc",
            "rizin"
          ],
          "type": "string",
          "description": "Promotion slug, e.g. \"ufc\". Omit for every covered promotion."
        },
        "from": {
          "type": "string",
          "description": "Earliest event date, YYYY-MM-DD."
        },
        "limit": {
          "type": "integer",
          "maximum": 100,
          "minimum": 1
        },
        "order": {
          "enum": [
            "asc",
            "desc"
          ],
          "type": "string",
          "description": "asc = soonest first (default for upcoming), desc = newest first."
        },
        "cursor": {
          "type": "string",
          "description": "meta.pagination.next_cursor from a previous call."
        },
        "is_ppv": {
          "type": "boolean",
          "description": "Only pay-per-view cards (true) or non-PPV cards (false)."
        },
        "status": {
          "enum": [
            "announced",
            "scheduled",
            "live",
            "completed",
            "cancelled",
            "postponed",
            "upcoming"
          ],
          "type": "string",
          "description": "Filter by event status. upcoming = every card not yet over (announced, scheduled or live), soonest first."
        },
        "include": {
          "type": "array",
          "items": {
            "enum": [
              "headline"
            ],
            "type": "string"
          },
          "description": "headline = each event's main event (both corners, division, title flag and the result once fought) in the same call."
        },
        "is_title_card": {
          "type": "boolean",
          "description": "Only cards with (true) or without (false) a title bout."
        }
      }
    }
    arguments 73 lines
  • search_fighters reads auth-required 39h ago

    Search the fighter roster by name, nationality or promotion. Cursor paginated. Returns identity fields; use get_fighter for the full record.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "q": {
          "type": "string",
          "description": "Name or nickname fragment."
        },
        "org": {
          "enum": [
            "ufc",
            "pfl",
            "oktagon",
            "bkfc",
            "rizin"
          ],
          "type": "string",
          "description": "Only fighters who have fought for this promotion."
        },
        "limit": {
          "type": "integer",
          "maximum": 100,
          "minimum": 1
        },
        "cursor": {
          "type": "string"
        },
        "country": {
          "type": "string",
          "description": "ISO-3166 alpha-2 code or country name."
        }
      }
    }
    arguments 33 lines
  • get_usage reads auth-required 2d ago

    How 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).

    mcp-tool

    {
      "type": "object",
      "properties": {}
    }
    arguments 4 lines
  • get_pickem_splits reads auth-required 4d ago

    How 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "event"
      ],
      "properties": {
        "event": {
          "type": "string",
          "description": "Event slug (preferred) or numeric id."
        }
      }
    }
    arguments 13 lines
  • get_event_card reads auth-required 2d ago

    Fetch 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).

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "event"
      ],
      "properties": {
        "event": {
          "type": "string",
          "description": "Event slug (preferred) or numeric id."
        },
        "include": {
          "type": "array",
          "items": {
            "enum": [
              "eta",
              "odds"
            ],
            "type": "string"
          },
          "description": "eta = an estimated start time on every bout (estimates, not a schedule; re-anchored on each completed bout). odds = each bout's latest UFCalendar consensus line (information only, not betting advice)."
        }
      }
    }
    arguments 24 lines
  • get_event_changes reads auth-required 2d ago

    The audit trail for one card: bouts added or cancelled, opponents swapped, start times moved, fighter profiles merged — newest first.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "event"
      ],
      "properties": {
        "event": {
          "type": "string",
          "description": "Event slug (preferred) or numeric id."
        }
      }
    }
    arguments 13 lines
  • how_to_watch auth-required 3d ago

    Who 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "event"
      ],
      "properties": {
        "event": {
          "type": "string",
          "description": "Event slug (preferred) or numeric id."
        },
        "country": {
          "type": "string",
          "maxLength": 2,
          "minLength": 2,
          "description": "ISO-3166 alpha-2 code, e.g. \"US\" — that market plus the worldwide row. Omit for every country."
        }
      }
    }
    arguments 19 lines
  • get_event_storylines reads auth-required 47h ago

    The 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "event"
      ],
      "properties": {
        "event": {
          "type": "string",
          "description": "Event slug (preferred) or numeric id."
        }
      }
    }
    arguments 13 lines
  • get_odds_history auth-required 6h ago

    Every 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "fight_id"
      ],
      "properties": {
        "to": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "Latest recorded day, YYYY-MM-DD (inclusive)."
        },
        "from": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "Earliest recorded day, YYYY-MM-DD (inclusive)."
        },
        "limit": {
          "type": "integer",
          "maximum": 500,
          "minimum": 1,
          "description": "Points per page, default 100."
        },
        "cursor": {
          "type": "string",
          "description": "meta.pagination.next_cursor from a previous call."
        },
        "fight_id": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": -9007199254740991
            },
            {
              "type": "string",
              "pattern": "^\\d+$"
            }
          ],
          "description": "Bout id, as returned on an event card. Integer or numeric string."
        }
      }
    }
    arguments 43 lines
  • find_fights reads auth-required 31h ago

    THE 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "to": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "Latest event date, YYYY-MM-DD."
        },
        "org": {
          "enum": [
            "ufc",
            "pfl",
            "oktagon",
            "bkfc",
            "rizin"
          ],
          "type": "string",
          "description": "Promotion slug, e.g. \"ufc\". Omit for every covered promotion."
        },
        "from": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "Earliest event date, YYYY-MM-DD."
        },
        "limit": {
          "type": "integer",
          "maximum": 25,
          "minimum": 1,
          "description": "Rows per page, default 10."
        },
        "order": {
          "enum": [
            "newest",
            "oldest"
          ],
          "type": "string",
          "description": "newest (default) or oldest first."
        },
        "cursor": {
          "type": "string",
          "description": "meta.pagination.next_cursor from a previous call."
        },
        "method": {
          "enum": [
            "ko",
            "sub",
            "dec",
            "finish",
            "any"
          ],
          "type": "string",
          "description": "ko = KO/TKO, sub = submission, dec = any decision, finish = KO/TKO or submission, any = no filter."
        },
        "winner": {
          "type": "string",
          "description": "Fighter slug or id — bouts this fighter won."
        },
        "fighter": {
          "type": "string",
          "description": "Fighter slug or id — bouts this fighter was in."
        },
        "division": {
          "type": "string",
          "maxLength": 40,
          "description": "Division slug (\"lightweight\", \"womens-strawweight\") for an exact match, or a name fragment."
        },
        "title_only": {
          "type": "boolean",
          "description": "true = title bouts only."
        },
        "main_events_only": {
          "type": "boolean",
          "description": "true = main events only."
        }
      }
    }
    arguments 77 lines
  • compare_fighters reads auth-required 3d ago

    Head-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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "a",
        "b"
      ],
      "properties": {
        "a": {
          "type": "string",
          "minLength": 1,
          "description": "First fighter: slug (preferred, e.g. \"islam-makhachev\") or numeric id."
        },
        "b": {
          "type": "string",
          "minLength": 1,
          "description": "Second fighter: slug or numeric id. Must differ from a."
        }
      }
    }
    arguments 20 lines
  • get_champions reads auth-required 23h ago

    Every 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "org": {
          "enum": [
            "ufc",
            "pfl",
            "oktagon",
            "bkfc",
            "rizin"
          ],
          "type": "string",
          "description": "Promotion slug, e.g. \"ufc\". Omit for every covered promotion."
        },
        "division": {
          "type": "string",
          "description": "One division, e.g. \"lightweight\" or \"womens-strawweight\". Omit for every division."
        }
      }
    }
    arguments 21 lines
  • get_power_index reads auth-required 3d ago

    The 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "org"
      ],
      "properties": {
        "org": {
          "enum": [
            "ufc",
            "pfl",
            "oktagon",
            "bkfc",
            "rizin"
          ],
          "type": "string",
          "description": "Promotion slug."
        },
        "days": {
          "type": "integer",
          "maximum": 3650,
          "minimum": 30,
          "description": "Window for view=movers, in days. Default 365. days is snapped to 30/90/180/365/730/1825/3650."
        },
        "view": {
          "enum": [
            "current",
            "movers",
            "peaks"
          ],
          "type": "string",
          "description": "current (default) = active fighters by rating; movers = biggest risers over `days`; peaks = all-time peak ratings reached in this promotion."
        },
        "limit": {
          "type": "integer",
          "maximum": 200,
          "minimum": 1
        },
        "division": {
          "type": "string",
          "description": "Division slug to narrow the board, e.g. \"lightweight\", \"light-heavyweight\", \"womens-strawweight\"."
        }
      }
    }
    arguments 44 lines
  • whos_next auth-required 3d ago

    For 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "fighter"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 10,
          "minimum": 1,
          "description": "Opponents to suggest (default 5, max 10)."
        },
        "fighter": {
          "type": "string",
          "minLength": 1,
          "description": "Fighter slug (preferred, e.g. \"islam-makhachev\") or numeric id."
        }
      }
    }
    arguments 20 lines
  • get_leaderboard reads auth-required 23h ago

    One 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "org",
        "metric"
      ],
      "properties": {
        "org": {
          "enum": [
            "ufc",
            "pfl",
            "oktagon",
            "bkfc",
            "rizin"
          ],
          "type": "string",
          "description": "Promotion slug (required — boards are per promotion)."
        },
        "limit": {
          "type": "integer",
          "maximum": 100,
          "minimum": 1,
          "description": "Rows, default 25."
        },
        "metric": {
          "enum": [
            "total_fights",
            "wins",
            "decision_wins",
            "title_fight_wins",
            "bonuses",
            "finishes",
            "win_streak",
            "total_fight_seconds",
            "avg_fight_seconds_short",
            "avg_fight_seconds_long",
            "control_time_sec",
            "control_time_pct",
            "sig_strikes_landed",
            "total_strikes_landed",
            "slpm",
            "sapm",
            "striking_differential",
            "sig_strike_accuracy",
            "sig_strike_defense",
            "knockdowns",
            "knockdowns_per_15",
            "knockouts",
            "takedowns_landed",
            "td_avg",
            "takedown_accuracy",
            "takedown_defense",
            "submission_attempts",
            "sub_avg_per_15",
            "submissions",
            "fastest_finish",
            "fastest_knockout",
            "fastest_submission",
            "longest_fight_seconds",
            "most_sig_strikes_fight",
            "most_takedowns_fight",
            "most_knockdowns_fight",
            "longest_control_fight",
            "most_sig_strikes_round",
            "most_takedowns_round",
            "most_knockdowns_round",
            "most_finishes_event",
            "most_knockouts_event",
            "shortest_card_seconds",
            "finish_rate",
            "ko_rate",
            "sub_rate",
            "decision_rate",
            "avg_fight_seconds"
          ],
          "type": "string",
          "description": "Board metric, e.g. \"wins\", \"finishes\", \"sig_strikes_landed\", \"fastest_knockout\", \"most_finishes_event\", \"finish_rate\"."
        },
        "country": {
          "type": "string",
          "maxLength": 2,
          "minLength": 2,
          "description": "ISO-3166 alpha-2 nationality, e.g. \"BR\" — fighters from that country. Not with population=active."
        },
        "division": {
          "enum": [
            "strawweight",
            "flyweight",
            "bantamweight",
            "featherweight",
            "lightweight",
            "welterweight",
            "super-welterweight",
            "middleweight",
            "light-heavyweight",
            "heavyweight",
            "super-heavyweight",
            "womens-strawweight",
            "womens-flyweight",
            "womens-bantamweight",
            "womens-featherweight",
            "atomweight",
            "ironweight"
          ],
          "type": "string",
          "description": "One weight class, e.g. \"lightweight\", \"womens-strawweight\"."
        },
        "population": {
          "enum": [
            "all",
            "active"
          ],
          "type": "string",
          "description": "all (default) = everyone who fought in the promotion; active = a bout in the last ~18 months."
        }
      }
    }
    arguments 118 lines
  • get_year_stats reads auth-required 3d ago

    One 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "year"
      ],
      "properties": {
        "org": {
          "enum": [
            "ufc",
            "pfl",
            "oktagon",
            "bkfc",
            "rizin"
          ],
          "type": "string",
          "description": "Promotion slug, e.g. \"ufc\". Omit for every covered promotion together."
        },
        "year": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 1993,
          "description": "Calendar year, 1993 to the current year."
        }
      }
    }
    arguments 26 lines
  • get_broadcast_rights auth-required 2d ago

    Who airs one promotion in each country: provider, kind and link. Pass a country code to narrow it to that market plus the worldwide row.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "org"
      ],
      "properties": {
        "org": {
          "enum": [
            "ufc",
            "pfl",
            "oktagon",
            "bkfc",
            "rizin"
          ],
          "type": "string",
          "description": "Promotion slug."
        },
        "series": {
          "enum": [
            "dwcs",
            "rtufc"
          ],
          "type": "string",
          "description": "A UFC sub-series grid instead of the org-wide deals: dwcs (Contender Series) or rtufc (Road to UFC). For one event, how_to_watch picks it for you."
        },
        "country": {
          "type": "string",
          "description": "ISO-3166 alpha-2 code; adds the worldwide row."
        }
      }
    }
    arguments 32 lines
  • get_judge_scorecards auth-required 31h ago

    Every 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "judge_id"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 100,
          "minimum": 1
        },
        "cursor": {
          "type": "string"
        },
        "judge_id": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": -9007199254740991
            },
            {
              "type": "string",
              "pattern": "^\\d+$"
            }
          ],
          "description": "Judge id, from list_judges. Integer or numeric string."
        }
      }
    }
    arguments 31 lines
  • get_referee auth-required 4d ago

    One 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "referee"
      ],
      "properties": {
        "referee": {
          "type": "string",
          "minLength": 1,
          "description": "Referee slug from list_referees, e.g. \"herb-dean\". A name spelled the same way works too."
        }
      }
    }
    arguments 14 lines
  • get_referee_fights auth-required 4d ago

    Every settled bout one referee worked in the covered promotions, newest first, with both corners, the result and the event. Cursor paginated.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "referee"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 100,
          "minimum": 1,
          "description": "Rows per page, default 25."
        },
        "cursor": {
          "type": "string",
          "description": "meta.pagination.next_cursor from a previous call."
        },
        "referee": {
          "type": "string",
          "minLength": 1,
          "description": "Referee slug from list_referees, e.g. \"herb-dean\"."
        }
      }
    }
    arguments 24 lines
  • list_split_decisions auth-required 2d ago

    Completed 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "to": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "Latest event date, YYYY-MM-DD."
        },
        "org": {
          "enum": [
            "ufc",
            "pfl",
            "oktagon",
            "bkfc",
            "rizin"
          ],
          "type": "string",
          "description": "Promotion slug, e.g. \"ufc\". Omit for every covered promotion."
        },
        "from": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "Earliest event date, YYYY-MM-DD."
        },
        "limit": {
          "type": "integer",
          "maximum": 50,
          "minimum": 1,
          "description": "Rows per page, default 25."
        },
        "cursor": {
          "type": "string",
          "description": "meta.pagination.next_cursor from a previous call."
        }
      }
    }
    arguments 37 lines
  • search_venues auth-required 31h ago

    Find 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "q": {
          "type": "string",
          "minLength": 2,
          "description": "Venue name or city fragment, at least 2 characters."
        },
        "limit": {
          "type": "integer",
          "maximum": 100,
          "minimum": 1
        },
        "cursor": {
          "type": "string",
          "description": "meta.pagination.next_cursor from a previous call."
        },
        "country": {
          "type": "string",
          "description": "ISO-3166 alpha-2 code (\"US\") or English country name (\"Brazil\")."
        }
      }
    }
    arguments 24 lines
  • get_venue_events reads auth-required 3d ago

    Every 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).

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "venue_id"
      ],
      "properties": {
        "to": {
          "type": "string",
          "description": "Latest event date, YYYY-MM-DD."
        },
        "from": {
          "type": "string",
          "description": "Earliest event date, YYYY-MM-DD."
        },
        "limit": {
          "type": "integer",
          "maximum": 100,
          "minimum": 1
        },
        "order": {
          "enum": [
            "asc",
            "desc"
          ],
          "type": "string",
          "description": "desc = newest first (default), asc = oldest first."
        },
        "cursor": {
          "type": "string",
          "description": "meta.pagination.next_cursor from a previous call."
        },
        "status": {
          "enum": [
            "announced",
            "scheduled",
            "live",
            "completed",
            "cancelled",
            "postponed",
            "upcoming"
          ],
          "type": "string",
          "description": "Filter by event status. upcoming = every card not yet over (announced, scheduled or live), soonest first."
        },
        "venue_id": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": -9007199254740991
            },
            {
              "type": "string",
              "pattern": "^\\d+$"
            }
          ],
          "description": "Venue id, from search_venues or an event card. Integer or numeric string."
        }
      }
    }
    arguments 61 lines
  • search_articles auth-required 2d ago

    Search 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "q": {
          "type": "string",
          "minLength": 2,
          "description": "Keyword, at least 2 characters: matches the title, summary or a tag."
        },
        "tag": {
          "type": "string",
          "description": "Exact tag, e.g. \"ufc\"."
        },
        "limit": {
          "type": "integer",
          "maximum": 50,
          "minimum": 1,
          "description": "Rows per page, default 10."
        },
        "cursor": {
          "type": "string",
          "description": "meta.pagination.next_cursor from a previous call."
        },
        "locale": {
          "enum": [
            "en",
            "es",
            "pt",
            "de",
            "fr",
            "tr",
            "ru",
            "ka",
            "ja",
            "ko",
            "pl",
            "sr",
            "zh"
          ],
          "type": "string",
          "description": "Site language to serve (default en); English when no translation exists."
        }
      }
    }
    arguments 44 lines
  • get_calendar_feed_url auth-required 2d ago

    The 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "org"
      ],
      "properties": {
        "org": {
          "enum": [
            "ufc",
            "pfl",
            "oktagon",
            "bkfc",
            "rizin"
          ],
          "type": "string",
          "description": "Promotion slug."
        }
      }
    }
    arguments 20 lines
  • list_webhook_endpoints auth-required 23h ago

    List the signed webhook endpoints registered on the calling account, with the event kinds each one subscribes to.

    mcp-tool

    {
      "type": "object",
      "properties": {}
    }
    arguments 4 lines
  • get_fight_odds reads auth-required 39h ago

    The 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "fight_id"
      ],
      "properties": {
        "fight_id": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": -9007199254740991
            },
            {
              "type": "string",
              "pattern": "^\\d+$"
            }
          ],
          "description": "Bout id, as returned on an event card. Integer or numeric string."
        }
      }
    }
    arguments 23 lines
  • list_judges reads auth-required 2d ago

    The 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "q": {
          "type": "string",
          "description": "Name fragment."
        },
        "org": {
          "enum": [
            "ufc",
            "pfl",
            "oktagon",
            "bkfc",
            "rizin"
          ],
          "type": "string"
        },
        "limit": {
          "type": "integer",
          "maximum": 100,
          "minimum": 1
        },
        "cursor": {
          "type": "string"
        },
        "min_fights": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 0
        }
      }
    }
    arguments 33 lines
  • get_event_odds auth-required 2d ago

    The 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "event"
      ],
      "properties": {
        "event": {
          "type": "string",
          "description": "Event slug (preferred) or numeric id."
        }
      }
    }
    arguments 13 lines
  • get_fight auth-required 47h ago

    Fetch 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).

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "fight_id"
      ],
      "properties": {
        "include": {
          "type": "array",
          "items": {
            "enum": [
              "stats",
              "rounds",
              "scorecards",
              "odds"
            ],
            "type": "string"
          },
          "description": "Extra blocks to fetch in the same call. odds = the latest UFCalendar consensus line (information only, not betting advice)."
        },
        "fight_id": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": -9007199254740991
            },
            {
              "type": "string",
              "pattern": "^\\d+$"
            }
          ],
          "description": "Bout id, as returned on an event card. Integer or numeric string."
        }
      }
    }
    arguments 36 lines
  • get_fight_stats auth-required 4d ago

    Per-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).

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "fight_id"
      ],
      "properties": {
        "fight_id": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": -9007199254740991
            },
            {
              "type": "string",
              "pattern": "^\\d+$"
            }
          ],
          "description": "Bout id, as returned on an event card. Integer or numeric string."
        }
      }
    }
    arguments 23 lines
  • get_fighter auth-required 47h ago

    Fetch 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "fighter"
      ],
      "properties": {
        "fighter": {
          "type": "string",
          "description": "Fighter slug (preferred) or numeric id."
        },
        "include": {
          "type": "array",
          "items": {
            "enum": [
              "history",
              "stats",
              "rankings",
              "power_index",
              "bonuses",
              "credentials"
            ],
            "type": "string"
          },
          "description": "Extra blocks to fetch in the same call. bonuses = the UFC bonus ledger (FOTN/POTN/KOTN/SOTN counts and fights); credentials = grappling and wrestling pedigree, gyms and coaches, each row with its sources and a confidence grade."
        },
        "history_limit": {
          "type": "integer",
          "maximum": 200,
          "minimum": 1,
          "description": "Cap the career timeline at the N most recent bouts."
        }
      }
    }
    arguments 34 lines
  • get_judge reads auth-required 39h ago

    One 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "judge_id"
      ],
      "properties": {
        "judge_id": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": -9007199254740991
            },
            {
              "type": "string",
              "pattern": "^\\d+$"
            }
          ],
          "description": "Judge id, from list_judges. Integer or numeric string."
        }
      }
    }
    arguments 23 lines
  • list_referees auth-required 6h ago

    The 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "q": {
          "type": "string",
          "description": "Name fragment; accents and spacing are ignored."
        },
        "org": {
          "enum": [
            "ufc",
            "pfl",
            "oktagon",
            "bkfc",
            "rizin"
          ],
          "type": "string",
          "description": "Promotion slug, e.g. \"ufc\". Omit for every covered promotion."
        },
        "limit": {
          "type": "integer",
          "maximum": 100,
          "minimum": 1,
          "description": "Rows per page, default 25."
        },
        "cursor": {
          "type": "string",
          "description": "meta.pagination.next_cursor from a previous call."
        }
      }
    }
    arguments 31 lines
  • get_venue auth-required 3d ago

    Fetch one venue by id: name, city, region, country, capacity, coordinates and IANA time zone.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "venue_id"
      ],
      "properties": {
        "venue_id": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": -9007199254740991
            },
            {
              "type": "string",
              "pattern": "^\\d+$"
            }
          ],
          "description": "Venue id. Integer or numeric string."
        }
      }
    }
    arguments 23 lines
  • get_org reads auth-required 6h ago

    Fetch 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "org"
      ],
      "properties": {
        "org": {
          "enum": [
            "ufc",
            "pfl",
            "oktagon",
            "bkfc",
            "rizin"
          ],
          "type": "string",
          "description": "Promotion slug."
        }
      }
    }
    arguments 20 lines
  • get_division auth-required 2d ago

    One 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "org",
        "division"
      ],
      "properties": {
        "org": {
          "enum": [
            "ufc",
            "pfl",
            "oktagon",
            "bkfc",
            "rizin"
          ],
          "type": "string",
          "description": "Promotion slug."
        },
        "division": {
          "enum": [
            "strawweight",
            "flyweight",
            "bantamweight",
            "featherweight",
            "lightweight",
            "welterweight",
            "super-welterweight",
            "middleweight",
            "light-heavyweight",
            "heavyweight",
            "super-heavyweight",
            "womens-strawweight",
            "womens-flyweight",
            "womens-bantamweight",
            "womens-featherweight",
            "atomweight",
            "ironweight"
          ],
          "type": "string",
          "description": "Division slug, e.g. \"lightweight\", \"womens-strawweight\"."
        }
      }
    }
    arguments 44 lines
  • list_changes reads auth-required 2d ago

    The 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "org": {
          "enum": [
            "ufc",
            "pfl",
            "oktagon",
            "bkfc",
            "rizin"
          ],
          "type": "string",
          "description": "Promotion slug, e.g. \"ufc\". Omit for every covered promotion."
        },
        "kind": {
          "enum": [
            "fight-added",
            "fight-cancelled",
            "fight-reinstated",
            "opponent-changed",
            "time-changed",
            "venue-changed",
            "fighter-merged"
          ],
          "type": "string",
          "description": "Narrow to one change kind."
        },
        "limit": {
          "type": "integer",
          "maximum": 100,
          "minimum": 1
        },
        "since": {
          "type": "string",
          "description": "Only changes observed at or after this point: YYYY-MM-DD or an ISO-8601 datetime. Default: 90 days ago."
        },
        "cursor": {
          "type": "string",
          "description": "meta.pagination.next_cursor from a previous call."
        }
      }
    }
    arguments 43 lines
  • get_article reads auth-required 2d ago

    One 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "slug"
      ],
      "properties": {
        "slug": {
          "type": "string",
          "minLength": 1,
          "description": "Article slug, from search_articles."
        },
        "locale": {
          "enum": [
            "en",
            "es",
            "pt",
            "de",
            "fr",
            "tr",
            "ru",
            "ka",
            "ja",
            "ko",
            "pl",
            "sr",
            "zh"
          ],
          "type": "string",
          "description": "Site language to serve (default en); English when no translation exists."
        }
      }
    }
    arguments 33 lines
  • get_next_event auth-required 14h ago

    The 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "org": {
          "enum": [
            "ufc",
            "pfl",
            "oktagon",
            "bkfc",
            "rizin"
          ],
          "type": "string",
          "description": "Promotion slug, e.g. \"ufc\". Omit for the next card across every covered promotion."
        },
        "skip_series": {
          "type": "boolean",
          "description": "UFC only: skip Dana White's Contender Series and Road to UFC cards while a numbered card or Fight Night is booked. Default true."
        },
        "include_card": {
          "type": "boolean",
          "description": "Also return the full bout order, venue and broadcasts (same shape as get_event_card). Default false."
        }
      }
    }
    arguments 25 lines
  • get_predictions_upcoming auth-required 14h ago

    UFCalendar 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "event": {
          "type": "string",
          "description": "Event slug or numeric id to narrow to one card. Omit for every upcoming UFC bout."
        }
      }
    }
    arguments 10 lines
  • get_matchmaker reads auth-required 14h ago

    UFCalendar'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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "org"
      ],
      "properties": {
        "org": {
          "enum": [
            "ufc",
            "pfl",
            "oktagon",
            "bkfc",
            "rizin"
          ],
          "type": "string",
          "description": "Promotion slug (MMA promotions; bkfc has no matchmaker pool)."
        },
        "limit": {
          "type": "integer",
          "maximum": 24,
          "minimum": 1,
          "description": "Slips to return (default 10, max 24)."
        },
        "division": {
          "type": "string",
          "maxLength": 40,
          "description": "One division slug, e.g. \"lightweight\", \"womens-strawweight\". Omit for the cross-division board; meta.divisions lists the valid ones."
        }
      }
    }
    arguments 31 lines
  • delete_webhook_endpoint unknown never probed

    Permanently remove one webhook endpoint from the calling account. Deliveries to it stop and its delivery history is dropped.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "endpoint_id"
      ],
      "properties": {
        "endpoint_id": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": -9007199254740991
            },
            {
              "type": "string",
              "pattern": "^\\d+$"
            }
          ],
          "description": "Endpoint id from list_webhook_endpoints. Integer or numeric string."
        }
      }
    }
    arguments 23 lines
  • get_record_book reads unknown never probed

    The 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "org"
      ],
      "properties": {
        "org": {
          "enum": [
            "ufc",
            "pfl",
            "oktagon",
            "bkfc",
            "rizin"
          ],
          "type": "string",
          "description": "Promotion slug (required — the Record Book is per promotion)."
        },
        "top": {
          "type": "integer",
          "maximum": 25,
          "minimum": 1,
          "description": "Rows per board. Default 3 here (the whole book at 10 rows is ~140 KB); up to 25."
        },
        "scope": {
          "enum": [
            "career",
            "single_fight",
            "round",
            "division",
            "event"
          ],
          "type": "string",
          "description": "One kind of board: career, single_fight, round, division or event. Omit for all."
        },
        "country": {
          "type": "string",
          "maxLength": 2,
          "minLength": 2,
          "description": "ISO-3166 alpha-2 nationality, e.g. \"BR\" — fighters from that country. Not with population=active."
        },
        "division": {
          "enum": [
            "strawweight",
            "flyweight",
            "bantamweight",
            "featherweight",
            "lightweight",
            "welterweight",
            "super-welterweight",
            "middleweight",
            "light-heavyweight",
            "heavyweight",
            "super-heavyweight",
            "womens-strawweight",
            "womens-flyweight",
            "womens-bantamweight",
            "womens-featherweight",
            "atomweight",
            "ironweight"
          ],
          "type": "string",
          "description": "One weight class, e.g. \"lightweight\", \"womens-strawweight\"."
        },
        "population": {
          "enum": [
            "all",
            "active"
          ],
          "type": "string",
          "description": "all (default) = everyone who fought in the promotion; active = a bout in the last ~18 months."
        }
      }
    }
    arguments 74 lines
  • get_coverage unknown never probed

    What 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "org": {
          "enum": [
            "ufc",
            "pfl",
            "oktagon",
            "bkfc",
            "rizin"
          ],
          "type": "string",
          "description": "Promotion slug, e.g. \"ufc\". Omit for every covered promotion."
        }
      }
    }
    arguments 17 lines
  • create_webhook_endpoint changes data unknown never probed

    Register 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "description": "https:// endpoint that will receive the signed POSTs."
        },
        "events": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Event kinds to subscribe to; omit for all of them."
        }
      }
    }
    arguments 20 lines
  • rotate_webhook_secret changes data unknown never probed

    Replace the signing secret of one webhook endpoint. The old secret stops verifying immediately, so update the receiver first. The new secret is returned once.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "endpoint_id"
      ],
      "properties": {
        "endpoint_id": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": -9007199254740991
            },
            {
              "type": "string",
              "pattern": "^\\d+$"
            }
          ],
          "description": "Endpoint id from list_webhook_endpoints. Integer or numeric string."
        }
      }
    }
    arguments 23 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id 1ff70b0977d4e62f.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/1ff70b0977d4e62f/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/1ff70b0977d4e62f/badge.svg)](https://brick.blue/agent/1ff70b0977d4e62f?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.