MCP Server
Connect AI assistants to PowerPost through the Model Context Protocol.
PowerPost runs a remote MCP server, so AI assistants like Claude and Cursor can generate captions and images, create posts, publish, and read analytics on your behalf. Every MCP tool maps to an endpoint in the v1 API and respects the same API key, scopes, and rate limits.
Endpoint
https://powerpost.ai/api/mcpTransport is Streamable HTTP. Authenticate with a PowerPost API key as a bearer token, the same key you use for the REST API.
Connecting a client
Most clients let you add a remote MCP server by URL with custom headers. Add this to your client's MCP config (for example .mcp.json in Claude Code or Cursor):
{
"mcpServers": {
"powerpost": {
"url": "https://powerpost.ai/api/mcp",
"headers": {
"Authorization": "Bearer pp_live_sk_YOUR_KEY_HERE",
"X-Workspace-Id": "YOUR_WORKSPACE_ID"
}
}
}
}Create a key in Settings → API. The key's scopes decide which tools work, so grant the scopes you need (or "Full access").
Connecting with OAuth instead
Clients that support the MCP "Connect" flow (Claude.ai, Claude Code, and others) can skip the manual key: point them at https://powerpost.ai/api/mcp with no credentials, and the client discovers this server's OAuth endpoints on its own, redirects you to log in and approve access, then starts using the connection — no copying and pasting a key.
OAuth connections always get full API access (same as a "Full access" key). To limit what the assistant can do, disable tools in the client (e.g. Claude's tool permissions). Connections show up in Settings → API.
Choosing a workspace
Most tools act inside a workspace. You can either:
- Set
X-Workspace-Idonce as a connection header (recommended), or - Pass
workspace_idas an argument on each call.
Run powerpost_list_workspaces to find your workspace IDs.
Tools
| Tool | Scope | What it does |
|---|---|---|
powerpost_list_workspaces | — | List workspaces this key can use |
powerpost_get_credits | account:read | Current credit balance |
powerpost_generate_content | content:generate | Start a caption/content generation |
powerpost_list_content_generations | content:read | List content generations |
powerpost_get_content_generation | content:read | Get one content generation + outputs |
powerpost_generate_image | images:generate | Start an image generation |
powerpost_get_image_generation | images:read | Get one image generation |
powerpost_generate_video | videos:generate | Start a video generation |
powerpost_get_video_generation | videos:read | Get one video generation |
powerpost_create_post | posts:write | Create a draft post |
powerpost_get_post | posts:read | Get a post and its items |
powerpost_publish_post | posts:publish | Publish a post now |
powerpost_schedule_post | posts:publish | Schedule a post |
powerpost_cancel_publish | posts:publish | Cancel a publish/schedule |
powerpost_retry_post_item | posts:publish | Retry a failed item |
powerpost_get_post_item_analytics | analytics:read | Engagement analytics for an item |
powerpost_list_calendar_entries | calendar:read | List calendar entries in a date range |
powerpost_create_calendar_entry | calendar:write | Create a calendar entry |
powerpost_get_calendar_entry | calendar:read | Get a calendar entry |
powerpost_update_calendar_entry | calendar:write | Update a calendar entry |
powerpost_delete_calendar_entry | calendar:write | Delete a calendar entry |
powerpost_upload_media | media:write | Upload media (base64 → same as REST upload) |
Notes
- Generation is async. The
generatetools return an ID right away; poll the matchingget_*_generationtool until the status iscompleted. - Uploads have no file picker.
powerpost_upload_mediatakesbase64data plusmime_type, then posts to the same/api/v1/media/uploadendpoint as the REST API. It does not download files from URLs. - Errors come straight from the API. A missing scope, bad input, or insufficient credits returns the same message you'd get from the REST endpoint.