Skip to main content
Glama

Create post

create_post

Publish a post to the blog. Needs title and body (markdown). Returns the published post's live URL. Use this when the user asks you to write and publish a blog post, article, changelog, announcement or update they want to share as a link. status: "draft" saves it without publishing. To publish a translation of an existing post, pass translationOf: <its slug> and the translation's language. Afterwards, always give the user the returned post_url (drafts have none). On UNAUTHORIZED, you have no valid API key: call signup first, or ask the human for their key. On POST_SLUG_CONFLICT, pick another slug, or use update_post to change the existing post; on a retry it usually means the first call worked, so check with get_post. Pass an idempotency_key to make retries safe.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
bodyYesPost content as markdown. Raw HTML is stripped. A YouTube URL alone on its own line becomes an embedded player.
slugNoURL 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.
tagsNoTags shown on the post page, e.g. ["ai", "travel"]. Defaults to none.
titleYesPost title, 1–200 characters. The slug is derived from it when `slug` is omitted.
authorNoAuthor name, up to 100 characters. Used in the page's metadata, the feed and the markdown source.
statusNo"published" (default) puts the post live immediately; "draft" saves it without publishing.published
blog_idNoYour 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.
excerptNoSummary shown under the title in the post list, up to 300 characters. Omit to derive it from the body.
languageNoLanguage of this post as a BCP-47 tag, e.g. "en", "ru", "pt-BR". Omit to inherit the blog's language.
seoTitleNoTitle for search results and link previews, up to 200 characters. Defaults to `title`.
coverImageNoCover 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.
translationOfNoSlug 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.
seoDescriptionNoDescription for search results and link previews, up to 300 characters. Defaults to the excerpt.
idempotency_keyNoOptional 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.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
postNo
errorNoPresent only on failure (isError: true). Success fields are absent then.
post_urlNoLive URL of the post. Present only when it is published.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

Score is being calculated.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.