Devin Desktop is Cognition's editor, the new name for Windsurf, and once you connect iHatePosting its Devin Local agent can post to your social accounts. It reads MCP servers from mcp_config.json, so a url and an Authorization header are enough to reach our hosted server. Devin asks before it calls any of our tools, and what it writes is saved as a draft unless you ask for the post to go out now or at a set time.
How do I connect iHatePosting to Devin Desktop?
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 Devin Desktop
Add to ~/.config/devin/mcp_config.json. On Windows that is %APPDATA%\devin\mcp_config.json. Devin Desktop is the new name for Windsurf, and its Devin Local agent reads this file. On Linux the folder is lowercase devin: ~/.config/Devin, with a capital D, is the app's own folder. Working in a WSL, SSH or dev-container window? Edit the file on that remote machine. If you added iHatePosting to ~/.codeium/windsurf/mcp_config.json before, delete that entry: Devin still imports that file, and two entries can clash. On an older build that still uses the Cascade agent, paste the block into the file that Cascade's Open MCP config file opens, and rename url to serverUrl. Replace YOUR_API_KEY with your key.
Devin Desktop — connector{ "mcpServers": { "ihateposting": { "url": "https://ihateposting.com/mcp?client=windsurf", "headers": { "Authorization": "Bearer YOUR_API_KEY" } } } } - 3Step 3
Ask it to post
Tell Devin Desktop 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 Devin Desktop
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 ~/.config/devin/mcp_config.json to have it in every project. On Windows that file is %APPDATA%\devin\mcp_config.json. Devin uses mcpServers as the root key in every one of these files, and its field table marks url as the only required field for a remote server: transport defaults to http and headers is optional. The project file, .devin/mcp_config.json, is shared through version control, so your key does not belong in it — to keep your key out of a shared file, use .devin/mcp_config.local.json, which Devin gitignores.
Keep the field name url. Devin Local requires it, and the Cascade MCP page says an HTTP server requires a serverUrl or url field, so url is the one spelling that works on both. Cognition's changelog entry for 8 September 2026 reads: “Cascade has been removed. Devin Local is now the only agent available in Devin Desktop.” On a Cascade build from 2025, whose docs named only serverUrl, rename url to serverUrl.
Devin asks before it runs an iHatePosting tool. Its docs say the Devin Local agent prompts for approval before calling any MCP tool by default, and the prompt offers to allow that one tool or every tool on the server, for the session or permanently. To stop the prompts up front, add mcp__ihateposting__* to the allow list under permissions — that block lives in config.json, not mcp_config.json, at ~/.config/devin/config.json or .devin/config.json in a project.
Working in a WSL, SSH or dev-container window? Edit the file on that machine. Cognition's changelog entry for 10 August 2026 reads: “Codemaps and MCP configuration files now open from the remote machine when connected over WSL, SSH, or a dev container.”
See what Devin loaded under Open customizations, from the new-tab menu in an agent space or the right-click menu on a Devin Local session in the agent sidebar: it lists the rules, skills, hooks, MCP servers and plugins a session has. Appearing there does not prove your key works. Our server answers before it checks anything, so a wrong key shows up only when a tool runs, as iHatePosting API 401. Ask Devin to run whoami — it names the tool mcp__ihateposting__whoami — and it comes back with the account your key belongs to.
Use the Devin CLI for a one-command route, if you have it: it writes the same files Devin Local reads. Keep --scope user, because devin mcp add defaults to local, meaning this project only: devin mcp add --scope user --transport http --header "Authorization: Bearer YOUR_API_KEY" ihateposting https://ihateposting.com/mcp
Limits. Devin's pricing page lists Free, Pro, Max, Teams and Enterprise plans and names no MCP limit on any of them. Admins can restrict MCP, though: Cognition's local agent controls let an organisation set MCP servers, allowlisted MCP servers and MCP registry URLs for both Devin Desktop and the Devin CLI, enterprise-enforced rules take precedence over your own config, and an organisation's list replaces the root-level list rather than merging with it. Ask your admin to add our server address to the allowlist: https://ihateposting.com/mcp
Cognition's own documentation: MCP configuration in Devin
Nothing goes out unless you say so
Every post Devin Desktop 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 Devin Desktop as tools, so it can draft, check and schedule without you opening a dashboard.
How Devin Desktop uses it
- You add the connector once — by signing in, or with a key you create
- Devin Desktop 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 Devin Desktop 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?
In ~/.config/devin/mcp_config.json to have it in every project, or %APPDATA%\devin\mcp_config.json on Windows. If the file already exists, add the ihateposting entry inside its mcpServers object rather than pasting a second one. Devin uses mcpServers as the root key in every one of these files. Avoid the project file .devin/mcp_config.json while the block holds your key, because that file is shared through version control — .devin/mcp_config.local.json is the gitignored one.
Should I write url or serverUrl?
Write url. Devin's field table marks url as the only required field for a remote server, and the Cascade MCP page says an HTTP server requires a serverUrl or url field, so url works on both. Cascade was removed on 8 September 2026 and Devin Local is now the only agent in Devin Desktop. Rename url to serverUrl only on a Cascade build from 2025, whose docs named only serverUrl.
Why does Devin ask before every iHatePosting tool?
Because the Devin Local agent prompts for approval before calling any MCP tool by default. The prompt offers to allow that one tool or every tool on the server, for the session or permanently. To stop the prompts, add mcp__ihateposting__* to the allow list under permissions in config.json, which is a different file from mcp_config.json.
How do I check that my key works?
Ask Devin to run the whoami tool, which it names mcp__ihateposting__whoami. It returns the iHatePosting account your key belongs to. Seeing our server under Open customizations only means Devin read your config: our server answers even when the key is wrong, and every tool then returns iHatePosting API 401.
Is the Devin Desktop 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 Devin Desktop 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 Devin Desktop 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 Devin Desktop schedules the post for then. iHatePosting reads the time in your account's timezone, and you can ask Devin Desktop to move a scheduled post to a new time.
One connection reaches every network
Connect your accounts in iHatePosting once. From then on Devin Desktop 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 Devin Desktop?
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.