PostPost

MCP Server

Control PostPost directly from AI assistants like Claude Code, Claude Desktop, Cursor, and any MCP-compatible client. No coding required -- just describe what you want in plain English.

Overview

Model Context Protocol (MCP) is an open standard that lets AI assistants connect to external tools and services. PostPost provides a remote MCP server at mcp.postpost.dev -- one-time setup, then just talk to your AI.

Perfect for:

  • Marketers -- schedule campaigns, check analytics, manage multiple accounts
  • Content creators -- post to all platforms at once without leaving your AI chat
  • Business owners -- delegate social media tasks to your AI assistant
  • Developers -- integrate PostPost into AI-powered workflows

Just describe what you want:

"Show my connected social accounts" "Schedule a post to LinkedIn for tomorrow at 9am" "Get my LinkedIn analytics for the past week" "Post this announcement to all my accounts"

Quick Start

1. Get Your API Key

Log in to PostPostAPI in the sidebar → Copy your key (sk_...). Click MCP in the sidebar for additional setup instructions.

2. Configure Your MCP Client

Add PostPost to your MCP configuration:

{
  "mcpServers": {
    "postpost": {
      "type": "http",
      "url": "https://mcp.postpost.dev",
      "headers": {
        "Authorization": "Bearer sk_YOUR_API_KEY"
      }
    }
  }
}

Note: Both https://mcp.postpost.dev/ and https://mcp.postpost.dev/mcp work as the MCP endpoint URL.

3. Restart Your Client

After restarting, you'll have access to 18 PostPost tools. Try asking:

"List my connected social media accounts"


Client-Specific Setup

Claude Code (CLI)

Edit ~/.claude.json or create .mcp.json in your project:

{
  "mcpServers": {
    "postpost": {
      "type": "http",
      "url": "https://mcp.postpost.dev",
      "headers": {
        "Authorization": "Bearer sk_YOUR_API_KEY"
      }
    }
  }
}

Restart Claude Code. Verify with /mcp command.

Claude Desktop

  1. Open Claude Desktop → SettingsDeveloperEdit Config
  2. Add the PostPost server configuration (same JSON as above)
  3. Restart Claude Desktop

Cursor

Create .cursor/mcp.json in your project:

{
  "mcpServers": {
    "postpost": {
      "type": "http",
      "url": "https://mcp.postpost.dev",
      "headers": {
        "Authorization": "Bearer sk_YOUR_API_KEY"
      }
    }
  }
}

Using with Other MCP Servers

MCP servers don't conflict -- Claude loads all servers and merges their tools. Example with Context7:

{
  "mcpServers": {
    "context7": {
      "command": "npx",
      "args": ["-y", "@upstash/context7-mcp"]
    },
    "postpost": {
      "type": "http",
      "url": "https://mcp.postpost.dev",
      "headers": {
        "Authorization": "Bearer sk_YOUR_API_KEY"
      }
    }
  }
}

Available Tools (18)

Posts

ToolDescription
list_postsList posts with filters (status, platform, dates, pagination)
create_postSchedule a post to one or more platforms
get_postGet post group details
update_postChange status (draft/scheduled) or reschedule
delete_postDelete a post group and all platform posts
get_upload_urlGet presigned S3 URL for media upload

Platform Connections

ToolDescription
list_connectionsList all connected social media accounts

LinkedIn Analytics & Engagement

ToolDescription
linkedin_post_statsPost engagement metrics (impressions, reactions, etc.)
linkedin_account_statsAggregated account statistics
linkedin_followersFollower count or daily growth
linkedin_profile_summaryCombined profile overview (followers + stats)
linkedin_create_reactionReact to a post (LIKE, PRAISE, EMPATHY, etc.)
linkedin_delete_reactionRemove a reaction
linkedin_create_commentPost a comment on a LinkedIn post
linkedin_delete_commentDelete a comment from a LinkedIn post

Workspace (B2B)

ToolDescription
list_workspace_usersList managed team members
create_workspace_userAdd a new managed user
workspace_detach_userRemove a user from workspace

