Update a play campaign
play_update_campaignPUT updates to one campaign by id. Caller must have campaign 'contribute' permission (DM or assigned co-DM). Only supplied fields are sent; play decides how to merge. legs is NOT writable here (it is stripped): add a leg with play_add_campaign_leg, toggle one with play_set_campaign_leg_active, and change a leg's contents with the add/remove rule/item/spell/character tools. REQUIRES baseUpdatedAt: copy updatedAt from a fresh play_get_campaign read; a stale or fabricated value is rejected with OUT_OF_SYNC and nothing is written.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Mongo `_id` of the campaign. | |
| name | No | Campaign name. | |
| image | No | Image URL. Stored as a plain string. | |
| active | No | ||
| public | No | Whether non-members can see the campaign. | |
| summary | No | Short campaign summary. Max 150 characters. | |
| sessions | No | ||
| description | No | Full campaign description. Markdown supported. | |
| hideSections | No | ||
| xCardEnabled | No | ||
| baseUpdatedAt | Yes | REQUIRED proof that you are working from the latest version: copy the `updatedAt` value verbatim from a FRESH read of this exact record (use the matching get tool first). Values from memory, from an earlier conversation, or guessed timestamps are rejected with OUT_OF_SYNC and nothing is written. After a successful update, the response carries the new `updatedAt` — use that for any follow-up write. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||