Integrations & automation

Post to social media from your AI agent

Updated September 16, 20266 min read

Your agent can already write the post. What it usually cannot do is send it — so you copy the text out, open a scheduler, pick the accounts, and set a time by hand. iHatePosting speaks the Model Context Protocol, so any MCP client can do that part itself: check what a platform will accept, attach a picture, schedule it, and tell you afterwards how it did.

What MCP actually is

The Model Context Protocol is a standard way for an AI agent to borrow tools from another program. You point your agent at a server, it discovers what that server can do, and those abilities become things it can use in conversation. There is no plugin to build and nothing to keep updated — the agent asks the server what it offers each time it connects.

iHatePosting runs one over HTTPS, so most clients need a URL and an API key and nothing else. Claude, Claude Cowork, Cursor and Grok Build can also be added by signing in, with no key to carry — Claude in one click from its connector directory. There is also an npm package for the handful of clients that spawn a local process instead.

What your agent can do once it is connected

  • See which accounts you have connected, and which of them are healthy.
  • Ask what each network will accept before writing anything — character limits, whether a picture is required, which options are mandatory.
  • Check a draft against every platform you plan to send it to, without creating anything.
  • Upload an image or video, or reuse one already in your library.
  • Create a post as a draft, schedule it for a date and time, or publish it now.
  • Read a post back, rewrite it, move it to a different time, or delete it.
  • Retry a send that failed, without touching the ones that worked.
  • Read how the posts performed — per network, with the top ones named.
A post created by an agent is an ordinary post. It appears on your calendar, obeys the same platform rules, and can be edited or cancelled in the app like any other.

Set it up

  1. Create an API key

    In iHatePosting, open Settings → Developers and create a key. You can show it again from that screen whenever you need it. Using Claude? Skip this — add iHatePosting from https://claude.ai/directory/ihateposting instead, sign in, and there is no key at all. Cursor and Grok Build can sign in without a key too; their pages under /ai-agents show how.

  2. Pick your client

    The same screen has a ready-made config block for each client below. Choose yours and copy it.

  3. Paste it into that client's config file

    The table below says which file, and the block itself carries the key.

  4. Restart the client

    Most read their MCP config at startup. Your agent should then be able to list your connected accounts.

  5. Ask it to check before it posts

    A good first instruction is “list my accounts, then validate this post for the ones I named” — it will tell you what each network makes of it before anything is created.

Where each client keeps its MCP config

Clients agree on the protocol and on very little else. These are the files they actually read, and the key each one nests its servers under — worth checking against your own client, because a block pasted into the right file under the wrong key fails silently.

ClientConfig fileRoot key
Claude Code~/.claude.json (written by: claude mcp add --transport http --scope user)mcpServers
Claude Desktopclaude_desktop_config.jsonmcpServers
Claude (web)One click from claude.ai/directory/ihateposting (no key), or Customize → Connectors—
ChatGPTDeveloper mode, then chatgpt.com/plugins → +—
DotsConnected in ChatGPT, under Plugins — a dot shares it—
Cursor~/.cursor/mcp.jsonmcpServers
VS Code / Copilot.vscode/mcp.jsonservers
Cline~/.cline/data/settings/cline_mcp_settings.jsonmcpServers
Windsurf / Devin Desktop~/.config/devin/mcp_config.jsonmcpServers (with url)
Zed~/.config/zed/settings.jsoncontext_servers
Hermes Agent~/.hermes/config.yaml (YAML)mcp_servers
OpenClaw~/.openclaw/openclaw.jsonmcp.servers
Kilo Code~/.config/kilo/kilo.jsoncmcp
OpenHands CLI~/.openhands/mcp.jsonmcpServers
Codex~/.codex/config.toml (TOML)mcp_servers
Gemini CLI~/.gemini/settings.jsonmcpServers
AmpAmp settings.jsonamp.mcpServers
omp~/.omp/agent/mcp.json or .omp/mcp.jsonmcpServers
Freebuff CLI~/.agents/mcp.json or .agents/mcp.jsonmcpServers
DeepSeek Harness~/.dsh/profiles/web/cordis.patch.yml (YAML)insert (an item in a top-level YAML list)
WarpSettings → Agents → MCP servers → + Add—
Grok Build~/.grok/config.toml (TOML), or run: grok mcp add --transport httpmcp_servers
Antigravity CLI~/.gemini/config/mcp_config.jsonmcpServers (with serverUrl)
NanoClawrun: ncl groups config add-mcp-server—
Kimi Code~/.kimi-code/mcp.jsonmcpServers
PerplexityAccount settings → Connectors—
PaperclipConnectors → Connect your own tool—
Musea message asking Muse to build the connector—

Two things that catch people out

Transport names differ. The same connection is called streamable-http by one client, streamableHttp by another and plain http by a third, and one or two default to the older SSE transport if you do not say otherwise — which this server does not serve. Where that matters, the config block in Settings already sets it.

Times are read in your account's timezone, not your computer's. If you tell an agent “schedule this for nine in the morning”, nine means nine where your iHatePosting profile says you are. Set that under Settings → Scheduling before you let an agent book anything.

Frequently asked questions

Do I need a paid plan to use the MCP server?

No. The API, the MCP server and webhooks are on every plan. You only need an API key, which you create in Settings → Developers.

Can an agent publish without asking me?

Only if you tell it to. Creating a post defaults to a draft, and publishing immediately is a separate, explicit instruction. Most clients also ask you to approve a tool the first time it is used.

What happens if the agent writes something a platform will not accept?

It is told before anything is created. The same checks the publisher runs seconds before it posts are available to the agent up front — so it learns that X counts a post as 600 of 280 characters, or that a Pin needs a board, while it can still fix it.

Can an agent see my other accounts, or anyone else's data?

No. An API key is scoped to the one iHatePosting account that created it. Every request is checked against that account, and anything belonging to another user simply is not there.

What if my client only supports a local process, not a URL?

Use the npm package instead — npx ihateposting-mcp, with your key in the IHATEPOSTING_API_KEY environment variable. Settings → Developers gives you that block too.

Can I stop an agent using my account later?

Yes, and how depends on the route. For an agent using a key: regenerate it in Settings → Developers — the old one stops working immediately, everywhere it was configured. For one you added by signing in there is no key to regenerate, so a new key changes nothing: open Settings → Developers → Connected apps and press Disconnect, which closes that one agent and leaves the rest alone.

Ready to post everywhere in one click?

Start your 90-day free trial — no credit card, about a minute to your first post.

Sign Up

Keep reading