@posteahora/mcp
OfficialThis MCP server lets AI agents manage PosteAhora social media content across connected platforms.
List connected social accounts (
list_accounts) to get account IDs required for posting.Manage the post ideas backlog: list, create, update, and delete ideas (
list_ideas,create_idea,update_idea,delete_idea).Create posts as drafts or publish immediately (
create_post).Schedule posts for future publication (
schedule_post).Update draft/scheduled posts (
update_post), delete posts (delete_post), or publish an existing post now (publish_post_now).Inspect posts: list them (
list_posts) and get per-platform status (get_post_status).Retrieve analytics (
get_analytics) for published posts, including totals and per-platform breakdown.Upload media from the local machine (
upload_media) or get a presigned URL for direct client upload (create_upload_url).Workspace-bound and role-gated: viewer keys are read-only; write operations return 403.
Allows publishing social posts to Facebook accounts connected to PosteAhora.
Allows publishing social posts to Instagram accounts connected to PosteAhora.
Allows publishing social posts to Threads accounts connected to PosteAhora.
Allows publishing social posts to TikTok accounts, with support for media uploads to a verified CDN domain.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@@posteahora/mcp List my connected social accounts"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@posteahora/mcp
MCP server for PosteAhora — let AI agents add ideas, create, schedule, and publish social posts across Instagram, X/Twitter, LinkedIn, Threads, Facebook, Google Business (and more) straight from a chat.
It's a thin wrapper over the PosteAhora public REST API: every call is authenticated with your API key and goes through the same quota, ownership, and publishing pipeline as the web app.
Get an API key
Open PosteAhora → Settings → API & integrations.
Create a key and copy it (it's shown once). It looks like
pah_live_….
Related MCP server: @posteverywhere/mcp
Workspaces
A key (and a hosted connector) is bound to one workspace — the one that was
active when you created it. So list_accounts, list_posts, list_ideas and
get_analytics return that workspace's data, not everything you own. To work
in another workspace, create a separate key/connector there. Writes are
role-gated: a viewer key can read but not create_post, schedule_post,
update_post, delete_post or publish_post_now (those return 403).
Install (Claude Code / Cursor / Windsurf)
Add to your MCP client config:
{
"mcpServers": {
"posteahora": {
"command": "npx",
"args": ["-y", "@posteahora/mcp"],
"env": {
"POSTEAHORA_API_KEY": "pah_live_xxxxxxxx",
"POSTEAHORA_API_URL": "https://api.posteahora.com/functions/v1/api"
}
}
}
}Claude Code:
claude mcp add posteahora -e POSTEAHORA_API_KEY=pah_live_… -e POSTEAHORA_API_URL=https://api.posteahora.com/functions/v1/api -- npx -y @posteahora/mcpCursor / Windsurf: add the JSON above to the MCP settings file.
Tools
Tool | What it does |
| List connected social accounts. Call first — you need each |
| List the boards of a connected Pinterest account. Every Pin needs a |
| Read / add backlog ideas (no publishing). |
| Create a draft, or publish now ( |
| Publish at a future time ( |
| Inspect posts and per-platform results. |
| Upload a local image/video from the machine running this server, returns a public URL for |
| Return a short-lived presigned URL so the client uploads a file directly to storage. Use in remote/hosted mode, where the server can't read your local files. |
Typical flow
list_accounts→ grab theidfor each platform you want to post to.(optional) get a
publicUrlfor your media:Local mode:
upload_mediawith an absolutefilePath→publicUrl.Remote/hosted mode:
create_upload_urlwithfilename/sizeBytes→uploadUrl+publicUrl; thenHTTP PUTthe raw bytes touploadUrlwith the matchingContent-Typeheader (e.g.curl -T ./slide.jpg "<uploadUrl>" -H 'Content-Type: image/jpeg'). This works for any size, including video, and is required for TikTok photos (they must be served from our verifiedcdn.posteahora.comdomain).
Pinterest only:
list_boardswith the PinterestaccountId→ pick a board and pass itsidasplatformOptions: { pinterest: { boardId } }.create_postwithaccountMappings: [{ platform, accountId }],mediaUrls, andstatus: "published"(orschedule_postwithscheduledAt).
Remote / hosted mode (experimental)
npm run start:http starts a stateless Streamable HTTP server on /mcp
(PORT, default 8787). The caller's Authorization: Bearer pah_… header is used
as the API key (falls back to POSTEAHORA_API_KEY). Put OAuth in front for a
production multi-tenant connector.
Development
npm install
npm run build
POSTEAHORA_API_KEY=pah_live_… POSTEAHORA_API_URL=https://api.posteahora.com/functions/v1/api npm startAvailable Tools
15 toolscreate_ideaCreate a post ideaA
Add a lightweight idea to the backlog. Use this for brainstorming — it does NOT publish anything. Promote to a real post later with create_post.
Inputs: tags, title, status, caption, +1 more. Returns: idea
create_postCreate or publish a postA
Create a post. With status 'draft' it's saved only. With status 'published' it is published immediately to every channel in accountMappings. ALWAYS call list_accounts first to get accountId for each platform. Upload media via upload_media and pass the returned public URL in mediaUrls.
Inputs: accountMappings (required), title, status, caption, +6 more. Returns: status, postIds
create_upload_urlCreate a direct media upload URLA
Get a short-lived presigned URL to upload a local media file directly to storage from THIS client. Use this instead of upload_media when the MCP server runs remotely and cannot read your local files. Steps: (1) call this with filename, sizeBytes (exact byte length of the file) and optionally contentType; (2) HTTP PUT the raw file bytes to the returned uploadUrl with header 'Content-Type' set to the same contentType (e.g. curl -T ./slide.jpg "" -H 'Content-Type: image/jpeg') and expect HTTP 200; (3) put the returned publicUrl into mediaUrls of create_post / create_idea. Do NOT pass a filePath here — you upload the bytes yourself. The uploadUrl expires quickly, so upload right after calling this.
Inputs: filename (required), sizeBytes (required), contentType. Returns: method, publicUrl, uploadUrl, expiresInSeconds
delete_ideaDelete a post ideaADestructiveIdempotent
Permanently delete an idea from the backlog. Get ids from list_ideas.
Inputs: id (required). Returns: id, deleted
delete_postDelete a postADestructiveIdempotent
Delete a post (soft delete — it stops appearing in listings). Get ids from list_posts.
Inputs: id (required). Returns: id, deleted
get_analyticsGet post analyticsARead-only
Read performance metrics (views, likes, comments, shares, reach, saves, impressions, reposts, interactions) for the user's published posts, with aggregated totals and a per-platform breakdown. Data is synced from each platform hourly. Use it to analyze what performed well and to generate new ideas with create_idea.
Inputs: limit, period, platform. Returns: posts, period, summary
get_post_statusGet a post's statusARead-only
Fetch one post by id, including its per-platform publish results (platform_results).
Inputs: id (required). Returns: post
list_accountsList connected social accountsARead-only
List the connected social accounts in this key/connector's workspace (a key or connector is bound to one workspace, so this returns that workspace's accounts, not every account you own). ALWAYS call this first before create_post or schedule_post: you need each account's id to target the right channel (the API refuses to publish without an explicit accountId).
Inputs: no named parameters. Returns: accounts
list_ideasList post ideasARead-only
List your workspace's post ideas (the kanban backlog of drafts to iterate on).
Inputs: no named parameters. Returns: ideas
list_postsList postsARead-only
List your workspace's posts, newest first. Optionally filter by status.
Inputs: limit, status. Returns: posts
publish_post_nowPublish an existing post nowA
Publish a saved draft or scheduled post immediately to its channels. A multi-channel draft is fanned out into one post per platform (each returned in postIds); the original draft id is retired. The post must already have a connected account selected per channel (set it with update_post if needed). Use get_post_status on the returned ids to check the per-platform result.
Inputs: id (required). Returns: status, postIds
schedule_postSchedule a post for laterA
Schedule a post to publish at a future time. Same as create_post but requires scheduledAt (ISO 8601). Call list_accounts first.
Inputs: scheduledAt (required), accountMappings (required), title, caption, +6 more. Returns: status, postIds
update_ideaUpdate a post ideaAIdempotent
Edit an existing idea in the backlog. Only the fields you pass are changed. Use status to move it between kanban columns. Get ids from list_ideas.
Inputs: id (required), tags, title, status, +3 more. Returns: idea
update_postUpdate an existing postAIdempotent
Edit a draft or scheduled post. Only the fields you pass are changed. Status can be 'draft' or 'scheduled' (with scheduledAt) — to publish an existing post immediately use publish_post_now instead. Get ids from list_posts.
Inputs: id (required), title, status, caption, +8 more. Returns: post
upload_mediaUpload a media fileA
Upload a local image or video file to media storage and get back a public URL to use in mediaUrls of create_post / create_idea. Provide an absolute filePath on the machine running this MCP server.
Inputs: filePath (required), contentType. Returns: publicUrl
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 15 tools
Each tool targets a distinct resource and action. Even the three publishing-related tools (create_post, schedule_post, publish_post_now) are clearly separated by their purpose: create, schedule, and publish existing. No two tools are likely to be confused.
All tool names use lowercase snake_case with a verb_noun pattern (list_ideas, create_post, upload_media). Exceptions like publish_post_now and get_post_status still adhere to the verb-first structure, making the namespace predictable.
With 15 tools, the server covers the full social media management workflow without redundancy or bloat. Each tool has a clear role, and the count is within the ideal range.
The server provides complete CRUD for ideas and posts, multiple publishing options, media upload, account listing, and analytics. It covers the entire lifecycle from brainstorming to performance review, with no obvious dead ends.
Maintenance
Related MCP Connectors
Publish and schedule social posts across your PostingCat accounts from AI agents.
Schedule and publish posts and short videos to every major social platform from any AI agent.
Draft, schedule and publish social posts to nine platforms from any AI agent.
Draft, schedule and publish social media posts from any AI agent.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to publish, schedule, and manage social media posts across X (Twitter), Instagram, and Threads through the Sociona API. Supports immediate posting, scheduling, analytics, and account management with natural language commands.612 npmMIT
- AlicenseAqualityBmaintenanceOfficial MCP server for PostEverywhere (posteverywhere.ai/social-media-scheduler). Let Claude, ChatGPT, Cursor or any MCP client schedule and publish posts to 13 platforms: Instagram, TikTok, YouTube, LinkedIn, Facebook, X, Threads, Pinterest, Bluesky, Telegram, Discord, WordPress and Google Business Profile. 40 tools: best-time scheduling, threads, cross-posting, campaigns, analytics.33289 npm7MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to create, schedule, and manage social media posts across 10 platforms via a unified API.-

PostMCP MCP Serverofficial
AlicenseAqualityBmaintenanceEnables AI assistants to manage social media publishing across platforms like LinkedIn, Twitter, Facebook, Instagram, Threads, and Bluesky.754 npmMIT