Public log

ihateposting-mcp

MCP server for iHatePosting — draft, schedule, and inspect social posts from Claude, Cursor, or any MCP client.

npm · fingerprint bfd1f894d25c324d8960366d · repository · RSS

17tools
3recorded versions
24dtracked
unchanged 10d

What changed

Changed 2026-10-20 11:37 UTC

1 schema or annotation change with the description left byte-identical.

--- pinned/update_post
+++ observed/update_post
  {
    "annotations": {
      "destructiveHint": true,
-         "description": "'draft' keeps it unscheduled, 'schedule' needs the date and time below, 'now' publishes to a real audience.",
+         "description": "To edit a post and KEEP it going out, send 'schedule' with scheduledDate and scheduledTime below — get_post's `scheduledLocal.date` and `scheduledLocal.time`, sent back unchanged. 'draft' TAKES A POST OFF ITS SCHEDULE: it is refused for a post that is already scheduled, and it is the right answer only for one that is already a draft. 'now' publishes to a real audience at once.",
          "enum": [
            "draft",
            "schedule",

Changed 2026-10-18 11:02 UTC

1 description rewritten.

--- pinned/reschedule_post
+++ observed/reschedule_post
  {
    "annotations": {
      "destructiveHint": true,
-   "description": "Move a SCHEDULED post to a different date and time. ONE SEND AT A TIME: a scheduled post going to several accounts is stored as one post per send, so this moves just that platform and leaves the others where they are (an older row can still carry several platforms, and moves them together). A draft is refused: schedule a draft with update_post with action 'schedule', which checks each platform first and gives each its own post. Takes the post id from list_posts, plus scheduledDate (YYYY-MM-DD) and scheduledTime (e.g. '9:00 AM') read in the ACCOUNT OWNER'S timezone (`ownerTimezone` from whoami), not yours or the user's device. A post's `scheduledAt` is UTC (it ends in Z) — never copy its digits as a time; work from `scheduledLocal` (the owner's date and time) that list_posts and get_post give beside it, so 'an hour later' is an hour later. The reply's `scheduledLocal` is where the post now is. A post that has already published cannot be moved — its time is a record of what happened — and one that is publishing right now is refused until it finishes.",
+   "description": "Move a SCHEDULED post to a different date and time. ONE SEND AT A TIME: a scheduled post going to several accounts is stored as one post per send, so this moves just that platform and leaves the others where they are (an older row can still carry several platforms, and moves them together). A draft is refused: schedule a draft with update_post with action 'schedule', which checks each platform first and gives each its own post. Takes the post id from list_posts, plus scheduledDate (YYYY-MM-DD) and scheduledTime (e.g. '9:00 AM') read in the ACCOUNT OWNER'S timezone (`ownerTimezone` from whoami), not yours or the user's device. A post's `scheduledAt` is UTC (it ends in Z) — never copy its digits as a time; work from `scheduledLocal` (the owner's date and time) that list_posts and get_post give beside it, so 'an hour later' is an hour later. The reply's `scheduledLocal` is where the post now is. A post that has already published cannot be moved — its time is a record of what happened — and one that is publishing right now is refused until it finishes. A FAILED post is not rescheduled either: there is no upcoming slot to move, and moving it would not re-send it. Send it again with retry_post, which re-queues only the sends that failed; reschedule_post is for a post that is still scheduled. Check `status` from list_posts before calling this — on 2026-10-15 one agent called it on ten failed posts in a minute and was refused ten times.",
    "inputSchema": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {

Current tools

Show all 17 tool fingerprints
create_post
518b7ab1a9379715
delete_post
a2d345caeaf13f6a
get_analytics
e6e285db10cc7cf1
get_platform_rules
d1326b50c659c063
get_post
6a372e3799323ace
get_upload_ticket
e123c1667aa7677d
list_accounts
1cc23ff613343910
list_media
c33f797762fb6839
list_pinterest_boards
fb503aaac9105ac3
list_posts
96fe69abe8cd4abf
open_upload_widget
dbf721c360668388
reschedule_post
ced3534bf95b02b9
retry_post
f32846de8159657d
update_post
25082d916897dfba
upload_media
c2809860674e8c79
validate_post
e85ded0f894267f2
whoami
5f84afd9c00787d9

Watch this server yourself

If you run this server, put the proxy in front of it. It pins these exact fingerprints on first connect and stops the session if they move.

npx -y mcp-pin@0.2.3 -- <your ihateposting-mcp command>

Or subscribe to this page's RSS feed to be told when it changes.

Badge

mcp-pin status badge for ihateposting-mcp

The badge states one fact about time and nothing else. It never claims a server is safe.

[![mcp-pin](https://mcp-pin.gautamkhosla.com/badge/3d8465a51fd819a9.svg)](https://mcp-pin.gautamkhosla.com/servers/3d8465a51fd819a9.html)