Kilo Code is an open source AI coding agent that runs as an extension in VS Code and JetBrains and as the Kilo CLI, and once you connect iHatePosting it can post to your social accounts. Add iHatePosting under the mcp key in your Kilo config and the agent can list your connected accounts, check a post against each network's rules, schedule it, and read back how it did. Every post it writes stays a draft unless you ask for it to go out now or at a set time.
How do I connect iHatePosting to Kilo Code?
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 Kilo Code
Add to ~/.config/kilo/kilo.jsonc, under its mcp key. The global file keeps your key out of your repository. ./kilo.jsonc works for one project, but do not commit it with the key inside. Replace YOUR_API_KEY with your key.
Kilo Code — connector{ "mcp": { "ihateposting": { "type": "remote", "url": "https://ihateposting.com/mcp?client=kilo", "enabled": true, "headers": { "Authorization": "Bearer YOUR_API_KEY" } } } } - 3Step 3
Ask it to post
Tell Kilo Code 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 Kilo Code
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 entry in your main Kilo config file, not in a separate MCP file. The global file is ~/.config/kilo/kilo.jsonc and applies to all projects; on Windows that file is C:\Users\<username>\.config\kilo\kilo.jsonc, a .config folder in your home folder rather than AppData. A project can use kilo.jsonc in its root or .kilo/kilo.jsonc, and Kilo's docs say project-level configuration takes precedence over global configuration. Kilo's Settings page says all clients — the CLI, VS Code and JetBrains — read the same files, so you add it once. The extension's Settings, Agent Behaviour tab, MCP Servers sub-tab writes to those same files.
The root key is mcp and the kind is type: remote. Kilo's docs still show a second shape, mcpServers with alwaysAllow and disabled, under their SSE example. Kilo marks the SSE transport deprecated as of MCP specification version 2025-03-26, and the current shape is the mcp key with type: remote, so use that one. Kilo tries Streamable HTTP first and falls back to SSE, and our server is Streamable HTTP, so the first attempt is the one that connects.
Kilo caches project config when it first loads a workspace and does not re-read it on every prompt, so reload the VS Code window or start a fresh CLI session after editing one. Kilo documents this for a project permission rule, in kilo.jsonc or kilo.json in .kilo/. In VS Code, Kilo reloads global config in ~/.config/kilo/ on its own. In the CLI, restart after editing — Kilo's CLI page says to restart the CLI after editing provider, model, permission and MCP settings in that file. The CLI also has /reload, which re-reads the project from disk including config, and Kilo refuses it while any session in the project is running, so finish or abort that session first. Inside the CLI, /mcps toggles servers on or off.
To keep your key out of the file, write "Authorization": "Bearer {env:IHATEPOSTING_API_KEY}" and set that variable in your environment. Kilo's placeholder is {env:VARIABLE_NAME} — curly braces, no dollar sign. There is a command route as well: kilo mcp add ihateposting --url https://ihateposting.com/mcp --header "Authorization=Bearer YOUR_API_KEY" — the header is written as KEY=VALUE, with an equals sign rather than a colon.
MCP tools go through Kilo's ordinary permission system, which takes allow, ask or deny. Each tool's permission key is its namespaced name, {server}_{tool}, so with the server named ihateposting the keys are ihateposting_create_post, ihateposting_whoami and the rest, and ihateposting_* covers them all. Kilo's Agent Permissions page says rules are evaluated in config order and the last matching rule wins, so write the broad rule first: "ihateposting_*": "allow" and then "ihateposting_create_post": "ask" keeps approval on publishing. Kilo's own MCP example lists the specific key before the wildcard; in that order the wildcard wins and posts go out without asking.
A wrong key does not stop the server connecting. Our endpoint forwards your key to the API rather than checking it, so Kilo starts the server and kilo mcp list reports no error, and then every tool answers with the API's 401 as text. Ask Kilo to run whoami: it returns the iHatePosting login and account name your key belongs to, which is the check that proves the key rather than the address.
Limits. No Kilo plan gates MCP: Kilo Code runs as an open source extension in VS Code and JetBrains, and the paid plans gate other things — Teams adds centralised billing and team management, Enterprise adds model and provider limits, audit logs and SSO. Neither lists MCP servers. There is no organisation allowlist to ask an admin about either — Kilo's own page on enterprise MCP controls is marked a proposal, with no matching implementation yet. One setting does stop the tools: in a session running Kilo's sandbox with network access restricted, local and remote MCP tool calls are unavailable although the connection itself stays up. The sandbox is off by default (sandbox.enabled defaults to false), and Windows users are not shown the Sandboxing tab because there is no Windows backend for it.
Kilo Code's own documentation: Using MCP in Kilo Code
Nothing goes out unless you say so
Every post Kilo Code 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 Kilo Code as tools, so it can draft, check and schedule without you opening a dashboard.
How Kilo Code uses it
- You add the connector once — by signing in, or with a key you create
- Kilo Code 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 Kilo Code 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 entry go?
Under the mcp key in your main Kilo config file: ~/.config/kilo/kilo.jsonc for every project, or kilo.jsonc in a project root or .kilo/kilo.jsonc for one. On Windows the global file is C:\Users\<username>\.config\kilo\kilo.jsonc. Project configuration takes precedence over global, and Kilo's Settings page says the CLI, VS Code and JetBrains read the same files, so you add it once.
I edited the file and nothing changed. Why?
Kilo caches project config when it first loads the workspace and does not re-read it on every prompt, so reload the VS Code window or start a fresh CLI session. In VS Code the global file in ~/.config/kilo/ is reloaded on its own; in the CLI, restart after editing it. The CLI's /reload re-reads the project from disk, but Kilo refuses it while any session in the project is running.
Every tool answers iHatePosting API 401. What is wrong?
Your key is wrong or has been replaced. Our server answers without checking the key, so Kilo starts the server and kilo mcp list reports no error, and the failure only shows up in the tool output. Create a new key in Settings, Developers, write it into the file, then ask Kilo to run whoami — it names the iHatePosting login and account name the key belongs to.
Can I stop the agent publishing without asking?
Yes. MCP tools use Kilo's permission keys, {server}_{tool}, with the values allow, ask and deny. Set "ihateposting_*": "allow" first and "ihateposting_create_post": "ask" after it, because Kilo's Agent Permissions page says the last matching rule wins. Kilo's own MCP example puts the specific key before the wildcard, and in that order the wildcard approves publishing.
Is the Kilo Code 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 Kilo Code 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 Kilo Code 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 Kilo Code schedules the post for then. iHatePosting reads the time in your account's timezone, and you can ask Kilo Code to move a scheduled post to a new time.
One connection reaches every network
Connect your accounts in iHatePosting once. From then on Kilo Code 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 Kilo Code?
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.