Update Report Sections
update_reportReplace one or more sections of an existing report owned by the caller. Useful for authoring workflows where the agent's first draft (create_report) is refined by additional analysis before publishing. Pass citations for figures in the edited prose — they are MERGED into the report's existing set, never replacing it, so omitting them preserves the lineage already recorded. Bumps version. Does NOT change price / tier / visibility — use publish_report for those. Pass drafts_only: true when editing a private draft; a client may then let the edit run without asking. With drafts_only the call is refused (not_a_draft, nothing written) unless the report is private, never published and not signed off. A saved edit returns undo (call undo_change to restore the prior version as a NEW head version; history is kept; refused if the report changed since).
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": {
"report_id": "<report_id>",
"sections": "<sections>"
},
"name": "update_report"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Optional new title. | |
| abstract | No | Optional new abstract. | |
| sections | Yes | Sections to replace. Sections not listed are preserved — to DELETE one, name it in `remove_section_ids`. Section ids must match the existing payload. | |
| citations | No | Lineage for figures in the edited sections. MERGED into the report's existing citations (first claim wins), never replacing them — so an editor autosave that sends none preserves every citation the report already had. | |
| report_id | Yes | Identifier of the report to update, as returned by create_report or list_my_reports. | |
| drafts_only | No | Pass true when editing a private draft: the call is refused with `not_a_draft` (nothing written) unless the report is private, never published and not signed off. Lets a client run the edit without asking, because a draft edit is undoable and reaches no reader. | |
| expected_version | No | Optimistic concurrency check. If supplied and the current HEAD version is different, the call returns a `version_conflict` error WITHOUT writing. Pass the version you loaded so a concurrent agent edit produces a 'conflict — review' UX instead of silently overwriting (eng review A3A). | |
| remove_section_ids | No | Section ids to DELETE outright. Without this, a merge-only update cannot express a deletion: an editor that drops a section simply omits it, the omitted section is preserved, and the caller sees a bumped version with the deleted content still there — a save that reports success and changed nothing. Ids must exist, and the last remaining section cannot be removed (a report with no sections is unreadable); remove the report instead with delete_report. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| undo | Yes | How to put the record back as it was before this write: call `undo_change` with these args. Null when nothing changed or the change could not be recorded. | |
| _meta | Yes | Provenance envelope — data lineage for every MCP response | |
| report | Yes | ||
| version | Yes | ||
| archived | Yes | ||
| previous_version | Yes |