MCP Tools
Content

update_content

Update a content document by its content_id — edit the body, rename it, or change its stage, visibility, category, or project. Only the fields you supply change, and body updates replace the entire text, so read it first when splicing into existing content.

Input Schema

{
  "type": "object",
  "required": [
    "content_id"
  ],
  "properties": {
    "stage": {
      "enum": [
        "in_progress",
        "ready"
      ],
      "type": "string",
      "description": "Mark the document in-progress or ready. Omit to leave stage unchanged."
    },
    "content": {
      "type": "string",
      "description": "New full markdown body. Omit to leave body unchanged. Read existing via get_content first if splicing edits."
    },
    "content_id": {
      "type": "string",
      "format": "uuid",
      "description": "UUID of the content to update. Get from list_content, get_content, get_generation_status, or get_project."
    },
    "project_id": {
      "type": "string",
      "format": "uuid",
      "description": "Project UUID to set as this document's project. Replaces any existing project association. Omit to leave project unchanged."
    },
    "visibility": {
      "enum": [
        "private",
        "team"
      ],
      "type": "string",
      "description": "Document visibility. Omit to leave unchanged."
    },
    "category_id": {
      "type": "integer",
      "description": "Category ID from list_content_categories. Omit to leave unchanged."
    },
    "name_override": {
      "type": "string",
      "description": "Custom document name. Setting this locks the name (won't auto-resync from content header on future edits). Omit unless overriding the auto-derived title."
    },
    "change_summary": {
      "type": "string",
      "description": "What changed and why, for the doc's AI-assistant history. Format as skimmable markdown — a bulleted list (bold lead + detail) for multi-part 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 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 documents 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 document type (e.g. a context-item editor document, 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