Public Warhammer 40K rules, datasheets, points and missions; sign in to manage rosters and battles.
Connect Remote server
claude mcp add --transport http praetorium https://praetorium.gg/mcp
{
"mcpServers": {
"praetorium": {
"url": "https://praetorium.gg/mcp"
}
}
}
{
"servers": {
"praetorium": {
"type": "http",
"url": "https://praetorium.gg/mcp"
}
}
}
Settings > Connectors > Add custom connector
URL: https://praetorium.gg/mcp
Tools 43 found in our last check
list_my_rostersLists the rosters saved to the signed-in Praetorium account. Requires mcp:read.
get_my_rosterReturns one roster owned by the signed-in player, by an id from list_my_rosters. summary names each unit with its points, models, wargear, enhancements, Warlord and attachments, and gives the total and any problems that stop the list being fielded; it is null while army data is…
list_my_battlesLists the signed-in player's battles, newest first, up to 25 a page, narrowed and ordered as the battles page is. Each battle has its url, status, your result, ending, size, mission and one entry per seat (you, side, army, faction, detachments, score with its primary and seconda…
get_my_statsReturns the signed-in player's record as their profile shows it, over their latest 200 finished battles except practice games, optionally narrowed. record: battles, won, lost, drawn, rate (win rate 0 to 1, a draw counting half), going first and second, average points, streaks, c…
save_rosterSaves a complete roster. Pass its id to edit an owned roster; omit id to create one. limit is the battle size (1000, 2000 or 3000 points, or 600 for King of the Colosseum), which sets detachment points, enhancement and unit limits. pointsBudget optionally replaces only its point…
set_roster_visibilityChanges the visibility of an owned roster. Requires mcp:write.
list_my_opponentsLists who the signed-in player can seat in create_battle: friends (kind friend) and practice opponents run with one of your own rosters (kind practice), by id. Someone without an account is not listed: seat them with guestNames instead. Requires mcp:read.
create_battleCreates a battle in setup, as New battle on the site does, and returns its token. opponentId seats one opponent from list_my_opponents for a duel; opponentIds seats one or two, and allyId seats a friend on your side, for a 2v1 or doubles; guestNames seats one or two opponents wi…
get_my_battleReturns the signed-in player's seated view of a battle (battle) and what it expects next (next). next says what the battle expects: in setup, each step in table order with done and the command that answers it, the battlefields and secondary cards on offer, and begin.refusal unti…
submit_battle_actionAppends one command to a battle's log, only when expectedSeq equals the battle's current seq from get_my_battle. The answer's result.outcome is appended, stale (someone recorded first: read the battle again) or refused with the reason. Any seated player may record for any seat w…
get_my_battle_reportReturns a battle's log as its report reads it, oldest first and 200 entries a page: each entry's seq, round, phase, the player id that recorded it (by) and a sentence saying what happened. Pass nextAfter as after for the next page. Totals and the result are in get_my_battle. Req…
delete_battlePermanently deletes a battle the signed-in player created, for every player in it, with its result. Only the creator can. Confirm with the player first. Requires mcp:write.
search_referenceSearches Praetorium’s missions, force dispositions, deployments, terrain, rules, detachments, and datasheets by name, number, keyword, and value. Returns bounded excerpts with canonical URLs, source revisions, and attribution. Rules text is not included; records point to it upst…
get_referenceReads the complete bounded document returned by search_reference, with its revisions and attribution. A section that withholds rules text lists textSources: the pinned upstream file and record id to fetch if you need the wording.
get_reference_recordReturns the structured record behind a search result, including mission cards, force dispositions (missions by opposing disposition, detachments that offer them), deployments, terrain geometry, detachments, and datasheets. Records that withhold rules text carry textSources point…
list_factionsLists the factions that can be used to narrow reference searches.
list_referenceDiscovers available factions, mission packs, rule documents, reference kinds, and active source revisions.
list_unitsReturns every pickable unit in one bounded response with unit-size costs, composition, attachment relationships, roster limits, roles, keywords, and links. Without a detachment it also lists every detachment the faction can take, with its detachment points, Force dispositions, r…
get_mission_matchupResolves a pack and two force dispositions to the primary mission each side plays (its card: scoring awards, caps, actions, timing), the terrain layouts and deployments for the pairing, and canonical URLs and reference ids for each. Pass each value by id, slug, or name; an unkno…
simulate_combatRuns Praetorium's exact combat simulator for one attacking unit, with any attached leaders, against one defending unit: shooting, melee, and shooting followed by melee. Returns expected models destroyed, expected wounds lost, the chance to destroy the unit, cumulative odds, weap…
optimize_loadoutSearches the attacking unit's legal wargear, with any attached leaders, for the loadout most likely to destroy the defender, then the most models destroyed, then the most wounds, as the simulator's Optimize does. Takes the same sides as simulate_combat; the attacker's choices an…
list_data_updatesLists the points and datasheet updates the installed army data recorded, newest first, as the /data-updates pages show them. Each update has its UTC time, url, total change count and omitted (changes past its stored bound). Without faction, each update lists only the factions it…
check_rosterPrices a roster and lists every problem that stops it being fielded, without saving it or needing an account: the same summary get_my_roster gives a saved list. summary names each unit with its points, models, wargear, enhancements, Warlord and attachments, and gives the total;…
grade_rosterGrades what a roster can do on the table, as the roster builder's grades do: score 0 to 100 and grade A to D overall and per category (board control, mobility, damage against reference targets, durability), placed among tournament lists of the same battle size and of comparedWit…
get_unit_optionsLists what each named unit lets a roster pick set, with names first and the ids a pick takes beside them: its sizes, its toggles (key of the Warlord toggle: set toggles {key: 1} on exactly one CHARACTER), and every choice group (wargear, enhancement, detachment upgrade, unit com…
compare_rostersRuns every unit of one roster, with its attached units, against every unit of another in Praetorium's exact combat simulator, as the simulator's whole-roster table does: one call instead of a simulate_combat call per pairing. attackers and defenders list the units in roster orde…
import_rosterReads a pasted army list into a roster draft without saving it or needing an account, as the site's import does. Takes the whole text export from the official Warhammer 40,000 app, New Recruit, BattleBase, ListForge, Warscribe, WTC layouts or Praetorium, or a Praetorium exchange…
export_rosterWrites a roster as the site's text export, the official app's layout that tournament organisers and other list builders read, without saving it or needing an account. Takes the shape save_roster takes, such as import_roster's draft or get_my_roster's roster. text is the export;…
delete_rosterPermanently deletes one of the signed-in player's saved rosters, by an id from list_my_rosters, and ends any loan of it to a friend. Battles it was fielded in keep their own record. It cannot be undone, so confirm the roster's name with the player first; set_roster_archived hide…
copy_rosterSaves a copy of a roster to the signed-in player's account: one of their own from list_my_rosters, or a public or unlisted one they can open. variant true keeps the copy grouped with the original as an alternative version, which only works on their own rosters; false makes a sta…
set_roster_archivedArchives one of the signed-in player's saved rosters, which moves it out of their main roster list without deleting it, or restores it with archived false. Requires mcp:write.
get_my_collectionReturns the models the signed-in player owns, as their collection page keeps them, grouped by faction. Each entry's id and slug are the datasheet's, the same as list_units gives, with the models owned, how many are built and painted, and countsAs: other datasheets the player say…
list_my_eventsLists the signed-in player's groups, tournaments and hidden-list games (a group's game where everyone seals a list in secret before the reveal), each with its token, url, dates and your place in it: membership, entry status, whether you sealed a list, and the size you seal at. P…
get_my_groupReturns a group as its page shows it to the signed-in player: members (ids for create_battle's opponentIds), the leaderboard, recent finished games and your unfinished ones, its current hidden-list games, and its league with the table and your fixtures. An open fixture's start i…
get_my_eventReturns a tournament or hidden-list game as the signed-in player may see it: rules (format, size, points, what lists may break), dates, entrants with whether each sealed, your entry, Swiss rounds with your table and opponent, standings once lists are revealed, your battles in it…
join_groupJoins a group by its token, as its invite link does. A group whose organizers approve each member answers pending until they let you in. Requires mcp:write.
join_leagueJoins the draft league of a group you are a member of. Nobody can join once an organizer publishes its fixtures. Requires mcp:write.
join_eventEnters the signed-in player in a tournament by its token, as its invite link does, or in a hidden-list game of a group they belong to. A tournament whose organizer approves each player answers pending until they let you in. Closed once lists are revealed or the roster deadline p…
submit_event_rosterSeals one of the signed-in player's saved rosters for a tournament or hidden-list game, or replaces the list sealed before, with the site's checks: battle size, points, the event's house rules, a Warlord, and the roster deadline. Sealing stores a copy; later edits to the saved r…
check_in_eventMarks the signed-in player as arrived at a Swiss tournament, or not, before round 1 is paired; an organizer may drop players who haven't checked in. Requires mcp:write.
start_event_battleStarts the battle for a revealed tournament or hidden-list game with both sealed lists attached, as Start battle on its page does, and returns its token for get_my_battle and submit_battle_action. In Swiss rounds omit opponentId to play your current table; Swiss refuses anyone e…
report_table_resultRecords the final score of the signed-in player's Swiss table, for a game not tracked on Praetorium, and finishes its battle; it counts for the tournament's standings but not the leaderboard. Report only a score both players agree. Defaults to your table this round. A result loc…
get_skillReturns step-by-step guidance for a task, including the Warhammer 40,000 knowledge and tool order it needs. Read the matching skill before starting the task. Skills: answer-a-rules-question: Answer a Warhammer 40,000 rules question from Praetorium's reference, citing the source.…
Details
| Endpoint | https://praetorium.gg/mcp (Streamable HTTP) |
| First published | 11 Nov 2026 |
| Last updated | 11 Nov 2026 |
| Registry name | io.github.richardsolomou/praetorium |
More search and web servers See all
Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.