Example Conversations

Schedule a Post

You: Schedule a post to my LinkedIn saying "Excited to announce our new product launch!" for tomorrow at 9am EST

Claude: I'll schedule that post for you. Let me first check your connected accounts...

Done! Post scheduled to LinkedIn for 2026-02-20 at 9am EST.

Cross-Platform Posting

You: Post "We're hiring! Check out our careers page" to Twitter, LinkedIn, and Bluesky right now

Claude: I'll post that to all three platforms...

Done! Published to:

Check Post Analytics

You: How did my last LinkedIn post perform?

Claude: Your post from Feb 15 received:

  • 1,250 impressions
  • 680 unique viewers
  • 28 reactions, 5 comments, 3 reshares
  • Engagement rate: 2.9%

Content Planning

You: Show me all my scheduled posts for next week

Claude: You have 5 scheduled posts:

  1. Mon 9am - LinkedIn: "Product update..."
  2. Tue 2pm - Twitter + LinkedIn: "Blog post..."
  3. Wed 10am - LinkedIn: "Case study..."
  4. Thu 3pm - Twitter: "Quick tip..."
  5. Fri 9am - LinkedIn + Bluesky: "Week recap..."

Campaign Management

You: Cancel all my draft posts and show me what's still scheduled

Claude: Deleted 3 draft posts. You still have 2 scheduled:

  • Tomorrow 10am - LinkedIn: "Q1 results..."
  • Friday 2pm - Twitter: "Weekend tips..."

Weekly Review

You: Give me a summary of how my LinkedIn performed this week

Claude: This week's LinkedIn performance:

  • 5 posts published
  • 4,230 total impressions
  • 89 reactions, 12 comments
  • Best performer: "Product launch" (1,850 impressions)
  • Follower growth: +47

Python Client Example

For programmatic access or testing:

import asyncio
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client

async def main():
    headers = {"Authorization": "Bearer sk_YOUR_API_KEY"}

    async with streamablehttp_client("https://mcp.postpost.dev", headers=headers) as (read, write, _):
        async with ClientSession(read, write) as session:
            await session.initialize()

            # List tools
            tools = await session.list_tools()
            print(f"Available: {len(tools.tools)} tools")

            # Get connections
            result = await session.call_tool("list_connections", {})
            print(result.content[0].text)

asyncio.run(main())

Install dependencies:

pip install mcp httpx

Verification

Health Check

curl https://mcp.postpost.dev/health
# {"status":"ok","service":"postpost-mcp"}

Test MCP Handshake

curl -X POST https://mcp.postpost.dev \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Authorization: Bearer sk_YOUR_API_KEY" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0.0"}}}'

Authentication

Every request requires your PostPost API key via one of:

  • Authorization: Bearer sk_... (recommended)
  • x-api-key: sk_...

This is the same key used for the REST API.


HTTP Endpoints

MethodPathPurpose
POST/MCP messages (Streamable HTTP)
GET/SSE stream (server notifications)
DELETE/Close session
GET/healthHealth check

Troubleshooting

"API key required" Error

Ensure your Authorization header is correctly formatted:

  • Correct: Authorization: Bearer sk_abc123...
  • Wrong: Authorization: sk_abc123...

Tools Not Showing

  1. Check your MCP config syntax (valid JSON)
  2. Verify the type is "http" (not "url")
  3. Restart your MCP client completely
  4. Run /mcp in Claude Code to verify connection

Session Errors

MCP uses sessions for stateful connections. If you see "Invalid or missing session", the server will automatically create a new one on the next request.


Comparison: MCP vs REST API

FeatureMCP ServerREST API
InterfaceNatural language via AIHTTP requests
Best forInteractive exploration, quick tasksProgrammatic integration, automation
SetupOne-time configPer-request auth
Tools18 MCP toolsFull API access
Rate limitsSame as REST APISame

Use MCP for conversational workflows. Use REST API for production integrations.


PostPost -- Social media API with free Starter plan, paid plans from Pro ($2.99/mo billed yearly)

On this page