MCP Tools
Content

update_content

Update a content document (canvas or deliverable) by content_id. Partial-update — omit fields to leave them unchanged.

Input Schema

{
  "type": "object",
  "required": [
    "content_id"
  ],
  "properties": {
    "stage": {
      "enum": [
        "in_progress",
        "ready"
      ],
      "type": "string",
      "description": "in_progress or ready."
    },
    "content": {
      "type": "string",
      "description": "New full markdown body. Omit to leave body unchanged."
    },
    "content_id": {
      "type": "string",
      "format": "uuid",
      "description": "UUID of the content to update. From list_content, get_content, get_generation_status, or get_project."
    },
    "project_id": {
      "type": "string",
      "format": "uuid",
      "description": "Project UUID to associate with this content. Replaces any existing project association."
    },
    "visibility": {
      "enum": [
        "private",
        "team"
      ],
      "type": "string",
      "description": "private or team."
    },
    "category_id": {
      "type": "integer",
      "description": "Category ID from list_content_categories."
    },
    "name_override": {
      "type": "string",
      "description": "Custom document name. Setting this locks the name (won't auto-resync from content header on future edits)."
    }
  }
}

Output Schema

{
  "type": "object",
  "required": [
    "content_id",
    "name",
    "content"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Document name (post-update)."
    },
    "stage": {
      "type": "string",
      "description": "in_progress or ready."
    },
    "content": {
      "type": "string",
      "description": "Full document content in markdown."
    },
    "category": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "id": {
          "type": "integer"
        },
        "name": {
          "type": "string"
        }
      },
      "description": "{id, name} or null if uncategorized."
    },
    "link_url": {
      "type": "string",
      "description": "Direct URL to view this content in Marcora."
    },
    "content_id": {
      "type": "string",
      "format": "uuid",
      "description": "Content identifier."
    },
    "visibility": {
      "type": "string",
      "description": "private or team."
    }
  }
}

Instructions

Update a content document (canvas or deliverable) by content_id. Partial-update semantics — every field besides content_id is optional and only the fields you supply are changed; everything else is left untouched. At least one mutable field must be supplied.

Reading before writing

For content edits that splice into existing text, call get_content first, edit the markdown in your context, then send the FULL new body back. This tool replaces the entire body — there is no patch / diff mode.

Name behavior

By default a document's name auto-syncs from the first markdown header in its body. Set name_override to lock a custom name; once locked, the title stays even when the body is edited. There is no un-lock path in this tool.

Stage

Writing stage also keeps the internal is_ready bool in sync. For deliverables linked to a content plan, transitioning to ready moves the plan to Complete as a side-effect (non-blocking on failure).

Project association

Pass project_id to set the document's project. If the document is already in a different project, the old association is replaced; if already in the supplied project, this is a no-op. Omit project_id to leave projects untouched. There's no way to remove a doc from all projects via this tool — use the Marcora app for that.

Privacy

Team-scoped. You can only see and edit content that belongs to your current team AND is either created by you or set to team visibility. Foreign-team content returns accessdenied. Viewer-role users cannot write — the tool requires editor / collaborator / owner role.

Errors

  • notfoundcontent_id doesn't match any content document
  • inputerror — no mutable field supplied; invalid category_id; invalid project_id; or the document is a non-editable canvas type (e.g. a context-item editor canvas, which is managed by a separate sync flow)
  • accessdenied — you don't have write access to the document

Example prompts

  • "Mark my latest case study as ready"
  • "Add this doc to the Q4 GTM project"
  • "Rename this document to 'Acme Pricing One-Pager'"
  • "Replace the body of my pricing one-pager with the markdown above"
Scroll to Top