Create Post
post_postsCreate a blog draft. Before calling, fetch get_me + get_brand_voice (+ get_ai_context/get_recent_notes). Site scope is automatic for a single-site account; pass domain or site_id to target one, and an account with several sites is asked to choose rather than guessed at. Do NOT repeat the title in the content body — no leading "# Title" and no first line restating it, or it renders twice, since the title field prints above the content. Start with the intro paragraph or the first ## heading. The response carries links.review_url: that is where a person previews and edits the draft, so hand the user that link, never the admin editor URL or a raw preview URL.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"title": "<title>",
"content": "<content>"
},
"name": "post_posts"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | ||
| tags | No | ||
| title | Yes | ||
| domain | No | ||
| source | No | ||
| status | No | ||
| confirm | No | ||
| content | Yes | Blog post body in Markdown. Do NOT pass a fully HTML-formatted document — block-level HTML tags (e.g. <p>, <h2>) appear as literal text. Custom styled HTML (cards, tables, CSS callouts) must go in a richembed fenced block, which renders live. Inline HTML for embeds or Remotion components inside an otherwise-Markdown post is fine. | |
| excerpt | No | ||
| site_id | No | ||
| featured | No | ||
| subtitle | No | Subtitle/deck shown beneath the title. Populate it whenever the post has a natural subheadline or clarifying phrase. | |
| seo_title | No | ||
| seo_description | No |