MCP
Use MCP when an AI assistant should validate, publish, schedule, inspect, edit, or discard posts for a user through SimplePost.
The MCP server is hosted by the Scheduler app and uses Scheduler-connected accounts. Users connect social accounts once in the web app, then authorize the AI client through OAuth.
Endpoint
Hosted Scheduler:
https://app.simplepost.social/mcp
Self-hosted Scheduler:
https://schedule.example.com/mcp
Local Scheduler:
http://localhost:3000/mcp
Replace schedule.example.com with your deployment hostname.
Client setup
Hosted MCP is included on every paid plan and the active free trial. First connect your social accounts, then authorize your assistant using the same SimplePost account. No SimplePost API key is needed for MCP OAuth.
ChatGPT
- Open the SimplePost plugin in ChatGPT.
- Select + to install it, sign in to SimplePost when prompted, and approve access.
- Start a new chat with SimplePost enabled. Ask it to list your SimplePost accounts and save a draft.
Use the hosted listing as the normal installation path. Manual custom-app setup is an alternative for clients or workspaces that allow it; your assistant subscription and workspace settings determine availability. Troubleshooting.
Claude
- Open SimplePost in the Claude directory.
- Choose Connect, sign in to SimplePost, and approve access.
- Enable the connector in your conversation and ask it to save a draft.
For a self-hosted instance, add your own remote URL through Claude's custom connector settings when available.
Claude Code
claude mcp add --transport http simplepost https://app.simplepost.social/mcp
Run /mcp in Claude Code and complete the browser authorization. Replace the origin for a self-hosted deployment.
OpenClaw
openclaw mcp add simplepost --url https://app.simplepost.social/mcp --transport streamable-http --auth oauth --no-probe
openclaw mcp login simplepost
Complete OAuth in the browser. If the client requests a returned code, finish with openclaw mcp login simplepost --code <code>. Treat the code as a credential and do not share it.
Other clients
For Cursor, Windsurf, or another compatible client, add this remote Streamable HTTP MCP URL and complete OAuth:
https://app.simplepost.social/mcp
For self-hosting, use your deployment's /mcp URL. Manual ChatGPT custom-app setup requires a plan/workspace allowing developer mode and write actions: open Settings → Apps → Advanced settings, enable developer mode where available, then create a custom app with your server URL. Prefer the hosted listing when using hosted SimplePost.
Authentication
The MCP server uses OAuth through Scheduler. The AI client receives a bearer token only after the user approves access.
Access tokens are stored only as SHA-256 hashes, expire after 90 days, and can be revoked through the authorization server's advertised /api/oauth/revoke endpoint. Revoked tokens stop working immediately.
Scopes:
| Scope | Allows |
|---|---|
accounts:read | Listing connected social accounts. |
posts:read | Inspecting drafts, scheduled, posted, and failed posts. |
posts:validate | Validating and previewing drafts. |
posts:write | Uploading media, creating posts, saving drafts, editing drafts or scheduled posts, and discarding drafts or scheduled posts. |
The MCP server does not expose social platform access tokens.
Tools
| Tool | Purpose |
|---|---|
list_accounts | Return Scheduler-connected accounts and accountId values. |
get_tiktok_creator_info | Inspect allowed TikTok privacy, interaction settings, and posting limits. |
upload_media | Upload a file from a compatible client and return a public media URL. |
validate_post | Check text and media against platform rules without creating anything. |
preview_post | Resolve accounts, media count, schedule time, and validation without writing anything. |
show_post_preview | Render a visual preview for unsaved content or a saved post. |
get_schedule | Return day/week/month calendar data and available slots. |
show_schedule | Render the interactive calendar. |
create_post | Publish immediately, schedule for later, or save a draft. |
inspect_posts | List drafts, scheduled, posted, or failed posts, or inspect one post by ID. |
update_scheduled_post | Edit a draft or future scheduled post after validation when publishing/scheduling. |
discard_scheduled_post | Delete a draft or future scheduled post and its stored media. |
Recommended agent workflow
- Call
list_accounts. - Ask the user to connect accounts in Scheduler if none are available.
- Draft the post and choose target account IDs from
list_accounts. - If media is needed, use a public URL or call
upload_mediawhen the client exposes a file parameter. - Call
validate_postonly when the user asks to validate or troubleshoot without creating anything. - Use
preview_postfor validation-oriented details andshow_post_previewfor a visual preview. Resolve missing content, accounts, media, or timing before writing. - Call
create_postwithpostingMode: "now",postingMode: "schedule", orpostingMode: "draft". - Inspect the returned summary and per-account results. After saving or changing a draft or scheduled post, call
show_post_previewwith the returned ID. A preview alone never performs the write. - Use
inspect_postswhen the user asks what is drafted, scheduled, posted, or failed. - Use
update_scheduled_postordiscard_scheduled_postonly for drafts or future scheduled posts after identifying the exactpostId.
Tool input examples
Validate or preview:
{
"message": "Launch day",
"accountIds": ["account_123", "account_456"],
"media": [
{
"type": "image",
"url": "https://cdn.example.com/image.jpg"
}
],
"postingMode": "schedule",
"scheduledFor": "2030-05-01T14:30:00Z"
}
Create now:
{
"message": "Launch day",
"accountIds": ["account_123"],
"postingMode": "now"
}
Inspect scheduled posts:
{
"status": "scheduled",
"page": 1,
"limit": 10
}
Update a scheduled post:
{
"postId": "post_123",
"message": "Updated launch day copy",
"scheduledFor": "2030-05-01T16:30:00Z"
}
Discard a scheduled post:
{
"postId": "post_123"
}
Media
upload_media accepts a required file parameter supplied by a compatible chat client, including download_url and file_id. It does not accept base64 file bytes. The result provides the public url, filename, size, and type to pass to a post's media array. Preserve returned metadata for validation. See upload limits for the MCP file-size cap and lower web-app limits; individual platforms can impose further restrictions.
If your client exposes neither a file parameter nor a public URL, upload through the web app or supply a public URL. Local paths and browser blob: URLs do not work with the remote server.
Calendar and visual previews
preview_post and get_schedule return data. show_post_preview and show_schedule render interactive MCP Apps UI where supported, with text and structured-data fallbacks for other clients.
For get_schedule or show_schedule:
{ "view": "week", "date": "2030-05-01", "timeZone": "Europe/Berlin" }
For a saved post preview:
{ "postId": "post_123" }
Calendar tools include open posting slots and scheduled, pending, published, failed, and past activity. Scheduling guide.
Threads, variants, quotes, and reposts
Use thread for ordered text-only follow-ups; remote MCP media belongs on the root. X, Bluesky, Threads, and Telegram support native chains; other destinations receive only the root with a warning. The interface allows up to 24 follow-ups, with a lower twenty-total-segment limit during the trial.
Use accountOverrides for per-account content and accountOptions for provider settings. Pass quotePostId from an existing SimplePost record to quote it; never invent an ID. New posts use the user's automatic repost default. Check returned repost status and due time. Publishing guide.
For TikTok, get_tiktok_creator_info reports allowed privacy and interaction settings. Remote MCP direct posts default to public if privacy is omitted; explicitly pass the requested audience in accountOptions[accountId].privacyLevel. Photo direct posts default to recommended music. TikTok options and inbox uploads.
Remote MCP and in-browser WebMCP are separate interfaces. In-browser WebMCP does not submit non-draft TikTok posts because the web app requires its manual consent flow.
What MCP cannot do
- Connect, disconnect, or re-authenticate social accounts.
- Expose social platform access tokens.
- Edit or discard already published, failed, pending, or due-for-dispatch posts.
- Read analytics or previous social media posts outside SimplePost records.
Manage social account connections in the Scheduler app.