Connect your AI to Post Bridge
One URL, sign in with OAuth, done. No API key needed for Claude, ChatGPT, Claude Code, Cursor, or Windsurf.
On Claude or ChatGPT? One click.
Post Bridge is listed in both official directories. Hit the button, sign in, done. No URLs, no config.
Everything else: the 60-second version
- Have a Post Bridge account with at least one social account connected (7-day free trial works)
- Paste this URL wherever your AI client adds MCP servers or connectors:
https://www.post-bridge.com/api/mcp/mcp- A browser window opens — log in to Post Bridge and click Allow
- Ask your AI to post something
That is the whole setup for every OAuth-capable client. Exact clicks per client below. Your AI never sees your social passwords, and you can revoke access anytime from Settings → Connected apps.
Setup by client
Claude (web + Desktop app)
OAuth, one clickFastest way: open post bridge in the Claude connector directory and hit Connect. Manual alternative:
- Settings → Connectors → Add custom connector (leave the optional OAuth client ID and secret blank — Post Bridge registers Claude automatically)
- Paste
https://www.post-bridge.com/api/mcp/mcp - Log in and click Allow when the browser opens
Claude Code
OAuth, one commandRun:
claude mcp add --transport http post-bridge https://www.post-bridge.com/api/mcp/mcpThen authenticate when prompted (run /mcp inside Claude Code if it doesn't prompt on its own) — it opens the same OAuth login, no API key involved.
ChatGPT
OAuthFastest way: open post bridge in the ChatGPT app directory (or search "post bridge" under Apps) and hit Connect. Manual alternative with a custom connector:
- Enable developer mode: Settings → Apps & Connectors → Advanced → Developer mode
- Settings → Connectors → Create, name it post bridge, paste
https://www.post-bridge.com/api/mcp/mcp, auth: OAuth - Sign in and allow when prompted
OpenAI moves these menus around; if yours differs, the constant part is: add a custom MCP connector with the URL above and pick OAuth.
Cursor / Windsurf
OAuth via configAdd to .cursor/mcp.json (or Windsurf's mcp_config.json):
{
"mcpServers": {
"post-bridge": {
"url": "https://www.post-bridge.com/api/mcp/mcp"
}
}
}First use triggers the OAuth login in your browser. If your version doesn't support OAuth for remote servers, use the API-key header shown in When you need an API key.
Grok (and other URL-only clients)
API keyGrok's custom connector only takes a URL — no OAuth flow, no header field. Put an API key in the URL instead:
https://www.post-bridge.com/api/mcp/mcp?key=pb_live_your_api_key_hereGenerate the key on the API Keys page. The URL contains your key, so treat it like a password; revoke it anytime from the same page.
Any other MCP client
https://www.post-bridge.com/api/mcp/mcp
Streamable HTTP
OAuth 2.0 (preferred, automatic client registration), or Authorization: Bearer pb_live_..., or ?key=pb_live_... for clients without header support
stdio-only client? Bridge it with mcp-remote:
{
"mcpServers": {
"post-bridge": {
"command": "npx",
"args": ["mcp-remote", "https://www.post-bridge.com/api/mcp/mcp"]
}
}
}When you need an API key
Only in three cases: a client with no OAuth support (Grok and other URL-only connectors), headless or server-side agents where nobody can click a login window, and scripts hitting the REST API or CLI. Everything else should use OAuth — it's one click, and revoking it doesn't break your other integrations.
Keys come from the API Keys page and go in a header:
Authorization: Bearer pb_live_your_api_key_hereOAuth connections are managed separately, under Settings → Connected apps. Revoking either takes effect immediately.
Prefer a CLI or agent skills?
The same endpoints ship as the postbridge-cli npm package plus installable skills for Claude Code, Cursor, Windsurf and Codex. Short commands instead of long API calls — less context, fewer mistakes:
npx skills add post-bridge-hq/agent-modeOpen source, MIT: github.com/post-bridge-hq/agent-mode. Building your own integration? Use the REST API reference.
Example prompts
Once connected, talk to your agent normally. It picks the right tools on its own. A few things to try:
- Which social accounts do I have connected?
- Post “shipping something new today” to my X and LinkedIn accounts right now.
- Schedule this video to TikTok, Instagram Reels and YouTube Shorts for tomorrow at 9am.
- Show me everything I have scheduled this week.
- Move my Friday post to Monday morning and shorten the caption.
- Which of my posts got the most views in the last 30 days?
Sane default for agent-written content: ask for drafts first, review in the dashboard, then schedule. Nothing publishes behind your back.
Tool Reference
The MCP server exposes 13 tools. Your AI will discover these automatically — you just ask in plain language.
| Tool | Description | Key params |
|---|---|---|
| list_social_accounts | List all connected social media accounts with IDs, platforms, and usernames. | None |
| create_post | Create and schedule a post. Use is_draft to save without publishing. Drafts warn about platforms that don't support native drafts. | caption, social_accounts, scheduled_at?, media_urls?, is_draft?, platform_configurations? |
| list_posts | List your posts with optional filters by platform or status. | platform?, status?, limit?, offset? |
| get_post | Get full details of a single post by ID. | id |
| update_post | Update a scheduled or draft post's caption, schedule, accounts, or media. | id, caption?, scheduled_at?, social_accounts?, media_urls? |
| delete_post | Delete a scheduled or draft post. Published posts cannot be deleted. | id |
| list_analytics | Get post analytics — views, likes, comments, shares. Filter by platform. | platform?, limit?, offset? |
| sync_analytics | Trigger a fresh sync of analytics data from all connected platforms. | None |
| list_post_results | Check per-platform posting results — success/failure with error details. | post_id?, limit?, offset? |
| upload_media | Upload media and get back a reusable media_id. Pass a public URL (preferred for anything over a few MB), or pass base64 file bytes directly with mime_type. Direct base64 uploads capped at 3MB raw — for larger files, use the URL option or upload via the dashboard. | url? | (data + mime_type), name? |
| list_media | List uploaded media files with IDs, URLs, and types. | limit?, offset? |
| delete_media | Delete an uploaded media file (only if not used by any post). | id |
Media requirements by platform
Attach media with media (uploaded media IDs) or media_urls (public URLs). Some platforms can't publish a text-only post and will fail if none is attached. You can create a post with no media and add it later with update_post, but it won't publish to a media-required platform until the media exists.
| Platform | Media | Accepts |
|---|---|---|
| youtube | Required | exactly 1 video |
| tiktok | Required | 1 video, or one+ images (photo post) |
| Required | 1–10 images/videos; story = exactly 1; no PDFs | |
| Required | 1-5 images (2+ = carousel, same aspect ratio) or 1 video | |
| twitter / X | Optional | up to 4 images, or 1 video |
| Optional | 1 video, or one+ images | |
| Optional | up to 20 images, or 1 video, or 1 PDF | |
| threads | Optional | up to 20 images/videos |
| bluesky | Optional | up to 4 images, or 1 video |
| google_business | Optional | text or a single image; no video |
When a post targets several platforms, each takes what it supports from the post's media; anything a platform can't use is skipped for that platform.
Platform configurations
create_post and update_post take an optional platform_configurations object to override caption/media or set platform-specific options. Each override is keyed by platform name — only add a key for a platform you're actually posting to, and only the fields you want to override (everything else falls back to the top-level caption/media).
| Platform key | Options (beyond caption / media) |
|---|---|
| board_ids[], link, title, video_cover_timestamp_ms | |
| placement:"story", video_cover_timestamp_ms, cover_image (media id), is_trial_reel, trial_graduation:"MANUAL"|"SS_PERFORMANCE", user_tags[], collaborators[] (co-authors, max 3), first_comment | |
| tiktok | title, video_cover_timestamp_ms, draft (native TikTok draft), is_aigc |
| first_comment (put links here — stripped from the main tweet) | |
| youtube | title, contains_synthetic_media, thumbnail (media id, long-form only) |
| placement:"story", first_comment (ignored for stories) | |
| document_title (PDF/document posts only) | |
| bluesky | caption / media only |
| threads | location:"timeline"|"reels", first_comment (posted as a reply) |
| google_business | single image only, cta_action_type:BOOK|ORDER|SHOP|LEARN_MORE|SIGN_UP|CALL, cta_url, language_code |
{
"caption": "New drop is live 🎉",
"social_accounts": [44029, 44031, 44032],
"platform_configurations": {
"tiktok": { "draft": true },
"instagram": { "video_cover_timestamp_ms": 2000 },
"twitter": { "first_comment": "Grab it: https://example.com/drop" }
}
}Enums accept only the exact values shown. The MCP tool schema carries the full per-field help, so your AI assistant sees these descriptions inline when it calls the tool.
Good to know
- Drafts —
is_draftsaves the post in Post Bridge only. It does not create a draft on any social platform. When you later publish the draft, all platforms post immediately. - Media cleanup — media files are automatically deleted after all posts using them have published. If you share the same media across multiple drafts or scheduled posts, it stays available until the last one goes out. After that, the media ID becomes invalid.
- Deleting posts — you can only delete scheduled or draft posts. Published posts cannot be deleted via the API.
- Revoking access — OAuth connections live under Settings → Connected apps, API keys under API Keys. Revoking either disconnects immediately.
Ready to connect?
Paste one URL, sign in, and your AI can post. No API key needed.