calmposts

MCP server for Claude, ChatGPT and Claude Code

Give your agent the address https://calmposts.com/mcp. It can list your channels, draft posts and threads, schedule them and check on them. It cannot reply, follow or send DMs.

Server address https://calmposts.com/mcp

You approve, in Telegram

Posts your agent creates can wait for you. The Telegram bot shows each one; approve or reject it with a tap, and nothing goes out without your yes.

Claude Code

Create an API key in API & MCP in the app, then add the server:

claude mcp add --transport http calmposts https://calmposts.com/mcp \
  --header "Authorization: Bearer cp_live_…"

claude.ai and Claude Desktop

No key needed: the connector signs in with OAuth.

  1. Open Settings → Connectors and add a custom connector.
  2. Paste https://calmposts.com/mcp as its address.
  3. Sign in to calmposts and approve the access on the consent page.

ChatGPT

Connectors need developer mode turned on.

  1. Open Settings → Connectors → Create.
  2. Paste https://calmposts.com/mcp as the server address.
  3. Sign in to calmposts and approve the access.

A local process (Claude Desktop, Cursor)

The calmposts-mcp binary runs the same tools over stdio and calls the REST API with your key. It downloads images on your machine, under the same rules as the hosted server.

{"mcpServers": {"calmposts": {
  "command": "/path/to/calmposts-mcp",
  "env": {"CALMPOSTS_API_KEY": "cp_live_…", "CALMPOSTS_URL": "https://calmposts.com"}
}}}

How connectors sign in

A connector finds our OAuth server from the 401 answer and /.well-known/oauth-protected-resource, registers itself, sends you to the consent page and exchanges the code with PKCE.

Access tokens last an hour; refresh tokens last 30 days and are replaced each time they are used. Only the workspace's owner can approve, and only on a plan with agents. Disconnecting an app in API & MCP ends its access at once.

Tools

ToolDoes
list_accountsyour channels and each network's rules
get_limitsplan usage, the workspace's time zone, network limits
create_posta post or a thread for the chosen accounts, wording per account, images by URL; when: draft, queue, at or now
list_postsposts by status, account and time range
get_postone post with its channels, status and version
update_postedit or reschedule; what is left out stays
delete_postcancel and remove
get_next_slotwhere when=queue would put a post
retry_postsend the failed channels again

Posts created through MCP get source “mcp”. There are no tools that reply, follow or send DMs: X forbids automating them.

Images by URL

The REST API and webhooks