Codex + iHatePosting

Post to social media from Codex

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

Connect iHatePosting to OpenAI Codex in config.toml, with the key in an environment variable, and post to 15 networks from the CLI or IDE. Free 90-day trial.

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

Coding agents and editorsOpenAI

Codex reads iHatePosting from its config.toml, and its entry names the environment variable that holds your key instead of taking the key itself — so the file never holds your secret. The same entry works in the Codex CLI, the IDE extension and the ChatGPT desktop app.

How do I connect iHatePosting to Codex?

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 Codex

    Add to the end of ~/.codex/config.toml. Your key does not go in this file.

    Codex — connector
    # ~/.codex/config.toml — add this at the end of the file.
    
    # Put the line IHATEPOSTING_API_KEY=pk_live_… in ~/.codex/.env, then restart Codex.
    # The CLI, the IDE extension and the ChatGPT desktop app read that file at startup.
    [mcp_servers.ihateposting]
    url = "https://ihateposting.com/mcp?client=codex"
    bearer_token_env_var = "IHATEPOSTING_API_KEY"
  3. 3Step 3

    Ask it to post

    Tell Codex 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 Codex

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

bearer_token_env_var names the variable that holds your key; Codex reads it when it starts the server and sends it as a Bearer token. The simplest place for it is a line IHATEPOSTING_API_KEY=pk_live_… in ~/.codex/.env, which the CLI, the IDE extension and the ChatGPT desktop app load at startup; restart Codex after you change it. For the CLI you can instead export the variable in the shell you start Codex from, but a Codex background server that is already running keeps its old environment (codex app-server daemon restart reloads it). If the variable is missing or empty, Codex does not start this server and says so.

There is no type setting in Codex's config — a url is what makes the entry a Streamable HTTP server.

A project-level .codex/config.toml is read only in projects you have marked as trusted; the file in your home folder works everywhere.

config.toml also holds your other Codex settings and MCP servers, so add this block at the end of the existing file rather than replacing it. Lines under a [section] header belong to that section, so pasting it at the top would swallow the settings below it. If you already have an [mcp_servers.ihateposting] block, replace that block instead of adding a second one.

OpenAI's own documentation: Codex MCP configuration

Nothing goes out unless you say so

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

How Codex uses it

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

Not in config.toml. bearer_token_env_var names the variable that holds the key. The simplest place for it is a line IHATEPOSTING_API_KEY=pk_live_… in ~/.codex/.env, which the Codex CLI, the IDE extension and the ChatGPT desktop app load at startup. Restart Codex after you change it.

Why doesn't Codex start the iHatePosting server?

If the variable is missing or empty, Codex does not start this server and says so. A Codex background server that was already running keeps its old environment; codex app-server daemon restart reloads it.

Can I put the entry in a project's .codex/config.toml?

Yes, but Codex reads a project-level file only in projects you have marked as trusted. The config.toml in your home folder works everywhere.

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

Codex vs Dots vs ChatGPT: which page do you need?

OpenAI makes all 3, and iHatePosting works with each of them. This page is for Codex. 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 Codex 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 Codex?

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

Sign Up