A side-by-side look at the PostHero and Postmcp MCP Server MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose PostHero for social media work as a local process; choose Postmcp MCP Server for social media as a local process. You can also run both side by side in one mcpServers block.
POSTHERO_API_KEY, POSTHERO_BASE_URL.list_accounts, create_post, list_posts.POSTMCPAI_API_KEY, POSTMCPAI_API_URL, POSTMCPAI_PROJECT_ID, PORT.get_user_info, list_workspaces, get_connected_accounts.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Social Media | Social Media |
| Quality signal | 49/100 · Fair | 61/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | Not declared | Not declared |
| Pricing | Not declared | Not declared |
| Required env vars | POSTHERO_API_KEYPOSTHERO_BASE_URL | POSTMCPAI_API_KEYPOSTMCPAI_API_URLPOSTMCPAI_PROJECT_IDPORT |
| Verified owner | Community listing | Community listing |
| GitHub stars | 0 | 0 |
| Directory activity | 0 views 0 installs 0 upvotes | 2 views 0 installs 0 upvotes |
| Tools | 9 | 16 |
| Full listing | View PostHero | View Postmcp MCP Server |
list_accountsList connected social media accountscreate_postCreate, schedule, or publish a postlist_postsList posts with filters (status, platform)get_postGet full details of a postupdate_postUpdate a draft or scheduled postdelete_postDelete a post from PostHeropublish_postImmediately publish a draft/scheduled postget_analytics_summaryAggregated analytics for a platformget_top_postsTop-performing posts ranked by metricget_user_infoRetrieve details of the logged-in user including subscription plan, credit balance, AI token count, the active workspace, and the caller's role in it.list_workspacesList every workspace (project) the user belongs to, with the id to pass as workspaceId, the caller's role, and which one is the default. Call this first whenever the user mentions a client, brand, or workspace by name.get_connected_accountsList every connected social profile in the workspace with the profileId needed to target it. Call this before creating a post so the post reaches the intended profile rather than every account on a platform.get_account_healthReport connections whose access token has expired or is about to, and which therefore need the user to reconnect. Check this before scheduling anything far out - a post scheduled onto a dead connection fails silently at publish time.list_brandingsList the workspace's brand kits: tone of voice, audience, keywords, and reference style images. Use one to keep drafted copy on-brand, and pass its id to generate_image for on-brand visuals.list_postsRetrieve scheduled, published, draft, and failed posts, newest first, with per-profile delivery status. Every profile that received a post carries `url`, the link to the live copy - give the user that link when they ask where a post went. Returns pagination plus counts per status.get_postFetch a single post by id, including per-profile delivery status, the live URL of each published copy, and the error for any profile that failed.preflight_postDry-run a post before creating it: checks copy against each platform's character limit, flags profiles that are not connected or need reconnecting, warns when a platform requires media, reports each target's video limit when a video is attached, and reports the credit cost against the workspace balance. Costs nothing and publishes nothing. Run this before create_post whenever the copy is long, carries a link, or targets several platforms.create_postSchedule or immediately publish a post to specific connected social profiles. Prefer targetAccounts so the post lands only on the profiles you name. Every targeted profile becomes its own post with its own id, so each can be edited, retried or cancelled on its own - the response lists them all. With publishImmediately, each delivered profile comes back with a `url` to the live copy; pass those on to the user.publish_post_nowBroadcast an existing scheduled post immediately to its platforms. Also the way to retry a failed post: profiles that already received it are skipped, so only the stragglers go out. The returned post carries a `url` per delivered profile - report those links rather than only saying it published.delete_postCancel and delete a scheduled or failed post from the database.update_postUpdate the fields (content, target profiles, schedule date/time) of an existing post. To move a post to a different slot without touching anything else, use reschedule_post.Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"posthero": {
"command": "npx",
"args": [
"-y",
"@posthero/mcp"
],
"env": {
"POSTHERO_API_KEY": "YOUR_POSTHERO_API_KEY_HERE",
"POSTHERO_BASE_URL": "YOUR_POSTHERO_BASE_URL_HERE"
}
}
}
}
{
"mcpServers": {
"postmcp-mcp-server": {
"command": "npx",
"args": [
"-y",
"@postmcpai/server"
],
"env": {
"POSTMCPAI_API_KEY": "YOUR_POSTMCPAI_API_KEY_HERE",
"POSTMCPAI_API_URL": "YOUR_POSTMCPAI_API_URL_HERE",
"POSTMCPAI_PROJECT_ID": "YOUR_POSTMCPAI_PROJECT_ID_HERE",
"PORT": "YOUR_PORT_HERE"
}
}
}
}