Claude + iHatePosting

Post to social media from Claude

Connect Claude to iHatePosting and ask it to write, schedule and publish posts to 15 social networks. iHatePosting's hosted MCP server gives Claude 16 tools to create, reschedule and check posts, with you approving everything in one calendar. Setup takes about a minute and is included in the free 90-day trial.

  • Add it in one click — sign in to iHatePosting, no API key to create or paste
  • Draft, check against each network’s real limits, schedule or publish, by asking
  • Works on claude.ai and in the Claude desktop app

Nothing is published unless you ask for it in that message. No API key — you sign in and approve.

AI assistantsAnthropic

Claude cannot post to social media on its own — it has no access to your accounts. Connect iHatePosting and it can: text, images and video to 15 networks, published now or scheduled, from an ordinary chat.

How do I connect iHatePosting to Claude?

It takes about a minute. You can sign in and approve, or carry an API key instead — whichever you prefer.

  1. 1Step 1

    Add iHatePosting from Claude's connector directory

    Press Add to Claude on this page, or open https://claude.ai/directory/ihateposting yourself. Sign in to Claude, press Add, and approve the connection in iHatePosting. There is no API key to create, paste or keep.

  2. 2Step 2

    Ask it to post

    Tell Claude what you want to say and where. It saves a draft in iHatePosting unless you ask for the post to go out now or at a set time.

Advanced: use an API key

Create a key in Settings → Developers first. Open Customize, then Connectors, press + and choose Add custom connector, then paste the first URL below with YOUR_API_KEY replaced by your key. The second block is the desktop app's config-file route.

Claude (web/desktop)

On claude.ai or in the desktop app: Customize → Connectors, press + next to Connectors, choose Add custom connector, name it and paste this URL with YOUR_API_KEY replaced, then press Add. If it asks about authentication, choose No sign-in. Turn it on in a chat with + → Connectors. If the dialog shows a Request headers section, paste https://ihateposting.com/mcp without ?key= instead and add a header named authorization whose value is Bearer, a space and your key.

Claude (web/desktop)
https://ihateposting.com/mcp?key=YOUR_API_KEY&client=claude-web

Claude Desktop

The desktop app only: Settings → Developer → Edit Config opens claude_desktop_config.json. If the file is empty, paste this whole block. If it already has an mcpServers object, add only the ihateposting entry inside it. If it has other settings but no mcpServers, add the "mcpServers" part inside the file's outer braces, after the existing settings and a comma. Then fully quit Claude and open it again.

Claude Desktop
{
  "mcpServers": {
    "ihateposting": {
      "command": "npx",
      "args": [
        "-y",
        "ihateposting-mcp"
      ],
      "env": {
        "IHATEPOSTING_API_KEY": "YOUR_API_KEY",
        "IHATEPOSTING_CLIENT": "claude-desktop"
      }
    }
  }
}

Which one should you use?

Both reach the same account and the same tools — it is one server, and only the credential differs. What changes is what you hand over, and how you take it back.

WhatSign in (Add to Claude)API key
Where you add itThe button at the top of this page.Customize → Connectors → + → Add custom connector.
What you pasteNothing.A URL with your key inside it.
How it signs inYou sign in to iHatePosting and press Allow.The key in the link is the sign-in — choose No sign-in when Claude asks.
Tools you getAll 16.All 16 — the same server either way.
What Claude holdsA token for your account. It renews itself hourly, and the connection lasts as long as you use it at least every 90 days.The URL, key and all, stored in your Claude account and used from Anthropic’s servers.
Taking it backSettings → Developers → Connected apps → Disconnect. It closes that one app and nothing else.Create a new key. That switches off every older key at once — Zapier, your scripts, everything still using it.
In the desktop appAdd it by hand: paste https://ihateposting.com/mcp/oauth into Customize → Connectors → + → Add custom connector and choose the sign-in option. The button opens claude.ai, which signs in separately from the app.The same URL, or the config-file route below — the only way to keep the credential on your own machine.

Start with the button. Use a key when you want the credential in a config file on your own computer, or for a tool that cannot sign in.

What can I ask Claude to post?

The setup above is the hard part and it is done once. What follows is what to actually type — each prompt is real, and nothing here publishes anything unless the words say so.

1

Check it can see your accounts

30 seconds

Worth doing first. It proves the connector is live in this chat, and it gives you the account names to use in every prompt after it.

List my connected social accounts in iHatePosting.

