Praetorium

Public Warhammer 40K rules, datasheets, points and missions; sign in to manage rosters and battles.

我该使用它吗

质量与安全性

A
描述质量
91%
模式完整度
70%
命名质量
100%
投毒风险
100%
权限匹配度
100%
协议合规性
100%

发现(1)

  • LOWTool 'list_reference' description lacks action verb在 list_reference 中

基于对工具定义和协议合规性的自动分析。

上下文开销

~12,523token 数(工具定义)
~9.4 KB典型响应大小
对注意力有显著影响(占 128k 上下文窗口的 9.78%)

这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。

安装

一键安装

将以下内容添加到你的 `claude_desktop_config.json` 文件中:

{
  "mcpServers": {
    "praetorium": {
      "url": "https://praetorium.gg/mcp"
    }
  }
}

远程端点

https://praetorium.gg/mcpstreamable-http

它能做什么

工具清单

工具(14)

🟢 只读🟡 写入🔴 删除⚪ 未知
🟢list_my_rosters

Lists the rosters saved to the signed-in Praetorium account. Requires mcp:read.

输入模式

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_my_roster(id)

Returns the saved choices for one roster owned by the signed-in player. Requires mcp:read.

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64
    }
  },
  "required": [
    "id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_my_battles(before)

Lists up to 25 battles with a cursor for the next page. Requires mcp:read.

输入模式

{
  "type": "object",
  "properties": {
    "before": {
      "default": null,
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "at": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "id": {
              "type": "string",
              "minLength": 1,
              "maxLength": 64
            }
          },
          "required": [
            "at",
            "id"
          ]
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_my_battle(token)

Returns the current seated view of a battle for the signed-in player. Requires mcp:read.

输入模式

{
  "type": "object",
  "properties": {
    "token": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64
    }
  },
  "required": [
    "token"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴save_roster(id, name, catalogueId, detachmentIds, disposition, ...)

Saves a complete roster. Pass its id to edit an owned roster; omit id to create one. Requires mcp:write.

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64
    },
    "name": {
      "type": "string",
      "maxLength": 80
    },
    "catalogueId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64
    },
    "detachmentIds": {
      "maxItems": 3,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 128
      }
    },
    "disposition": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1,
          "maxLength": 64
        },
        {
          "type": "null"
        }
      ]
    },
    "borrowedDetachmentId": {
      "default": null,
      "anyOf": [
        {
          "type": "string",
          "minLength": 1,
          "maxLength": 128
        },
        {
          "type": "null"
        }
      ]
    },
    "limit": {
      "type": "integer",
      "minimum": 0,
      "maximum": 10000
    },
    "picks": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "entryId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 64
          },
          "catalogueId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 64
          },
          "models": {
            "type": "integer",
            "minimum": 1,
            "maximum": 60
          },
          "choices": {
            "type": "object",
            "propertyNames": {
              "type": "string",
              "maxLength": 400
            },
            "additionalProperties": {
              "type": "string",
              "minLength": 1,
              "maxLength": 64
            }
          },
          "spreads": {
            "type": "object",
            "propertyNames": {
              "type": "string",
              "maxLength": 400
            },
            "additionalProperties": {
              "type": "object",
              "propertyNames": {
                "type": "string",
                "maxLength": 64
              },
              "additionalProperties": {
                "type": "integer",
                "minimum": 0,
                "maximum": 60
              }
            }
          },
          "toggles": {
            "type": "object",
            "propertyNames": {
              "type": "string",
              "maxLength": 400
            },
            "additionalProperties": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1
            }
          },
          "attachedTo": {
            "type": "integer",
            "minimum": 0,
            "maximum": 99
          }
        },
        "required": [
          "entryId"
        ]
      }
    },
    "waivedRules": {
      "maxItems": 8,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "points-limit",
          "detachments",
          "detachment-points",
          "kotc-infantry",
          "kotc-warlord",
          "kotc-epic-heroes",
          "kotc-toughness",
          "kotc-datasheet-copies"
        ]
      }
    },
    "optionalRules": {
      "maxItems": 1,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "kotc-borrowed-disposition"
        ]
      }
    },
    "prep": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "stratagems": {
              "maxItems": 48,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "key": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 64
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "cp": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 6
                  },
                  "limit": {
                    "type": "string",
                    "enum": [
                      "phase",
                      "turn",
                      "battle",
                      "unlimited"
                    ]
                  },
                  "phases": {
                    "maxItems": 6,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "command",
                        "movement",
                        "shooting",
                        "charge",
                        "fight",
                        "end"
                      ]
                    }
                  },
                  "turn": {
                    "type": "string",
                    "enum": [
                      "your-turn",
                      "opponent-turn",
                      "either"
                    ]
                  }
                },
                "required": [
                  "key",
                  "name",
                  "cp",
                  "limit"
                ]
              }
            },
            "secondaries": {
              "maxItems": 6,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "key": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 64
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  }
                },
                "required": [
                  "key",
                  "name"
                ]
              }
            },
            "reminders": {
              "default": [],
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "key": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 240
                  },
                  "ability": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "description": {
                    "type": "string",
                    "maxLength": 10000
                  },
                  "unit": {
                    "type": "object",
                    "properties": {
                      "index": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 99
                      },
                      "name": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 80
                      }
                    },
                    "required": [
                      "index",
                      "name"
                    ]
                  },
                  "timings": {
                    "minItems": 1,
                    "maxItems": 10,
                    "type": "array",
                    "items": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "moment": {
                              "type": "string",
                              "enum": [
                                "phase-start",
                                "phase-end"
                              ]
                            },
                            "phase": {
                              "type": "string",
                              "enum": [
                                "command",
                                "movement",
                                "shooting",
                                "charge",
                                "fight"
                              ]
                            },
                            "turn": {
                              "type": "string",
                              "enum": [
                                "your-turn",
                                "opponent-turn",
                                "either"
                              ]
                            }
                          },
                          "required": [
                            "moment",
                            "phase",
                            "turn"
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "moment": {
                              "type": "string",
                              "enum": [
                                "turn-start",
                                "turn-end"
                              ]
                            },
                            "phase": {
                              "type": "null"
                            },
                            "turn": {
                              "type": "string",
                              "enum": [
                                "your-turn",
                                "opponent-turn",
                                "either"
                              ]
                            }
                          },
                          "required": [
                            "moment",
                            "phase",
                            "turn"
                          ]
                        }
                      ]
                    }
                  }
                },
                "required": [
                  "key",
                  "ability",
                  "description",
                  "timings"
                ]
              }
            },
            "remindersEnabled": {
              "default": true,
              "type": "boolean"
            }
          },
          "required": [
            "stratagems",
            "secondaries"
          ]
        },
        {
          "type": "null"
        }
      ]
    },
    "visibility": {
      "default": "private",
      "type": "string",
      "enum": [
        "private",
        "unlisted",
        "public"
      ]
    },
    "source": {
      "default": "editable",
      "type": "string",
      "enum": [
        "legacy",
        "editable",
        "praetorium",
        "battlebase",
        "newrecruit",
        "roster-file"
      ]
    }
  },
  "required": [
    "name",
    "catalogueId",
    "detachmentIds",
    "disposition",
    "limit",
    "picks",
    "prep"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴set_roster_visibility(id, visibility)

Changes the visibility of an owned roster. Requires mcp:write.

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64
    },
    "visibility": {
      "type": "string",
      "enum": [
        "private",
        "unlisted",
        "public"
      ]
    }
  },
  "required": [
    "id",
    "visibility"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴create_battle(opponentId, opponentIds, allyId, limit, missionPackId, ...)

Creates a battle with named player seats, using the same rules as the site. Requires mcp:write.

输入模式

{
  "type": "object",
  "properties": {
    "opponentId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64
    },
    "opponentIds": {
      "minItems": 1,
      "maxItems": 2,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 64
      }
    },
    "allyId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64
    },
    "limit": {
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "missionPackId": {
      "default": null,
      "anyOf": [
        {
          "type": "string",
          "minLength": 1,
          "maxLength": 64
        },
        {
          "type": "null"
        }
      ]
    },
    "casual": {
      "default": false,
      "type": "boolean"
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴submit_battle_action(token, expectedSeq, command)

Appends a legal battle command only when expectedSeq matches the current log. Requires mcp:write.

输入模式

{
  "type": "object",
  "properties": {
    "token": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64
    },
    "expectedSeq": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "command": {
      "anyOf": [
        {
          "oneOf": [
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "configure-battle"
                },
                "limit": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 10000
                },
                "missionPackId": {
                  "anyOf": [
                    {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 64
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "terrainLayoutId": {
                  "anyOf": [
                    {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 64
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "twistId": {
                  "anyOf": [
                    {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 64
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "teamBattle": {
                  "type": "boolean"
                },
                "playerCount": {
                  "anyOf": [
                    {
                      "type": "number",
                      "const": 2
                    },
                    {
                      "type": "number",
                      "const": 3
                    },
                    {
                      "type": "number",
                      "const": 4
                    }
                  ]
                },
                "clockLimitMinutes": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 5,
                      "maximum": 300
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "kind",
                "limit",
                "missionPackId",
                "terrainLayoutId",
                "twistId",
                "clockLimitMinutes"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "reset-setup"
                }
              },
              "required": [
                "kind"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "detach-roster"
                },
                "playerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "lock-league-rosters"
                },
                "leagueToken": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                },
                "eventToken": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind",
                "leagueToken"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "set-setup-step"
                },
                "step": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9
                }
              },
              "required": [
                "kind",
                "step"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "set-attacker"
                },
                "attackerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind",
                "attackerId"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "set-first-turn"
                },
                "firstPlayerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind",
                "firstPlayerId"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "set-side-disposition"
                },
                "side": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 1
                },
                "disposition": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind",
                "side",
                "disposition"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "attach-roster"
                },
                "playerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                },
                "prep": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "stratagems": {
                          "maxItems": 48,
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "key": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 64
                              },
                              "name": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 80
                              },
                              "cp": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 6
                              },
                              "limit": {
                                "type": "string",
                                "enum": [
                                  "phase",
                                  "turn",
                                  "battle",
                                  "unlimited"
                                ]
                              },
                              "phases": {
                                "maxItems": 6,
                                "type": "array",
                                "items": {
                                  "type": "string",
                                  "enum": [
                                    "command",
                                    "movement",
                                    "shooting",
                                    "charge",
                                    "fight",
                                    "end"
                                  ]
                                }
                              },
                              "turn": {
                                "type": "string",
                                "enum": [
                                  "your-turn",
                                  "opponent-turn",
                                  "either"
                                ]
                              },
                              "detachment": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 249
                              }
                            },
                            "required": [
                              "key",
                              "name",
                              "cp",
                              "limit"
                            ]
                          }
                        },
                        "secondaries": {
                          "maxItems": 6,
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "key": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 64
                              },
                              "name": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 80
                              },
                              "awards": {
                                "maxItems": 20,
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "vp": {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 100
                                    },
                                    "per": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "maxLength": 200
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "mode": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "maxLength": 40
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "max": {
                                      "anyOf": [
                                        {
                                          "type": "integer",
                                          "minimum": 0,
                                          "maximum": 100
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "group": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "maxLength": 100
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "cumulative": {
                                      "type": "boolean"
                                    },
                                    "criteria": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "maxLength": 2000
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "trigger": {
                                      "type": "object",
                                      "properties": {
                                        "timing": {
                                          "anyOf": [
                                            {
                                              "type": "string",
                                              "maxLength": 80
                                            },
                                            {
                                              "type": "null"
                                            }
                                          ]
                                        },
                                        "phase": {
                                          "anyOf": [
                                            {
                                              "type": "string",
                                              "maxLength": 80
                                            },
                                            {
                                              "type": "null"
                                            }
                                          ]
                                        },
                                        "playerTurn": {
                                          "anyOf": [
                                            {
                                              "type": "string",
                                              "maxLength": 80
                                            },
                                            {
                                              "type": "null"
                                            }
                                          ]
                                        },
                                        "roundMin": {
                                          "anyOf": [
                                            {
                                              "type": "integer",
                                              "minimum": 1,
                                              "maximum": 5
                                            },
                                            {
                                              "type": "null"
                                            }
                                          ]
                                        },
                                        "roundMax": {
                                          "anyOf": [
                                            {
                                              "type": "integer",
                                              "minimum": 1,
                                              "maximum": 5
                                            },
                                            {
                                              "type": "null"
                                            }
                                          ]
                                        }
                                      },
                                      "required": [
                                        "timing",
                                        "phase",
                                        "playerTurn",
                                        "roundMin",
                                        "roundMax"
                                      ]
                                    }
                                  },
                                  "required": [
                                    "vp",
                                    "per",
                                    "mode",
                                    "max",
                                    "group",
                                    "cumulative",
                                    "criteria",
                                    "trigger"
                                  ]
                                }
                              }
                            },
                            "required": [
                              "key",
                              "name"
                            ]
                          }
                        },
                        "secondaryDeck": {
                          "maxItems": 60,
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "key": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 64
                              },
                              "name": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 80
                              },
                              "awards": {
                                "maxItems": 20,
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "vp": {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 100
                                    },
                                    "per": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "maxLength": 200
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "mode": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "maxLength": 40
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "max": {
                                      "anyOf": [
                                        {
                                          "type": "integer",
                                          "minimum": 0,
                                          "maximum": 100
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "group": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "maxLength": 100
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "cumulative": {
                                      "type": "boolean"
                                    },
                                    "criteria": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "maxLength": 2000
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "trigger": {
                                      "type": "object",
                                      "properties": {
                                        "timing": {
                                          "anyOf": [
                                            {
                                              "type": "string",
                                              "maxLength": 80
                                            },
                                            {
                                              "type": "null"
                                            }
                                          ]
                                        },
                                        "phase": {
                                          "anyOf": [
                                            {
                                              "type": "string",
                                              "maxLength": 80
                                            },
                                            {
                                              "type": "null"
                                            }
                                          ]
                                        },
                                        "playerTurn": {
                                          "anyOf": [
                                            {
                                              "type": "string",
                                              "maxLength": 80
                                            },
                                            {
                                              "type": "null"
                                            }
                                          ]
                                        },
                                        "roundMin": {
                                          "anyOf": [
                                            {
                                              "type": "integer",
                                              "minimum": 1,
                                              "maximum": 5
                                            },
                                            {
                                              "type": "null"
                                            }
                                          ]
                                        },
                                        "roundMax": {
                                          "anyOf": [
                                            {
                                              "type": "integer",
                                              "minimum": 1,
                                              "maximum": 5
                                            },
                                            {
                                              "type": "null"
                                            }
                                          ]
                                        }
                                      },
                                      "required": [
                                        "timing",
                                        "phase",
                                        "playerTurn",
                                        "roundMin",
                                        "roundMax"
                                      ]
                                    }
                                  },
                                  "required": [
                                    "vp",
                                    "per",
                                    "mode",
                                    "max",
                                    "group",
                                    "cumulative",
                                    "criteria",
                                    "trigger"
                                  ]
                                }
                              }
                            },
                            "required": [
                              "key",
                              "name"
                            ]
                          }
                        },
                        "primary": {
                          "anyOf": [
                            {
                              "type": "object",
                              "properties": {
                                "key": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 64
                                },
                                "name": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 80
                                },
                                "awards": {
                                  "maxItems": 20,
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "properties": {
                                      "vp": {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 100
                                      },
                                      "per": {
                                        "anyOf": [
                                          {
                                            "type": "string",
                                            "maxLength": 200
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ]
                                      },
                                      "mode": {
                                        "anyOf": [
                                          {
                                            "type": "string",
                                            "maxLength": 40
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ]
                                      },
                                      "max": {
                                        "anyOf": [
                                          {
                                            "type": "integer",
                                            "minimum": 0,
                                            "maximum": 100
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ]
                                      },
                                      "group": {
                                        "anyOf": [
                                          {
                                            "type": "string",
                                            "maxLength": 100
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ]
                                      },
                                      "cumulative": {
                                        "type": "boolean"
                                      },
                                      "criteria": {
                                        "anyOf": [
                                          {
                                            "type": "string",
                                            "maxLength": 2000
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ]
                                      },
                                      "trigger": {
                                        "type": "object",
                                        "properties": {
                                          "timing": {
                                            "anyOf": [
                                              {
                                                "type": "string",
                                                "maxLength": 80
                                              },
                                              {
                                                "type": "null"
                                              }
                                            ]
                                          },
                                          "phase": {
                                            "anyOf": [
                                              {
                                                "type": "string",
                                                "maxLength": 80
                                              },
                                              {
                                                "type": "null"
                                              }
                                            ]
                                          },
                                          "playerTurn": {
                                            "anyOf": [
                                              {
                                                "type": "string",
                                                "maxLength": 80
                                              },
                                              {
                                                "type": "null"
                                              }
                                            ]
                                          },
                                          "roundMin": {
                                            "anyOf": [
                                              {
                                                "type": "integer",
                                                "minimum": 1,
                                                "maximum": 5
                                              },
                                              {
                                                "type": "null"
                                              }
                                            ]
                                          },
                                          "roundMax": {
                                            "anyOf": [
                                              {
                                                "type": "integer",
                                                "minimum": 1,
                                                "maximum": 5
                                              },
                                              {
                                                "type": "null"
                                              }
                                            ]
                                          }
                                        },
                                        "required": [
                                          "timing",
                                          "phase",
                                          "playerTurn",
                                          "roundMin",
                                          "roundMax"
                                        ]
                                      }
                                    },
                                    "required": [
                                      "vp",
                                      "per",
                                      "mode",
                                      "max",
                                      "group",
                                      "cumulative",
                                      "criteria",
                                      "trigger"
                                    ]
                                  }
                                }
                              },
                              "required": [
                                "key",
                                "name"
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "secondaryMode": {
                          "type": "string",
                          "enum": [
                            "fixed",
                            "tactical"
                          ]
                        }
                      },
                      "required": [
                        "stratagems",
                        "secondaries",
                        "primary",
                        "secondaryMode"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "painted": {
                  "type": "boolean"
                },
                "roster": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string",
                      "maxLength": 80
                    },
                    "text": {
                      "type": "string",
                      "maxLength": 20000
                    },
                    "id": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 64
                    },
                    "reminders": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "key": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 240
                          },
                          "ability": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 80
                          },
                          "description": {
                            "type": "string",
                            "maxLength": 10000
                          },
                          "unit": {
                            "type": "object",
                            "properties": {
                              "index": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 99
                              },
                              "name": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 80
                              }
                            },
                            "required": [
                              "index",
                              "name"
                            ]
                          },
                          "timings": {
                            "minItems": 1,
                            "maxItems": 10,
                            "type": "array",
                            "items": {
                              "oneOf": [
                                {
                                  "type": "object",
                                  "properties": {
                                    "moment": {
                                      "type": "string",
                                      "enum": [
                                        "phase-start",
                                        "phase-end"
                                      ]
                                    },
                                    "phase": {
                                      "type": "string",
                                      "enum": [
                                        "command",
                                        "movement",
                                        "shooting",
                                        "charge",
                                        "fight"
                                      ]
                                    },
                                    "turn": {
                                      "type": "string",
                                      "enum": [
                                        "your-turn",
                                        "opponent-turn",
                                        "either"
                                      ]
                                    }
                                  },
                                  "required": [
                                    "moment",
                                    "phase",
                                    "turn"
                                  ]
                                },
                                {
                                  "type": "object",
                                  "properties": {
                                    "moment": {
                                      "type": "string",
                                      "enum": [
                                        "turn-start",
                                        "turn-end"
                                      ]
                                    },
                                    "phase": {
                                      "type": "null"
                                    },
                                    "turn": {
                                      "type": "string",
                                      "enum": [
                                        "your-turn",
                                        "opponent-turn",
                                        "either"
                                      ]
                                    }
                                  },
                                  "required": [
                                    "moment",
                                    "phase",
                                    "turn"
                                  ]
                                }
                              ]
                            }
                          }
                        },
                        "required": [
                          "key",
                          "ability",
                          "description",
                          "timings"
                        ]
                      }
                    },
                    "remindersEnabled": {
                      "type": "boolean"
                    },
                    "built": {
                      "type": "object",
                      "properties": {
                        "catalogueId": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 64
                        },
                        "revision": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 64
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 10000
                        },
                        "strategicReserveLimit": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 5000
                        },
                        "detachment": {
                          "anyOf": [
                            {
                              "type": "string",
                              "maxLength": 80
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "detachments": {
                          "maxItems": 3,
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "name": {
                                "type": "string",
                                "maxLength": 80
                              },
                              "points": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 3
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "name",
                              "points"
                            ]
                          }
                        },
                        "detachmentPointBudget": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 3
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "disposition": {
                          "anyOf": [
                            {
                              "type": "string",
                              "maxLength": 64
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "detachmentIds": {
                          "maxItems": 3,
                          "type": "array",
                          "items": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 128
                          }
                        },
                        "waivedRules": {
                          "maxItems": 8,
                          "type": "array",
                          "items": {
                            "type": "string",
                            "enum": [
                              "points-limit",
                              "detachments",
                              "detachment-points",
                              "kotc-infantry",
                              "kotc-warlord",
                              "kotc-epic-heroes",
                              "kotc-toughness",
                              "kotc-datasheet-copies"
                            ]
                          }
                        },
                        "picks": {
                          "maxItems": 100,
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "entryId": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 64
                              },
                              "catalogueId": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 64
                              },
                              "models": {
                                "type": "integer",
                                "minimum": 1,
                                "maximum": 60
                              },
                              "choices": {
                                "type": "object",
                                "propertyNames": {
                                  "type": "string",
                                  "maxLength": 400
                                },
                                "additionalProperties": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 64
                                }
                              },
                              "spreads": {
                                "type": "object",
                                "propertyNames": {
                                  "type": "string",
                                  "maxLength": 400
                                },
                                "additionalProperties": {
                                  "type": "object",
                                  "propertyNames": {
                                    "type": "string",
                                    "maxLength": 64
                                  },
                                  "additionalProperties": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 60
                                  }
                                }
                              },
                              "toggles": {
                                "type": "object",
                                "propertyNames": {
                                  "type": "string",
                                  "maxLength": 400
                                },
                                "additionalProperties": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 1
                                }
                              },
                              "attachedTo": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 99
                              }
                            },
                            "required": [
                              "entryId"
                            ]
                          }
                        },
                        "units": {
                          "maxItems": 200,
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "key": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 64
                              },
                              "name": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 80
                              },
                              "points": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 10000
                              },
                              "models": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 100
                              },
                              "wounds": {
                                "type": "integer",
                                "minimum": 1,
                                "maximum": 100
                              },
                              "entryId": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 64
                              },
                              "group": {
                                "type": "string",
                                "enum": [
                                  "epic-hero",
                                  "character",
                                  "battleline",
                                  "infantry",
                                  "swarm",
                                  "mounted",
                                  "beast",
                                  "monster",
                                  "vehicle",
                                  "drone",
                                  "transport",
                                  "fortification",
                                  "other"
                                ]
                              },
                              "warlord": {
                                "type": "boolean"
                              },
                              "warlordEligible": {
                                "type": "boolean"
                              },
                              "wargear": {
                                "maxItems": 200,
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "name": {
                                      "type": "string",
                                      "minLength": 1,
                                      "maxLength": 80
                                    },
                                    "count": {
                                      "type": "integer",
                                      "minimum": 1,
                                      "maximum": 100
                                    }
                                  },
                                  "required": [
                                    "name",
                                    "count"
                                  ]
                                }
                              },
                              "enhancements": {
                                "maxItems": 20,
                                "type": "array",
                                "items": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 80
                                }
                              },
                              "upgrades": {
                                "maxItems": 20,
                                "type": "array",
                                "items": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 80
                                }
                              },
                              "joined": {
                                "maxItems": 20,
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "label": {
                                      "type": "string",
                                      "minLength": 1,
                                      "maxLength": 80
                                    },
                                    "name": {
                                      "type": "string",
                                      "minLength": 1,
                                      "maxLength": 80
                                    }
                                  },
                                  "required": [
                                    "label",
                                    "name"
                                  ]
                                }
                              },
                              "attachedTo": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 64
                              },
                              "formationOptions": {
                                "maxItems": 4,
                                "type": "array",
                                "items": {
                                  "type": "string",
                                  "enum": [
                                    "battlefield",
                                    "strategic-reserves",
                                    "deep-strike",
                                    "embarked"
                                  ]
                                }
                              },
                              "prebattleRules": {
                                "maxItems": 2,
                                "type": "array",
                                "items": {
                                  "type": "string",
                                  "enum": [
                                    "infiltrators",
                                    "scouts"
                                  ]
                                }
                              },
                              "strategicReserveExempt": {
                                "type": "boolean"
                              },
                              "transport": {
                                "type": "boolean"
                              },
                              "transportRule": {
                                "type": "string",
                                "maxLength": 4000
                              }
                            },
                            "required": [
                              "key",
                              "name",
                              "points",
                              "models"
                            ]
                          }
                        }
                      },
                      "required": [
                        "catalogueId",
                        "revision",
                        "limit",
                        "detachment",
                        "disposition",
                        "units"
                      ]
                    }
                  },
                  "required": [
                    "name",
                    "text"
                  ]
                }
              },
              "required": [
                "kind",
                "roster"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "set-unit"
                },
                "unitKey": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                },
                "destroyed": {
                  "type": "boolean"
                },
                "playerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind",
                "unitKey",
                "destroyed"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "set-prep"
                },
                "stratagems": {
                  "maxItems": 48,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "key": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 64
                      },
                      "name": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 80
                      },
                      "cp": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 6
                      },
                      "limit": {
                        "type": "string",
                        "enum": [
                          "phase",
                          "turn",
                          "battle",
                          "unlimited"
                        ]
                      },
                      "phases": {
                        "maxItems": 6,
                        "type": "array",
                        "items": {
                          "type": "string",
                          "enum": [
                            "command",
                            "movement",
                            "shooting",
                            "charge",
                            "fight",
                            "end"
                          ]
                        }
                      },
                      "turn": {
                        "type": "string",
                        "enum": [
                          "your-turn",
                          "opponent-turn",
                          "either"
                        ]
                      },
                      "detachment": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 249
                      }
                    },
                    "required": [
                      "key",
                      "name",
                      "cp",
                      "limit"
                    ]
                  }
                },
                "secondaries": {
                  "maxItems": 6,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "key": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 64
                      },
                      "name": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 80
                      },
                      "awards": {
                        "maxItems": 20,
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "vp": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 100
                            },
                            "per": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 200
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "mode": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 40
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "max": {
                              "anyOf": [
                                {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 100
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "group": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 100
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "cumulative": {
                              "type": "boolean"
                            },
                            "criteria": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 2000
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "trigger": {
                              "type": "object",
                              "properties": {
                                "timing": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "maxLength": 80
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "phase": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "maxLength": 80
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "playerTurn": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "maxLength": 80
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "roundMin": {
                                  "anyOf": [
                                    {
                                      "type": "integer",
                                      "minimum": 1,
                                      "maximum": 5
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "roundMax": {
                                  "anyOf": [
                                    {
                                      "type": "integer",
                                      "minimum": 1,
                                      "maximum": 5
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                }
                              },
                              "required": [
                                "timing",
                                "phase",
                                "playerTurn",
                                "roundMin",
                                "roundMax"
                              ]
                            }
                          },
                          "required": [
                            "vp",
                            "per",
                            "mode",
                            "max",
                            "group",
                            "cumulative",
                            "criteria",
                            "trigger"
                          ]
                        }
                      }
                    },
                    "required": [
                      "key",
                      "name"
                    ]
                  }
                },
                "secondaryDeck": {
                  "maxItems": 60,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "key": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 64
                      },
                      "name": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 80
                      },
                      "awards": {
                        "maxItems": 20,
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "vp": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 100
                            },
                            "per": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 200
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "mode": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 40
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "max": {
                              "anyOf": [
                                {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 100
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "group": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 100
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "cumulative": {
                              "type": "boolean"
                            },
                            "criteria": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 2000
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "trigger": {
                              "type": "object",
                              "properties": {
                                "timing": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "maxLength": 80
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "phase": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "maxLength": 80
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "playerTurn": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "maxLength": 80
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "roundMin": {
                                  "anyOf": [
                                    {
                                      "type": "integer",
                                      "minimum": 1,
                                      "maximum": 5
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "roundMax": {
                                  "anyOf": [
                                    {
                                      "type": "integer",
                                      "minimum": 1,
                                      "maximum": 5
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                }
                              },
                              "required": [
                                "timing",
                                "phase",
                                "playerTurn",
                                "roundMin",
                                "roundMax"
                              ]
                            }
                          },
                          "required": [
                            "vp",
                            "per",
                            "mode",
                            "max",
                            "group",
                            "cumulative",
                            "criteria",
                            "trigger"
                          ]
                        }
                      }
                    },
                    "required": [
                      "key",
                      "name"
                    ]
                  }
                },
                "primary": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "key": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 64
                        },
                        "name": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 80
                        },
                        "awards": {
                          "maxItems": 20,
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "vp": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 100
                              },
                              "per": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "maxLength": 200
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "mode": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "maxLength": 40
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "max": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 100
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "group": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "maxLength": 100
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "cumulative": {
                                "type": "boolean"
                              },
                              "criteria": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "maxLength": 2000
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "trigger": {
                                "type": "object",
                                "properties": {
                                  "timing": {
                                    "anyOf": [
                                      {
                                        "type": "string",
                                        "maxLength": 80
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "phase": {
                                    "anyOf": [
                                      {
                                        "type": "string",
                                        "maxLength": 80
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "playerTurn": {
                                    "anyOf": [
                                      {
                                        "type": "string",
                                        "maxLength": 80
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "roundMin": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 1,
                                        "maximum": 5
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "roundMax": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 1,
                                        "maximum": 5
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  }
                                },
                                "required": [
                                  "timing",
                                  "phase",
                                  "playerTurn",
                                  "roundMin",
                                  "roundMax"
                                ]
                              }
                            },
                            "required": [
                              "vp",
                              "per",
                              "mode",
                              "max",
                              "group",
                              "cumulative",
                              "criteria",
                              "trigger"
                            ]
                          }
                        }
                      },
                      "required": [
                        "key",
                        "name"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "secondaryMode": {
                  "type": "string",
                  "enum": [
                    "fixed",
                    "tactical"
                  ]
                },
                "playerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind",
                "stratagems",
                "secondaries",
                "primary",
                "secondaryMode"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "deploy-unit"
                },
                "unitKey": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                },
                "deployed": {
                  "type": "boolean"
                },
                "playerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind",
                "unitKey",
                "deployed"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "set-unit-formation"
                },
                "unitKey": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                },
                "formation": {
                  "type": "string",
                  "enum": [
                    "battlefield",
                    "strategic-reserves",
                    "deep-strike",
                    "embarked"
                  ]
                },
                "transportKey": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                },
                "playerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind",
                "unitKey",
                "formation"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "set-painted"
                },
                "painted": {
                  "type": "boolean"
                },
                "playerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind",
                "painted"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "wound-unit"
                },
                "unitKey": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                },
                "delta": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "playerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind",
                "unitKey",
                "delta"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "damage-unit"
                },
                "unitKey": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                },
                "delta": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "playerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind",
                "unitKey",
                "delta"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "set-deployment"
                },
                "patternId": {
                  "anyOf": [
                    {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 64
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "kind",
                "patternId"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "set-battlefield"
                },
                "patternId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                },
                "terrainLayoutId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind",
                "patternId",
                "terrainLayoutId"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "use-stratagem"
                },
                "key": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                },
                "cp": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 6
                },
                "playerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind",
                "key"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "use-new-orders"
                },
                "stratagemKey": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                },
                "secondaryKey": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                },
                "secondary": {
                  "type": "object",
                  "properties": {
                    "key": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 64
                    },
                    "name": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 80
                    },
                    "awards": {
                      "maxItems": 20,
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "vp": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 100
                          },
                          "per": {
                            "anyOf": [
                              {
                                "type": "string",
                                "maxLength": 200
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "mode": {
                            "anyOf": [
                              {
                                "type": "string",
                                "maxLength": 40
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "max": {
                            "anyOf": [
                              {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 100
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "group": {
                            "anyOf": [
                              {
                                "type": "string",
                                "maxLength": 100
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "cumulative": {
                            "type": "boolean"
                          },
                          "criteria": {
                            "anyOf": [
                              {
                                "type": "string",
                                "maxLength": 2000
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "trigger": {
                            "type": "object",
                            "properties": {
                              "timing": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "maxLength": 80
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "phase": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "maxLength": 80
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "playerTurn": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "maxLength": 80
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "roundMin": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 5
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "roundMax": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 5
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "timing",
                              "phase",
                              "playerTurn",
                              "roundMin",
                              "roundMax"
                            ]
                          }
                        },
                        "required": [
                          "vp",
                          "per",
                          "mode",
                          "max",
                          "group",
                          "cumulative",
                          "criteria",
                          "trigger"
                        ]
                      }
                    }
                  },
                  "required": [
                    "key",
                    "name"
                  ]
                },
                "cp": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 6
                },
                "playerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind",
                "stratagemKey",
                "secondaryKey",
                "secondary"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "score-secondary"
                },
                "key": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                },
                "delta": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "playerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind",
                "key",
                "delta"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "score-settlement"
                },
                "scores": {
                  "minItems": 1,
                  "maxItems": 31,
                  "type": "array",
                  "items": {
                    "oneOf": [
                      {
                        "type": "object",
                        "properties": {
                          "category": {
                            "type": "string",
                            "const": "primary"
                          },
                          "delta": {
                            "type": "integer",
                            "exclusiveMinimum": 0,
                            "maximum": 9007199254740991
                          }
                        },
                        "required": [
                          "category",
                          "delta"
                        ]
                      },
                      {
                        "type": "object",
                        "properties": {
                          "category": {
                            "type": "string",
                            "const": "secondary"
                          },
                          "key": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64
                          },
                          "delta": {
                            "type": "integer",
                            "exclusiveMinimum": 0,
                            "maximum": 9007199254740991
                          },
                          "status": {
                            "type": "string",
                            "const": "achieved"
                          }
                        },
                        "required": [
                          "category",
                          "key",
                          "delta"
                        ]
                      }
                    ]
                  }
                },
                "round": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 5
                },
                "playerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind",
                "scores"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "set-secondary-status"
                },
                "key": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "active",
                    "achieved",
                    "discarded",
                    "returned"
                  ]
                },
                "playerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind",
                "key",
                "status"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "draw-secondary"
                },
                "secondary": {
                  "type": "object",
                  "properties": {
                    "key": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 64
                    },
                    "name": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 80
                    },
                    "awards": {
                      "maxItems": 20,
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "vp": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 100
                          },
                          "per": {
                            "anyOf": [
                              {
                                "type": "string",
                                "maxLength": 200
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "mode": {
                            "anyOf": [
                              {
                                "type": "string",
                                "maxLength": 40
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "max": {
                            "anyOf": [
                              {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 100
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "group": {
                            "anyOf": [
                              {
                                "type": "string",
                                "maxLength": 100
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "cumulative": {
                            "type": "boolean"
                          },
                          "criteria": {
                            "anyOf": [
                              {
                                "type": "string",
                                "maxLength": 2000
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "trigger": {
                            "type": "object",
                            "properties": {
                              "timing": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "maxLength": 80
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "phase": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "maxLength": 80
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "playerTurn": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "maxLength": 80
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "roundMin": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 5
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "roundMax": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 5
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "timing",
                              "phase",
                              "playerTurn",
                              "roundMin",
                              "roundMax"
                            ]
                          }
                        },
                        "required": [
                          "vp",
                          "per",
                          "mode",
                          "max",
                          "group",
                          "cumulative",
                          "criteria",
                          "trigger"
                        ]
                      }
                    }
                  },
                  "required": [
                    "key",
                    "name"
                  ]
                },
                "playerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind",
                "secondary"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "draw-secondaries"
                },
                "secondaries": {
                  "minItems": 1,
                  "maxItems": 2,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "key": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 64
                      },
                      "name": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 80
                      },
                      "awards": {
                        "maxItems": 20,
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "vp": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 100
                            },
                            "per": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 200
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "mode": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 40
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "max": {
                              "anyOf": [
                                {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 100
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "group": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 100
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "cumulative": {
                              "type": "boolean"
                            },
                            "criteria": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 2000
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "trigger": {
                              "type": "object",
                              "properties": {
                                "timing": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "maxLength": 80
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "phase": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "maxLength": 80
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "playerTurn": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "maxLength": 80
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "roundMin": {
                                  "anyOf": [
                                    {
                                      "type": "integer",
                                      "minimum": 1,
                                      "maximum": 5
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "roundMax": {
                                  "anyOf": [
                                    {
                                      "type": "integer",
                                      "minimum": 1,
                                      "maximum": 5
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                }
                              },
                              "required": [
                                "timing",
                                "phase",
                                "playerTurn",
                                "roundMin",
                                "roundMax"
                              ]
                            }
                          },
                          "required": [
                            "vp",
                            "per",
                            "mode",
                            "max",
                            "group",
                            "cumulative",
                            "criteria",
                            "trigger"
                          ]
                        }
                      }
                    },
                    "required": [
                      "key",
                      "name"
                    ]
                  }
                },
                "selected": {
                  "type": "boolean",
                  "const": true
                },
                "playerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind",
                "secondaries"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "acknowledge-draw"
                },
                "playerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "acknowledge-scoring"
                },
                "playerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "select-secret"
                },
                "secondary": {
                  "type": "object",
                  "properties": {
                    "key": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 64
                    },
                    "name": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 80
                    },
                    "awards": {
                      "maxItems": 20,
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "vp": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 100
                          },
                          "per": {
                            "anyOf": [
                              {
                                "type": "string",
                                "maxLength": 200
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "mode": {
                            "anyOf": [
                              {
                                "type": "string",
                                "maxLength": 40
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "max": {
                            "anyOf": [
                              {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 100
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "group": {
                            "anyOf": [
                              {
                                "type": "string",
                                "maxLength": 100
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "cumulative": {
                            "type": "boolean"
                          },
                          "criteria": {
                            "anyOf": [
                              {
                                "type": "string",
                                "maxLength": 2000
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "trigger": {
                            "type": "object",
                            "properties": {
                              "timing": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "maxLength": 80
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "phase": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "maxLength": 80
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "playerTurn": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "maxLength": 80
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "roundMin": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 5
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "roundMax": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 5
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "timing",
                              "phase",
                              "playerTurn",
                              "roundMin",
                              "roundMax"
                            ]
                          }
                        },
                        "required": [
                          "vp",
                          "per",
                          "mode",
                          "max",
                          "group",
                          "cumulative",
                          "criteria",
                          "trigger"
                        ]
                      }
                    }
                  },
                  "required": [
                    "key",
                    "name"
                  ]
                },
                "playerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind",
                "secondary"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "reveal-secret"
                },
                "playerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "begin-battle"
                },
                "firstPlayerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                },
                "attackerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind",
                "firstPlayerId"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "adjust-cp"
                },
                "delta": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "playerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind",
                "delta"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "resolve-tactical-hand"
                },
                "keys": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 64
                  }
                },
                "gainCp": {
                  "type": "boolean"
                },
                "playerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "score"
                },
                "category": {
                  "type": "string",
                  "enum": [
                    "primary",
                    "secondary"
                  ]
                },
                "delta": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "playerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind",
                "category",
                "delta"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "correct-player"
                },
                "playerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                },
                "resource": {
                  "type": "string",
                  "enum": [
                    "cp",
                    "primary",
                    "secondary"
                  ]
                },
                "delta": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "kind",
                "playerId",
                "resource",
                "delta"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "settle-opponent-turn"
                }
              },
              "required": [
                "kind"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "request-advance"
                },
                "playerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "cancel-advance"
                },
                "playerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "advance"
                },
                "playerId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "pause-clock"
                }
              },
              "required": [
                "kind"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "resume-clock"
                }
              },
              "required": [
                "kind"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "end-battle"
                },
                "reason": {
                  "type": "string",
                  "enum": [
                    "completed",
                    "finished-early",
                    "conceded"
                  ]
                },
                "concededBy": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              },
              "required": [
                "kind"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "reopen-battle"
                }
              },
              "required": [
                "kind"
              ]
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "undo"
                },
                "target": {
                  "type": "integer",
                  "exclusiveMinimum": 0,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "kind",
                "target"
              ]
            }
          ]
        },
        {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "attach-saved-roster"
            },
            "rosterId": {
              "type": "string",
              "minLength": 1,
              "maxLength": 64
            },
            "playerId": {
              "type": "string",
              "minLength": 1,
              "maxLength": 64
            }
          },
          "required": [
            "kind",
            "rosterId"
          ],
          "additionalProperties": false
        }
      ]
    }
  },
  "required": [
    "token",
    "expectedSeq",
    "command"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢search_reference(query, kinds, faction, pack, document, ...)

Searches the verified mission, rules, detachment, and datasheet text used by Praetorium. Returns bounded excerpts with canonical URLs, source revisions, and attribution.

输入模式

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 2,
      "maxLength": 120,
      "description": "Words, a printed rule number, an ability, a weapon, or a rules phrase."
    },
    "kinds": {
      "maxItems": 6,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "datasheet",
          "deployment",
          "detachment",
          "mission",
          "rule",
          "terrain"
        ]
      }
    },
    "faction": {
      "type": "string",
      "minLength": 1,
      "maxLength": 160
    },
    "pack": {
      "type": "string",
      "minLength": 1,
      "maxLength": 160
    },
    "document": {
      "type": "string",
      "minLength": 1,
      "maxLength": 160
    },
    "limit": {
      "default": 10,
      "type": "integer",
      "minimum": 1,
      "maximum": 25
    },
    "cursor": {
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

输出模式

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string"
    },
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "kind": {
            "type": "string",
            "enum": [
              "datasheet",
              "deployment",
              "detachment",
              "mission",
              "rule",
              "terrain"
            ]
          },
          "title": {
            "type": "string"
          },
          "faction": {
            "type": [
              "string",
              "null"
            ]
          },
          "url": {
            "type": "string"
          },
          "section": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "title": {
                "type": "string"
              },
              "url": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "title",
              "url"
            ],
            "additionalProperties": false
          },
          "excerpt": {
            "type": "string"
          },
          "revisions": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {
              "type": "string"
            }
          },
          "attribution": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "id",
          "kind",
          "title",
          "faction",
          "url",
          "section",
          "excerpt",
          "revisions",
          "attribution"
        ],
        "additionalProperties": false
      }
    },
    "revisions": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "string"
      }
    },
    "nextCursor": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "query",
    "results",
    "revisions",
    "nextCursor"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟢get_reference(id)

