Amp + iHatePosting

Post to social media from Amp

Connect Amp to iHatePosting and ask it to write, schedule and publish posts to 15 social networks. iHatePosting's hosted MCP server gives Amp 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.

  • Post to any connected network without leaving Amp
  • Schedule and publish from the terminal or an orb
  • One key revokes access to everything at once

Nothing is published unless you ask for it in that message.

Coding agents and editorsAmp

Amp is a coding agent that reads MCP servers from amp.mcpServers in its settings file, and it can post through iHatePosting once you add that block. Amp can then list your connected accounts, check a post against each network's rules, schedule it and publish it. Threads that run in an orb never read that file, and the route that keeps your key out of your repository is a remote MCP definition, added in your MCP server settings on ampcode.com.

How do I connect iHatePosting to Amp?

It takes about a minute. Nothing here needs a download, and the only thing you carry between the two apps is a key you can revoke whenever you like.

  1. 1Step 1

    Create an iHatePosting API key

    Sign in, open Settings → Developers and create a key. It starts with pk_live_, and the same page can show it again whenever you need it.

  2. 2Step 2

    Add iHatePosting to Amp

    Add to your Amp user settings: ~/.config/amp/settings.json on macOS, Linux and WSL, or %USERPROFILE%\.config\amp\settings.json on Windows. The command amp config edit opens it. Do not use the project's .amp/settings.json — it sits in your repository, so your key could be committed with it. This file covers only threads that run on your own machine: the amp CLI and your runners. For threads that run in an orb (ampcode.com and the Mac and iOS apps), add the server at ampcode.com/settings/mcp-servers instead — click Add MCP Server, enter https://ihateposting.com/mcp as the address, choose bearer-token authentication and paste your key. There is a command for that too: save your key on its own in a file named ihateposting-key.txt, then run amp mcp remote --personal add ihateposting https://ihateposting.com/mcp --auth bearer --bearer-token-file ihateposting-key.txt. Replace YOUR_API_KEY with your key.

    Amp — connector
    {
      "amp.mcpServers": {
        "ihateposting": {
          "url": "https://ihateposting.com/mcp?client=amp",
          "headers": {
            "Authorization": "Bearer YOUR_API_KEY"
          }
        }
      }
    }
  3. 3Step 3

    Ask it to post

    Tell Amp 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.

What can I ask Amp 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

Post a release announcement

1 min

You just shipped a new version. Ask Amp to turn the changelog entry into a short post, check it against the character limits for each platform, and schedule it for tomorrow morning.

Write a social post announcing the v2.1 release based on CHANGELOG.md, check it against my iHatePosting accounts' platform rules, and schedule it for tomorrow at 9 AM.

What happens

  • Amp reads CHANGELOG.md and drafts a post sized for each network
  • It calls get_platform_rules to confirm character and media limits
  • It calls validate_post to catch anything the networks would reject
  • It schedules the post and gives you the iHatePosting post ID to track it

Nothing goes live until the scheduled time. You can open the post in iHatePosting and edit it if the wording needs adjusting.

2

List what is already scheduled

30 sec

Check what posts are queued before you add another, so you do not stack two announcements on the same day.

Show me everything scheduled in iHatePosting for the next seven days.

What happens

  • Amp calls list_posts with a date filter and returns each post's title, platform targets and scheduled time
  • Nothing is changed — list_posts is a read-only call
3

Retry a failed post

1 min

A post came back with a platform error. Find out what went wrong and send it again once the problem is fixed.

Get the details on post abc123 and retry it if the failure reason is a temporary network error.

What happens

  • Amp calls get_post to read the failure reason the network returned
  • If the error is transient (rate limit, server timeout) it calls retry_post
  • If the error needs a content fix — caption too long, missing alt text — it tells you what to change before retrying

Amp will not retry a post whose failure requires your input without asking you first, because retry_post is marked as a write action.

4

Draft a thread from a pull request

2 min

Turn a merged pull request into a short explainer thread for the accounts that benefit from technical content.

Summarise PR #512 as a three-post thread explaining what changed and why, save it as a draft in iHatePosting targeting my Twitter and LinkedIn accounts.

What happens

  • Amp reads the PR description and diff to extract the key changes
  • It calls list_accounts to confirm which accounts are connected
  • It drafts three posts sized for each platform's limits
  • It calls create_post with status draft — nothing is scheduled or published yet
  • It returns the draft ID so you can review and schedule from the iHatePosting dashboard

What is different about Amp

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

Amp keeps MCP servers under its own key, amp.mcpServers, not the bare mcpServers root the other editors read. The file is your user settings, and Amp reads settings.json or settings.jsonc at that path. Run amp config edit to open it in your $EDITOR.

Leave out the type line other tools ask for. Amp's settings schema gives a URL server four fields — url, headers, transport and oauth — requires only url and allows no other key, so a type line fails validation in an editor that reads the schema. Put "$schema": "https://ampcode.com/cli-settings.schema.json" at the top of the file and editors that support JSON Schema validate the block and complete the field names as you type.

