mcpField
I
iHatePosting

iHatePosting

远程服务
ihateposting.com社交媒体14 天前更新

关于 iHatePosting

iHatePosting 让 Agent 通过 ihateposting.com 已连接的账号管理社交媒体帖子,支持在 14 个网络上起草、校验、排期、发布、处理媒体和查看分析。帖子默认保存为草稿;Agent 使用 iHatePosting 账号登录,无需提供 API 密钥。

主要功能

  1. 01起草、校验、排期和发布帖子
  2. 02覆盖 14 个社交网络
  3. 03按网络设置文本和选项
  4. 04上传或复用媒体
  5. 05管理现有帖子及失败项
  6. 06查看频道分析

适用场景

  1. 01为多个网络准备并检查帖子
  2. 02在社交账号间排期发布活动内容
  3. 03重试失败发布或修改草稿
  4. 04按频道查看帖子表现

MCP 相关

托管的 iHatePosting MCP 服务为已连接的社交账号提供帖子管理、媒体和分析工具。支持的 Agent 配置通过 iHatePosting 账号进行身份验证;README 也提到部分手动配置使用 API 密钥。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://ihateposting.com/mcp/oauth
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

全部服务地址
Streamable HTTPhttps://ihateposting.com/mcp/oauth
Streamable HTTPhttps://ihateposting.com/api/mcp需要授权
安装包
npmihateposting-mcp0.12.6

工具

详细介绍

iHatePosting

ihateposting.com

面向 AI Agent 的 iHatePosting

让 Claude、Claude Code、Cursor、Gemini CLI、Grok Build、Kimi Code 或 Qwen Code 在你通过 ihateposting.com 连接的账号上,为 14 个社交网络撰写、检查、安排并发布帖子。此 软件包为每个 Agent 提供托管的 iHatePosting MCP 服务(16 个工具),以及一项教它安全发布内容的技能。这里的每个 Agent 都使用你的 iHatePosting 账号登录;无需 API 密钥。

VS Code 中的 GitHub Copilot 使用相同的托管服务: 在 VS Code 中安装, 然后在浏览器中使用你的 iHatePosting 账号登录。无需粘贴 API 密钥。相关步骤见安装。

各 Agent 的设置页面: Claude · Claude Code · Claude Cowork · ChatGPT · Codex · Cursor · Gemini CLI · Grok Build · VS Code 和 GitHub Copilot · OpenClaw · Hermes Agent · DeepSeek Harness · Perplexity Computer · Muse · NanoClaw · Paperclip · Antigravity CLI · Amp · Cline · Kilo Code · Zed · Warp · Devin Desktop · OpenHands CLI · Freebuff CLI · omp · 全部

其中一些页面需要手动添加服务,并使用 API 密钥;对于 Claude、 Claude Code、Cursor、Gemini CLI、Grok Build、Kimi Code 和 Qwen Code,本仓库中的 插件会代为登录(安装)。

许可证:MIT npm:ihateposting-mcp npm:ihateposting

M8ven:持续验证

未经你的确认,内容绝不会发布。 新帖子会保存为草稿,除非你要求立即发布或安排在指定时间发布。

Agent 可以做什么

  • 起草、安排或发布一条帖子,同时发布到多个社交网络;可以发布到你在某个网络上的所有账号,也可以发布到你选择的一个账号。像“上午 9:00”这样的时间,会按 iHatePosting 设置(Settings → Scheduling)中设定的时区解读,而不是按你电脑的时区。
  • 在帖子尚未创建前检查它。 validate_post 会运行发布器发布前执行的检查,但不会创建任何内容。它还会告知你某个网络没有已连接的账号,或有账号需要重新连接。
  • 了解每个网络的规则:字符数限制、媒体规则,以及网络要求的选项,例如 Pinterest 看板。
  • 针对不同网络撰写内容:为某个网络单独撰写不同文本,并设置该网络专属的选项。这包括 X、Bluesky、Threads 和 Mastodon 上的串帖,Instagram、LinkedIn 和 Threads 上的首条评论,Instagram Reels、快拍和轮播帖子,Facebook Reels 和快拍,TikTok 图片帖子和隐私设置,以及 YouTube 视频的标题、隐私设置和播放列表。
  • 附加媒体:上传带替代文本的图片或短视频,或重复使用媒体库中的现有内容。
  • 管理现有内容:查看各网络上的发布情况,重写草稿、已安排或失败的帖子,将帖子改到其他时间,只重新发送失败的部分,或删除帖子。
  • 查看报告:按渠道查看数据、关注者数量、发布时间和热门帖子,范围从过去 7 天到所有已记录数据。

每个套餐都包含 MCP 服务、REST API 和 CLI 使用的 API 密钥。所有套餐也都提供 Webhook。

工具

托管服务提供以下 16 个工具,另有一个供上传框自行使用的工具。最后一列说明工具对你的帖子和账号会产生什么影响。