Reads the complete bounded document returned by search_reference, with its source location, revisions, and attribution.

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 400,
      "description": "The stable result id returned by search_reference."
    }
  },
  "required": [
    "id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

输出模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "kind": {
      "type": "string",
      "enum": [
        "datasheet",
        "deployment",
        "detachment",
        "mission",
        "rule",
        "terrain"
      ]
    },
    "title": {
      "type": "string"
    },
    "faction": {
      "type": [
        "string",
        "null"
      ]
    },
    "url": {
      "type": "string"
    },
    "sections": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "text": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "title",
          "text",
          "url"
        ],
        "additionalProperties": false
      }
    },
    "revisions": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "string"
      }
    },
    "attribution": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "id",
    "kind",
    "title",
    "faction",
    "url",
    "sections",
    "revisions",
    "attribution"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟢get_reference_record(id)

Returns the source-faithful structured record behind a search result, including mission cards, deployments, terrain geometry, detachments, and datasheets.

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 400,
      "description": "The stable id returned by search_reference or list_reference."
    }
  },
  "required": [
    "id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

输出模式

{
  "type": "object",
  "properties": {
    "document": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "kind": {
          "type": "string",
          "enum": [
            "datasheet",
            "deployment",
            "detachment",
            "mission",
            "rule",
            "terrain"
          ]
        },
        "title": {
          "type": "string"
        },
        "faction": {
          "type": [
            "string",
            "null"
          ]
        },
        "url": {
          "type": "string"
        },
        "sections": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "title": {
                "type": "string"
              },
              "text": {
                "type": "string"
              },
              "url": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "title",
              "text",
              "url"
            ],
            "additionalProperties": false
          }
        },
        "revisions": {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {
            "type": "string"
          }
        },
        "attribution": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "id",
        "kind",
        "title",
        "faction",
        "url",
        "sections",
        "revisions",
        "attribution"
      ],
      "additionalProperties": false
    },
    "data": {}
  },
  "required": [
    "document",
    "data"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟢list_factions

Lists the factions that can be used to narrow reference searches.

输入模式

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}

