confluence_write
Overwrite an existing Confluence page's body by by ID using JFM markdown or ADF JSON, preserving localId anchors so inline comments remain.
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`. |