PostNitro MCP Server
The PostNitro MCP server lets AI assistants and agents — Claude (Desktop, Code, and Cowork), Cursor, ChatGPT, and any other Model Context Protocol client — create carousels and image posts, manage brand kits and connected social accounts, and schedule posts directly. Instead of writing REST API calls, you connect the server once and your AI assistant gets ready-made tools covering carousel and image generation, brands, social accounts, and scheduling — using the same Embed API key and credits as the REST API.
Quick Reference
| Server URL | https://mcp.postnitro.ai/mcp |
| Transport | Streamable HTTP |
| Authentication | Authorization: Bearer <your-api-key> header (keys start with pn-) |
| API key | Same key as the Embed API — how to get one |
| Health check | GET https://mcp.postnitro.ai/health |
| Pricing | Uses your Embed API credits — free plan includes 5 credits/month, no card required |
Connecting
Claude Code
claude mcp add --transport http postnitro https://mcp.postnitro.ai/mcp \
--header "Authorization: Bearer pn-your-api-key-here"Claude Desktop / JSON configuration
Add the server to your MCP configuration file (for Claude Desktop: claude_desktop_config.json):
{
"mcpServers": {
"postnitro": {
"type": "http",
"url": "https://mcp.postnitro.ai/mcp",
"headers": {
"Authorization": "Bearer pn-your-api-key-here"
}
}
}
}Cursor
Cursor has native MCP support — add the same JSON configuration above to your Cursor MCP settings.
Other MCP clients
Any client that supports the Streamable HTTP transport can connect using the server URL and the Authorization: Bearer header shown above.
Replace pn-your-api-key-here with your actual API key. The key is the same one used for the Embed API — see Obtaining an API Key.
Saved defaults
Rather than passing templateId, brandId, and presetId on every call, save them once with postnitro_set_defaults. They persist across sessions and are applied automatically whenever a generate/import tool omits them.
Auto-selection: if a required ID is missing and your workspace has exactly one candidate (e.g. a single AI preset), the server selects it automatically. If several exist, the error lists the candidate IDs so the assistant can choose without a separate lookup.
Carousel identifiers — embedPostId vs designId
Generation produces two distinct IDs:
| Identifier | Represents | Used by |
|---|---|---|
embedPostId | The generation job | postnitro_check_status, postnitro_get_output |
designId | The durable design artifact | Scheduling (designId field) |
Scheduling’s designId resolves against the design table — passing an embedPostId where a designId is expected fails with 400 "Design not found." Every tool that returns a completed carousel (postnitro_get_output, postnitro_generate_and_wait, postnitro_import_and_wait) surfaces a top-level designId field to bridge generation into scheduling. The one-step postnitro_generate_and_schedule tool resolves it automatically.
Available Tools
Configuration
| Tool | Description |
|---|---|
postnitro_set_defaults | Save default template, brand, AI preset, and output format so you don’t repeat them on every call |
postnitro_get_defaults | Retrieve your saved defaults |
Discovery
| Tool | Description |
|---|---|
postnitro_list_templates | Browse your design templates with IDs, dimensions, and aspect ratios |
postnitro_list_brands | List your brand configurations |
postnitro_list_ai_presets | List your AI presets (platform, tone, audience, language, slide count) |
postnitro_get_import_template | Get the exact slide structure and rules for importing content |
Creation — carousels
Carousels are multi-slide posts (postType: "CAROUSEL").
| Tool | Description |
|---|---|
postnitro_generate_carousel | Generate a carousel with AI from a topic/text, article URL, or X (Twitter) post URL |
postnitro_import_carousel | Create a carousel from your own slide content (array of typed slides) |
postnitro_generate_and_wait | AI-generate a carousel, poll until complete, and return the output in a single call |
postnitro_import_and_wait | Import a carousel, poll until complete, and return the output in a single call |
Creation — image posts
Image posts are single-slide posts (postType: "IMAGE") — the image-maker equivalents of the carousel tools.
| Tool | Description |
|---|---|
postnitro_generate_image | AI-generate a single-image post from a topic/text, article URL, or X (Twitter) post URL |
postnitro_import_image | Create a single-image post from your own content — pass slide as one object (not an array), with no slide type. Infographic layout is supported |
postnitro_generate_image_and_wait | AI-generate an image post, poll until complete, and return the output in a single call |
postnitro_import_image_and_wait | Import an image post, poll until complete, and return the output in a single call |
Status & Output
| Tool | Description |
|---|---|
postnitro_check_status | Check generation status (PENDING, PROCESSING, COMPLETED, FAILED) and processing logs |
postnitro_get_output | Retrieve the generated PNG image URLs or PDF document URL, plus the designId to use when scheduling |
Brands
| Tool | Description |
|---|---|
postnitro_create_brand | Create a brand kit (name, handle, logo, display flags) |
postnitro_get_brand | Fetch one brand kit |
postnitro_update_brand | Update a brand kit’s name, handle, image, or display flags |
See the Brands API for full field definitions.
Social accounts
| Tool | Description |
|---|---|
postnitro_list_social_accounts | List connected LinkedIn, Instagram, TikTok, and Threads accounts — returns the IDs used in selectedAccounts when scheduling |
postnitro_get_social_account | Fetch one account with scheduled-post usage by status and token expiry |
postnitro_disconnect_social_account | Disconnect an account and remove it from every scheduled post it was attached to (destructive) |
See the Social Accounts API for full field definitions.
Scheduling
| Tool | Description |
|---|---|
postnitro_list_scheduled_posts | List scheduled posts and drafts in a date range |
postnitro_create_scheduled_post | Create a scheduled post or draft |
postnitro_get_scheduled_post | Fetch one scheduled post |
postnitro_update_scheduled_post | Update a scheduled post — this replaces captions and selected accounts, so send the full intended state |
postnitro_delete_scheduled_post | Delete a scheduled post or draft (destructive) |
postnitro_create_scheduled_post and postnitro_update_scheduled_post take a designId (from postnitro_get_output, not an embedPostId), postContent captions per platform, selectedAccounts, and per-platform settings objects. Which settings object is required depends on the platforms selected and whether a designId is attached — see Platform settings for the full reference.
One convention worth knowing: when a design’s output is PDF and the post targets LinkedIn, the correct linkedinPostSettings.postType is "document" (with a 5–90 character postTitle) rather than "carousel". postnitro_generate_and_schedule applies this automatically; the other schedule tools pass your choice through as-is.
Full CRUD for scheduling is also available via the Schedule API if you need it outside an AI assistant.
Combined helper
| Tool | Description |
|---|---|
postnitro_generate_and_schedule | Generate a carousel with AI, wait for completion, and schedule it — in one call |
The generated design is attached automatically — don’t pass designId unless you want to attach a different, pre-existing design instead. If scheduling fails after generation succeeds, the tool returns the generated designId so you can retry with postnitro_create_scheduled_post without regenerating (which would re-consume credits).
Carousels vs. image posts
Both post types share the same lifecycle (initiate → poll → output), the same identifiers, and the same output shape. They differ only in the content you pass:
Carousel (postnitro_*_carousel) | Image (postnitro_*_image) | |
|---|---|---|
postType | CAROUSEL | IMAGE |
| Own content | slides — an array of typed slides (exactly one starting_slide, ≥1 body_slide, exactly one ending_slide) | slide — a single object, no slide type |
| AI content | aiGeneration — produces multiple slides | aiGeneration — produces one image |
| Infographic layout | Per slide in the array | On the single slide object |
Image tool inputs
postnitro_generate_image / postnitro_generate_image_and_wait (AI content):
aiGeneration(required) —{ type, context, instructions }.typeis one oftext,article,x;contextis the topic/prompt or a URL.templateId,brandId,presetId,responseType,requestorId— all optional if you’ve saved defaults; otherwise provide them.responseTypeisPDF|PNG|DESIGN.
postnitro_import_image / postnitro_import_image_and_wait (your own content):
slide(required) — a single object, not an array, with no slidetype. Onlyheadingis required;sub_heading,description,cta_button,image, andbackground_imageare optional.- Infographic layout is supported: set
layoutType: "infographic"and providelayoutConfig(same shape as carousel infographics —columnDatawith caller-providedids,contentitems, etc.). templateId,brandId,responseType,requestorId— optional if you’ve saved defaults.
AI image generation (generateImages)
All four creation tools — postnitro_generate_carousel, postnitro_import_carousel, postnitro_generate_image, postnitro_import_image (and their _and_wait variants) — accept an optional generateImages object. When present, the server generates AI images and bakes them into the design before rendering. See the REST reference for the full behavior (best-effort, credits, plan limits).
| Field | Type | Required (MCP/CLI) | Default | Allowed Values |
|---|---|---|---|---|
context | string | ✅ yes | — | Topic/brief that guides the image prompts |
imagePlacement | string | no | "auto" | "auto", "background", "in-line" |
imageStrategy | string | no | "strategic" | "strategic", "all" |
The one difference between MCP/CLI and the direct REST API:
generateImages.contextis compulsory over MCP and the CLI, because the AI agent composes it for the user. On direct REST API calls the same field is optional (it falls back toaiGeneration.contexton generate, or an empty string on import). Everything else aboutgenerateImagesis identical across both.
Omit the generateImages object entirely to skip AI image generation (default). Image generation is best-effort and adds latency — the post still completes without images if it fails or isn’t permitted (e.g. free plan or over the org’s AI-image quota), recorded as a GENERATE_IMAGES step in postnitro_check_status.
Typical Agent Workflow
- Discover — call
postnitro_list_templates,postnitro_list_brands, andpostnitro_list_ai_presetsto find valid IDs (orpostnitro_set_defaultsonce to skip this in future sessions) - Create — for a carousel call
postnitro_generate_and_wait(AI) orpostnitro_import_and_wait(your own content); for a single image callpostnitro_generate_image_and_waitorpostnitro_import_image_and_wait. These handle polling for you - Use the output — the tools return PNG URLs (one per slide) or a single PDF URL, plus a
designId, ready to download, publish, or schedule - Schedule (optional) — call
postnitro_create_scheduled_postwith thedesignId, or skip straight there withpostnitro_generate_and_schedule
For long-running generations or custom polling, use the non-waiting tool (postnitro_generate_carousel / postnitro_import_carousel / postnitro_generate_image / postnitro_import_image) followed by postnitro_check_status and postnitro_get_output.
Response conventions
- Successful tool results are JSON. Create/update tools return the affected object plus a top-level
scheduledPostId(for schedule tools) so it lines up with thescheduledPostIdother tools expect as input. - Tools may include a
warningsarray — non-fatal advisories, e.g. a media post with no design attached, or a LinkedIndocumentpost missing a validpostTitle. - Errors from the API are surfaced verbatim as
PostNitro API Error (<status>): <message>. See the Schedule API error reference for scheduling-specific messages.
Credits
The MCP server consumes the same credits as the Embed API:
- Content import: 1 credit per slide
- AI generation: 2 credits per slide
- Free plan: 5 credits per month (no card required) — paid plans start at $10/month for 250 credits
MCP vs. Embed API vs. Embed SDK
| Best for | |
|---|---|
| MCP Server | AI assistants and agents creating and scheduling carousels conversationally (Claude, Cursor, custom agents) |
| Embed API | Programmatic automation — Make.com, Zapier, n8n, cron jobs, custom backends |
| Embed SDK | Letting your users visually create and edit carousels inside your web app |
Support
- Email: support@postnitro.ai
- Live Chat: Available on postnitro.ai
- More details: postnitro.ai/mcp