输出模式

{
  "type": "object",
  "properties": {
    "factions": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "datasheets": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "detachments": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "id",
          "slug",
          "name",
          "datasheets",
          "detachments"
        ],
        "additionalProperties": false
      }
    },
    "revisions": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "string"
      }
    }
  },
  "required": [
    "factions",
    "revisions"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟢list_reference

Discovers available factions, mission packs, rule documents, reference kinds, and active source revisions.

输入模式

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}

输出模式

{
  "type": "object",
  "properties": {
    "corpusRevision": {
      "type": "string"
    },
    "revisions": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "string"
      }
    },
    "kinds": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "integer",
        "minimum": 0,
        "maximum": 9007199254740991
      }
    },
    "factions": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "datasheets": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "detachments": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "id",
          "slug",
          "name",
          "datasheets",
          "detachments"
        ],
        "additionalProperties": false
      }
    },
    "missionPacks": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "title",
          "url"
        ],
        "additionalProperties": false
      }
    },
    "ruleDocuments": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "sections": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "url": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "slug",
          "title",
          "sections",
          "url"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "corpusRevision",
    "revisions",
    "kinds",
    "factions",
    "missionPacks",
    "ruleDocuments"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟢list_units(faction, battleSize, detachment)

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 complete rules, enhancements, upgrades, and stratagems without opening every unit page.

