Skip to content

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.

Deletes · 4Changes · 1

15 tools: 4 can delete or cancel things, 1 change things and 10 only read.

Scanned Oct 21, 2026

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/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • The server marks "simulate_combat" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "run": a word for a change.

    What this check looks for

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

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "run": a word for a change.

      What this check looks for
    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/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

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