Praetorium
Public Warhammer 40K rules, datasheets, points and missions; sign in to manage rosters and battles.
我该使用它吗
质量与安全性
发现(1)
- LOW在 list_reference 中
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 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
}社区
证据