工具功能影响
whoami显示此连接所代表的 iHatePosting 登录身份(电子邮件和账号名称),以及登录方式是账号登录还是使用密钥;不显示社交媒体账号名读取
list_accounts列出已连接的社交账号及其平台、账号名、状态和 ID读取
get_platform_rules列出各网络的字符数限制、媒体规则、视频格式和时长,以及所有可用选项及其允许值读取
validate_post根据你指定的每个网络检查帖子,不会创建任何内容读取
create_post创建帖子:默认创建草稿,也可按要求选择 now 或 schedule创建;使用 now 或 schedule 时发布
list_posts列出帖子及其在各网络上的状态和在线 URL——可按 status 和 from/to 计划日期范围筛选,使用 cursor 翻页,并读取 total 获取实际数量读取
get_post查看一篇帖子的完整信息:正文、各网络的副本和选项、媒体,以及每次发送的结果或错误读取
update_post用你提供的内容替换草稿、已安排或发送失败的帖子修改;使用 now 或 schedule 时发布
reschedule_post将已安排的帖子改到新的日期和时间;草稿无法使用此工具在新时间发布
retry_post仅在一个或所有网络上重新发送失败的内容发布
delete_post删除 iHatePosting 中的帖子记录;已发布的帖子需要使用 force删除;不会撤回已发布的帖子
list_media按时间倒序列出你的媒体库及帖子所附媒体的 ID读取
upload_media向媒体库添加图片或视频并返回其 ID——通过 url 上传(首选;最大 100 MB,图片最大 25 MB),或使用 base64 上传(最大 8 MB)创建媒体库文件
open_upload_widget在对话中显示文件选择器,让用户从自己的设备上传文件创建媒体库文件
get_upload_ticket内部工具——上传框自行调用此工具以获取一次性上传凭证。已注册为 visibility: ["app"],因此宿主会对模型隐藏它,Agent 不会调用此工具发放短期有效凭证
list_pinterest_boards列出你可以发布图钉的 Pinterest 看板及其所需的看板 ID读取
get_analytics查看你选择的时间范围内,各个已连接渠道上的帖子表现读取

网络

全部 14 个网络都使用相同的工具。在 platforms 中指定一个网络 (bluesky、x、linkedin、facebook、threads、mastodon、telegram、 discord、tumblr、slack、instagram、pinterest、tiktok、youtube), 或传入 list_accounts 返回的账号 ID。

网络文本上限媒体必须设置还支持
Bluesky300最多 4 张图片;视频多帖串、替代文本
X280,按权重计算(链接计 23)最多 4 张图片;视频多帖串、回复设置
LinkedIn3,000最多 20 张图片;视频公司主页和个人资料、首条评论
Facebook63,000最多 10 张图片;视频公共主页、Reels、Stories
Instagram2,200必须:最多 10 张图片或视频Reels、Stories、轮播、首条评论、协作者、标记的账号
Threads500最多 20 张图片或视频多帖串、轮播、首条评论
Pinterest800必须:一张图片或一个视频一个画板Pin 标题和目标链接
TikTok2,200必须:一个视频,或照片(此处每篇最多 20 张)隐私设置、发送到 TikTok 收件箱、AI 生成标签、评论、合拍和拼接设置
YouTube5,000(说明)必须:一个视频标题,以及是否面向儿童隐私设置、播放列表、标签、类别、自定义缩略图
Mastodon500最多 4 张图片;视频多帖串、可见性、替代文本
Telegram4,096(作为媒体说明时为 1,024)最多 10 张图片;视频
Discord2,000最多 10 张图片;视频
Tumblr4,096每篇最多 20 张图片;视频标题、标签
Slack3,000最多 5 张图片;视频

如果不填写这些内容,create_post 会将文本的首行用作 YouTube 标题和 Pinterest Pin 标题,将文本中的第一个 URL 用作 Pinterest 链接,并将文本中的话题标签用作 YouTube 和 Tumblr 标签。validate_post 不会自动填写,因此会将缺少 YouTube 标题报告为问题。

各网络支持的内容及其主要选项见 docs/platforms.md。帖子可能需要的选项键及其取值和默认值,见技能按需加载的参考文档 (skills/ihateposting/references/platform-options.md)。 无论网络允许多少媒体,每篇帖子最多可附加 20 个媒体项。

示例提示词

  • “本周安排发布什么内容?有没有发布失败的?”
  • “将这则公告分别改写成适用于 LinkedIn、Bluesky 和 X 的版本。给 X 写一个更短的版本,并在保存前检查这三个版本。”
  • “把这些笔记整理成适用于 X 和 Threads 的帖子串,并保存为草稿。”
  • “上传这张照片并添加替代文本,再用它起草一篇 Instagram 帖子。把话题标签放在首条评论中。”
  • “我的哪个 Pinterest 画板适合这份食谱?起草一个 Pin 并发布到该画板。”
  • “昨天的 LinkedIn 帖子为什么发布失败了?”
  • “过去 30 天我的帖子表现如何?哪个网络表现最好?”

examples/ 中提供了可直接使用的 create_post 载荷,适用于帖子串、 Reels、轮播、YouTube、Pinterest、TikTok 等。所有内容都是草稿。

安装

