Zed + iHatePosting

Post to social media from Zed

Connect Zed to iHatePosting and ask it to write, schedule and publish posts to 15 social networks. iHatePosting's hosted MCP server gives Zed 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 iHatePosting to Zed's context_servers block in settings.json, and Zed's agent can draft, check and schedule posts to 15 networks. Free 90-day trial.

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

Coding agents and editorsZed Industries

Zed is a code editor with an AI agent built in, and once you connect iHatePosting that agent can write and schedule your social posts. Zed calls MCP servers context servers, and a remote one is two fields in your settings file: a url and an Authorization header. Ask the agent to write a post about the change you have shipped, check it against each network's rules and schedule it.

How do I connect iHatePosting to Zed?

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 Zed

    Add to ~/.config/zed/settings.json, inside its existing top-level object. On Windows that file is %APPDATA%\Zed\settings.json. The zed: open settings file command opens it. You can also use Settings → AI → MCP Servers → Add Server → Add Remote Server: name it ihateposting, paste the URL, and under Headers add Authorization with the value Bearer followed by your key. Replace YOUR_API_KEY with your key.

    Zed — connector
    {
      "context_servers": {
        "ihateposting": {
          "url": "https://ihateposting.com/mcp?client=zed",
          "headers": {
            "Authorization": "Bearer YOUR_API_KEY"
          }
        }
      }
    }
  3. 3Step 3

    Ask it to post

    Tell Zed 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 is different about Zed

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

Zed calls MCP servers context servers, so the block goes under context_servers, not mcpServers. Open the file with zed: open settings file from the command palette and paste the entry inside the existing top-level object — two top-level objects in one file is not valid JSON. You can also add it under Settings → AI → MCP Servers with Add Server, then Add Remote Server; Zed's docs say that route writes the entry into that same settings file.

Keep the Authorization header. Zed's docs say that when a remote MCP server has no configured Authorization header, Zed sends you through the standard MCP OAuth flow. Our key address takes the key in the header instead, and publishes no OAuth metadata for that path, so there is nothing for that flow to find. Without the header our server has no key to forward, and a tool call answers that no key was sent.

A green dot is not a working key. Zed's check is Settings → AI → MCP Servers, where a running server shows a green indicator whose tooltip says Server is active. Our endpoint answers the tool list without any credential, so it goes green even when the key is wrong, and only the tool calls fail, with the text iHatePosting API 401. Ask Zed which iHatePosting account it is using — the whoami tool returns the login your key belongs to. If it is not yours, create a new key in Settings → Developers.

Zed asks before each tool call. From Zed v0.224.0 approval is controlled by agent.tool_permissions.default, which is confirm and prompts before any tool action, including MCP tool calls. To let one of ours run without the prompt, add "mcp:ihateposting:create_post" under agent.tool_permissions.tools in the same settings file, with "default": "allow" — the ihateposting part is the name you gave the entry under context_servers, so change it there and the key changes with it.

Pattern rules will mostly miss. Zed's docs say pattern-based rules match against an empty string for MCP tools, so the default key on the per-tool entry is the primary mechanism for them. The permission prompt agrees — Zed's docs say MCP tools only support the tool-level option, so you are not offered Always for <pattern>.

Put the entry in your user settings, not in the project. Zed opens every folder in Restricted Mode, which stops a project's .zed/settings.json from installing and spawning MCP servers until you trust that folder — an untrusted folder shows an exclamation mark in the title bar. Servers installed globally are started as usual, independent of worktree trust, so a user-settings entry works in any folder and keeps your key out of your repository.

Limits. Zed's plan table lists no MCP row: every plan, Free included, has AI via your own API keys, and only Zed-hosted models are reserved for Pro, Student and Business. Zed Business admin controls cover collaboration, hosted models, edit predictions and feedback; the Admin Controls page lists no control over MCP servers, and says the controls do not cover third-party extensions, External Agents or Terminal Threads.

Zed Industries's own documentation: Model Context Protocol in Zed

Nothing goes out unless you say so

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

How Zed uses it

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

Under context_servers in your Zed settings file. Run zed: open settings file from the command palette and add the entry inside the existing top-level object. The route through the interface is Settings → AI → MCP Servers, then Add Server and Add Remote Server, which Zed's docs say writes the entry into that same settings file.

The dot next to the server is green, so why does nothing post?

Green means the server answered, not that your key is right. Our endpoint answers the tool list without any credential, so a wrong key shows the same green dot and only the tool calls fail, with the text iHatePosting API 401. Ask Zed which iHatePosting account it is using: the whoami tool returns the login your key belongs to. Create a fresh key in Settings → Developers if it is not yours.

Why does Zed ask me before every post?

Tool approval is set to confirm by default from Zed v0.224.0, for any tool action including MCP tool calls. To stop the prompt for one tool, add "mcp:ihateposting:create_post" under agent.tool_permissions.tools in the same settings file, with "default": "allow". Pattern rules will mostly miss, because Zed's docs say pattern-based rules match against an empty string for MCP tools.

Do I have to trust the folder first?

Not for an entry in your own settings file. Restricted Mode holds back a project's .zed/settings.json until you trust that folder, while globally configured MCP servers start as usual. Trust only comes into it if you put the entry in .zed/settings.json inside a project, which also puts your key in your repository.

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

One connection reaches every network

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

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

Sign Up