iHatePosting について
iHatePostingは、ihateposting.comに接続したアカウントを通じて、エージェントが14のソーシャルネットワークの投稿を管理できるサービスです。下書き、検証、予約、公開、メディア、分析に対応し、投稿は既定で下書きとして保存されます。エージェントはAPIキーではなくiHatePostingアカウントで認証します。
主な機能
- 01投稿の作成、検証、予約、公開
- 0214のソーシャルネットワークへの投稿
- 03ネットワーク別の文面とオプション
- 04メディアのアップロードと再利用
- 05既存投稿と失敗の管理
- 06チャンネル別分析の表示
活用シーン
- 01複数ネットワーク向け投稿の準備と確認
- 02ソーシャルアカウント間での投稿予約
- 03失敗した投稿の再試行や下書きの修正
- 04チャンネル別の投稿実績の確認
MCP 対応
ホステッドiHatePosting MCPサーバーは、接続済みソーシャルアカウントの投稿管理、メディア、分析のツールを提供します。対応するエージェント設定ではiHatePostingアカウントで認証し、一部の手動設定ではAPIキーを使う方法もREADMEに記載されています。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://ihateposting.com/mcp/oauthclaude mcp add --transport http com-ihateposting https://ihateposting.com/mcp/oauth{"mcpServers":{"com-ihateposting":{"type":"http","url":"https://ihateposting.com/mcp/oauth"}}}Cursor で開く{"servers":{"com-ihateposting":{"type":"http","url":"https://ihateposting.com/mcp/oauth"}}}VS Code で開く{"mcpServers":{"com-ihateposting":{"type":"http","url":"https://ihateposting.com/mcp/oauth"}}}{"mcpServers":{"com-ihateposting":{"serverUrl":"https://ihateposting.com/mcp/oauth"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
https://ihateposting.com/mcp/oauthhttps://ihateposting.com/api/mcp認証が必要ツール
詳細
AI エージェント向け iHatePosting
Claude、Claude Code、Cursor、Gemini CLI、Grok Build、Kimi Code、Qwen Code を使って、ihateposting.com で連携したアカウントから、14 のソーシャルネットワークに投稿する文章の下書き、確認、予約、公開を行えます。このパッケージでは、各エージェントにホスト型 iHatePosting MCP サーバー(16 個のツール)と、安全に投稿する方法を教えるスキルを提供します。ここに挙げたエージェントはすべて iHatePosting アカウントでサインインするため、API キーは必要ありません。
VS Code の GitHub Copilot も同じホスト型サーバーを使用します。 VS Code にインストールしてから、ブラウザーで iHatePosting アカウントにサインインしてください。貼り付ける API キーはありません。手順についてはインストールをご覧ください。
各エージェントのセットアップページ: 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 では、この リポジトリのプラグインが代わりにサインインを行います(インストール)。
あなたが許可しない限り、投稿されることはありません。 今すぐ、または指定した時刻に公開するよう依頼しない限り、新しい投稿は下書きとして保存されます。
エージェントにできること
- 複数のネットワークに同時に1件の投稿を下書き、予約、または公開できます。ネットワーク上のすべてのアカウント、または指定した1つのアカウントを選べます。「9:00 AM」のような時刻は、コンピューターのタイムゾーンではなく、iHatePosting の設定(Settings → Scheduling)で指定したタイムゾーンで解釈されます。
- 投稿する前に内容を確認できます。
validate_postは、公開時に投稿の直前に実行されるチェックを行い、何も作成しません。また、ネットワークに接続済みアカウントがない場合や、再接続が必要なアカウントがある場合も通知します。 - 各ネットワークのルールを確認できます。文字数制限、メディアのルール、Pinterest のボードなど、ネットワークで必須のオプションを確認できます。
- ネットワークごとに投稿を作成できます。あるネットワーク向けに異なるテキストや、そのネットワーク独自の設定を指定できます。X、Bluesky、Threads、Mastodon のスレッド、Instagram、LinkedIn、Threads の最初のコメント、Instagram のリール、ストーリーズ、カルーセル、Facebook のリールとストーリーズ、TikTok の写真投稿とプライバシー設定、YouTube 動画のタイトル、プライバシー設定、再生リストに対応しています。
- メディアを添付できます。代替テキスト付きの画像や短い動画をアップロードするか、メディアライブラリにあるものを再利用できます。
- 投稿済みの内容を管理できます。各ネットワークでの状況を確認したり、下書き、予約済み、失敗した投稿を書き直したり、別の日時に移動したり、失敗したものだけを再送信したり、削除したりできます。
- 結果をレポートできます。チャネルごとの数値、フォロワー数、投稿時刻、人気の投稿を、過去7日間から記録されているすべての期間まで確認できます。
どのプランにも、MCP サーバー、REST API、CLI で使用する API キーが含まれています。Webhook もすべてのプランで利用できます。
ツール
ホスト型サーバーは、以下の16個のツールと、アップロードボックスが単独で使用するツール1個を提供します。最後の列は、ツールが投稿やアカウントに与える影響を示しています。
| ツール | 内容 | 影響 |
|---|---|---|
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 | 失敗した内容のみを、1つまたはすべてのネットワークで再送信します | 公開 |
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"] として登録されているため、ホストはモデルに表示せず、エージェントが呼び出すツールではありません | 有効期間の短い認証情報を発行 |
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 を渡してください。
| ネットワーク | テキスト上限 | メディア | 設定必須項目 | その他の機能 |
|---|---|---|---|---|
| Bluesky | 300 | 画像 4 枚まで、動画 | 複数投稿のスレッド、代替テキスト | |
| X | 280(加重方式。リンクは 23 としてカウント) | 画像 4 枚まで、動画 | 複数投稿のスレッド、返信設定 | |
| 3,000 | 画像 20 枚まで、動画 | 会社ページと個人プロフィール、最初のコメント | ||
| 63,000 | 画像 10 枚まで、動画 | ページ、リール、ストーリーズ | ||
| 2,200 | 必須:画像または動画を 10 個まで | リール、ストーリーズ、カルーセル、最初のコメント、コラボレーター、タグ付けしたアカウント | ||
| Threads | 500 | 画像または動画を 20 個まで | 複数投稿のスレッド、カルーセル、最初のコメント | |
| 800 | 必須:画像または動画 | ボード | ピンのタイトルとリンク先 | |
| TikTok | 2,200 | 必須:動画、または写真(このツールでは投稿 1 件につき 20 枚まで) | プライバシー設定、TikTok の受信箱への送信、AI 生成ラベル、コメント、デュエットとスティッチの設定 | |
| YouTube | 5,000(説明) | 必須:動画 1 本 | タイトル、「子ども向け」かどうか | プライバシー設定、再生リスト、タグ、カテゴリ、カスタムサムネイル |
| Mastodon | 500 | 画像 4 枚まで、動画 | 複数投稿のスレッド、公開範囲、代替テキスト | |
| Telegram | 4,096(メディアのキャプションとしては 1,024) | 画像 10 枚まで、動画 | ||
| Discord | 2,000 | 画像 10 枚まで、動画 | ||
| Tumblr | 4,096 | 投稿ごとに画像 20 枚まで、動画 | タイトル、タグ | |
| Slack | 3,000 | 画像 5 枚まで、動画 |
省略した場合、create_post はテキストの最初の行を使って YouTube のタイトルと Pinterest のピンのタイトルを補い、最初の URL を Pinterest のリンクとして設定し、ハッシュタグから YouTube と Tumblr のタグを設定します。validate_post はこれらを補完しないため、YouTube のタイトルがない場合は問題として報告します。
各ネットワークで利用できる項目と主なオプションについては、docs/platforms.md を参照してください。投稿で必要になりやすいオプションのキーと値、デフォルト値については、必要に応じてスキルが読み込むリファレンスに記載されています (skills/ihateposting/references/platform-options.md)。 ネットワークの上限にかかわらず、投稿に添付できるメディアは最大 20 個です。
プロンプトの例
- 「今週公開予定のものは何ですか?また、失敗したものはありますか?」
- 「このお知らせを LinkedIn、Bluesky、X 向けに下書きしてください。X 向けは短いバージョンにして、保存前に 3 つとも確認してください。」
- 「このメモを X と Threads 向けのスレッドにまとめて、下書きとして保存してください。」
- 「この写真を代替テキスト付きでアップロードし、それを使った Instagram の投稿を下書きしてください。ハッシュタグは最初のコメントに入れてください。」
- 「このレシピに合う Pinterest のボードはどれですか?そこにピンを下書きしてください。」
- 「昨日の LinkedIn の投稿が失敗した理由は何ですか?」
- 「過去 30 日間の投稿の成果はどうでしたか?また、どのネットワークの成績が良かったですか?」
examples/ には、スレッド、リール、カルーセル、YouTube、Pinterest、TikTok などの create_post 用ペイロードの例が用意されています。すべて下書きです。
インストール
以下の各エージェントは、ブラウザーで iHatePosting アカウントにサインインします。API キーは必要ありません。
| エージェント | インストール方法 | 接続方法 |
|---|---|---|
| Claude(claude.ai、デスクトップアプリ、Cowork) | 有料の Claude プランで Customize → Plugins を開き、このリポジトリをマーケットプレイスとして追加します | ブラウザーでサインインします |
| Claude Code | このリポジトリのマーケットプレイスから /plugin install を実行します | ブラウザーでサインインします |
| Cursor | マーケットプレイスに掲載された後にインストールするか、ローカルコピーを使用するか、~/.cursor/mcp.json を使います | ブラウザーでサインインします |
| GitHub Copilot を備えた VS Code | 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 を実行します | ブラウザーでサインインします |
| スキルを読み込む任意のエージェント | npx skills add を実行します(スキルのみ) | そのエージェントの案内に従ってサーバーを接続します |
| ChatGPT など | 各サービス独自の MCP 設定を使用します | セットアップガイドをご覧ください |
Claude(claude.ai、デスクトップアプリ、Cowork)
Customize → Plugins で Add → Add marketplace を選び、
https://github.com/iHatePostingOrg/agent-skill を入力して iHatePosting をインストールします。
次に、プラグインの Connectors タブを開き、iHatePosting に接続します。iHatePosting アカウントにサインインして
Allow を押してください。貼り付けるキーはありません。
Claude のディレクトリから iHatePosting コネクターをすでに追加していますか?プラグインは 同じ接続先を使うため、ツールは二重にならず、1 組だけ表示されます。
プラグインの利用には有料の 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 を選択します。インストール先は、1 つのプロジェクトまたはすべてのプロジェクトから選べます。Cursor はブラウザーで iHatePosting アカウントへのサインインを促すので、
Allow を押してください。Cursor チームの各メンバーはそれぞれ自分のアカウントでサインインするため、他の人のアカウントから投稿されることはありません。MCP の許可リストを設定している Cursor
Enterprise プランでは、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 サーバーは 1 つだけになります。
サーバーのみを手動で追加するには、~/.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 with GitHub Copilot
VS Code にインストール
(または VS Code Insiders)を選択するか、
プロジェクトの .vscode/mcp.json にサーバーを追加します。
{
"servers": {
"ihateposting": {
"type": "http",
"url": "https://ihateposting.com/mcp/oauth"
}
}
}
VS Code のファイルではトップレベルのキーとして mcpServers ではなく
servers を使うため、Cursor の設定からコピーしたブロックは読み込まれません。
このファイルにシークレットは含まれないため、安全にコミットできます。
サーバーが初めて起動すると、VS Code からサインインを求められます。ブラウザーウィンドウが 開くので、iHatePosting アカウントにサインインして Allow を押します。貼り付けるキーは ありません。その後、エージェントモードで 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 のドキュメントには警告がありません。サインインすれば回避策を
講じる必要もなく、この問題を避けられます。
この拡張機能は type: "http" の url を使用します。これは 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 を選びます。
その他のエージェント
ChatGPT、Codex、OpenClaw、Hermes Agent、 DeepSeek Harness、Perplexity Computer、Zed、Cline などは、このパッケージを使わずに同じ サーバーに接続できます。それぞれにセットアップページがあり(この README の冒頭に一覧があります)、 セットアップガイド ですべてを説明しています。
OpenClaw のドキュメントによると、.cursor-plugin/
フォルダーを含むパッケージは Cursor バンドルとして読み込まれるため、ここにこのリポジトリを
インストールしても MCP サーバーは追加されません。
代わりに、OpenClaw のページに記載されている OpenClaw 独自の MCP セットアップを使用してください。
スキルを読み込むエージェント
このスキルは skills.sh に掲載されているため、スキルを読み込むエージェントはそこから取得できます。
npx skills add https://github.com/ihatepostingorg/agent-skill --skill ihateposting
これはスキルのみをコピーします。iHatePosting サーバーには接続しません。
エージェントのセットアップページの説明に従って、サーバーに接続してください。このスキルは
サーバーのツールを通じて動作します。ihateposting コマンドライン
(下記)は別のツールで、独自の
手順(ihateposting skill --print)があります。
API キーを取得する
上記のエージェントには、いずれも API キーは必要ありません。キーが必要なのは、ihateposting コマンドライン、
ローカルの npm サーバー、REST API、およびサインインできないエージェントです。
ihateposting.com にサインインし、Settings →
Developers を開いてキーを作成します。キーは pk_live_ で始まり、同じページから後で再び表示できます
(2026 年 9 月下旬にキーの再表示が可能になる前に作成したキーは再表示できません。ページにもその旨が記載されており、再生成すると再表示可能なキーが発行されます)。アカウントごとにキーは 1 つです。
再生成すると、古いキーは使用中のすべての場所で無効になります。このキーを使うと本人に代わって投稿できるため、
チャット、スクリーンショット、共有ファイルには記載しないでください。
安全性
- デフォルトでは下書きです。
create_postは、action: "now"(すぐに公開)またはaction: "schedule"(指定した時刻に公開)が指定されない限り、下書きを保存します。CLI も、別の指定がない限り下書きを保存します。REST API にはデフォルトがなく、actionを指定しないリクエストは拒否されます。 - 問題のある投稿は保存前に拒否されます。 公開予定の投稿は、作成または更新時に対象となるすべてのネットワークに照らしてチェックされ、いずれかのネットワークで拒否される場合は、その理由とともに拒否されます。下書きはこのチェックを省略するため、未完成の投稿も保存できます。公開処理では、投稿の直前に各送信を再度チェックし、失敗したものはスキップします。
- すべての投稿でオプション名と値をチェックします。下書きも対象です。 ネットワークが参照しないキー(
ytMadeForKidsに対するmadeForKidsなど)や、受け付けない値は、保存して無視するのではなく、正しいキーや値を示すメッセージとともに拒否されます。 - 下書きの予約投稿には
update_postを使用します。reschedule_postは下書きを拒否します。action: "schedule"を指定したupdate_postは、作成時のチェックを実行し、create_postと同様にアカウントごとに投稿を分割します。 - 時刻は2つの形式で返されます。
scheduledAtは UTC です。その隣のscheduledLocalは、同じ時刻をアカウント所有者のタイムゾーンで表したもので、whoamiのownerTimezoneに示されています。action: "schedule"を指定せずに送信した日付や、存在しない日付は拒否されます。 - 予約投稿を下書きに戻すことはできません。
update_postはこの操作を拒否します。投稿を削除して、下書きとして作成し直してください。 - 複数ネットワークへの投稿を予約すると、投稿が分割されます。
create_postまたはupdate_postで複数のアカウントに投稿を予約または公開すると、グループ ID を共有するアカウントごとの投稿に分割されます。create_postの応答には、それぞれの投稿が一覧表示されます。下書きは1つの投稿のままです。分割後、reschedule_postとdelete_postは一度に1つの投稿に対して動作します。また、投稿自身のaccountIdsを送信すれば、update_postでテキスト、オプション、メディアを変更できます。アカウントの追加や入れ替えは拒否されます。 - 削除しても公開は取り消されません。
delete_postが削除するのは iHatePosting の記録だけです。公開済みの投稿は、forceが設定されていない限り拒否され、ネットワーク上では公開されたままです。現在公開処理中の投稿は削除できません。 - 再試行では失敗したものだけを再送信します。 公開に成功した送信はそのまま残されます。ネットワークによっては、投稿が実際には公開されていても失敗を報告することがあるため、再試行する前にネットワークを確認してください。
- 承認プロンプトの動作はエージェントによって異なります。 Claude Code では、スキルが読み取り専用のツールのみを事前承認するため、作成、変更、公開、削除を行う操作は、独自の権限設定で許可されていない限り、事前に確認を求めます。Cursor、Gemini CLI、Grok Build、Kimi Code、Qwen Code では、それぞれ独自の承認設定が適用されます。
- ソーシャルアカウントは ihateposting.com で接続します。エージェント経由では接続しません。 パスワードは各ネットワーク独自のサインインページで扱われ、投稿は iHatePosting アプリと同じように、各ネットワークの公式 API を通じて公開されます。エージェントがソーシャルアカウントのログイン情報を見ることはありません。
メディア
upload_mediaは、こちらで取得するurl(推奨。実用的なサイズの動画に使える唯一の方法で、動画は最大 100 MB、画像は最大 25 MB)か、ファイルをbase64で受け取ります。任意で代替テキストも指定でき、mediaIdsに入れるライブラリ ID を返します。会話経由の base64 は 8 MB までで、モデル自身が入力したバイト列であるため途中で切り詰められます。チャットの添付ファイルとしてしか存在しないファイルには決して使わないでください。その場合は、open_upload_widgetで会話内にファイル選択画面を表示するか、シェルを使えるエージェントの場合はihateposting upload <path>CLI コマンドを使います。画像は JPEG、PNG、WebP、GIF、動画は MP4、MOV、WebM に対応しています。list_mediaは、すでにアップロードされたメディアの ID、サイズ、寸法を返します。ダウンロードリンクは返しません。(REST のGET /api/v1/mediaには含まれます。)- 投稿には最大 20 個のメディア ID を指定でき、指定した順に添付されます。
- より大きなファイルの場合は、ihateposting.com にアップロードして
list_mediaで検索するか、REST のアップロードルートを使います。REST では、画像は 1 回のアップロードで最大 25 MB、動画は最大 512 MB、分割アップロードでは最大 2,000 MB をアップロードできます。docs/api.md を参照してください。 - ライブラリにはストレージ容量の上限があります。90 日間の無料トライアルでは 500 MB です。有料プランの販売開始後は、Creator が 5 GB、Growth が 25 GB、Pro が 100 GB になります。
- 代替テキストは 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 の範囲を指定できます。接続済みチャンネルごとに、そのネットワーク独自の指標、フォロワー数、ビュー数、エンゲージメント数、エンゲージメント率、曜日別および時間帯別の投稿時刻、日別の推移、上位 5 件の投稿が返されます。長期間の範囲を含め、すべてのプランでアナリティクスを利用できます。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のスキルをClaude Code、Cursor、Codex、GitHub
Copilotなど、どのエージェントにも提供するには、このリポジトリからオープンな
skillsインストーラーを使ってインストールします。インストーラーでは、セットアップするエージェントを選択できます。
npx skills add iHatePostingOrg/agent-skill --skill ihateposting-cli
これはcli/ihateposting-cli/SKILL.mdにあります。コマンドラインで投稿するエージェント向けに、ihateposting skillが書き込むものと同じガイダンスです。上記のプラグインには含まれていません。コマンドラインと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として登録されており、次の2つのアドレスが記載されています。クライアントがサインインするhttps://ihateposting.com/mcp/oauthと、Authorization: Bearerでキーを受け付けるhttps://ihateposting.com/api/mcp(/mcpと同じサーバー)です。この登録には、ローカルnpmサーバーのihateposting-mcpも記載されています。
REST API と Webhook
MCP ツールは公開 REST API の薄いレイヤーです。この API では、Authorization: Bearer pk_live_… と同じキーを使用します。
| メソッドとパス | ツール |
|---|---|
GET /api/v1/accounts | list_accounts, whoami |
GET /api/v1/platforms | get_platform_rules |
POST /api/v1/posts/validate | validate_post |
GET /api/v1/posts, POST /api/v1/posts | list_posts, create_post |
GET, PATCH, DELETE /api/v1/posts/{id} | get_post, update_post, delete_post |
POST /api/v1/posts/{id}/reschedule | reschedule_post |
POST /api/v1/posts/{id}/retry | retry_post |
GET /api/v1/media, POST /api/v1/media/presign, POST /api/v1/media/confirm, POST /api/v1/media/from-url | list_media, upload_media |
GET /api/v1/pinterest/boards | list_pinterest_boards |
GET /api/v1/analytics | get_analytics |
リクエストとレスポンスの形式については、docs/api.md をご覧ください。
Webhook を使うと、投稿の完了時に別のシステムへ通知できます。ihateposting.com の Settings → Webhooks から追加できます(最大 10 件)。各 Webhook は、post.published、post.partial、post.failed のいずれかに対する署名付き POST を受信します。
X-iHatePosting-Signatureヘッダーは、sha256=に続けて、Webhook のシークレット(whsec_…)をキーとして生の本文に対して計算した HMAC-SHA256 を含みます。- 配信が再試行されても、ペイロードの
idは変わりません。そのため、この値を使って重複を除外してください。 - Webhook の対象を特定のアカウントに限定できます。その場合、対象アカウントのいずれかに関連する投稿について通知され、ペイロードには対象アカウントの結果のみが含まれます。
- Send test を使うと、同じ形式のサンプルペイロードが、
X-iHatePosting-Test: trueヘッダー付きで配信されます。
Zapier、Make、n8n の設定方法については、こちらのガイドをご覧ください。
制限
- アカウントごとの 1 分あたりのリクエスト数: 作成 30 回、更新 60 回、再スケジュール 30 回、再試行 15 回、検証 60 回、アナリティクスの読み取り 60 回、メディア一覧の取得 120 回、Pinterest ボードの検索 60 回、アップロード 30 回です。
list_posts、list_accounts、whoami、get_platform_rulesは、1 分あたり 60 回の上限を共有します。上限を超えると HTTP 429 が返されます。1 分待ってから再試行してください。 create_postの呼び出し 1 回につき投稿は 1 件です。 メディア ID は最大 20 件まで指定できます。list_postsはページ分割されます。 デフォルトは 50 件、最大 200 件です。レスポンスには、total(フィルター条件に一致する件数)とreturned(このページの件数)に加えて、hasMoreとnextCursorが含まれます。件数はページ内の行数ではなく、必ずtotalを使用してください。また、行数を数えるのではなく、statusとfrom/toでフィルターしてください。- 90 日間の無料トライアル。 有料プランはまだ販売されていません。各プランの内容については、下記の料金ページをご覧ください。
- X は、プランに応じた月間投稿数と日間投稿数の範囲内で、すべてのプランで利用できます。X の投稿にリンクを含めるには、有料の Pro プランが必要です。無料トライアル中に X に投稿する場合は、リンクを含めないか、X 用に個別のテキストを用意してください。
プランと料金:ihateposting.com/pricing。
トラブルシューティング
- ツールが表示されません。 エージェントにサインインしていません。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 のプラグイン設定または シェルプロファイルから削除できます。そのキーをほかで使用していない場合は、Settings → Developers で再生成し、 古いキーが使えないようにしてください。
- コマンドラインまたは npm サーバーで「No API key」と表示されます。 キーが指定されていません。
ihateposting login <key>を実行してください。 - キーを使う設定で「iHatePosting API 401」と表示されます。 キーが間違っているか、新しいキーに 置き換えられているか、クライアントがキーの代わりに値が入っていないプレースホルダーを送信しています。 キーが取り消されたと判断する前に、クライアントの設定を確認してください。
- アカウントに
needs_reauthと表示されます。 ihateposting.com の Accounts ページで 再接続する必要があります。エージェントには対応できません。保留中の送信は一時保留され、 同じアカウントを再接続すると送信されます。送信予定日の 14 日後も保留されたままの場合は失敗します。 再接続してから再試行してください。 - HTTP 429。 1 分あたりの上限に達しました(制限を参照)。
- 指定した数より少ないネットワークに投稿されました。
create_postの応答では、 接続済みで有効なアカウントに一致しなかった、指定された名前または ID がすべてunresolvedに列挙されます。 - 一部のネットワークでは公開され、ほかでは失敗しました。 投稿のステータスは
partialです。get_postには各ネットワークのエラーが表示され、retry_postは失敗したものだけを再送します。 また、公開処理の直近のチェックで拒否された場合、送信がskippedになることがあります。その場合は再試行せず、 投稿を修正してください。 - 作成時または更新時に拒否されます。 メッセージには、文字数制限を超えたキャプションやメディアの不足など、 ネットワーク独自のルールが示されています。修正するか、そのネットワークに対するオーバーライドを指定して、 再送してください。下書きではこれらのチェックは行われません。
- オプションが拒否されます(「ytPrivacy のことですか?」)。 キーまたは値が、
そのネットワークで受け付けられるものではありません。メッセージで示された値を使用してください。
get_platform_rulesにはすべてのオプションが記載されています。このチェックは下書きでも実行されます。 - YouTube で拒否されます。 動画 1 本、タイトル、および子ども向けかどうかの申告が必要です。
youtubeオプションでytMadeForKidsをtrueまたはfalseに設定してください。ytPrivacyを設定しない場合、公開範囲は公開になります。 - Pinterest で拒否されます。 ピンにはボードが必要です。
list_pinterest_boardsで ID を取得し、pinterestオプションのboardIdに設定してください。 リストが空の場合、そのアカウントにはまだボードがありません。先に Pinterest で作成してください。 - TikTok の公開範囲が違う、またはまったく公開されません。
tiktokPrivacyを指定せずに エージェントまたは API 経由で投稿すると、そのアカウントで TikTok が提供する最も広い公開範囲で投稿されます。 公開アカウントの場合、これは公開です。public、followers、friends、privateのいずれかを設定してください。 それ以外の値は拒否されます。tiktokSendAsDraftを指定すると、動画はクリエイターの TikTok 受信箱に送られ、完了として報告されますが、 TikTok アプリで投稿されるまでは公開されません。
ネットワークエンドポイントと認証情報
- このパッケージ内のすべてのエージェントは、次の1つのアドレスを呼び出します。
https://ihateposting.com/mcp/oauth:OAuth サインインを使う Streamable HTTP 上の MCP です。 キーは送信しません。各エージェントはサーバー独自のメタデータからサインイン方法を検出し、 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 の 「Settings」→「Developers」に移動してください。 https://ihateposting.com/mcpは、キーを使う構成(ローカルの npm サーバー、サインインできないエージェント)向けの同じサーバーです。 これらはAuthorization: Bearer <key>を送信します。このパッケージでは使用しません。- フックもインストールスクリプトもなく、お使いのマシン上で実行されるものはありません。
- サーバーが受信するもの:投稿を依頼された際のテキスト、メディア、オプション、および投稿の一覧表示、確認、変更、報告を行うリクエストです。サーバーは、それらを各ネットワークの公式 API を通じて、選択したソーシャルネットワークに転送します。プライバシーポリシーは ihateposting.com/privacy にあります。
このリポジトリの内容
| パス | 対象 |
|---|---|
.claude-plugin/plugin.json、.claude-plugin/marketplace.json、mcp.claude.json | Claude(claude.ai、Cowork、Claude Code) |
.cursor-plugin/plugin.json、mcp.cursor.json | Cursor |
gemini-extension.json | Gemini CLI |
.grok-plugin/plugin.json、.grok-plugin/marketplace.json、mcp.grok.json | Grok Build |
.kimi-plugin/plugin.json | Kimi Code |
qwen-extension.json | Qwen Code |
| assets/logo.svg | Cursor と Grok Build に表示されるロゴ |
skills/ihateposting/SKILL.md | 6つすべて:安全に投稿する方法 |
skills/ihateposting/references/platform-options.md | 6つすべて:各ネットワークのオプションキー。必要に応じて読み込まれます |
clawhub/ihateposting/SKILL.md | ClawHub 経由の OpenClaw と Hermes Agent:手動で追加したサーバー向けの同じガイダンス |
clawhub/ihateposting/references/platform-options.md | プラグイン内のファイルと同じもの。ClawHub 用のコピーです |
cli/ihateposting-cli/SKILL.md | npx skills add iHatePostingOrg/agent-skill --skill ihateposting-cli でインストールした ihateposting コマンドラインを使って投稿するエージェント向け。どのプラグインにも含まれません |
docs/platforms.md | 各ネットワークが受け付ける内容の完全版 |
docs/api.md | REST API |
examples/ | create_post の下書き用ペイロードとその使用方法 |
scripts/check.mjs、.github/workflows/check.yml | リリース前に実行されるリリースチェック |
.github/workflows/release.yml | バージョンタグごとに、変更履歴の注記を含む GitHub リリースを公開します |
CHANGELOG.md | 各リリースでの変更内容 |
各エージェントには専用の MCP ファイルがあり、各マニフェストがサーバーを1つだけ指定します。すべて同じサインインアドレスを参照します。このパッケージが意図していないサーバーをツールが読み込まないよう、ルートには意図的に .mcp.json を置いていません。
node scripts/check.mjs は、リリース前にマニフェスト、キーの処理、スキル、サンプルをチェックします。また、この README にすべてのツールとネットワークが記載されていること、およびすべてのサンプルが下書きであることも確認します。
フィードバックと問題の報告
問題の報告や機能のリクエストは、 このリポジトリの issue に投稿するか、 ihateposting.com/contact からご連絡ください。
リンク
- ウェブサイト:ihateposting.com
- 各エージェントの設定ページ:ihateposting.com/ai-agents
- セットアップガイド:AI エージェントからソーシャルメディアに投稿する
- REST API:docs/api.md
- 料金:ihateposting.com/pricing
- プライバシーポリシー:ihateposting.com/privacy
- 利用規約:ihateposting.com/terms
Changelog
See CHANGELOG.md.
License
MIT. See LICENSE.
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。