下面列出的每个 Agent 都会在浏览器中引导你登录 iHatePosting 账号。 它们都不需要 API 密钥。

Agent安装方式连接方式
Claude(claude.ai、桌面应用、Cowork)在付费 Claude 计划中选择 Customize → Plugins,并将此仓库添加为市场在浏览器中登录
Claude Code从此仓库的市场运行 /plugin install在浏览器中登录
Cursor上架后从 Cursor Marketplace 安装、本地副本,或使用 ~/.cursor/mcp.json在浏览器中登录
VS Code with GitHub Copilot使用 Install in VS Code 链接,或配置 .vscode/mcp.json在浏览器中登录
Gemini CLI运行 gemini extensions install在浏览器中登录
Grok Build运行 grok plugin install ... --trust在浏览器中登录
Kimi Code在 Kimi Code 中运行 /plugins install在浏览器中登录
Qwen Code运行 qwen extensions install在浏览器中登录
任何可读取技能的 Agent运行 npx skills add(仅安装技能)按照该 Agent 页面上的说明连接服务
ChatGPT 等使用各自的 MCP 设置请参阅设置指南
Claude(claude.ai、桌面应用、Cowork)

在 Customize → Plugins 中,选择 Add → Add marketplace,输入 https://github.com/iHatePostingOrg/agent-skill,然后安装 iHatePosting。 接着打开插件的 Connectors 标签页并连接 iHatePosting:登录你的 iHatePosting 账户,然后点击 Allow。无需粘贴密钥。

已经从 Claude 的目录添加了 iHatePosting 连接器?该插件使用相同的 地址,因此你只会获得一组工具,而不是两组。

插件需要付费 Claude 计划(Pro、Max、Team 或 Enterprise)。使用 Free 计划时,请改为从 Claude 的连接器目录添加 iHatePosting:登录方式相同, 提供的工具也相同,只是不包含此插件的技能。

Claude Code
/plugin marketplace add iHatePostingOrg/agent-skill
/plugin install ihateposting@ihateposting

然后运行 /mcp,选择 iHatePosting 服务并选择 Authenticate。此时会打开 浏览器窗口:登录你的 iHatePosting 账户,然后点击 Allow。无需粘贴密钥。

  • 已经手动添加 iHatePosting? 使用 claude mcp remove ihateposting 删除该条目,否则每个工具都会出现两次。
  • 从 0.3.x 版本升级? 早期版本要求提供 API 密钥。更新后,按上述说明 在 /mcp 中完成一次身份验证;该插件不再发送密钥。
Cursor

插件上架到 Cursor Marketplace 后,在 Cursor 侧边栏中打开 Customize, 找到 iHatePosting 并选择 Install,即可为单个项目或所有项目安装。 Cursor 会在浏览器中引导你登录 iHatePosting 账户;点击 Allow。Cursor 团队中的每个人都使用自己的账户登录,因此不会有人通过他人的账户发帖。 如果你的 Cursor Enterprise 计划启用了 MCP 允许列表,请允许 https://ihateposting.com/mcp/oauth。

在插件上架前,请安装本地副本。将此仓库克隆或复制到 ~/.cursor/plugins/local/ihateposting(Windows 上为 %USERPROFILE%\.cursor\plugins\local\ihateposting)。Cursor 会跳过指向其他 文件夹的符号链接,因此请复制文件。然后重启 Cursor 或运行 Developer: Reload Window,并在 Customize 下确认已列出 iHatePosting 技能和 MCP 服务。在 Teams 和 Enterprise 计划中,管理员可通过 Allow Local Plugin Imports 控制此功能;该选项在 Enterprise 中默认关闭。 安装 Marketplace 版本后,将使用该版本,而非本地副本。

如果你已经在 ~/.cursor/mcp.json 中手动添加了服务,请在安装插件时删除该 条目,以免出现两个 iHatePosting 服务。

若要仅手动添加服务,请将以下内容放入 ~/.cursor/mcp.json 并重启 Cursor:

{
  "mcpServers": {
    "ihateposting": {
      "type": "http",
      "url": "https://ihateposting.com/mcp/oauth"
    }
  }
}

然后打开 Customize,再打开 MCPs,启用 iHatePosting 并点击 Connect 以登录。

以下是相同配置的一键链接:

``` cursor://anysphere.cursor-deeplink/mcp/install?name=ihateposting&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vaWhhdGVwb3N0aW5nLmNvbS9tY3Avb2F1dGgifQ== ```
VS Code 与 GitHub Copilot

选择 在 VS Code 中安装 (或 VS Code Insiders), 或者将服务添加到项目中的 .vscode/mcp.json:

{
  "servers": {
    "ihateposting": {
      "type": "http",
      "url": "https://ihateposting.com/mcp/oauth"
    }
  }
}

VS Code 文件使用 servers 作为顶层键,而不是像大多数其他编辑器那样使用 mcpServers,因此从 Cursor 配置中复制的代码块无法加载。该文件不包含机密信息,可以安全地提交。

