# create_blog_article (/docs/mcp/tools/create-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/create_blog_article.mdx. */}

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

Publishes a hand-written article on the website's hosted blog at \<blog\>/\<slug\>, or saves it as a draft (Optimize add-on). It goes live publicly at once unless status is 'draft'. It uses one article from the monthly allowance, whether live or draft. With none left it returns 400 'No articles left this month. Add more articles on the Billing page.' Confirm with the user before publishing. To change an existing article use update_blog_article. Returns 201 with \{ article, url \}; url is the public address.

| 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. |
| `title` | `string` | Yes | Article title (H1). Required. |
| `html` | `string` | Yes | Article body as HTML. Supported: p, h2, h3, ul/ol, blockquote, img, table. Required. |
| `metaDescription` | `string` | No | Search-result description, about 150–160 characters. |
| `excerpt` | `string` | No | Short summary for the blog index. Defaults to the meta description. |
| `category` | `string` | No | Category name. Default 'Guides'. |
| `coverImage` | `string` | No | Absolute cover image URL starting with http(s)://; other values are dropped. |
| `slug` | `string` | No | URL path segment, e.g. "lead-scoring-guide". Defaults to the title. A number is added if the slug is already taken. |
| `status` | `"live" \| "draft"` | No | 'live' (default) publishes now; 'draft' saves without publishing. |
| `faq` | `object[]` | No | FAQ entries shown under the article. Entries missing q or a are dropped. |
| `faq[].q` | `string` | No | Question text. |
| `faq[].a` | `string` | No | Answer text. |

## Tool definition [#tool-definition]

What your assistant receives from `tools/list`:

```json
{
  "name": "create_blog_article",
  "title": "Create blog article",
  "annotations": {
    "title": "Create blog article",
    "readOnlyHint": false,
    "destructiveHint": false,
    "idempotentHint": false,
    "openWorldHint": true
  },
  "inputSchema": {
    "type": "object",
    "properties": {
      "websiteId": {
        "type": "string",
        "description": "Website ID from list_websites."
      },
      "title": {
        "type": "string",
        "description": "Article title (H1). Required."
      },
      "html": {
        "type": "string",
        "description": "Article body as HTML. Supported: p, h2, h3, ul/ol, blockquote, img, table. Required."
      },
      "metaDescription": {
        "type": "string",
        "description": "Search-result description, about 150–160 characters."
      },
      "excerpt": {
        "type": "string",
        "description": "Short summary for the blog index. Defaults to the meta description."
      },
      "category": {
        "type": "string",
        "description": "Category name. Default 'Guides'."
      },
      "coverImage": {
        "type": "string",
        "description": "Absolute cover image URL starting with http(s)://; other values are dropped."
      },
      "slug": {
        "type": "string",
        "description": "URL path segment, e.g. \"lead-scoring-guide\". Defaults to the title. A number is added if the slug is already taken."
      },
      "status": {
        "type": "string",
        "enum": [
          "live",
          "draft"
        ],
        "description": "'live' (default) publishes now; 'draft' saves without publishing."
      },
      "faq": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "q": {
              "type": "string",
              "description": "Question text."
            },
            "a": {
              "type": "string",
              "description": "Answer text."
            }
          }
        },
        "description": "FAQ entries shown under the article. Entries missing q or a are dropped."
      }
    },
    "required": [
      "websiteId",
      "title",
      "html"
    ]
  }
}
```
