Raw schema
{
"type": "object",
"properties": {
"blog_id": {
"description": "Your blog's id, as returned by signup. Optional with an API key: it defaults to the key's blog, and any id you pass must be that blog. Required when the server runs without API keys.",
"type": "string"
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Post title, 1–200 characters. The slug is derived from it when `slug` is omitted."
},
"slug": {
"type": "string",
"minLength": 2,
"maxLength": 100,
"pattern": "^[a-z0-9][a-z0-9-]*[a-z0-9]$",
"description": "URL slug, e.g. \"hello-world\": 2–100 lowercase letters, digits and hyphens, no hyphen at either end. The post lives at {blog_url}{slug}/. Omit to derive it from the title. Cannot be changed later; \"lang\" is reserved."
},
"body": {
"type": "string",
"minLength": 1,
"description": "Post content as markdown. Raw HTML is stripped. A YouTube URL alone on its own line becomes an embedded player."
},
"excerpt": {
"type": "string",
"maxLength": 300,
"description": "Summary shown under the title in the post list, up to 300 characters. Omit to derive it from the body."
},
"tags": {
"default": [],
"type": "array",
"items": {
"type": "string"
},
"description": "Tags shown on the post page, e.g. [\"ai\", \"travel\"]. Defaults to none."
},
"status": {
"default": "published",
"type": "string",
"enum": [
"draft",
"published"
],
"description": "\"published\" (default) puts the post live immediately; \"draft\" saves it without publishing."
},
"seoTitle": {
"type": "string",
"maxLength": 200,
"description": "Title for search results and link previews, up to 200 characters. Defaults to `title`."
},
"seoDescription": {
"type": "string",
"maxLength": 300,
"description": "Description for search results and link previews, up to 300 characters. Defaults to the excerpt."
},
"author": {
"type": "string",
"maxLength": 100,
"description": "Author name, up to 100 characters. Used in the page's metadata, the feed and the markdown source."
},
"coverImage": {
"type": "string",
"format": "uri",
"description": "Cover image URL (http/https), shown above the post and used as its link-preview image. Use an uploaded image URL or any public image URL."
},
"language": {
"type": "string",
"maxLength": 35,
"description": "Language of this post as a BCP-47 tag, e.g. \"en\", \"ru\", \"pt-BR\". Omit to inherit the blog's language."
},
"translationOf": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Slug of an existing post in this blog that this post translates. The two become a translation group: one post per language, cross-linked with hreflang and a language switcher. Set `language` to the translation's language; it must differ from every other member's."
},
"idempotency_key": {
"type": "string",
"description": "Optional retry key, any unique string (e.g. a UUID). Retrying with the same key and identical arguments returns the first result instead of writing again; the same key with different arguments fails with IDEMPOTENCY_KEY_CONFLICT. Scoped to your API key and this tool."
}
},
"required": [
"title",
"body"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}