服务首次启动时,VS Code 会提示你登录。浏览器窗口将打开:登录你的 iHatePosting 账户,然后按 Allow。无需粘贴密钥。接着在 Agent 模式下打开 Copilot Chat,iHatePosting 工具会显示在工具列表中,然后让它起草一篇帖子。

如果使用 Copilot Business 或 Enterprise,你所在组织的管理员可能需要先在 Copilot 策略中允许 MCP 服务。

Gemini CLI
gemini extensions install https://github.com/iHatePostingOrg/agent-skill

无需 API 密钥。下次启动 Gemini CLI 时,它会连接到服务并打开浏览器:登录 iHatePosting,然后按 Allow。它会将令牌保存在 ~/.gemini/mcp-oauth-tokens.json 中,并根据需要刷新令牌。之后需要重新登录时,使用 /mcp auth ihateposting。

Gemini CLI 本来也无法从请求头中读取我们的密钥:它会根据经过清理的环境变量展开 MCP 请求头中的 ${...},并将名称包含 KEY、TOKEN、SECRET 或 AUTH 的变量清空,因此使用我们的密钥变量构建的请求头会变成空值,每次调用都会失败,而 Google 的文档对此也没有任何警告。登录可以避免这个问题,而不是设法绕过它。

该扩展使用 url 和 type: "http",这是 Gemini CLI 0.21 及更高版本识别为 Streamable HTTP 的形式。

Grok Build
grok plugin install iHatePostingOrg/agent-skill --trust

在信任插件之前,插件的 MCP 服务会保持关闭状态,而 --trust 的作用就是信任插件。然后启动 grok,打开 /mcps,选择 ihateposting 并按 i:Grok Build 会打开浏览器,登录你的 iHatePosting 账户,然后按 Allow。登录后,工具便会显示。之后需要重新登录时,重复上述步骤即可。

Kimi Code

在 Kimi Code 中:

/plugins install https://github.com/iHatePostingOrg/agent-skill

Kimi Code 会安装此仓库的最新版本,并读取其 .kimi-plugin/plugin.json,以添加服务和技能。当服务首次提示需要登录时,Kimi Code 会提供一个 authenticate 步骤:批准后,浏览器会打开;登录 iHatePosting,然后按 Allow。你也可以运行 /mcp 查看服务名称,然后使用该名称运行 /mcp-config login。无需粘贴密钥。Kimi Code 会将令牌保存在 ~/.kimi-code/credentials/mcp/ 下。

Kimi Code 的清单会直接写明服务名称,而不是放在单独的文件中,并将 transport 设置为 http(Streamable HTTP)。此信息来自 Kimi Code 的源代码(版本 2.1.1);尚未在 Kimi Code 本身中运行验证。

Qwen Code
qwen extensions install iHatePostingOrg/agent-skill:ihateposting

然后在 Qwen Code 中打开 /mcp,选择 iHatePosting 并选择 Authenticate。浏览器窗口会打开:登录你的 iHatePosting 账户,然后按 Allow。无需粘贴密钥。Qwen Code 会将令牌保存在 ~/.qwen/mcp-oauth-tokens.json 中,并根据需要刷新令牌;之后需要重新登录时,在同一位置选择 Re-authenticate。

末尾的 `:ihateposting` 是插件名称,因此 Qwen Code 不会询问要安装哪个插件。它会读取此仓库自带的 `qwen-extension.json`,该文件会添加服务和技能。该文件设置的是 `httpUrl`,而不是 `url`,因为 Qwen Code 会将单独的 `url` 读取为较旧的 SSE 传输方式,而此服务不支持该方式。
其他 Agent

ChatGPT、Codex、OpenClaw、Hermes Agent、 DeepSeek Harness、Perplexity Computer、Zed、Cline 等都可以连接到同一服务,无需此软件包。每种 Agent 都有相应的设置页面(见本 README 顶部的列表),而 设置指南 涵盖了所有这些 Agent。

OpenClaw 的文档称,它会将带有 .cursor-plugin/ 文件夹的软件包视为 Cursor 捆绑包,因此预计在 OpenClaw 中安装此仓库不会添加 MCP 服务。请改用 OpenClaw 页面上的 MCP 配置方式。

任何可读取技能的 Agent

此技能列在 skills.sh 上,因此可读取技能的 Agent 可以从那里获取:

npx skills add https://github.com/ihatepostingorg/agent-skill --skill ihateposting

这只会复制技能,不会连接 iHatePosting 服务:请按照 Agent 设置页面中的说明连接服务。此技能通过服务的工具运行;ihateposting 命令行 (下文)是一个独立工具,拥有自己的说明(ihateposting skill --print)。

获取 API 密钥

上述 Agent 均不需要 API 密钥。密钥适用于 ihateposting 命令行、本地 npm 服务、REST API,以及无法登录的 Agent。

请在 ihateposting.com 登录,打开 Settings → Developers 并创建密钥。密钥以 pk_live_ 开头,之后可以在同一页面再次查看(2026 年 9 月下旬之前创建的密钥无法再次查看;页面会对此进行说明,重新生成即可获得可再次查看的密钥)。每个账户只有一个密钥: 重新生成会使旧密钥在所有使用它的地方失效。密钥可以代表你发布内容,因此请勿将其放在聊天中、截图里或共享文件中。

