Praetorium
by richardsolomou · remote · no sign-in to list tools · v1.2.0 · published by GitHub user richardsolomou
Public Warhammer 40K rules, datasheets, points and missions; sign in to manage rosters and battles.
15 tools: 4 can delete or cancel things, 1 change things and 10 only read.
Scanned Oct 21, 2026
- Deletes or cancels4Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things1Claude Code: ask: see these tools
- Only reads10Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http praetorium https://praetorium.gg/mcpFindings
Matches of fixed checks, with the text they matched.
- Warnsimulate_combat
The server marks "simulate_combat" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "run": a word for a change.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
15 tools
Deletes or cancels 4Claude Code: deny
create_battleCreates a battle with named player seats, using the same rules as the site.No findings
Why it is in this group
- The name "create_battle" says "create": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Creates a battle with named player seats, using the same rules as the site. Requires mcp:write.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
save_rosterSaves a complete roster.No findings
Why it is in this group
- The name "save_roster" says "save": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Saves 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 points total (500 to 10000, not King of the Colosseum); omit it to keep a saved budget, or send null for the standard total. Requires mcp:write.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
set_roster_visibilityChanges the visibility of an owned roster.No findings
Why it is in this group
- The name "set_roster_visibility" says "set": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Changes the visibility of an owned roster. Requires mcp:write.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
submit_battle_actionAppends a legal battle command only when expectedSeq matches the current log.No findings
Why it is in this group
- The name "submit_battle_action" says "submit": a word for a change.
- The input takes a statement or command to run (input.command), which can change anything it can reach.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Appends a legal battle command only when expectedSeq matches the current log. Requires mcp:write.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
Changes things 1Claude Code: ask
simulate_combatRuns Praetorium's exact combat simulator for one attacking unit, with any attached leaders, against one defending unit at full strength: shooting, melee, and shooting followed by m…1 finding
Why it is in this group
- The description's first verb is "run": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "simulate_combat" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "run": a word for a change.
Description, as the server wrote it Runs Praetorium's exact combat simulator for one attacking unit, with any attached leaders, against one defending unit at full strength: shooting, melee, and shooting followed by melee. Returns expected models destroyed, expected wounds lost, the chance to destroy the unit, cumulative odds, weapons used, the rule and weapon-mode choices each side can change, datasheet citations, and a simulator link. Passive datasheet rules apply by default; stratagems and conditional rules stay off until chosen. Unsupported mechanics are refused or listed under notCalculated rather than approximated. Like the standalone simulator page, it uses default loadouts and no detachment; unit sizes and attachments must be legal.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
Only reads 10Claude Code: allow
get_my_battleReturns the current seated view of a battle for the signed-in player.No findings
Why it is in this group
- The name "get_my_battle" says "get": a word for reading.
Description, as the server wrote it Returns the current seated view of a battle for the signed-in player. Requires mcp:read.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_my_rosterReturns the saved choices for one roster owned by the signed-in player.No findings
Why it is in this group
- The name "get_my_roster" says "get": a word for reading.
Description, as the server wrote it Returns the saved choices for one roster owned by the signed-in player. Requires mcp:read.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_referenceReads the complete bounded document returned by search_reference, with its revisions and attribution.No findings
Why it is in this group
- The name "get_reference" says "get": a word for reading.
Description, as the server wrote it Reads 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.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_reference_recordReturns the structured record behind a search result, including mission cards, deployments, terrain geometry, detachments, and datasheets.No findings
Why it is in this group
- The name "get_reference_record" says "get": a word for reading.
Description, as the server wrote it Returns the structured record behind a search result, including mission cards, deployments, terrain geometry, detachments, and datasheets. Records that withhold rules text carry textSources pointing at the pinned upstream file and record id.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_factionsLists the factions that can be used to narrow reference searches.No findings
Why it is in this group
- The name "list_factions" says "list": a word for reading.
Description, as the server wrote it Lists the factions that can be used to narrow reference searches.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_my_battlesLists up to 25 battles with a cursor for the next page.No findings
Why it is in this group
- The name "list_my_battles" says "list": a word for reading.
Description, as the server wrote it Lists up to 25 battles with a cursor for the next page. Requires mcp:read.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_my_rostersLists the rosters saved to the signed-in Praetorium account.No findings
Why it is in this group
- The name "list_my_rosters" says "list": a word for reading.
Description, as the server wrote it Lists the rosters saved to the signed-in Praetorium account. Requires mcp:read.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_referenceDiscovers available factions, mission packs, rule documents, reference kinds, and active source revisions.No findings
Why it is in this group
- The name "list_reference" says "list": a word for reading.
Description, as the server wrote it Discovers available factions, mission packs, rule documents, reference kinds, and active source revisions.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_unitsReturns every pickable unit in one bounded response with unit-size costs, composition, attachment relationships, roster limits, roles, keywords, and links.No findings
Why it is in this group
- The name "list_units" says "list": a word for reading.
Description, as the server wrote it Returns every pickable unit in one bounded response with unit-size costs, composition, attachment relationships, roster limits, roles, keywords, and links. Include a detachment to receive its rules, enhancements, upgrades, and stratagems by name, cost, and timing without opening every unit page. Their rules text is at each record’s textSources.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
search_referenceSearches Praetorium’s missions, rules, detachments, and datasheets by name, number, keyword, and value.No findings
Why it is in this group
- The name "search_reference" says "search": a word for reading.
Description, as the server wrote it Searches Praetorium’s missions, 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 upstream.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.2.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http praetorium https://praetorium.gg/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__praetorium__list_my_rosters",
"mcp__praetorium__get_my_roster",
"mcp__praetorium__list_my_battles",
"mcp__praetorium__get_my_battle",
"mcp__praetorium__search_reference",
"mcp__praetorium__get_reference",
"mcp__praetorium__get_reference_record",
"mcp__praetorium__list_factions",
"mcp__praetorium__list_reference",
"mcp__praetorium__list_units"
],
"ask": [
"mcp__praetorium__simulate_combat"
],
"deny": [
"mcp__praetorium__save_roster",
"mcp__praetorium__set_roster_visibility",
"mcp__praetorium__create_battle",
"mcp__praetorium__submit_battle_action"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as praetorium. Review it before you use it.
