iHatePosting
iHatePosting is a social media scheduler.
What it can do
- Whoami: Who the API key belongs to: the iHatePosting login (email and account name). Use this for any question about who the user is or which account is connected. This is NOT a social media handle —
- Get Platform Rules: What each platform will and will not accept: character limit, whether media is required, how many images, video formats and length, and which per-platform options are MANDATORY (e.
- Validate Post: Check a post against every platform you plan to send it to, WITHOUT creating anything. Runs the same checks the publisher runs seconds before it posts, so the answer is what will really
What data it sees
Do you need an account
An API key from the service settings is required
iHatePosting is a social media scheduler. This MCP server lets Claude, ChatGPT, Cursor or any MCP client draft, check and schedule posts to the social accounts you connect in iHatePosting.
Tools
whoami: which iHatePosting account the API key belongs toget_platform_rules: each network's limits for characters, media, aspect ratios and video specsvalidate_post: check a draft against those rules before postingcreate_post: publish now, schedule, or save as a draftlist_posts: your 50 most recent posts with per-platform status and live URLslist_accounts: your connected social accounts and their health
Setup: create an API key in iHatePosting under Settings > API & MCP, and enter it as key when you connect.
Website: https://ihateposting.com
How to connect
How to connect iHatePosting to Claude
The server address to paste into Claude settings:
https://social-media-scheduler--ihateposting.run.tools
- Open Claude (claude.ai or the desktop app).
- Go to Settings → Connectors.
- Click Add custom connector.
- Paste the server address copied below into Remote MCP server URL and click Add.
- In a chat, click + → Connectors and switch the new connector on.
Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.
Authorization
After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.
How to connect iHatePosting to ChatGPT
The server address to paste into ChatGPT settings:
https://social-media-scheduler--ihateposting.run.tools
- Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
- Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
- Open Settings → Connectors and click Create.
- Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
- Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
- In a new chat open + → Apps/Connectors and enable the connector.
OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.
Authorization
On first use ChatGPT opens the service's sign-in window. Sign in and approve access.
How to connect iHatePosting to Cursor
The server address to paste into Cursor settings:
https://social-media-scheduler--ihateposting.run.tools
Fastest: click Open in Cursor below and confirm the prompt.
Manually:
- In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
- Paste the JSON copied below into
~/.cursor/mcp.json(per project:.cursor/mcp.jsonin the repo root). - Save the file. The server appears in the MCP list; authorize it there if asked.
Authorization
If the service needs sign-in, an authorize button appears next to the server in the MCP list.
Server tool list (6)
Raw names from tools/list. Only developers need these.
| whoami | Who the API key belongs to: the iHatePosting login (email and account name). Use this for any question about who the user is or which account is connected. This is NOT a social media handle — the handles from list_accounts belong to the connected profiles, which may carry other people's names. |
| get_platform_rules | What each platform will and will not accept: character limit, whether media is required, how many images, video formats and length, and which per-platform options are MANDATORY (e.g. Pinterest needs a board, YouTube needs a title). Call this BEFORE writing a post — it is the difference between composing something that publishes and something the platform rejects. |
| validate_post | Check a post against every platform you plan to send it to, WITHOUT creating anything. Runs the same checks the publisher runs seconds before it posts, so the answer is what will really happen — 'X counts this as 1200/280 characters', 'YouTube needs a title', 'TikTok slideshows take JPEG or WebP photos'. Free to call as often as you like; use it before create_post rather than discovering a problem after the post is spent. |
| create_post | Create a social post on iHatePosting. action 'draft' saves it (the default, and the safe choice); 'schedule' needs scheduledDate (YYYY-MM-DD) + scheduledTime (e.g. '9:00 AM', in the account owner's timezone); 'now' publishes immediately to a real audience. Platforms with requirements — Pinterest a board, YouTube a title, TikTok and Instagram media — are set through `options` and `mediaIds`; call get_platform_rules for what each one needs, and validate_post to check before you commit. |
| list_posts | List the 50 most recent iHatePosting posts with per-platform status (draft/scheduled/published/failed) and live URLs. |
| list_accounts | List the connected social accounts (platform, handle, health) available for posting. The response also names the iHatePosting account the API key belongs to — if the accounts listed are not the ones you expect, check that `account.email` is the right person before assuming anything is missing. |