安全

  • 默认保存为草稿。 create_post 会保存为草稿,除非传入 action: "now"(立即发布)或 action: "schedule"(在指定时间 发布)。除非另有说明,CLI 也会保存为草稿。REST API 没有默认行为: 未传入 action 的请求会被拒绝。
  • 有问题的帖子在保存前会被拒绝。 创建或更新准备发布的帖子时, 系统会根据帖子面向的每个网络进行检查;如果任一网络会拒绝该帖子, 系统就会拒绝该帖子,并说明相应网络给出的原因。草稿会跳过此检查, 因此尚未完成的帖子也可以保存。发布器会在发送前再次检查每个帖子, 并跳过检查未通过的帖子。
  • 每个帖子的选项名称和值都会经过检查,包括草稿。 如果网络不读取 某个键(例如,ytMadeForKids 对应的 madeForKids),或不接受某个 值,系统会拒绝该帖子,并提示正确的名称或值,而不会保存后忽略这些 设置。
  • 使用 update_post 为草稿安排发布时间。 reschedule_post 会拒绝 草稿。使用 action: "schedule" 调用 update_post 时,会执行创建时 的检查,并像 create_post 一样按账号拆分帖子。
  • 时间会以两种形式返回。 scheduledAt 使用 UTC;旁边的 scheduledLocal 表示同一时刻在账号所有者时区中的时间, whoami 会将该时区列为 ownerTimezone。未使用 action: "schedule" 却传入日期,或传入不存在的日期,都会被拒绝。
  • 已安排发布时间的帖子不能再改回草稿。 update_post 会拒绝此操作。 请删除该帖子,并将其重新创建为草稿。
  • 面向多个网络安排发布时间的帖子会被拆分。 当 create_post 或 update_post 为多个账号安排或发布帖子时,帖子会拆分为每个账号对应 一条,并共享同一个组 ID;create_post 的响应会列出每条帖子。草稿 不会拆分,仍是一条帖子。拆分后,reschedule_post 和 delete_post 每次只会操作其中一条;update_post 可以修改某条帖子的文本、选项和 媒体,但必须传入该帖自身的 accountIds——添加或替换账号会被拒绝。
  • 删除不会撤回已发布的帖子。 delete_post 只会删除 iHatePosting 的记录。除非设置了 force,否则已发布的帖子会被拒绝删除;该帖子 仍会在网络上保持发布状态。正在发布的帖子无法删除。
  • 重试只会重新发送失败的内容。 已成功发布的内容会保持不变。网络 可能会报告失败,但帖子实际上已经上线,因此重试前请先检查该网络。
  • 审批提示取决于 Agent。 在 Claude Code 中,技能只会预先批准读取 工具,因此任何会创建、更改、发布或删除内容的操作都会先请求批准, 除非你自己的权限设置允许这些操作。Cursor、Gemini CLI、Grok Build、 Kimi Code 和 Qwen Code 使用各自的审批设置。
  • 社交账号只能在 ihateposting.com 连接,不能通过 Agent 连接。 每个 网络自己的登录页面会处理密码,帖子则通过各网络的官方 API 发布,与 iHatePosting 应用发送帖子的方式相同。Agent 永远不会看到社交账号的 登录信息。

媒体

  • upload_media 接受我们自行获取的 url(首选,也是唯一适用于任何实际大小视频的方式,最大 100 MB;图片最大 25 MB),或作为 base64 提供的文件,并可附带替代文本;它会返回一个媒体库 ID,供填入 mediaIds。通过对话传递的 base64 上限为 8 MB,而且这些字节是模型自己输入的,因此会被截断:绝不要将它用于仅作为聊天附件存在的文件。open_upload_widget 会在对话中显示文件选择器来处理这种情况;对于使用 shell 的 Agent,则可使用 ihateposting upload <path> 命令。图片可以是 JPEG、PNG、WebP 或 GIF;视频可以是 MP4、MOV 或 WebM。
  • list_media 返回已上传内容的 ID、大小和尺寸,不会返回下载链接。(REST GET /api/v1/media 会包含下载链接。)
  • 一篇帖子最多可使用 20 个媒体 ID,并按提供的顺序附加。
  • 较大的文件:将其上传到 ihateposting.com,再用 list_media 查找;或使用 REST 上传路由,单次上传支持最大 25 MB 的图片和最大 512 MB 的视频,分段上传则最大可达 2,000 MB。请参阅 docs/api.md。
  • 媒体库有存储配额:90 天免费试用期内为 500 MB。付费套餐(开售后)分别为 5 GB(Creator)、25 GB(Growth)和 100 GB(Pro)。
  • 替代文本会发布到 Bluesky、Instagram、Threads、Mastodon、Pinterest、Tumblr 和 Slack。LinkedIn 会将其用作视频标题。
  • 自定义视频封面需使用媒体库中的图片,并在该网络的选项中通过 coverAssetId 设置。YouTube、Instagram、Facebook、LinkedIn、Pinterest、Telegram、Mastodon 和 Tumblr 支持此设置。TikTok 不接受上传的封面。
  • TikTok 照片帖子接受 JPEG 或 WebP,不接受 PNG。

