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. 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. It is shown once — copy it then.

  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 Coderun: claude mcp add --transport http
Claude Desktopclaude_desktop_config.jsonmcpServers
Claude (web)Customize → Connectors
ChatGPTSettings → Connectors
Cursor~/.cursor/mcp.jsonmcpServers
VS Code / Copilot.vscode/mcp.jsonservers
Cline~/.cline/data/settings/cline_mcp_settings.jsonmcpServers
Windsurf~/.codeium/windsurf/mcp_config.jsonmcpServers
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~/.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~/.agents/mcp.json or .agents/mcp.jsonmcpServers
DeepSeek Harness~/.dsh/profiles/web/cordis.patch.yml (YAML)a Cordis plugin patch
WarpSettings → MCP Servers → Add
HighLevelWorkflow → AI Agent → Add Tools → MCP

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 the key later?

Yes. Regenerate the key in Settings → Developers — the old one stops working immediately, everywhere it was configured.

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