> ## Documentation Index
> Fetch the complete documentation index at: https://docs.metabind.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Update Content

> Update existing content while maintaining schema compliance

Updates existing content while maintaining schema compliance.

<Note>
  When updating content created with a previous version of a content type, the tool validates against the original schema version (specified in the content's `typeVersion` field).
</Note>

## Input Schema

```json theme={null}
{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "description": "Project ID (optional, uses session default)"
    },
    "contentId": {
      "type": "string",
      "description": "ID of content to update"
    },
    "name": {
      "type": "string",
      "description": "Updated name (optional)"
    },
    "description": {
      "type": "string",
      "description": "Updated description (optional)"
    },
    "content": {
      "type": "object",
      "description": "Content data matching the type's JSON schema (optional)"
    },
    "tags": {
      "type": "array",
      "items": { "type": "string" },
      "description": "Updated tags (optional)"
    },
    "metadata": {
      "type": "object",
      "description": "Updated metadata (optional)"
    }
  },
  "required": ["contentId"]
}
```

## Parameters

| Parameter     | Type      | Required | Description                       |
| ------------- | --------- | -------- | --------------------------------- |
| `projectId`   | string    | No       | Project ID (uses session default) |
| `contentId`   | string    | Yes      | ID of content to update           |
| `name`        | string    | No       | Updated name                      |
| `description` | string    | No       | Updated description               |
| `content`     | object    | No       | Updated content data              |
| `tags`        | string\[] | No       | Updated tags                      |
| `metadata`    | object    | No       | Updated metadata                  |

## Response

| Field                | Type      | Description                              |
| -------------------- | --------- | ---------------------------------------- |
| `id`                 | string    | Unique identifier of the updated content |
| `status`             | string    | Content status after update              |
| `updatedAt`          | string    | ISO 8601 update timestamp                |
| `validationWarnings` | string\[] | Any validation warnings (optional)       |

## Example

### Request

Update the title and add a new component:

```json theme={null}
{
  "contentId": "cont_story_acme_001",
  "name": "Acme Corp's Design System Journey",
  "content": {
    "title": "Acme Corp's Design System Journey",
    "subtitle": "2024: The Digital Transformation",
    "components": [
      {
        "type": "StoryParagraph",
        "text": "Acme Corporation's transformation began in early 2024..."
      },
      {
        "type": "StorySubheader",
        "text": "The Challenge: Fragmentation at Scale"
      },
      {
        "type": "StoryParagraph",
        "text": "Updated content with more details..."
      },
      {
        "type": "StorySubheader",
        "text": "The Solution"
      },
      {
        "type": "StoryParagraph",
        "text": "New section about the solution..."
      }
    ]
  }
}
```

### Response

```json theme={null}
{
  "id": "cont_story_acme_001",
  "status": "draft",
  "updatedAt": "2024-06-20T14:30:00Z",
  "validationWarnings": []
}
```

## Usage

### Update Name Only

```javascript theme={null}
const result = await mcp.call("update_content", {
  contentId: "cont_story_acme_001",
  name: "New Title for the Story"
});
```

### Update Content Structure

```javascript theme={null}
// First, get the current content
const content = await mcp.call("get_content", {
  contentId: "cont_story_acme_001"
});

// Modify and update
const result = await mcp.call("update_content", {
  contentId: "cont_story_acme_001",
  content: {
    ...content.content,
    components: [
      ...content.content.components,
      {
        type: "StoryParagraph",
        text: "New paragraph added to the story..."
      }
    ]
  }
});
```

### Update Tags

```javascript theme={null}
const result = await mcp.call("update_content", {
  contentId: "cont_story_acme_001",
  tags: ["case-study", "design-system", "featured"]
});
```

### Update Metadata

```javascript theme={null}
const result = await mcp.call("update_content", {
  contentId: "cont_story_acme_001",
  metadata: {
    locale: "en-US",
    author: "new-author@company.com",
    reviewedBy: "editor@company.com"
  }
});
```

## Partial Updates

You only need to include the fields you want to update. Omitted fields remain unchanged:

```javascript theme={null}
// This only updates the name, leaving content, tags, etc. unchanged
await mcp.call("update_content", {
  contentId: "cont_story_acme_001",
  name: "Updated Title Only"
});
```

<Warning>
  When updating the `content` field, you must provide the complete content structure. Partial content updates (updating only some fields within content) are not supported. Always fetch the current content first, modify it, then send the complete structure.
</Warning>
