update_content
Save fields into a content item's working draft; nothing goes live until publish_content. Each value's shape follows its field type (list_content_types {name} gives valueFormat): text/markdown → string; richtext → TipTap doc…
Instructions
Save fields into a content item's working draft; nothing goes live until publish_content. Each value's shape follows its field type (list_content_types {name} gives valueFormat): text/markdown → string; richtext → TipTap doc {type:'doc',content:[…]}; contentArea → array of block instances; reference → {documentId}; image → asset documentId. data is MERGED over the draft by default, so omitted fields are kept; merge:false replaces the whole map (send every required field, and the get_content revision so a concurrent human edit is refused with 409 instead of overwritten). For one LONG text/markdown value use set_field: nested long strings can be mangled in transit. A value of the wrong shape is refused with the field, the expected shape and an example; text in another language than the branch is refused unless allowLanguageMismatch. An agent's edit marks the draft for review and cancels a pending scheduled publish of it. Returns the saved draft in the get_content shape, with its new revision. Requires the content.update permission (Admin, Editor, Author — an Author only within their own sections).
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"documentId": "<documentId>",
"data": "<data>"
},
"name": "update_content"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | Field name → value, shaped per the valueFormat list_content_types {name} reports. Pass {} to change only name/slug/displayInNav. | |
| name | No | New display name. Omit to keep it. | |
| site | No | Site slug or id to act in (multisite). Omit to use this server's default site. Call list_sites to see what exists — an empty tree or search usually means the wrong site, not missing content. | |
| slug | No | New URL slug for a page; publishing it adds a 301 from the old URL automatically. Omit to keep it. | |
| merge | No | Default true: shallow-merge data over the current draft. false = replace the whole field map | |
| locale | No | Locale code. Omit for the document's own locale (its site-default variant, else its only variant). | |
| revision | No | Optimistic concurrency: the `revision` from get_content. If a human (or another agent) has changed the draft since, the write is refused instead of overwriting their work. Recommended whenever merge:false | |
| documentId | Yes | The item's documentId (stable across locales and versions), e.g. from list_tree, list_content or get_content. | |
| displayInNav | No | Whether the page appears in the site navigation. Omit to keep it. | |
| allowLanguageMismatch | No | Set true ONLY to deliberately write text whose language differs from the locale branch (the guard otherwise refuses, so e.g. Norwegian text can't silently land on the 'en' branch) |