What happens

  • Claude calls list_accounts and shows each connected profile with its network and handle.
  • Nothing back? The connector is added but not switched on for this chat — turn it on with + → Connectors.
  • If it answers from memory instead of calling the tool, say “use the iHatePosting tools” and ask again.

Running more than one account on a network? Copy the handle you want into later prompts — otherwise Claude has to stop and ask which one, every time.

2

Schedule a text post

1 minute

Nothing to upload, so Claude goes straight to writing it.

Schedule this to my LinkedIn and Bluesky for tomorrow at 9am: “Shipped the thing. Three months of nights and weekends, live today.”

What happens

  • It checks the text against each network’s limits before sending anything.
  • It creates one post for both networks at the time you named, in your account’s timezone.
  • At 9am each network publishes separately, and iHatePosting records the result for each — the live link, or the error the network actually gave.

Say “now” to publish immediately, or “save it as a draft” to review it first. Left alone it saves a draft: a post goes out because you asked in that message, not by default.

3

Post an image

1 minute

Give Claude a link that points straight at the file and it fetches the image into your library itself.

Upload the image at https://example.com/launch.png and schedule it to Instagram and LinkedIn for Friday at noon with the caption “Launch day.”

What happens

  • Claude calls upload_media with the URL. We download it, check it decodes, and add it to your library.
  • It attaches the image, writes the caption exactly as you gave it, and schedules the post.
  • A file that arrives incomplete is refused at upload rather than accepted and published broken.

A photo on your laptop has no link to give, and an image pasted into the chat does not reach us intact. Put it somewhere with a public URL first, or add it in the app and ask for the newest file in your library.

4

See what is scheduled, and what actually published

30 seconds

The two prompts worth using every week — the difference between trusting the tool and knowing.

What have I got scheduled this week, and did anything fail to publish?

What happens

  • Claude lists what is queued, with the time and network for each.
  • For anything already due, it reports the result per network — published, or the reason it was not.
  • A failed send can be retried, but check why first: a post marked failed can already be live, and retrying would publish it twice.

Ask “how did last month’s posts do?” for the numbers. Networks that report nothing are shown as unavailable rather than zero, so an empty column never reads as a bad post.

What is different about Claude

Every client reaches the same server, and then behaves like itself. These are the things that are true here and not somewhere else.

claude.ai and the desktop app share connectors: open Customize, then Connectors, press the plus button and choose Add custom connector. Paste the URL, and if the dialog asks about authentication, choose no sign-in — the key inside the URL is the sign-in.

The desktop app has a second route that keeps the key out of any URL: add iHatePosting to claude_desktop_config.json, which runs our server on your own machine and hands it the key as an environment variable. It needs Node.js installed, and it works in the desktop app only — not on claude.ai. Open Settings, then Developer, then Edit Config. If the file is empty, paste the whole block; if it already has an mcpServers object, add only the ihateposting entry inside it; if it has other settings but no mcpServers, add the "mcpServers" part inside the outer braces, after a comma. Never replace what is already there. Then fully quit Claude and open it again.

On Windows, if the server never appears after a restart, some installs read the config from a second copy under %LOCALAPPDATA%\Packages\Claude_*\LocalCache\Roaming\Claude\ — an open bug report, not a documented behaviour — so add the entry there too.

Treat the connector URL like a password. If it leaks, create a new key in iHatePosting — every older key stops working the moment a new one is made — then remove the connector and add it again with the new key in its URL. If you also use the config file, put the new key there too.

On Team and Enterprise plans only an Owner can add a custom connector — under Organization settings, then Connectors, then Add, Custom, Web — and members then press Connect under Customize, then Connectors. A key inside the URL is shared by every member, so everyone posts as the person whose key it is.

In Research mode Claude can call a connector's tools without asking. Before you start research, switch iHatePosting off for that chat, or set its write tools to Blocked under Customize, then Connectors.

Limits. Claude's Free plan allows one custom connector. The desktop config file needs the Claude desktop app on macOS 11 or later, Windows 10 or later, or Linux (beta: Ubuntu 22.04 or later, Debian 12 or later), plus Node.js 20 or later. On a Team or Enterprise computer an admin can switch local MCP servers off.

Anthropic's own documentation: Get started with custom connectors

Source on GitHub: github.com/iHatePostingOrg/agent-skill

Nothing goes out unless you say so

Every post Claude writes is saved as a draft in iHatePosting unless you ask for it to be published now or at a set time. Publishing, rescheduling, retrying and deleting are marked as actions that change things, so clients that honour those markings ask you before they run them. Deleting a post in iHatePosting never removes one that is already live on a network.