输入模式

{
  "type": "object",
  "properties": {
    "faction": {
      "type": "string",
      "minLength": 1,
      "maxLength": 160,
      "description": "Faction id, URL slug, or display name from list_reference."
    },
    "battleSize": {
      "description": "Battle size in points for size-dependent limits.",
      "type": "integer",
      "minimum": 1,
      "maximum": 10000
    },
    "detachment": {
      "description": "Detachment id, slug, or display name.",
      "type": "string",
      "minLength": 1,
      "maxLength": 160
    }
  },
  "required": [
    "faction"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

输出模式

{
  "type": "object",
  "properties": {
    "faction": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "slug": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "datasheets": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "detachments": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        }
      },
      "required": [
        "id",
        "slug",
        "name",
        "datasheets",
        "detachments"
      ],
      "additionalProperties": false
    },
    "battleSize": {
      "anyOf": [
        {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991
        },
        {
          "type": "null"
        }
      ]
    },
    "detachment": {
      "anyOf": [
        {},
        {
          "type": "null"
        }
      ]
    },
    "units": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "group": {
            "type": "string"
          },
          "allied": {
            "type": "boolean"
          },
          "alliedFaction": {
            "type": [
              "string",
              "null"
            ]
          },
          "points": {
            "type": [
              "number",
              "null"
            ]
          },
          "limit": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ]
          },
          "keywords": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "composition": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "costs": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "models": {
                  "type": "string"
                },
                "cost": {
                  "type": "string"
                },
                "keyword": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "faction": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "detachment": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "models",
                "cost",
                "keyword",
                "faction",
                "detachment"
              ],
              "additionalProperties": false
            }
          },
          "canLead": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "canSupport": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "canBeLedBy": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "canBeSupportedBy": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "url": {
            "type": [
              "string",
              "null"
            ]
          },
          "referenceId": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "id",
          "slug",
          "name",
          "group",
          "allied",
          "alliedFaction",
          "points",
          "limit",
          "keywords",
          "composition",
          "costs",
          "canLead",
          "canSupport",
          "canBeLedBy",
          "canBeSupportedBy",
          "url",
          "referenceId"
        ],
        "additionalProperties": false
      }
    },
    "revisions": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "string"
      }
    }
  },
  "required": [
    "faction",
    "battleSize",
    "detachment",
    "units",
    "revisions"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}

社区

评价此服务器

证据

最近观测

已验证未记录版本14 个工具