generate_post
Generate AI-written posts for platforms by passing a theme. Get a post ID and status to track completion and schedule later.
Instructions
Generate AI content for a platform. Returns quickly with a postId and a 'generating' or 'completed' status — it does NOT block until generation fully finishes. Deducts 10 credits per variation. To control what the post is about, pass theme with a free-text brief (any topic/angle/facts/tone). If you omit theme, the topic is RANDOM — so always pass it when the user wants specific content. When variations > 1, ALL variations are returned under a SINGLE postId in the variations array — it does NOT create one post per variation. content is variation 1 (the primary, already saved on the post). Never call generate_post again to 'get the other variations' — they're all in the response. originalContent (if seen elsewhere) is the pre-voice-rewrite draft, not a separate variation. After generating, use create_post to save a chosen variation, then approve_post to schedule it. To repurpose: call repurpose_content first, then create_post with the result, then approve_post. Generation can take 1-5 minutes (longer with multiple variations or voice rewrite). This tool only waits a short grace period so fast generations can return inline content; if it returns status 'generating', the job is still running server-side — poll get_post with the returned postId until operationStatus is 'completed', then use that content. Do NOT call generate_post again for the same request while it's pending — retrying creates a duplicate draft and wastes credits. After generation, brand visual options (quote/card templates, brand images, stock photos) are prepared but NOT attached — share viewInBrowser for the visual picker, or call pick_post_visual to attach one. Do not attach a visual unless the user chooses it. The response includes editInVisualEditor: a direct URL to edit the post in the visual editor (once completed).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| theme | No | Free-text topic/brief describing what the post should be about — include any angle, emphasis, key facts, or tone (e.g. "Launch announcement for our new MCP; emphasize NVIDIA + Stripe + Amotron; B2B authoritative tone"). ALWAYS pass this when the user wants the post to be about something specific. If omitted, a RANDOM brand theme is used and the topic will NOT match the user's request. | |
| voice | No | Voice profile ID to apply | |
| brandId | No | Brand ID (uses active brand if omitted) | |
| themeId | No | Optional ID of a saved brand theme (from list_themes). Most callers should pass the free-text `theme` instead. If both are given, the free-text `theme` wins. | |
| platform | Yes | Platform: x | linkedin | instagram | threads | facebook | custom:<charLimit> | |
| variations | No | Number of variations to generate |