Publish and schedule posts
Take a blog post live on the agent site and connected CMS, schedule it for later, unschedule it, move it back to draft, or delete it.
These tools control a blog post's publish lifecycle: publish it now, schedule it for a future time, cancel a schedule, un-publish it back to draft, or delete it permanently.
When to use
Use these once a post is drafted and reviewed and you're ready to control when and whether it goes live. Publishing goes to the brand's Pendium-hosted agent site first, then syncs to any connected CMS — no CMS connection is required. All of these tools are synchronous except publish_blog_post (async publish job) and are available on any plan. Find the postId with list_blog_posts.
Blog-only over MCP (MEE-1995): every tool here operates on blog posts only. A social-post postId is rejected — social posts are managed in the Pendium app, not over MCP.
Typical sequence
list_blog_posts— find thepostId.publish_blog_postto go live now, orschedule_blog_postto publish at a future time.unschedule_blog_postto cancel a schedule, ormove_blog_post_to_draftto take a live post offline (e.g. before regenerating it).delete_blog_postto remove a post permanently.
Tools
publish_blog_post
Publish a post right now. It goes live on the brand's Pendium-hosted agent site first, then syncs to any connected CMS — WordPress, Webflow, or Ghost. No CMS connection is required; agent-site-only brands publish fine.
Deprecated alias:
publish_postis still accepted butpublish_blog_postis the canonical name.
Authentication: Required. Available on any plan.
| Parameter | Type | Required | Description |
|---|---|---|---|
syntheticId | number | Yes | The agent the post belongs to. |
postId | string | Yes | The post to publish. From list_blog_posts. |
Returns immediately after marking the post for publishing and enqueueing the job; publishing is async. The post goes live on the agent site first, then syncs to any connected CMS — usually under a minute. Poll list_blog_posts to confirm the post shows as published.
schedule_blog_post
Schedule a post to publish later. Sets the post to scheduled status with the publish time you provide.
Deprecated alias:
schedule_postis still accepted butschedule_blog_postis the canonical name.
Authentication: Required. Available on any plan.
| Parameter | Type | Required | Description |
|---|---|---|---|
syntheticId | number | Yes | The agent the post belongs to. |
postId | string | Yes | The post to schedule. From list_blog_posts. |
scheduledFor | string | Yes | When to publish, as an ISO 8601 timestamp (e.g. 2026-07-01T14:00:00Z). Must be in the future. |
Synchronous — flips the post to scheduled with the given publish time and returns immediately. A scheduledFor in the past is rejected (use publish_blog_post to publish immediately). Use unschedule_blog_post to cancel and return it to draft.
unschedule_blog_post
Cancel a scheduled post. Clears the scheduled publish time and returns the post to draft.
Deprecated alias:
unschedule_postis still accepted butunschedule_blog_postis the canonical name.
Authentication: Required. Available on any plan.
| Parameter | Type | Required | Description |
|---|---|---|---|
syntheticId | number | Yes | The agent the post belongs to. |
postId | string | Yes | The scheduled post to unschedule. From list_blog_posts. |
Synchronous — clears the schedule and moves the post back to draft in one step. Only operates on a scheduled post. It rejects a published post (use move_blog_post_to_draft to take a live post offline — that path also refreshes the public caches) and a draft post (nothing to cancel). Use schedule_blog_post to schedule again, or publish_blog_post to publish now.
move_blog_post_to_draft
Move a post back to draft from any state — including published. Use this to un-publish a post so you can edit it and re-publish.
Deprecated alias:
move_to_draftis still accepted butmove_blog_post_to_draftis the canonical name.
Authentication: Required. Available on any plan.
| Parameter | Type | Required | Description |
|---|---|---|---|
syntheticId | number | Yes | The agent the post belongs to. |
postId | string | Yes | The post to move to draft. From list_blog_posts. |
Synchronous — flips the post's status to draft and returns immediately. This only changes the post's status inside Pendium; it does not remove anything already live on a connected third-party platform (CMS, social). Re-publish with publish_blog_post when you're ready.
delete_blog_post
Permanently delete a post. This cannot be undone. The post is removed from Pendium and unlinked from any workflow that referenced it.
Deprecated alias:
delete_postis still accepted butdelete_blog_postis the canonical name.
Authentication: Required. Available on any plan.
| Parameter | Type | Required | Description |
|---|---|---|---|
syntheticId | number | Yes | The agent the post belongs to. |
postId | string | Yes | The post to delete permanently. From list_blog_posts. |
Synchronous and permanent — there is no undo. The post row is deleted and any workflow_items that referenced it are unlinked. Anything already live on a connected third-party platform (CMS, social) is not affected. Any team member with access to the agent can delete a post, including ones already published.