Create a draft post
Create a post as a draft. Nobody sees it until it is published or scheduled.
MCP tool ghost_write → create_draft_post
write
Returns the saved draft with its id, slug, tags and authors. The author defaults to the staff user you signed in as. HTML is converted to the editor format and some markup can come out different, so read the draft back with get_post. A draft reaches nobody and you remove it from Ghost Admin, so this tool does not ask for confirmation.
Parameters
| Name | Type | Description |
|---|---|---|
| title string required | string | Post title. |
| content string required | string | Post body. HTML or Markdown. |
| tags string[] | string[] | Tag names. A name Ghost cannot match becomes a new tag. |
| access string | string | Who can read it: Public, Members only, Paid-members only or Specific tiers. Default Public. |
| excerpt string | string | Custom excerpt shown under the title. |
tools/call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "ghost_write",
"arguments": {
"operation": "create_draft_post",
"arguments": {
"title": "Issue 42: pricing notes",
"content": "<p>Three pricing changes we tried this month.</p>",
"tags": [
"Weekly"
],
"access": "Public"
}
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"post": {
"id": "6710a1c2f3e4d500a1b2c3d4",
"title": "Issue 42: pricing notes",
"slug": "issue-42-pricing-notes",
"status": "draft",
"access": "Public",
"tags": [
"Weekly"
],
"authors": [
"Sam Rivera"
],
"published_at": null
}
},
"isError": false
}