Hermes Agent is Nous Research's open-source terminal agent, and once you connect iHatePosting it can post to social media from the chat. It reads MCP servers from one YAML file, so a short block in config.yaml hands it our hosted server. What it writes stays a draft unless you ask for the post to go out now or at a set time.
How do I connect iHatePosting to Hermes Agent?
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.
- 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.
- 2Step 2
Add iHatePosting to Hermes Agent
Add to ~/.hermes/config.yaml, under mcp_servers. On native Windows that file is %LOCALAPPDATA%\hermes\config.yaml, and if you use a Hermes profile, hermes config edit opens that profile's file. If the file already has an mcp_servers line, add only the ihateposting block under it — a second mcp_servers line replaces the first. Then type /reload-mcp in any Hermes chat you already have open. You can set it up from a terminal instead, with the command at the end of this note: answer Y when it asks whether the server needs authentication, paste your key (never leave it empty), press Enter to enable all its tools, then type /reload-mcp or start a new chat. If it says MCP_IHATEPOSTING_API_KEY is already configured, it is reusing a key saved earlier in the .env file next to config.yaml — change that line there if the key is old or wrong. The command to run is: hermes mcp add ihateposting --url https://ihateposting.com/mcp (it asks for your key) Replace YOUR_API_KEY with your key.
Hermes Agent — connectormcp_servers: ihateposting: url: "https://ihateposting.com/mcp?client=hermes" headers: Authorization: "Bearer YOUR_API_KEY" - 3Step 3
Ask it to post
Tell Hermes Agent 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 Hermes Agent
Every client reaches the same server, and then behaves like itself. These are the things that are true here and not somewhere else.
Put the block in ~/.hermes/config.yaml, under mcp_servers. On native Windows the Hermes home is %LOCALAPPDATA%\hermes\, so the file is %LOCALAPPDATA%\hermes\config.yaml, with .env beside it and the logs in logs\ inside the same folder. A named profile keeps its own tree, so the file is ~/.hermes/profiles/<name>/config.yaml, and HERMES_HOME moves the whole tree. Run hermes config path when you are not sure which file Hermes is reading.
config.yaml is YAML, not JSON. If the file already has an mcp_servers line, put the ihateposting entry under that line rather than starting a second one.
There is no transport or type field to set here. Hermes reads the shape of the entry — url for a remote server, command for a local one — so url and headers are the whole entry for ours. Its reference also allows enabled, timeout, connect_timeout, and tools.include or tools.exclude to narrow which tools load.
There is a one-command route: hermes mcp add ihateposting --url https://ihateposting.com/mcp — it asks "Does this server require authentication?", takes your key at an "API key / Bearer token" prompt, saves it in the .env next to config.yaml as MCP_IHATEPOSTING_API_KEY, and writes an Authorization header into config.yaml that reads Bearer ${MCP_IHATEPOSTING_API_KEY}. It then asks whether to enable all the tools, offering [Y/n/select], where Enter takes all of them. Run it a second time on the same name and it asks whether to overwrite, and the default is no.
If your key lives in that variable rather than in config.yaml, check the variable really is set. Hermes's own reference says an unset variable keeps its literal placeholder, so ${MCP_IHATEPOSTING_API_KEY} is sent as your key and every tool answers iHatePosting API 401. Look in both places it can be set: the .env beside config.yaml, and the environment Hermes runs in. The add command saves your key to .env before it tries the connection, so a failed attempt can leave the key behind, and when it reports MCP_IHATEPOSTING_API_KEY: already configured it is reusing a key saved earlier — change that line in .env when the key is old or wrong. A key written into the headers line cannot go unset.
Type /reload-mcp in a chat you already have open after editing the file, because Hermes registers MCP servers at start-up; the command route ends by telling you to start a new session instead. Run hermes mcp test ihateposting to check that Hermes reaches the address — it passes even when the key is wrong. The start-up summary in the agent log, which hermes logs opens for you, counts the servers that failed to connect and names the reason in brackets, and ours fails there only over the address or the network. Our server lists its tools to anyone who asks, so none of that proves the key: Hermes prefixes our tools as mcp_ihateposting_, so ask it to run mcp_ihateposting_whoami, which names the iHatePosting account your key belongs to.
Limits. Hermes Agent is open source, and its documentation puts no plan or subscription on MCP. A Nous Portal subscription is the recommended way to run it, not a requirement — the docs point to other model providers as alternatives. Windows 10 and 11 are supported natively and MCP servers work there; the one native-Windows gap the docs list is the dashboard's embedded terminal pane, which needs a POSIX PTY.
Nous Research's own documentation: MCP in Hermes Agent
Nothing goes out unless you say so
Every post Hermes Agent 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 Hermes Agent as tools, so it can draft, check and schedule without you opening a dashboard.
How Hermes Agent uses it
- You add the connector once — by signing in, or with a key you create
- Hermes Agent 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 Hermes Agent already has
# 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_widgetCost, 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 ~/.hermes/config.yaml, under mcp_servers. On native Windows the Hermes home is %LOCALAPPDATA%\hermes\, so the file is %LOCALAPPDATA%\hermes\config.yaml. A named profile keeps its own tree, so the file is ~/.hermes/profiles/<name>/config.yaml, and HERMES_HOME moves the whole tree. Run hermes config path to see the file Hermes is reading.
Do I have to restart Hermes after editing the file?
No. Type /reload-mcp in a chat you already have open, which refreshes the servers and the tool list. Hermes registers MCP servers at start-up, so a session opened before the edit sees nothing until you reload it or start a new one.
Why does every tool answer iHatePosting API 401?
The key is wrong or has been replaced, or the header points at ${MCP_IHATEPOSTING_API_KEY} and that variable is not set, either in the .env beside config.yaml or in the environment Hermes runs in — Hermes sends an unset variable as its literal placeholder, which our server reads as a wrong key. Ask Hermes to run mcp_ihateposting_whoami, which names the account your key belongs to, and create a new key in Settings → Developers. hermes mcp test passes even when the key is wrong.
How do I check the key works, not only the address?
Our server lists its tools to anyone who asks, so a connection, hermes mcp test and the start-up count in the agent log all prove the address rather than the key. Ask Hermes to run mcp_ihateposting_whoami, which names the iHatePosting account your key belongs to; a wrong key comes back as iHatePosting API 401.
Is the Hermes Agent 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 Hermes Agent 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 Hermes Agent 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 Hermes Agent schedules the post for then. iHatePosting reads the time in your account's timezone, and you can ask Hermes Agent to move a scheduled post to a new time.
One connection reaches every network
Connect your accounts in iHatePosting once. From then on Hermes Agent can post to any of them, and we publish at the time you set — even after you close the chat.
- Bluesky
- X
- Threads
- TikTok
- YouTube
- Mastodon
- Telegram
- Discord
- Tumblr
- Google Business
- Slack
Ready to post everywhere from Hermes Agent?
Start your 90-day free trial — no credit card, about a minute to your first post.
Sign UpOther AI agents
New to this? Read how to post to social media from an AI agent, or see iHatePosting pricing: unlimited accounts for $15/month, billed annually.