分析

get_analytics 接受 7d、15d、30d(默认值)、90d、12m 或 all 范围。对于每个已连接的频道,它会返回该网络自己的指标、关注者数量、浏览量、互动次数和互动率、按星期几和一天中的时段统计的发帖时间、每日趋势以及排名前五的帖子。所有套餐的分析功能相同,包括较长的时间范围。通过 REST API,GET /api/v1/analytics?range=30d&format=xlsx 会返回一份电子表格,其中包含你在该时间范围内通过 iHatePosting 发布的帖子。

每篇帖子的统计数据来自 Bluesky、Facebook、Instagram、Threads、LinkedIn Pages、Pinterest、TikTok(仅公开帖子)、YouTube、Mastodon、Tumblr、Slack,以及通过机器人连接的 Discord 频道。Telegram 不提供每篇帖子的统计数据,只提供成员数量;LinkedIn 个人资料也不会纳入统计。仅当服务已启用 X 读取权限时,才会统计 X。回答中的 unmeasuredPlatforms 字段会列出所有已连接但完全不提供统计数据的网络,以免将缺失的数字误认为没有覆盖面。

其他连接方式

本地 MCP 服务(npm)。 对于会启动本地进程的客户端,同样的 16 个工具也可通过 ihateposting-mcp 运行, 该包需要 Node.js 20 或更高版本(自 0.10.0 起):

{
  "mcpServers": {
    "ihateposting": {
      "command": "npx",
      "args": ["-y", "ihateposting-mcp"],
      "env": { "IHATEPOSTING_API_KEY": "pk_live_…" }
    }
  }
}

