Post to social media from Kilo Code
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.
Set it up
1. Create an iHatePosting API key
Sign in, open Settings → Developers and create a key. It starts with pk_live_ and is shown in full only once, so copy it before you leave the page.
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.
{ "mcp": { "ihateposting": { "type": "remote", "url": "https://ihateposting.com/mcp", "enabled": true, "headers": { "Authorization": "Bearer YOUR_API_KEY" } } } }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
- 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.
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.
Ready to post everywhere from Kilo Code?
Start your 90-day free trial — no credit card, about a minute to your first post.
Sign Up