Keep your key out of .amp/settings.json, the workspace file that sits in your repository. Amp treats servers there as untrusted: "MCP servers in workspace settings (.amp/settings.json) require explicit approval before they can run". One waiting for approval shows as awaiting approval in amp mcp doctor, and amp mcp approve ihateposting clears it. A server in your user settings needs no approval, but if the same name is in both files the workspace one wins.

Threads that run in an orb cannot see the settings file on your machine — the Mac and iOS apps are in that group, because "the agent runs in an orb and not on your device". For those, add iHatePosting in your MCP server settings on ampcode.com, or run amp mcp remote --personal add ihateposting https://ihateposting.com/mcp --auth bearer --bearer-token-file ihateposting-key.txt in your terminal. Every amp mcp remote command needs a scope, and --personal is the one in that command. Amp will not take the token as a command argument, so give it a file, or - as the path to read the key from standard input.

A wrong key still looks like a working connection. iHatePosting lists its tools to anyone who asks, so Amp shows the server and its tools even with no key at all, and only the call comes back with iHatePosting API 401. Ask Amp to run the whoami tool: it answers with the iHatePosting login and account name your key belongs to. For a remote definition, amp mcp remote --personal check ihateposting shows whether Amp can reach the server, not whether your key works.

Amp expands ${VAR_NAME} in amp.mcpServers entries, headers included — its own example sends "Authorization": "token ${SRC_ACCESS_TOKEN}". A runner started with --amp-env adds the Secrets and Env Vars you keep on ampcode.com to the environment of the shell commands and the stdio MCP servers a thread runs. For orbs, Amp's MCP page tells you to pass tokens in headers using variables from secrets settings.

Limits. MCP is not behind a plan. Amp's pricing page gives the free Hobby tier "All product features", and says paid tiers "include agent usage, orb usage, and every Amp product feature". Enterprise workspace admins can enforce an MCP registry so that only approved MCP servers are available to workspace members, and "If the registry is unreachable, all MCP servers are blocked". Separately, amp.mcpPermissions allows or blocks MCP servers by pattern and matches a remote server by its url, and Enterprise managed settings use the same amp. keys. To see what your workspace manages, open the CLI command palette with Ctrl+O and run settings: show managed.

Amp's own documentation: MCP in Amp

Nothing goes out unless you say so

Every post Amp 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 Amp as tools, so it can draft, check and schedule without you opening a dashboard.

How Amp uses it

  • You add the connector once — by signing in, or with a key you create
  • Amp 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 Amp already has
tools Amp 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

Where does the iHatePosting block go?

In your Amp user settings, under amp.mcpServers. Run amp config edit to open the file, which can be settings.json or settings.jsonc. Keep it out of the project's .amp/settings.json, which sits in your repository and would carry your key with it, and which needs amp mcp approve before a server there runs.

Why does Amp show the tools but every call answers iHatePosting API 401?

Your key is wrong or has been replaced. iHatePosting lists its tools to anyone who asks, so the server looks connected either way and only the call fails. Create a new key in Settings → Developers, write it into the Authorization header, and ask Amp to run whoami to confirm which account it reaches.

Can Amp use iHatePosting in an orb?

Not from the settings file on your machine — an orb runs its own Amp executor elsewhere, and the Mac and iOS apps work that way too. Add iHatePosting in your MCP server settings on ampcode.com, or run amp mcp remote --personal add ihateposting https://ihateposting.com/mcp --auth bearer --bearer-token-file ihateposting-key.txt in your terminal. Every amp mcp remote command needs a scope, and --personal is the one there.

Do I need the type line that other tools use?

No. Amp's settings schema gives a URL server url, headers, transport and oauth, requires only url and allows no other key, so a type line fails validation in an editor that reads the schema.

Will Amp publish posts without asking me?

Only if your prompt explicitly says to publish now or schedule at a time. create_post, update_post, reschedule_post, retry_post and delete_post are all marked as write actions in the MCP server, so clients that honour those markings — Amp included — surface a confirmation before running them. Drafts never publish on their own.

Can I use iHatePosting from a CI runner that uses Amp?

Yes. Start the runner with --amp-env and add your iHatePosting API key to Amp's Secrets on ampcode.com under the variable name you reference in the Authorization header. The runner adds those secrets to the environment of stdio MCP servers, so iHatePosting gets the key without it appearing in your repository or your logs.

What social networks can I post to through Amp?

Any network you have already connected in iHatePosting — which covers 15 networks: Instagram, Facebook, LinkedIn, X, Threads, TikTok, YouTube, Pinterest, Bluesky, Mastodon, Telegram, Discord, Slack, Tumblr and Google Business Profile. Amp calls list_accounts to see which of those are live for your login, so it never tries to post to an account you have not connected.

Is the Amp 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.

Can Amp 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 Amp schedules the post for then. iHatePosting reads the time in your account's timezone, and you can ask Amp to move a scheduled post to a new time.

One connection reaches every network

Connect your accounts in iHatePosting once. From then on Amp 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 Amp?

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

Sign Up