# update_blog_article (/docs/mcp/tools/update-blog-article)

{/* Generated by scripts/sync-mcp-tools.mjs from happierleads-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/update_blog_article.mdx. */}

**Edit blog article** · Changes data · Acts outside your account

Edits a blog article by saving a new version at the same URL (Optimize add-on). If the article is live, the new version goes live at once. status 'live' publishes a draft, and status 'draft' takes a live article offline. Only the fields you pass change. Uses one article from the monthly allowance; with none left it returns 400. Locked articles (guest posts, paid placements) are refused. Get articleId from list_blog_articles, and read the current text with get_blog_article first. Confirm with the user before changing a live article. Returns \{ article, url \}.

| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |

## Parameters [#parameters]

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `websiteId` | `string` | Yes | Website ID from list_websites. |
| `articleId` | `string` | Yes | Article _id from list_blog_articles. |
| `title` | `string` | No | New title. |
| `html` | `string` | No | New body as HTML (p, h2, h3, ul/ol, blockquote, img, table). Replaces the whole body. |
| `metaDescription` | `string` | No | New search-result description. |
| `excerpt` | `string` | No | New short summary for the blog index. |
| `category` | `string` | No | New category name. |
| `coverImage` | `string` | No | New absolute cover image URL (http/https); other values clear it. |
| `status` | `"live" \| "draft"` | No | 'live' publishes this version now; 'draft' takes the article offline. Leave it out to keep the current state. |
| `faq` | `object[]` | No | Full new FAQ list of \{ q, a \} objects. Replaces the saved FAQ. |
| `summary` | `string` | No | What this edit changes, shown in the version history. Default 'Edited by hand'. |

## Tool definition [#tool-definition]

What your assistant receives from `tools/list`:

```json
{
  "name": "update_blog_article",
  "title": "Edit blog article",
  "annotations": {
    "title": "Edit blog article",
    "readOnlyHint": false,
    "destructiveHint": false,
    "idempotentHint": false,
    "openWorldHint": true
  },
  "inputSchema": {
    "type": "object",
    "properties": {
      "websiteId": {
        "type": "string",
        "description": "Website ID from list_websites."
      },
      "articleId": {
        "type": "string",
        "description": "Article _id from list_blog_articles."
      },
      "title": {
        "type": "string",
        "description": "New title."
      },
      "html": {
        "type": "string",
        "description": "New body as HTML (p, h2, h3, ul/ol, blockquote, img, table). Replaces the whole body."
      },
      "metaDescription": {
        "type": "string",
        "description": "New search-result description."
      },
      "excerpt": {
        "type": "string",
        "description": "New short summary for the blog index."
      },
      "category": {
        "type": "string",
        "description": "New category name."
      },
      "coverImage": {
        "type": "string",
        "description": "New absolute cover image URL (http/https); other values clear it."
      },
      "status": {
        "type": "string",
        "enum": [
          "live",
          "draft"
        ],
        "description": "'live' publishes this version now; 'draft' takes the article offline. Leave it out to keep the current state."
      },
      "faq": {
        "type": "array",
        "items": {
          "type": "object"
        },
        "description": "Full new FAQ list of { q, a } objects. Replaces the saved FAQ."
      },
      "summary": {
        "type": "string",
        "description": "What this edit changes, shown in the version history. Default 'Edited by hand'."
      }
    },
    "required": [
      "websiteId",
      "articleId"
    ]
  }
}
```
