Praetorium
Ce que fait ce MCP
Searches verified Warhammer 40K rules and datasheets and supports roster management and turn-based battle tracking.
Outils
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'allyId': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'casual': {'type': 'boolean', 'default': False}, 'opponentId': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'opponentIds': {'type': 'array', 'items': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'maxItems': 2, 'minItems': 1}, 'missionPackId': {'anyOf': [{'type': 'string', 'maxLength': 64, 'minLength': 1}, {'type': 'null'}], 'default': None}}}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['token'], 'properties': {'token': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'maxLength': 400, 'minLength': 1, 'description': 'The stable result id returned by search_reference.'}}}
Schéma de sortie
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id', 'kind', 'title', 'faction', 'url', 'sections', 'revisions', 'attribution'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'kind': {'enum': ['datasheet', 'deployment', 'detachment', 'mission', 'rule', 'terrain'], 'type': 'string'}, 'title': {'type': 'string'}, 'faction': {'type': ['string', 'null']}, 'sections': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'title', 'text', 'url'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'text': {'type': 'string'}, 'title': {'type': 'string'}}, 'additionalProperties': False}}, 'revisions': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}, 'attribution': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'maxLength': 400, 'minLength': 1, 'description': 'The stable id returned by search_reference or list_reference.'}}}
Schéma de sortie
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['document', 'data'], 'properties': {'data': {}, 'document': {'type': 'object', 'required': ['id', 'kind', 'title', 'faction', 'url', 'sections', 'revisions', 'attribution'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'kind': {'enum': ['datasheet', 'deployment', 'detachment', 'mission', 'rule', 'terrain'], 'type': 'string'}, 'title': {'type': 'string'}, 'faction': {'type': ['string', 'null']}, 'sections': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'title', 'text', 'url'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'text': {'type': 'string'}, 'title': {'type': 'string'}}, 'additionalProperties': False}}, 'revisions': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}, 'attribution': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Schéma de sortie
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['factions', 'revisions'], 'properties': {'factions': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'slug', 'name', 'datasheets', 'detachments'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'datasheets': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'detachments': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}}, 'additionalProperties': False}}, 'revisions': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'before': {'anyOf': [{'type': 'object', 'required': ['at', 'id'], 'properties': {'at': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'id': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, {'type': 'null'}], 'default': None}}}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Schéma de sortie
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['corpusRevision', 'revisions', 'kinds', 'factions', 'missionPacks', 'ruleDocuments'], 'properties': {'kinds': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}}, 'factions': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'slug', 'name', 'datasheets', 'detachments'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'datasheets': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'detachments': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}}, 'additionalProperties': False}}, 'revisions': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}, 'missionPacks': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'title', 'url'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'title': {'type': 'string'}}, 'additionalProperties': False}}, 'ruleDocuments': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'slug', 'title', 'sections', 'url'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'slug': {'type': 'string'}, 'title': {'type': 'string'}, 'sections': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}}, 'additionalProperties': False}}, 'corpusRevision': {'type': 'string'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['faction'], 'properties': {'faction': {'type': 'string', 'maxLength': 160, 'minLength': 1, 'description': 'Faction id, URL slug, or display name from list_reference.'}, 'battleSize': {'type': 'integer', 'maximum': 10000, 'minimum': 1, 'description': 'Battle size in points for size-dependent limits.'}, 'detachment': {'type': 'string', 'maxLength': 160, 'minLength': 1, 'description': 'Detachment id, slug, or display name.'}}}
Schéma de sortie
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['faction', 'battleSize', 'detachment', 'units', 'revisions'], 'properties': {'units': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'slug', 'name', 'group', 'allied', 'alliedFaction', 'points', 'limit', 'keywords', 'composition', 'costs', 'canLead', 'canSupport', 'canBeLedBy', 'canBeSupportedBy', 'url', 'referenceId'], 'properties': {'id': {'type': 'string'}, 'url': {'type': ['string', 'null']}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'costs': {'type': 'array', 'items': {'type': 'object', 'required': ['models', 'cost', 'keyword', 'faction', 'detachment'], 'properties': {'cost': {'type': 'string'}, 'models': {'type': 'string'}, 'faction': {'type': ['string', 'null']}, 'keyword': {'type': ['string', 'null']}, 'detachment': {'type': ['string', 'null']}}, 'additionalProperties': False}}, 'group': {'type': 'string'}, 'limit': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'allied': {'type': 'boolean'}, 'points': {'type': ['number', 'null']}, 'canLead': {'type': 'array', 'items': {'type': 'string'}}, 'keywords': {'type': 'array', 'items': {'type': 'string'}}, 'canBeLedBy': {'type': 'array', 'items': {'type': 'string'}}, 'canSupport': {'type': 'array', 'items': {'type': 'string'}}, 'composition': {'type': 'array', 'items': {'type': 'string'}}, 'referenceId': {'type': ['string', 'null']}, 'alliedFaction': {'type': ['string', 'null']}, 'canBeSupportedBy': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}}, 'faction': {'type': 'object', 'required': ['id', 'slug', 'name', 'datasheets', 'detachments'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'datasheets': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'detachments': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}}, 'additionalProperties': False}, 'revisions': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}, 'battleSize': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'detachment': {'anyOf': [{}, {'type': 'null'}]}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name', 'catalogueId', 'detachmentIds', 'disposition', 'limit', 'picks', 'prep'], 'properties': {'id': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'name': {'type': 'string', 'maxLength': 80}, 'prep': {'anyOf': [{'type': 'object', 'required': ['stratagems', 'secondaries'], 'properties': {'reminders': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'ability', 'description', 'timings'], 'properties': {'key': {'type': 'string', 'maxLength': 240, 'minLength': 1}, 'unit': {'type': 'object', 'required': ['index', 'name'], 'properties': {'name': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'index': {'type': 'integer', 'maximum': 99, 'minimum': 0}}}, 'ability': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'timings': {'type': 'array', 'items': {'oneOf': [{'type': 'object', 'required': ['moment', 'phase', 'turn'], 'properties': {'turn': {'enum': ['your-turn', 'opponent-turn', 'either'], 'type': 'string'}, 'phase': {'enum': ['command', 'movement', 'shooting', 'charge', 'fight'], 'type': 'string'}, 'moment': {'enum': ['phase-start', 'phase-end'], 'type': 'string'}}}, {'type': 'object', 'required': ['moment', 'phase', 'turn'], 'properties': {'turn': {'enum': ['your-turn', 'opponent-turn', 'either'], 'type': 'string'}, 'phase': {'type': 'null'}, 'moment': {'enum': ['turn-start', 'turn-end'], 'type': 'string'}}}]}, 'maxItems': 10, 'minItems': 1}, 'description': {'type': 'string', 'maxLength': 10000}}}, 'default': [], 'maxItems': 100}, 'stratagems': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'name', 'cp', 'limit'], 'properties': {'cp': {'type': 'integer', 'maximum': 6, 'minimum': 0}, 'key': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'name': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'turn': {'enum': ['your-turn', 'opponent-turn', 'either'], 'type': 'string'}, 'limit': {'enum': ['phase', 'turn', 'battle', 'unlimited'], 'type': 'string'}, 'phases': {'type': 'array', 'items': {'enum': ['command', 'movement', 'shooting', 'charge', 'fight', 'end'], 'type': 'string'}, 'maxItems': 6}}}, 'maxItems': 48}, 'secondaries': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'name'], 'properties': {'key': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'name': {'type': 'string', 'maxLength': 80, 'minLength': 1}}}, 'maxItems': 6}, 'remindersEnabled': {'type': 'boolean', 'default': True}}}, {'type': 'null'}]}, 'limit': {'type': 'integer', 'maximum': 10000, 'minimum': 0}, 'picks': {'type': 'array', 'items': {'type': 'object', 'required': ['entryId'], 'properties': {'models': {'type': 'integer', 'maximum': 60, 'minimum': 1}, 'choices': {'type': 'object', 'propertyNames': {'type': 'string', 'maxLength': 400}, 'additionalProperties': {'type': 'string', 'maxLength': 64, 'minLength': 1}}, 'entryId': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'spreads': {'type': 'object', 'propertyNames': {'type': 'string', 'maxLength': 400}, 'additionalProperties': {'type': 'object', 'propertyNames': {'type': 'string', 'maxLength': 64}, 'additionalProperties': {'type': 'integer', 'maximum': 60, 'minimum': 0}}}, 'toggles': {'type': 'object', 'propertyNames': {'type': 'string', 'maxLength': 400}, 'additionalProperties': {'type': 'integer', 'maximum': 1, 'minimum': 0}}, 'attachedTo': {'type': 'integer', 'maximum': 99, 'minimum': 0}, 'catalogueId': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, 'maxItems': 100}, 'source': {'enum': ['legacy', 'editable', 'praetorium', 'battlebase', 'newrecruit', 'roster-file'], 'type': 'string', 'default': 'editable'}, 'visibility': {'enum': ['private', 'unlisted', 'public'], 'type': 'string', 'default': 'private'}, 'catalogueId': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'disposition': {'anyOf': [{'type': 'string', 'maxLength': 64, 'minLength': 1}, {'type': 'null'}]}, 'waivedRules': {'type': 'array', 'items': {'enum': ['points-limit', 'detachments', 'detachment-points', 'kotc-infantry', 'kotc-warlord', 'kotc-epic-heroes', 'kotc-toughness', 'kotc-datasheet-copies'], 'type': 'string'}, 'maxItems': 8}, 'detachmentIds': {'type': 'array', 'items': {'type': 'string', 'maxLength': 128, 'minLength': 1}, 'maxItems': 3}, 'optionalRules': {'type': 'array', 'items': {'enum': ['kotc-borrowed-disposition'], 'type': 'string'}, 'maxItems': 1}, 'borrowedDetachmentId': {'anyOf': [{'type': 'string', 'maxLength': 128, 'minLength': 1}, {'type': 'null'}], 'default': None}}}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query'], 'properties': {'pack': {'type': 'string', 'maxLength': 160, 'minLength': 1}, 'kinds': {'type': 'array', 'items': {'enum': ['datasheet', 'deployment', 'detachment', 'mission', 'rule', 'terrain'], 'type': 'string'}, 'maxItems': 6}, 'limit': {'type': 'integer', 'default': 10, 'maximum': 25, 'minimum': 1}, 'query': {'type': 'string', 'maxLength': 120, 'minLength': 2, 'description': 'Words, a printed rule number, an ability, a weapon, or a rules phrase.'}, 'cursor': {'type': 'string'}, 'faction': {'type': 'string', 'maxLength': 160, 'minLength': 1}, 'document': {'type': 'string', 'maxLength': 160, 'minLength': 1}}}
Schéma de sortie
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query', 'results', 'revisions', 'nextCursor'], 'properties': {'query': {'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'kind', 'title', 'faction', 'url', 'section', 'excerpt', 'revisions', 'attribution'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'kind': {'enum': ['datasheet', 'deployment', 'detachment', 'mission', 'rule', 'terrain'], 'type': 'string'}, 'title': {'type': 'string'}, 'excerpt': {'type': 'string'}, 'faction': {'type': ['string', 'null']}, 'section': {'type': 'object', 'required': ['id', 'title', 'url'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'title': {'type': 'string'}}, 'additionalProperties': False}, 'revisions': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}, 'attribution': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}}, 'revisions': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}, 'nextCursor': {'type': ['string', 'null']}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id', 'visibility'], 'properties': {'id': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'visibility': {'enum': ['private', 'unlisted', 'public'], 'type': 'string'}}}
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['token', 'expectedSeq', 'command'], 'properties': {'token': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'command': {'anyOf': [{'oneOf': [{'type': 'object', 'required': ['kind', 'limit', 'missionPackId', 'terrainLayoutId', 'twistId', 'clockLimitMinutes'], 'properties': {'kind': {'type': 'string', 'const': 'configure-battle'}, 'limit': {'type': 'integer', 'maximum': 10000, 'minimum': 0}, 'twistId': {'anyOf': [{'type': 'string', 'maxLength': 64, 'minLength': 1}, {'type': 'null'}]}, 'teamBattle': {'type': 'boolean'}, 'playerCount': {'anyOf': [{'type': 'number', 'const': 2}, {'type': 'number', 'const': 3}, {'type': 'number', 'const': 4}]}, 'missionPackId': {'anyOf': [{'type': 'string', 'maxLength': 64, 'minLength': 1}, {'type': 'null'}]}, 'terrainLayoutId': {'anyOf': [{'type': 'string', 'maxLength': 64, 'minLength': 1}, {'type': 'null'}]}, 'clockLimitMinutes': {'anyOf': [{'type': 'integer', 'maximum': 300, 'minimum': 5}, {'type': 'null'}]}}}, {'type': 'object', 'required': ['kind'], 'properties': {'kind': {'type': 'string', 'const': 'reset-setup'}}}, {'type': 'object', 'required': ['kind'], 'properties': {'kind': {'type': 'string', 'const': 'detach-roster'}, 'playerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, {'type': 'object', 'required': ['kind', 'leagueToken'], 'properties': {'kind': {'type': 'string', 'const': 'lock-league-rosters'}, 'eventToken': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'leagueToken': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, {'type': 'object', 'required': ['kind', 'step'], 'properties': {'kind': {'type': 'string', 'const': 'set-setup-step'}, 'step': {'type': 'integer', 'maximum': 9, 'minimum': 0}}}, {'type': 'object', 'required': ['kind', 'attackerId'], 'properties': {'kind': {'type': 'string', 'const': 'set-attacker'}, 'attackerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, {'type': 'object', 'required': ['kind', 'firstPlayerId'], 'properties': {'kind': {'type': 'string', 'const': 'set-first-turn'}, 'firstPlayerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, {'type': 'object', 'required': ['kind', 'side', 'disposition'], 'properties': {'kind': {'type': 'string', 'const': 'set-side-disposition'}, 'side': {'type': 'integer', 'maximum': 1, 'minimum': 0}, 'disposition': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, {'type': 'object', 'required': ['kind', 'roster'], 'properties': {'kind': {'type': 'string', 'const': 'attach-roster'}, 'prep': {'anyOf': [{'type': 'object', 'required': ['stratagems', 'secondaries', 'primary', 'secondaryMode'], 'properties': {'primary': {'anyOf': [{'type': 'object', 'required': ['key', 'name'], 'properties': {'key': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'name': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'awards': {'type': 'array', 'items': {'type': 'object', 'required': ['vp', 'per', 'mode', 'max', 'group', 'cumulative', 'criteria', 'trigger'], 'properties': {'vp': {'type': 'integer', 'maximum': 100, 'minimum': 0}, 'max': {'anyOf': [{'type': 'integer', 'maximum': 100, 'minimum': 0}, {'type': 'null'}]}, 'per': {'anyOf': [{'type': 'string', 'maxLength': 200}, {'type': 'null'}]}, 'mode': {'anyOf': [{'type': 'string', 'maxLength': 40}, {'type': 'null'}]}, 'group': {'anyOf': [{'type': 'string', 'maxLength': 100}, {'type': 'null'}]}, 'trigger': {'type': 'object', 'required': ['timing', 'phase', 'playerTurn', 'roundMin', 'roundMax'], 'properties': {'phase': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}, 'timing': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}, 'roundMax': {'anyOf': [{'type': 'integer', 'maximum': 5, 'minimum': 1}, {'type': 'null'}]}, 'roundMin': {'anyOf': [{'type': 'integer', 'maximum': 5, 'minimum': 1}, {'type': 'null'}]}, 'playerTurn': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}}}, 'criteria': {'anyOf': [{'type': 'string', 'maxLength': 2000}, {'type': 'null'}]}, 'cumulative': {'type': 'boolean'}}}, 'maxItems': 20}}}, {'type': 'null'}]}, 'stratagems': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'name', 'cp', 'limit'], 'properties': {'cp': {'type': 'integer', 'maximum': 6, 'minimum': 0}, 'key': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'name': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'turn': {'enum': ['your-turn', 'opponent-turn', 'either'], 'type': 'string'}, 'limit': {'enum': ['phase', 'turn', 'battle', 'unlimited'], 'type': 'string'}, 'phases': {'type': 'array', 'items': {'enum': ['command', 'movement', 'shooting', 'charge', 'fight', 'end'], 'type': 'string'}, 'maxItems': 6}, 'detachment': {'type': 'string', 'maxLength': 249, 'minLength': 1}}}, 'maxItems': 48}, 'secondaries': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'name'], 'properties': {'key': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'name': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'awards': {'type': 'array', 'items': {'type': 'object', 'required': ['vp', 'per', 'mode', 'max', 'group', 'cumulative', 'criteria', 'trigger'], 'properties': {'vp': {'type': 'integer', 'maximum': 100, 'minimum': 0}, 'max': {'anyOf': [{'type': 'integer', 'maximum': 100, 'minimum': 0}, {'type': 'null'}]}, 'per': {'anyOf': [{'type': 'string', 'maxLength': 200}, {'type': 'null'}]}, 'mode': {'anyOf': [{'type': 'string', 'maxLength': 40}, {'type': 'null'}]}, 'group': {'anyOf': [{'type': 'string', 'maxLength': 100}, {'type': 'null'}]}, 'trigger': {'type': 'object', 'required': ['timing', 'phase', 'playerTurn', 'roundMin', 'roundMax'], 'properties': {'phase': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}, 'timing': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}, 'roundMax': {'anyOf': [{'type': 'integer', 'maximum': 5, 'minimum': 1}, {'type': 'null'}]}, 'roundMin': {'anyOf': [{'type': 'integer', 'maximum': 5, 'minimum': 1}, {'type': 'null'}]}, 'playerTurn': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}}}, 'criteria': {'anyOf': [{'type': 'string', 'maxLength': 2000}, {'type': 'null'}]}, 'cumulative': {'type': 'boolean'}}}, 'maxItems': 20}}}, 'maxItems': 6}, 'secondaryDeck': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'name'], 'properties': {'key': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'name': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'awards': {'type': 'array', 'items': {'type': 'object', 'required': ['vp', 'per', 'mode', 'max', 'group', 'cumulative', 'criteria', 'trigger'], 'properties': {'vp': {'type': 'integer', 'maximum': 100, 'minimum': 0}, 'max': {'anyOf': [{'type': 'integer', 'maximum': 100, 'minimum': 0}, {'type': 'null'}]}, 'per': {'anyOf': [{'type': 'string', 'maxLength': 200}, {'type': 'null'}]}, 'mode': {'anyOf': [{'type': 'string', 'maxLength': 40}, {'type': 'null'}]}, 'group': {'anyOf': [{'type': 'string', 'maxLength': 100}, {'type': 'null'}]}, 'trigger': {'type': 'object', 'required': ['timing', 'phase', 'playerTurn', 'roundMin', 'roundMax'], 'properties': {'phase': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}, 'timing': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}, 'roundMax': {'anyOf': [{'type': 'integer', 'maximum': 5, 'minimum': 1}, {'type': 'null'}]}, 'roundMin': {'anyOf': [{'type': 'integer', 'maximum': 5, 'minimum': 1}, {'type': 'null'}]}, 'playerTurn': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}}}, 'criteria': {'anyOf': [{'type': 'string', 'maxLength': 2000}, {'type': 'null'}]}, 'cumulative': {'type': 'boolean'}}}, 'maxItems': 20}}}, 'maxItems': 60}, 'secondaryMode': {'enum': ['fixed', 'tactical'], 'type': 'string'}}}, {'type': 'null'}]}, 'roster': {'type': 'object', 'required': ['name', 'text'], 'properties': {'id': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'name': {'type': 'string', 'maxLength': 80}, 'text': {'type': 'string', 'maxLength': 20000}, 'built': {'type': 'object', 'required': ['catalogueId', 'revision', 'limit', 'detachment', 'disposition', 'units'], 'properties': {'limit': {'type': 'integer', 'maximum': 10000, 'minimum': 0}, 'picks': {'type': 'array', 'items': {'type': 'object', 'required': ['entryId'], 'properties': {'models': {'type': 'integer', 'maximum': 60, 'minimum': 1}, 'choices': {'type': 'object', 'propertyNames': {'type': 'string', 'maxLength': 400}, 'additionalProperties': {'type': 'string', 'maxLength': 64, 'minLength': 1}}, 'entryId': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'spreads': {'type': 'object', 'propertyNames': {'type': 'string', 'maxLength': 400}, 'additionalProperties': {'type': 'object', 'propertyNames': {'type': 'string', 'maxLength': 64}, 'additionalProperties': {'type': 'integer', 'maximum': 60, 'minimum': 0}}}, 'toggles': {'type': 'object', 'propertyNames': {'type': 'string', 'maxLength': 400}, 'additionalProperties': {'type': 'integer', 'maximum': 1, 'minimum': 0}}, 'attachedTo': {'type': 'integer', 'maximum': 99, 'minimum': 0}, 'catalogueId': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, 'maxItems': 100}, 'units': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'name', 'points', 'models'], 'properties': {'key': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'name': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'group': {'enum': ['epic-hero', 'character', 'battleline', 'infantry', 'swarm', 'mounted', 'beast', 'monster', 'vehicle', 'drone', 'transport', 'fortification', 'other'], 'type': 'string'}, 'joined': {'type': 'array', 'items': {'type': 'object', 'required': ['label', 'name'], 'properties': {'name': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'label': {'type': 'string', 'maxLength': 80, 'minLength': 1}}}, 'maxItems': 20}, 'models': {'type': 'integer', 'maximum': 100, 'minimum': 0}, 'points': {'type': 'integer', 'maximum': 10000, 'minimum': 0}, 'wounds': {'type': 'integer', 'maximum': 100, 'minimum': 1}, 'entryId': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'wargear': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'count'], 'properties': {'name': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'count': {'type': 'integer', 'maximum': 100, 'minimum': 1}}}, 'maxItems': 200}, 'warlord': {'type': 'boolean'}, 'upgrades': {'type': 'array', 'items': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'maxItems': 20}, 'transport': {'type': 'boolean'}, 'attachedTo': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'enhancements': {'type': 'array', 'items': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'maxItems': 20}, 'transportRule': {'type': 'string', 'maxLength': 4000}, 'prebattleRules': {'type': 'array', 'items': {'enum': ['infiltrators', 'scouts'], 'type': 'string'}, 'maxItems': 2}, 'warlordEligible': {'type': 'boolean'}, 'formationOptions': {'type': 'array', 'items': {'enum': ['battlefield', 'strategic-reserves', 'deep-strike', 'embarked'], 'type': 'string'}, 'maxItems': 4}, 'strategicReserveExempt': {'type': 'boolean'}}}, 'maxItems': 200}, 'revision': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'detachment': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}, 'catalogueId': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'detachments': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'points'], 'properties': {'name': {'type': 'string', 'maxLength': 80}, 'points': {'anyOf': [{'type': 'integer', 'maximum': 3, 'minimum': 1}, {'type': 'null'}]}}}, 'maxItems': 3}, 'disposition': {'anyOf': [{'type': 'string', 'maxLength': 64}, {'type': 'null'}]}, 'waivedRules': {'type': 'array', 'items': {'enum': ['points-limit', 'detachments', 'detachment-points', 'kotc-infantry', 'kotc-warlord', 'kotc-epic-heroes', 'kotc-toughness', 'kotc-datasheet-copies'], 'type': 'string'}, 'maxItems': 8}, 'detachmentIds': {'type': 'array', 'items': {'type': 'string', 'maxLength': 128, 'minLength': 1}, 'maxItems': 3}, 'detachmentPointBudget': {'anyOf': [{'type': 'integer', 'maximum': 3, 'minimum': 0}, {'type': 'null'}]}, 'strategicReserveLimit': {'type': 'integer', 'maximum': 5000, 'minimum': 0}}}, 'reminders': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'ability', 'description', 'timings'], 'properties': {'key': {'type': 'string', 'maxLength': 240, 'minLength': 1}, 'unit': {'type': 'object', 'required': ['index', 'name'], 'properties': {'name': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'index': {'type': 'integer', 'maximum': 99, 'minimum': 0}}}, 'ability': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'timings': {'type': 'array', 'items': {'oneOf': [{'type': 'object', 'required': ['moment', 'phase', 'turn'], 'properties': {'turn': {'enum': ['your-turn', 'opponent-turn', 'either'], 'type': 'string'}, 'phase': {'enum': ['command', 'movement', 'shooting', 'charge', 'fight'], 'type': 'string'}, 'moment': {'enum': ['phase-start', 'phase-end'], 'type': 'string'}}}, {'type': 'object', 'required': ['moment', 'phase', 'turn'], 'properties': {'turn': {'enum': ['your-turn', 'opponent-turn', 'either'], 'type': 'string'}, 'phase': {'type': 'null'}, 'moment': {'enum': ['turn-start', 'turn-end'], 'type': 'string'}}}]}, 'maxItems': 10, 'minItems': 1}, 'description': {'type': 'string', 'maxLength': 10000}}}, 'maxItems': 100}, 'remindersEnabled': {'type': 'boolean'}}}, 'painted': {'type': 'boolean'}, 'playerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, {'type': 'object', 'required': ['kind', 'unitKey', 'destroyed'], 'properties': {'kind': {'type': 'string', 'const': 'set-unit'}, 'unitKey': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'playerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'destroyed': {'type': 'boolean'}}}, {'type': 'object', 'required': ['kind', 'stratagems', 'secondaries', 'primary', 'secondaryMode'], 'properties': {'kind': {'type': 'string', 'const': 'set-prep'}, 'primary': {'anyOf': [{'type': 'object', 'required': ['key', 'name'], 'properties': {'key': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'name': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'awards': {'type': 'array', 'items': {'type': 'object', 'required': ['vp', 'per', 'mode', 'max', 'group', 'cumulative', 'criteria', 'trigger'], 'properties': {'vp': {'type': 'integer', 'maximum': 100, 'minimum': 0}, 'max': {'anyOf': [{'type': 'integer', 'maximum': 100, 'minimum': 0}, {'type': 'null'}]}, 'per': {'anyOf': [{'type': 'string', 'maxLength': 200}, {'type': 'null'}]}, 'mode': {'anyOf': [{'type': 'string', 'maxLength': 40}, {'type': 'null'}]}, 'group': {'anyOf': [{'type': 'string', 'maxLength': 100}, {'type': 'null'}]}, 'trigger': {'type': 'object', 'required': ['timing', 'phase', 'playerTurn', 'roundMin', 'roundMax'], 'properties': {'phase': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}, 'timing': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}, 'roundMax': {'anyOf': [{'type': 'integer', 'maximum': 5, 'minimum': 1}, {'type': 'null'}]}, 'roundMin': {'anyOf': [{'type': 'integer', 'maximum': 5, 'minimum': 1}, {'type': 'null'}]}, 'playerTurn': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}}}, 'criteria': {'anyOf': [{'type': 'string', 'maxLength': 2000}, {'type': 'null'}]}, 'cumulative': {'type': 'boolean'}}}, 'maxItems': 20}}}, {'type': 'null'}]}, 'playerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'stratagems': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'name', 'cp', 'limit'], 'properties': {'cp': {'type': 'integer', 'maximum': 6, 'minimum': 0}, 'key': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'name': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'turn': {'enum': ['your-turn', 'opponent-turn', 'either'], 'type': 'string'}, 'limit': {'enum': ['phase', 'turn', 'battle', 'unlimited'], 'type': 'string'}, 'phases': {'type': 'array', 'items': {'enum': ['command', 'movement', 'shooting', 'charge', 'fight', 'end'], 'type': 'string'}, 'maxItems': 6}, 'detachment': {'type': 'string', 'maxLength': 249, 'minLength': 1}}}, 'maxItems': 48}, 'secondaries': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'name'], 'properties': {'key': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'name': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'awards': {'type': 'array', 'items': {'type': 'object', 'required': ['vp', 'per', 'mode', 'max', 'group', 'cumulative', 'criteria', 'trigger'], 'properties': {'vp': {'type': 'integer', 'maximum': 100, 'minimum': 0}, 'max': {'anyOf': [{'type': 'integer', 'maximum': 100, 'minimum': 0}, {'type': 'null'}]}, 'per': {'anyOf': [{'type': 'string', 'maxLength': 200}, {'type': 'null'}]}, 'mode': {'anyOf': [{'type': 'string', 'maxLength': 40}, {'type': 'null'}]}, 'group': {'anyOf': [{'type': 'string', 'maxLength': 100}, {'type': 'null'}]}, 'trigger': {'type': 'object', 'required': ['timing', 'phase', 'playerTurn', 'roundMin', 'roundMax'], 'properties': {'phase': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}, 'timing': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}, 'roundMax': {'anyOf': [{'type': 'integer', 'maximum': 5, 'minimum': 1}, {'type': 'null'}]}, 'roundMin': {'anyOf': [{'type': 'integer', 'maximum': 5, 'minimum': 1}, {'type': 'null'}]}, 'playerTurn': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}}}, 'criteria': {'anyOf': [{'type': 'string', 'maxLength': 2000}, {'type': 'null'}]}, 'cumulative': {'type': 'boolean'}}}, 'maxItems': 20}}}, 'maxItems': 6}, 'secondaryDeck': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'name'], 'properties': {'key': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'name': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'awards': {'type': 'array', 'items': {'type': 'object', 'required': ['vp', 'per', 'mode', 'max', 'group', 'cumulative', 'criteria', 'trigger'], 'properties': {'vp': {'type': 'integer', 'maximum': 100, 'minimum': 0}, 'max': {'anyOf': [{'type': 'integer', 'maximum': 100, 'minimum': 0}, {'type': 'null'}]}, 'per': {'anyOf': [{'type': 'string', 'maxLength': 200}, {'type': 'null'}]}, 'mode': {'anyOf': [{'type': 'string', 'maxLength': 40}, {'type': 'null'}]}, 'group': {'anyOf': [{'type': 'string', 'maxLength': 100}, {'type': 'null'}]}, 'trigger': {'type': 'object', 'required': ['timing', 'phase', 'playerTurn', 'roundMin', 'roundMax'], 'properties': {'phase': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}, 'timing': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}, 'roundMax': {'anyOf': [{'type': 'integer', 'maximum': 5, 'minimum': 1}, {'type': 'null'}]}, 'roundMin': {'anyOf': [{'type': 'integer', 'maximum': 5, 'minimum': 1}, {'type': 'null'}]}, 'playerTurn': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}}}, 'criteria': {'anyOf': [{'type': 'string', 'maxLength': 2000}, {'type': 'null'}]}, 'cumulative': {'type': 'boolean'}}}, 'maxItems': 20}}}, 'maxItems': 60}, 'secondaryMode': {'enum': ['fixed', 'tactical'], 'type': 'string'}}}, {'type': 'object', 'required': ['kind', 'unitKey', 'deployed'], 'properties': {'kind': {'type': 'string', 'const': 'deploy-unit'}, 'unitKey': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'deployed': {'type': 'boolean'}, 'playerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, {'type': 'object', 'required': ['kind', 'unitKey', 'formation'], 'properties': {'kind': {'type': 'string', 'const': 'set-unit-formation'}, 'unitKey': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'playerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'formation': {'enum': ['battlefield', 'strategic-reserves', 'deep-strike', 'embarked'], 'type': 'string'}, 'transportKey': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, {'type': 'object', 'required': ['kind', 'painted'], 'properties': {'kind': {'type': 'string', 'const': 'set-painted'}, 'painted': {'type': 'boolean'}, 'playerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, {'type': 'object', 'required': ['kind', 'unitKey', 'delta'], 'properties': {'kind': {'type': 'string', 'const': 'wound-unit'}, 'delta': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'unitKey': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'playerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, {'type': 'object', 'required': ['kind', 'unitKey', 'delta'], 'properties': {'kind': {'type': 'string', 'const': 'damage-unit'}, 'delta': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'unitKey': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'playerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, {'type': 'object', 'required': ['kind', 'patternId'], 'properties': {'kind': {'type': 'string', 'const': 'set-deployment'}, 'patternId': {'anyOf': [{'type': 'string', 'maxLength': 64, 'minLength': 1}, {'type': 'null'}]}}}, {'type': 'object', 'required': ['kind', 'patternId', 'terrainLayoutId'], 'properties': {'kind': {'type': 'string', 'const': 'set-battlefield'}, 'patternId': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'terrainLayoutId': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, {'type': 'object', 'required': ['kind', 'key'], 'properties': {'cp': {'type': 'integer', 'maximum': 6, 'minimum': 0}, 'key': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'kind': {'type': 'string', 'const': 'use-stratagem'}, 'playerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, {'type': 'object', 'required': ['kind', 'stratagemKey', 'secondaryKey', 'secondary'], 'properties': {'cp': {'type': 'integer', 'maximum': 6, 'minimum': 0}, 'kind': {'type': 'string', 'const': 'use-new-orders'}, 'playerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'secondary': {'type': 'object', 'required': ['key', 'name'], 'properties': {'key': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'name': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'awards': {'type': 'array', 'items': {'type': 'object', 'required': ['vp', 'per', 'mode', 'max', 'group', 'cumulative', 'criteria', 'trigger'], 'properties': {'vp': {'type': 'integer', 'maximum': 100, 'minimum': 0}, 'max': {'anyOf': [{'type': 'integer', 'maximum': 100, 'minimum': 0}, {'type': 'null'}]}, 'per': {'anyOf': [{'type': 'string', 'maxLength': 200}, {'type': 'null'}]}, 'mode': {'anyOf': [{'type': 'string', 'maxLength': 40}, {'type': 'null'}]}, 'group': {'anyOf': [{'type': 'string', 'maxLength': 100}, {'type': 'null'}]}, 'trigger': {'type': 'object', 'required': ['timing', 'phase', 'playerTurn', 'roundMin', 'roundMax'], 'properties': {'phase': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}, 'timing': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}, 'roundMax': {'anyOf': [{'type': 'integer', 'maximum': 5, 'minimum': 1}, {'type': 'null'}]}, 'roundMin': {'anyOf': [{'type': 'integer', 'maximum': 5, 'minimum': 1}, {'type': 'null'}]}, 'playerTurn': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}}}, 'criteria': {'anyOf': [{'type': 'string', 'maxLength': 2000}, {'type': 'null'}]}, 'cumulative': {'type': 'boolean'}}}, 'maxItems': 20}}}, 'secondaryKey': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'stratagemKey': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, {'type': 'object', 'required': ['kind', 'key', 'delta'], 'properties': {'key': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'kind': {'type': 'string', 'const': 'score-secondary'}, 'delta': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'playerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, {'type': 'object', 'required': ['kind', 'scores'], 'properties': {'kind': {'type': 'string', 'const': 'score-settlement'}, 'round': {'type': 'integer', 'maximum': 5, 'minimum': 1}, 'scores': {'type': 'array', 'items': {'oneOf': [{'type': 'object', 'required': ['category', 'delta'], 'properties': {'delta': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}, 'category': {'type': 'string', 'const': 'primary'}}}, {'type': 'object', 'required': ['category', 'key', 'delta'], 'properties': {'key': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'delta': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}, 'status': {'type': 'string', 'const': 'achieved'}, 'category': {'type': 'string', 'const': 'secondary'}}}]}, 'maxItems': 31, 'minItems': 1}, 'playerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, {'type': 'object', 'required': ['kind', 'key', 'status'], 'properties': {'key': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'kind': {'type': 'string', 'const': 'set-secondary-status'}, 'status': {'enum': ['active', 'achieved', 'discarded', 'returned'], 'type': 'string'}, 'playerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, {'type': 'object', 'required': ['kind', 'secondary'], 'properties': {'kind': {'type': 'string', 'const': 'draw-secondary'}, 'playerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'secondary': {'type': 'object', 'required': ['key', 'name'], 'properties': {'key': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'name': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'awards': {'type': 'array', 'items': {'type': 'object', 'required': ['vp', 'per', 'mode', 'max', 'group', 'cumulative', 'criteria', 'trigger'], 'properties': {'vp': {'type': 'integer', 'maximum': 100, 'minimum': 0}, 'max': {'anyOf': [{'type': 'integer', 'maximum': 100, 'minimum': 0}, {'type': 'null'}]}, 'per': {'anyOf': [{'type': 'string', 'maxLength': 200}, {'type': 'null'}]}, 'mode': {'anyOf': [{'type': 'string', 'maxLength': 40}, {'type': 'null'}]}, 'group': {'anyOf': [{'type': 'string', 'maxLength': 100}, {'type': 'null'}]}, 'trigger': {'type': 'object', 'required': ['timing', 'phase', 'playerTurn', 'roundMin', 'roundMax'], 'properties': {'phase': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}, 'timing': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}, 'roundMax': {'anyOf': [{'type': 'integer', 'maximum': 5, 'minimum': 1}, {'type': 'null'}]}, 'roundMin': {'anyOf': [{'type': 'integer', 'maximum': 5, 'minimum': 1}, {'type': 'null'}]}, 'playerTurn': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}}}, 'criteria': {'anyOf': [{'type': 'string', 'maxLength': 2000}, {'type': 'null'}]}, 'cumulative': {'type': 'boolean'}}}, 'maxItems': 20}}}}}, {'type': 'object', 'required': ['kind', 'secondaries'], 'properties': {'kind': {'type': 'string', 'const': 'draw-secondaries'}, 'playerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'selected': {'type': 'boolean', 'const': True}, 'secondaries': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'name'], 'properties': {'key': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'name': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'awards': {'type': 'array', 'items': {'type': 'object', 'required': ['vp', 'per', 'mode', 'max', 'group', 'cumulative', 'criteria', 'trigger'], 'properties': {'vp': {'type': 'integer', 'maximum': 100, 'minimum': 0}, 'max': {'anyOf': [{'type': 'integer', 'maximum': 100, 'minimum': 0}, {'type': 'null'}]}, 'per': {'anyOf': [{'type': 'string', 'maxLength': 200}, {'type': 'null'}]}, 'mode': {'anyOf': [{'type': 'string', 'maxLength': 40}, {'type': 'null'}]}, 'group': {'anyOf': [{'type': 'string', 'maxLength': 100}, {'type': 'null'}]}, 'trigger': {'type': 'object', 'required': ['timing', 'phase', 'playerTurn', 'roundMin', 'roundMax'], 'properties': {'phase': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}, 'timing': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}, 'roundMax': {'anyOf': [{'type': 'integer', 'maximum': 5, 'minimum': 1}, {'type': 'null'}]}, 'roundMin': {'anyOf': [{'type': 'integer', 'maximum': 5, 'minimum': 1}, {'type': 'null'}]}, 'playerTurn': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}}}, 'criteria': {'anyOf': [{'type': 'string', 'maxLength': 2000}, {'type': 'null'}]}, 'cumulative': {'type': 'boolean'}}}, 'maxItems': 20}}}, 'maxItems': 2, 'minItems': 1}}}, {'type': 'object', 'required': ['kind'], 'properties': {'kind': {'type': 'string', 'const': 'acknowledge-draw'}, 'playerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, {'type': 'object', 'required': ['kind'], 'properties': {'kind': {'type': 'string', 'const': 'acknowledge-scoring'}, 'playerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, {'type': 'object', 'required': ['kind', 'secondary'], 'properties': {'kind': {'type': 'string', 'const': 'select-secret'}, 'playerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'secondary': {'type': 'object', 'required': ['key', 'name'], 'properties': {'key': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'name': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'awards': {'type': 'array', 'items': {'type': 'object', 'required': ['vp', 'per', 'mode', 'max', 'group', 'cumulative', 'criteria', 'trigger'], 'properties': {'vp': {'type': 'integer', 'maximum': 100, 'minimum': 0}, 'max': {'anyOf': [{'type': 'integer', 'maximum': 100, 'minimum': 0}, {'type': 'null'}]}, 'per': {'anyOf': [{'type': 'string', 'maxLength': 200}, {'type': 'null'}]}, 'mode': {'anyOf': [{'type': 'string', 'maxLength': 40}, {'type': 'null'}]}, 'group': {'anyOf': [{'type': 'string', 'maxLength': 100}, {'type': 'null'}]}, 'trigger': {'type': 'object', 'required': ['timing', 'phase', 'playerTurn', 'roundMin', 'roundMax'], 'properties': {'phase': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}, 'timing': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}, 'roundMax': {'anyOf': [{'type': 'integer', 'maximum': 5, 'minimum': 1}, {'type': 'null'}]}, 'roundMin': {'anyOf': [{'type': 'integer', 'maximum': 5, 'minimum': 1}, {'type': 'null'}]}, 'playerTurn': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}}}, 'criteria': {'anyOf': [{'type': 'string', 'maxLength': 2000}, {'type': 'null'}]}, 'cumulative': {'type': 'boolean'}}}, 'maxItems': 20}}}}}, {'type': 'object', 'required': ['kind'], 'properties': {'kind': {'type': 'string', 'const': 'reveal-secret'}, 'playerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, {'type': 'object', 'required': ['kind', 'firstPlayerId'], 'properties': {'kind': {'type': 'string', 'const': 'begin-battle'}, 'attackerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'firstPlayerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, {'type': 'object', 'required': ['kind', 'delta'], 'properties': {'kind': {'type': 'string', 'const': 'adjust-cp'}, 'delta': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'playerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, {'type': 'object', 'required': ['kind'], 'properties': {'keys': {'type': 'array', 'items': {'type': 'string', 'maxLength': 64, 'minLength': 1}}, 'kind': {'type': 'string', 'const': 'resolve-tactical-hand'}, 'gainCp': {'type': 'boolean'}, 'playerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, {'type': 'object', 'required': ['kind', 'category', 'delta'], 'properties': {'kind': {'type': 'string', 'const': 'score'}, 'delta': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'category': {'enum': ['primary', 'secondary'], 'type': 'string'}, 'playerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, {'type': 'object', 'required': ['kind', 'playerId', 'resource', 'delta'], 'properties': {'kind': {'type': 'string', 'const': 'correct-player'}, 'delta': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'playerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'resource': {'enum': ['cp', 'primary', 'secondary'], 'type': 'string'}}}, {'type': 'object', 'required': ['kind'], 'properties': {'kind': {'type': 'string', 'const': 'settle-opponent-turn'}}}, {'type': 'object', 'required': ['kind'], 'properties': {'kind': {'type': 'string', 'const': 'request-advance'}, 'playerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, {'type': 'object', 'required': ['kind'], 'properties': {'kind': {'type': 'string', 'const': 'cancel-advance'}, 'playerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, {'type': 'object', 'required': ['kind'], 'properties': {'kind': {'type': 'string', 'const': 'advance'}, 'playerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, {'type': 'object', 'required': ['kind'], 'properties': {'kind': {'type': 'string', 'const': 'pause-clock'}}}, {'type': 'object', 'required': ['kind'], 'properties': {'kind': {'type': 'string', 'const': 'resume-clock'}}}, {'type': 'object', 'required': ['kind'], 'properties': {'kind': {'type': 'string', 'const': 'end-battle'}, 'reason': {'enum': ['completed', 'finished-early', 'conceded'], 'type': 'string'}, 'concededBy': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}, {'type': 'object', 'required': ['kind'], 'properties': {'kind': {'type': 'string', 'const': 'reopen-battle'}}}, {'type': 'object', 'required': ['kind', 'target'], 'properties': {'kind': {'type': 'string', 'const': 'undo'}, 'target': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}}}]}, {'type': 'object', 'required': ['kind', 'rosterId'], 'properties': {'kind': {'type': 'string', 'const': 'attach-saved-roster'}, 'playerId': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'rosterId': {'type': 'string', 'maxLength': 64, 'minLength': 1}}, 'additionalProperties': False}]}, 'expectedSeq': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}}}
Modifications récentes des outils
Serveurs MCP similaires
Giantbomb
Provides a catalog of video games, platforms, characters, and game companies with searchable metadata from Giant Bomb.
Dnd5e
Looks up Dungeons & Dragons 5th Edition classes, monsters, spells, spell lists, features, and combat statistics.
Igdb
Searches the IGDB catalogue for video games, platforms, developers, publishers, releases, ratings, genres, related content, and g…
MTG Bench
Searches Magic: The Gathering cards and rules and analyzes, validates, upgrades, and finds combos in decks.
tibiawiki-mcp
Provides searchable Tibia game data for creatures, items, NPCs, quests, spells, houses, travel, updates, loot, and item sales.
EcoCarbonWiki
Searches and retrieves Eco game wiki content and calculates crafting materials, recipes, rankings, aggregates, and gameplay metri…
pokeapi-mcp-server
Looks up Pokémon, moves, abilities, items, natures, evolution data, and type effectiveness from PokéAPI.
VIGuides
Provides curated GTA 6 release information, guides, source references, countdowns, and trending search topics in multiple languag…