IHATEPOSTING_API_URL 可更改其连接的服务(默认为 https://ihateposting.com)。

命令行。 ihateposting (npm i -g ihateposting,或无需安装即可运行 npx ihateposting <command>) 可起草、检查、安排发布时间并发布内容,上传磁盘上的文件,还可列出帖子。其命令包括 login、logout、whoami、accounts、platforms、 posts、upload、post 和 skill;ihateposting help 会列出命令 和主要标志。

ihateposting login <key>                                   # saved in ~/.ihateposting/config.json
ihateposting whoami                                        # which account the key belongs to
ihateposting accounts --json                               # connected accounts, with ids
ihateposting upload ./launch.mp4 --alt "Product demo"      # prints a media id
ihateposting post "text" --to bluesky,linkedin --check     # validates this draft, creates nothing
ihateposting post "text" --to instagram --media "$ID"      # draft with the uploaded file
ihateposting post "text" --to x --at "2026-10-01 9:00 AM" --check   # check the scheduled version first
ihateposting post "text" --to x --at "2026-10-01 9:00 AM"  # scheduled
ihateposting posts --status scheduled --from 2026-12-01 --to 2026-12-31   # prints the total too
ihateposting skill                                         # writes .claude/skills/ihateposting/SKILL.md

--check 会按原样验证命令,因此请提供与实际发布时相同的 --now 或 --at。--now 会立即发布。命令行目前无法设置各网络的选项,因此 Pinterest 看板或 YouTube 的儿童内容设置需要使用 MCP 工具或 REST API。每条命令成功时退出码为 0,失败时为 1。ihateposting skill --print 会打印 CLI 自带的技能,而不是将其写入文件。

要将 CLI 的技能提供给任何 Agent——Claude Code、Cursor、Codex、GitHub Copilot 等——请使用开源的 skills 安装程序从此仓库安装;该安装程序会询问要为哪些 Agent 进行设置:

npx skills add iHatePostingOrg/agent-skill --skill ihateposting-cli

该技能位于 cli/ihateposting-cli/SKILL.md:它与 ihateposting skill 写入的内容相同,供使用命令行发布内容的 Agent 使用。它不属于上文提到的任何插件。命令行和 npm 服务读取的设置,列在它们各自在 npm 上的 README 中 (ihateposting, ihateposting-mcp)。

在 URL 中包含密钥。 某些连接器对话框只接受 URL,不提供填写标头的字段。对于这类情况,服务也会从 地址中读取密钥:https://ihateposting.com/mcp?key=pk_live_…。URL 中的密钥可能会出现在浏览器历史记录、代理日志和 Referer 标头中,因此,只要客户端允许,请优先使用标头;如果包含密钥的 URL 曾被分享,请创建新密钥。

MCP Registry。 该服务已列入官方 MCP Registry,名称为 com.ihateposting/mcp,并提供两个地址:客户端登录用的 https://ihateposting.com/mcp/oauth,以及 https://ihateposting.com/api/mcp(与 /mcp 是同一服务),后者通过 Authorization: Bearer 接收密钥。该条目还列出了本地 npm 服务 ihateposting-mcp。

REST API 和 Webhook

MCP 工具是公共 REST API 的轻量封装,使用相同的密钥,格式为 Authorization: Bearer pk_live_…:

方法和路径工具
GET /api/v1/accountslist_accounts、whoami
GET /api/v1/platformsget_platform_rules
POST /api/v1/posts/validatevalidate_post
GET /api/v1/posts、POST /api/v1/postslist_posts、create_post
GET、PATCH、DELETE /api/v1/posts/{id}get_post、update_post、delete_post
POST /api/v1/posts/{id}/reschedulereschedule_post
POST /api/v1/posts/{id}/retryretry_post
GET /api/v1/media、POST /api/v1/media/presign、POST /api/v1/media/confirm、POST /api/v1/media/from-urllist_media、upload_media
GET /api/v1/pinterest/boardslist_pinterest_boards
GET /api/v1/analyticsget_analytics

请求和响应格式见 docs/api.md。

Webhook 会在帖子发布完成时通知其他系统。请在 ihateposting.com 的 Settings → Webhooks 中添加(最多 10 个)。每个 Webhook 都会收到带签名的 POST,事件类型为 post.published、post.partial 或 post.failed:

  • X-iHatePosting-Signature 标头的值为 sha256=,后接使用该 Webhook 密钥(whsec_…)计算的原始请求正文的 HMAC-SHA256。
  • 重试投递时,载荷中的 id 保持不变,因此可用它去除重复项。
  • Webhook 可限制为指定账户。此时,只有涉及这些账户的帖子会触发 Webhook,且载荷仅包含这些账户的结果。
  • Send test 会发送格式相同的示例载荷,并添加 X-iHatePosting-Test: true 标头。

Zapier、Make 和 n8n 的设置说明见本指南。

限制

  • 每个账户每分钟的请求数: 创建 30 次、更新 60 次、重新安排 30 次、重试 15 次、验证 60 次、读取分析数据 60 次、列出媒体 120 次、查询 Pinterest 看板 60 次,以及上传 30 次。list_posts、list_accounts、whoami 和 get_platform_rules 共用每分钟 60 次的限额。超过限额会返回 HTTP 429;请等待一分钟后重试。
  • 每次 create_post 调用只能创建一条帖子,最多可附带 20 个媒体 ID。
  • list_posts 使用分页。 默认每页 50 条,最多 200 条。响应中包含符合筛选条件的总数 total 和当前页数量 returned,以及 hasMore 和 nextCursor。请使用 total 获取总数,不要根据当前页统计;统计时请使用 status 和 from/to 进行筛选。
  • 90 天免费试用。 付费方案尚未开售;各方案及其包含的内容请见下方链接中的价格页面。
  • X 所有方案均可使用,但每月发帖数量取决于方案,且每天也有数量限制。X 帖子中的链接需要付费 Pro 方案;免费试用期间,请发布不带链接的 X 帖子,或为 X 单独提供文案。

方案和价格:ihateposting.com/pricing。

故障排除

  • 缺少工具。 Agent 尚未登录。在 claude.ai 和 Cowork 中,通过插件的 Connectors 标签页连接 iHatePosting;在 Claude Code 中,运行 /mcp 并选择 Authenticate;在 Cursor 中,打开 Customize, 然后选择 MCPs,开启 iHatePosting 并按 Connect;在 Gemini CLI 中,运行 /mcp auth ihateposting;在 Grok Build 中,打开 /mcps 并按 i;在 Kimi Code 中,批准其 authenticate 步骤,或运行 /mcp-config login,并使用 /mcp 显示的名称;在 Qwen Code 中,打开 /mcp, 选择 iHatePosting 并选择 Authenticate。以上方式均不使用密钥。
  • 在 Cursor 或 Grok Build 上从 0.4.x 升级? 这些插件过去会发送 API 密钥。现在改为按上述方式登录一次。插件不再读取你为 0.4.x 设置的密钥, 因此可以从 Cursor 的插件设置或你的 shell 配置文件中删除它。如果没有其他地方使用该密钥, 请前往 Settings → Developers 重新生成密钥,让旧密钥失效。
  • 命令行或 npm 服务提示“No API key”。 未提供密钥。运行 ihateposting login <key>。
  • 基于密钥的设置提示“iHatePosting API 401”。 密钥错误、已被更新的密钥替换,或客户端发送的是未填写的占位符, 而不是密钥。先检查客户端的设置,再判断密钥是否已被撤销。
  • 账户显示 needs_reauth。 必须在 ihateposting.com 的 Accounts 页面重新连接;Agent 无法执行此操作。待处理的 发布会暂缓,重新连接同一账户后就会发送。如果待处理的发布在原定时间 14 天后仍未发送,则会失败;请重新连接账户,然后重试。
  • HTTP 429。 已达到每分钟限制(请参阅限制)。
  • 发布到的社交网络少于请求数量。 create_post 的答复会在 unresolved 中列出所有未匹配到已连接且活跃账户的请求名称或 ID。
  • 部分社交网络发布成功,其他网络失败。 帖子的状态为 partial。get_post 会显示每个网络的错误,retry_post 只会重新发送 失败的部分。如果发布方的最后一次检查拒绝了某条内容,该次发送也可能为 skipped;请修改帖子,而不是重试。
  • 创建或更新时被拒绝。 消息来自社交网络自身的规则,例如说明文字超出限制或缺少媒体内容。请修改内容,或为 该网络指定覆盖设置,然后重新发送。草稿会跳过这些检查。
  • 选项被拒绝(“你是不是想用 ytPrivacy?”)。 键或值不属于该网络支持的选项。请使用消息中指出的选项; get_platform_rules 会列出所有选项。草稿也会进行此项检查。
  • YouTube 发布被拒绝。 需要一个视频、一个标题,以及面向儿童内容的声明:在 youtube 选项中将 ytMadeForKids 设为 true 或 false。除非设置 ytPrivacy,否则隐私状态默认为公开。
  • Pinterest 发布被拒绝。 Pin 必须指定看板。通过 list_pinterest_boards 获取 ID,并在 pinterest 选项中将其设为 boardId。 列表为空表示该账户还没有看板;请先在 Pinterest 上创建一个。
  • TikTok 的受众不正确,或根本没有发布。 如果未设置 tiktokPrivacy,通过 Agent 或 API 发送的帖子会面向 TikTok 为该账户提供的最广泛受众;对于公开账户,该受众为所有人。 请将其设为 public、followers、friends 或 private;其他值都会被拒绝。使用 tiktokSendAsDraft 时,视频会发送到创作者的 TikTok 收件箱,并报告为已完成,但只有创作者在 TikTok 应用中发布后,视频才会公开。

网络端点和凭据

  • 此软件包中的每个 Agent 都会调用同一个地址: https://ihateposting.com/mcp/oauth:通过 Streamable HTTP 使用 MCP,并通过 OAuth 登录。它不会发送密钥。每个 Agent 都会从服务自身的元数据中发现登录方式,使用 PKCE 并注册自身, 然后保存自己的令牌(Gemini CLI 位于 ~/.gemini/mcp-oauth-tokens.json,Grok Build 位于 ~/.grok/mcp_credentials.json,Kimi Code 位于 ~/.kimi-code/credentials/mcp/,Qwen Code 位于 ~/.qwen/mcp-oauth-tokens.json)。可在 ihateposting.com 的“设置” → “开发者”中撤销登录。
  • 对于基于密钥的设置(本地 npm 服务、无法登录的 Agent),https://ihateposting.com/mcp 是同一个服务,会发送 Authorization: Bearer <key>。此软件包中的任何内容都不会使用它。
  • 没有钩子或安装脚本,也不会在你的计算机上运行任何内容。
  • 服务会收到的内容:你请求发布的帖子的文本、媒体和选项,以及列出、检查、更改或报告这些帖子的请求。服务会通过你所选社交网络各自的官方 API 将这些内容转发给它们。隐私政策位于 ihateposting.com/privacy。

此存储库包含的内容

路径用途
.claude-plugin/plugin.json、.claude-plugin/marketplace.json、mcp.claude.jsonClaude(claude.ai、Cowork、Claude Code)
.cursor-plugin/plugin.json、mcp.cursor.jsonCursor
gemini-extension.jsonGemini CLI
.grok-plugin/plugin.json、.grok-plugin/marketplace.json、mcp.grok.jsonGrok Build
.kimi-plugin/plugin.jsonKimi Code
qwen-extension.jsonQwen Code
assets/logo.svgCursor 和 Grok Build 显示的徽标
skills/ihateposting/SKILL.md全部六个:如何安全发布
skills/ihateposting/references/platform-options.md全部六个:各网络的选项键,按需加载
clawhub/ihateposting/SKILL.mdOpenClaw 和 Hermes Agent(通过 ClawHub):为手动添加的服务提供相同指导
clawhub/ihateposting/references/platform-options.md与插件中相同的文件,供 ClawHub 副本使用
cli/ihateposting-cli/SKILL.md使用 ihateposting 命令行发布的 Agent,通过 npx skills add iHatePostingOrg/agent-skill --skill ihateposting-cli 安装;不属于任何插件
docs/platforms.md每个网络接受的内容,完整说明
docs/api.mdREST API
examples/create_post 草稿载荷及其用法
scripts/check.mjs、.github/workflows/check.yml发布检查,每次推送时运行
.github/workflows/release.yml每个版本标签都会发布一个 GitHub Release,并附上变更日志说明
CHANGELOG.md各版本的变更内容

每个 Agent 都有自己的 MCP 文件,因此每个清单只会指定一个服务;它们全部指向同一个登录地址。根目录有意不放置 .mcp.json,这样工具就不会拾取此软件包无意提供的服务。

node scripts/check.mjs 会在发布前检查清单、密钥处理、技能和示例。它还会检查此 README 是否列出了每个工具和网络,以及每个示例是否都是草稿。

反馈和问题

如需报告问题或提出需求,请在此存储库的议题区留言, 或通过 ihateposting.com/contact 联系我们。

链接

Changelog

See CHANGELOG.md.

License

MIT. See LICENSE.

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。