confluence_write
Overwrite an existing Confluence page's body using JFM markdown or ADF JSON. Preserve localId attributes to avoid losing inline comments, and validate changes with dry_run before applying.
Instructions
Overwrite an EXISTING Confluence page's body (identified by id) from JFM markdown (default) or raw ADF JSON. This fully replaces the body — to create a brand-new page instead, use confluence_create. DATA LOSS: inline comments (and task-item state) are anchored to the page through the localId attributes that confluence_read emits; if the body you send omits them, Confluence drops the inline comments tied to those anchors. Edit the JFM returned by confluence_read and keep its localIds intact — do not hand-author a fresh body or send content produced with local IDs stripped (atlassian_convert with strip_local_ids). JFM is GitHub-style markdown, NOT Confluence wiki markup — see resource omni-dev://specs/jfm for syntax. Provide the body as content (inline) OR content_path (a filesystem path the server reads) — not both. Prefer content_path when the body is already on disk: emitting a large body inline is slow, and pages routinely exceed that threshold; the inline form is fine for short bodies. Set dry_run: true first when uncertain about required fields or formatting — validates the input and returns the request that would be sent (method, path, body) without updating the page. Mirrors omni-dev atlassian confluence write --force (and --dry-run).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Confluence page ID. | |
| format | No | Format of `content`: `"jfm"` (default markdown) or `"adf"` (raw ADF JSON). | |
| content | No | New page body, supplied inline. Mutually exclusive with `content_path`; exactly one of the two is required. For `format = "jfm"` (the default), this is GitHub-style markdown, NOT Confluence wiki markup. Use `##` not `h2.`, triple-backtick fences not `{code}`, backtick inline code not `{{...}}`. Full reference: MCP resource `omni-dev://specs/jfm`. Preserve the `localId` attributes (and inline-comment anchor spans) from the original `confluence_read` output: they anchor inline comments and stateful nodes, and dropping them makes Confluence lose those comments. | |
| dry_run | No | When true, validate and return the would-be request (method, path, body) without updating the page. Defaults to `false`. | |
| content_path | No | Filesystem path the server reads the body from, instead of `content`. Prefer this when the body is already on disk (e.g. edited via `confluence_read`'s `output_file`): the assistant avoids re-emitting the whole page inline, which for large pages is slow. Mutually exclusive with `content`. |