What is the iHatePosting MCP?

MCP — the Model Context Protocol — is the standard way an assistant plugs into an app it does not own. Our server exposes the accounts you have connected to Claude as tools, so it can draft, check and schedule without you opening a dashboard.

How Claude uses it

  • You add the connector once — by signing in, or with a key you create
  • Claude reads which accounts you have connected, and each network's rules
  • It writes a version per network and checks it against those rules before sending
  • It saves a draft, schedules it, or publishes — exactly as your message said
  • It works alongside whatever other tools Claude already has
tools Claude can call
# read and check (9)
whoami              list_accounts
list_posts          get_post
get_analytics       get_platform_rules
list_media          list_pinterest_boards
validate_post

# write (7)
create_post         update_post
reschedule_post     delete_post
retry_post          upload_media
open_upload_widget

Cost, access and what to do when it breaks

What does it cost?

The connector costs nothing on top of iHatePosting. iHatePosting has one plan: $15/month billed annually, or $19/month billed monthly, with unlimited social accounts. It is free for 90 days, no credit card needed, and everything is included during the trial: unlimited accounts, unlimited posts, every feature.

How is access secured?

Either you sign in to iHatePosting and approve access, or you create an API key in Settings → Developers. That page can show your key again whenever you need it. Whichever route you take, it reaches only the accounts you have already connected, and you can revoke it at any time without touching the accounts themselves.

Something not working?

  • It cannot see any accounts: connect them in iHatePosting first, then ask it to list them again.
  • You regenerated your key and it still fails: Regenerate revokes the old key the moment you press it, and a client that is already running keeps sending the old one until you genuinely restart it.
  • A post failed: open it in iHatePosting — the failure names the network and repeats what that network actually said.

Frequently asked questions

Does Claude ask before it posts?

Claude sorts a connector's tools into read-only and write, and for each you choose Always allow, Needs approval or Blocked. Every iHatePosting tool that publishes, reschedules, retries or deletes is marked as one that changes things, so in a normal chat Claude asks before running it unless you set it to Always allow. In Auto or Skip mode, and during Research, Claude can run it without asking — set a tool to Blocked if Claude must never use it.

Which route is safer, the connector or the config file?

The config file. Your key is stored only on your own computer, in claude_desktop_config.json; our server runs there too, gets the key as an environment variable, and sends it only to ihateposting.com in a request header. The connector is quicker, but its URL carries the key, and Claude keeps that URL in your account and connects with it from Anthropic's servers.

How do I get started in the Claude desktop app?

Post to social media from Claude Desktop by adding iHatePosting as a custom connector. Open Customize, then Connectors, press +, and choose Add custom connector. Paste https://ihateposting.com/mcp/oauth and choose the sign-in option. Then ask Claude to draft, schedule or publish your post. It saves a draft unless you ask for the post to go out now or at a set time.

Is the Claude connector free?

Yes. The connector costs nothing on top of iHatePosting, and iHatePosting is free for 90 days, no credit card needed. After that it is $15/month billed annually, or $19 month-to-month, with unlimited accounts.

Which networks can Claude post to?

Any account you have connected in iHatePosting, across 15 networks: Instagram, Facebook, LinkedIn, X, Threads, TikTok, YouTube, Pinterest, Bluesky, Mastodon, Telegram, Discord, Slack, Tumblr and Google Business Profile.

Can Claude schedule posts for a specific date and time?

Yes. Put the date and time in the prompt — for example "schedule this for Friday at 9:00 AM" — and Claude schedules the post for then. iHatePosting reads the time in your account's timezone, and you can ask Claude to move a scheduled post to a new time.

Claude vs Claude Code vs Claude Cowork: which page do you need?

Anthropic makes all 3, and iHatePosting works with each of them. This page is for Claude. Pick the one you actually type into — the setup differs, and the wrong page will have you pasting a key in a place that has no box for it.

One connection reaches every network

Connect your accounts in iHatePosting once. From then on Claude can post to any of them, and we publish at the time you set — even after you close the chat.

  • Bluesky
  • X
  • LinkedIn
  • Facebook
  • Instagram
  • Threads
  • Pinterest
  • TikTok
  • YouTube
  • Mastodon
  • Telegram
  • Discord
  • Tumblr
  • Google Business
  • Slack

Ready to post everywhere from Claude?

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

Sign Up