Claude Codeのchannels(チャネル)は、外部で起きた出来事を、いま開いているClaude Codeの会話へ届ける機能です。TelegramやDiscordに送ったメッセージ、CIの失敗、監視ツールの警告などが、パソコンで動いているセッションに直接入り、Claudeがその場で読んで対応します。届け先は「新しいセッション」ではなく「すでに開いている会話」なので、Claudeは作業中のファイルやそれまでの文脈を踏まえて反応できます。
先に答えをまとめると、メッセージが入るのは--channelsでそのチャネルを指定して起動した会話だけで、送ってよい相手は許可リストで絞ります。受け付けをやめるときは、--channelsを付けずに起動し直すか、許可リストの設定で受信を止めます。
この記事は、2026年10月30日に確認したAnthropicの公式資料をもとに、編集部が仕組みと設定の手順をまとめたものです。channelsは確認時点で研究プレビュー(試験提供)の段階にあり、フラグの書き方や仕様は今後変わる可能性があります。本文中のコマンドは公式資料に沿った説明用の例で、編集部が実際に接続して確かめた実測結果ではありません。
Claude Code channelsとは:実行中の会話へイベントを届けるMCPサーバー
channelsの公式資料(英語)では、チャネルは「実行中のClaude Codeのセッションへイベントを押し込むMCPサーバー」と説明されています。MCPサーバーは、Claudeに外部のツールやデータをつなぐ仕組みです(詳しくはMCPの記事)。通常のMCPサーバーは、Claudeが必要なときに問い合わせて「引き出す」使い方ですが、チャネルは外から会話へ「押し込む」点が違います。
チャネルには、通知を届けるだけの一方向のものと、Claudeが同じチャネルを通して返事をする双方向のものがあります。双方向のチャットとして使う場合、ターミナルには届いたメッセージと「送信した」という確認が表示され、返事の本文そのものは相手のアプリ側に表示されます。
外部とつながるClaude Codeの機能はいくつかあり、目的によって使い分けます。
| 機能 | 何が起きるか | 向いている場面 |
|---|---|---|
| channels | 外部のイベントが、すでに開いているパソコンの会話に届く | CIの失敗やチャットの依頼に、作業中の文脈のまま反応させたい |
| Remote Control | 人が別の端末から、パソコンの会話を操作する | 席を外している間も、自分で進み具合を見て指示したい |
| 通常のMCPサーバー | Claudeが作業中に問い合わせる。サーバーから会話へ自分で送り込むことはない | 必要なときだけ外部のデータを読ませたい |
| hooks | Claude Codeの中の出来事(ツールの実行前後など)で決まった処理を走らせる | パソコン上の操作に合わせて検査や記録を自動で行いたい |
| Claude in Slack・クラウドのセッション | 依頼のたびにクラウド上で新しいセッションが始まる | パソコンと切り離して、まとまった作業を任せたい |

channelsを使う前に確かめる条件
確認時点の公式資料による利用条件は次のとおりです。研究プレビューの提供は順次広がっている途中のため、条件を満たしていてもすぐに使えない場合があります。
- 認証:claude.aiのアカウントか、Claude ConsoleのAPIキーで認証していること。Amazon Bedrock、Google CloudのAgent Platform、Microsoft Foundryでは使えません。
- プランと組織:組織に属さないProとMaxの利用者は、セッションごとに
--channelsを付けるだけで使えます。claude.aiのTeamとEnterpriseでは、管理者(Owner)が有効にするまで使えません。Claude ConsoleのAPIキーの場合は既定で使えますが、組織が管理設定(管理者が配布し、利用者が上書きできない設定)を配っている場合は、その中で有効にする必要があります。 - 実行環境:公式のチャネル用プラグインはBunというJavaScriptの実行環境で動くため、
bun --versionで入っているかを確かめます。 - セッションが開いていること:イベントが届くのは会話が開いている間だけです。常に受け取りたい場合は、ターミナルを開いたままにするか、バックグラウンドで動かし続ける必要があります。
研究プレビューの間、--channelsのフラグはclaude --helpの一覧に表示されませんが、指定すれば動作します。
fakechatでchannelsの流れを試す
いきなり外部のサービスにつなぐ前に、公式が用意しているデモ用チャネル「fakechat」で流れを確かめると、どこで何が起きるかをつかめます。fakechatは自分のパソコン上にチャット画面を立ち上げるだけで、外部の認証や設定は要りません。
- プラグインを入れる。
claudeを起動し、/plugin install fakechat@claude-plugins-officialを実行します。インストール範囲を聞かれたら、全プロジェクトで使えるユーザー範囲を選びます。 - チャネルを有効にして起動し直す。Claude Codeを終了し、
claude --channels plugin:fakechat@claude-plugins-officialで起動します。起動画面に「このセッションへメッセージが直接入る」という趣旨の案内が出て、その下に警告の行が出ていなければ登録できています。プラグインが入っていない、許可された一覧にない、といった場合は、案内の下に原因を示す警告が出ます。 - メッセージを送る。ブラウザで
http://localhost:8787を開き、「作業フォルダーには何がある?」などと入力します。 - 届いたことを確かめる。ターミナルに
← fakechat · web: …の形で受信が表示され、Claudeが作業してから返事を送ります。最初の返信を送る前に許可を求められたら、承認してください。承認すると、ブラウザの画面に答えが表示されます。
プラグインのインストールで「Marketplace "claude-plugins-official" not found」と出た場合は、公式のマーケットプレイスを追加してから入れ直します。追加のコマンドは/plugin marketplace add anthropics/claude-plugins-officialです。プラグイン全般の考え方はプラグインの記事で説明しています。
channelsでTelegram・Discord・iMessageからつなぐ
研究プレビューには、Telegram、Discord、iMessageのチャネルが含まれています。どれも自分のスマホからパソコンのClaude Codeへ話しかけ、作業はパソコンの実際のファイルで行われます。
Telegramの場合
- TelegramでBotFather(Telegramでボットを作るための公式アカウント)に
/newbotを送り、ボットを作ってトークンを控えます。 - Claude Codeで
/plugin install telegram@claude-plugins-officialを実行し、/telegram:configureの後ろにトークンを付けて保存します。保存先はプロジェクトの中ではなく、ホームディレクトリの~/.claude/channels/telegram/.envです。インストール後に「Run /reload-plugins to apply.」と表示された場合は、/reload-pluginsを実行してから設定します。 claude --channels plugin:telegram@claude-plugins-officialで起動し直します。- Telegramで自分のボットに何か送ると、ペアリング用のコードが返ってきます。Claude Codeで
/telegram:access pairの後ろにそのコードを付けて実行し、続けて/telegram:access policy allowlistで、許可した相手だけが送れる設定にします。
Discordの場合
- Discordの開発者ポータルでアプリとボットを作り、トークンを控えます。
- ボットの設定で「Message Content Intent」を有効にします。
- OAuth2のURL生成画面で
botを選び、チャンネルの閲覧・メッセージ送信・スレッドでの送信・履歴の閲覧・ファイル添付・リアクションの6つの権限を付けたURLから、自分のサーバーへ招待します。 - Claude Codeで
/plugin install discord@claude-plugins-officialを実行し、/discord:configureの後ろにトークンを付けて保存します(保存先は~/.claude/channels/discord/.env)。インストール後に「Run /reload-plugins to apply.」と表示された場合は、/reload-pluginsを実行してから設定します。 claude --channels plugin:discord@claude-plugins-officialで起動し直します。- ボットにDMを送ると返ってくるペアリング用のコードを
/discord:access pairで承認し、/discord:access policy allowlistで許可リストに切り替えます。
iMessageの場合
iMessageのチャネルはmacOS専用で、ボットのトークンは要りません。メッセージのデータベースを直接読むため、ターミナルなど起動元のアプリに「フルディスクアクセス」の許可が必要です。imessage@claude-plugins-officialを入れて--channels付きで起動し、自分宛てにメッセージを送ると届きます。Claudeが最初に返信するときは、ターミナルが「メッセージ」アプリを操作してよいかを確認するmacOSの画面が出るので、OKを選びます。自分以外の連絡先から受け付けるには、/imessage:access allowで相手の電話番号かApple IDのメールアドレスを追加します。
channelsで送信側と受信する会話の対応を確かめる
チャネルを使い始めて迷いやすいのが、「どの会話に届くのか」です。公式資料の説明から、対応関係は次のように整理できます。
- 届くのは起動時に指定した会話だけ:プロジェクトの
.mcp.jsonにサーバーが書かれているだけでは届きません。そのセッションの起動時に--channels(自作チャネルを試す場合は後述の開発用フラグ)で名前を指定したチャネルだけが、会話へメッセージを入れられます。複数のチャネルは、スペースで区切って並べて指定できます。 - 受信の印が付く:届いたイベントは、チャネルの名前を示す印(
source)付きでClaudeに渡ります。チャットのIDや送信者名、警告の重要度などの付帯情報も一緒に渡せるため、Claudeはどこから来た何の知らせかを区別できます。 - 起動時の案内で登録を確かめる:プラグインが入っていない、許可された一覧にない、といった理由で登録できなかった場合は、起動画面の案内の下に警告が表示されます。会話は普通に始まるため、この警告を見落とすと「届かない」原因が分からなくなります。
チャネルのサーバーは、セッションごとにClaude Codeが子プロセスとして起動し、そのセッションとだけ標準入出力でやり取りします。会話へメッセージが入るのは、起動時に--channels(自作チャネルの試験では開発用フラグ)で指定した場合だけで、.mcp.jsonに書いただけのサーバーは、起動していてもメッセージを会話へ入れられません。同じパソコンで複数のClaude Codeを動かす場合も、起動時にどのセッションでどのチャネルを指定したかを決めておくと、届き先を取り違えにくくなります。公式資料も、独立した通知の流れを並行して処理したいときは、セッションを分けて動かすよう案内しています。なお、同じボットや同じポートを複数のセッションで同時に使った場合の動きは、公式資料には書かれていません。
channelsの重複・取りこぼし・承認待ち
チャネルを業務の通知に使う場合は、「届いたかどうか」をどこで確かめるかを先に決めておきます。公式のリファレンス(Channels reference)には、次の挙動が書かれています。
| 状況 | どうなるか | 備え方 |
|---|---|---|
| Claudeが作業中に複数届いた | 順番に会話へ積まれ、次のやり取りでまとめて渡される | 独立した通知の流れごとにセッションを分ける |
| セッションがそのサーバーをチャネルとして読み込んでいない | イベントは黙って捨てられ、チャネルのサーバーにもエラーは返らない | 起動時の案内と警告を確かめる |
| 組織の設定でブロックされている | 同じく黙って捨てられる | 起動時の警告と管理設定を確認する |
| 会話(Claude Code)を閉じている | チャネルのサーバーはセッションの子プロセスなので一緒に止まり、受け取れない | 受け取りたい間はセッションを開いておく |
| 席を外している間に承認が必要になった | 答えるまで会話が止まる | 許可の中継に対応したチャネルなら、スマホから承認・拒否できる |
Claude Codeはイベントを受け取っても、受領の返事をチャネルのサーバーへ返しません。サーバー側で通知の送信処理が完了しても、それはClaude Codeへ書き出し終えたというだけで、Claudeが処理したことは示しません。公式資料は、配達の確認が必要なら、チャネルのサーバー側でイベントの状態を記録し、Claudeが処理結果を報告するための返信用ツール(reply tool)を用意する方法を示しています。同じイベントが重複して届いた場合の扱いについては、公式資料に記載がありません。編集部としては、CIの通知などを送るときは、実行IDのような識別子を付帯情報に入れておき、同じ処理を繰り返していないかを後から確かめられるようにしておくことをおすすめします。付帯情報の名前は英数字とアンダースコアだけにします(run_idなど)。ハイフンを含む名前は、公式資料によると黙って捨てられます。
なお、claude -pのような非対話の実行でチャネルを使う場合は、選択式の質問やプランモードの承認など、端末での入力が必要なツールが使えなくなり、入力待ちで止まらないようになっています。承認待ちを減らす方法として、ほとんどの確認を省く--dangerously-skip-permissionsもありますが、公式資料は信頼できる環境でのみ使うよう注意しており、このオプションを使っても自動では承認されない操作は残ります。編集部としては、まず権限の許可ルールで、許してよい操作だけを先に許可しておく方が安全だと考えます。
channelsの安全設定:送信者の許可リストと組織の管理
チャネルは、外部から会話へ文章を入れられる仕組みです。公式資料も、確認のないチャネルは「プロンプトインジェクション」(外部の文章に紛れ込ませた指示でClaudeを操ろうとする手口)の入口になると注意しています。安全のための仕組みは次の3つです。
- 送信者の許可リスト:公式のチャネルは、登録した送信者のIDからのメッセージだけを会話へ通します。TelegramとDiscordはペアリングで自分を登録します(Telegramの既定の設定では、未登録の相手にはペアリング用のコードを返し、メッセージ自体は会話へ入れません)。iMessageは自分宛てのメッセージだけが既定で通ります。
- 許可の中継にも同じ制限:チャネルが許可の中継に対応している場合、許可リストの相手はスマホからツールの実行を承認・拒否できます。つまり、許可リストに入れた人は、パソコンの会話での操作を許す権限も持つことになります。信頼できる相手だけを入れてください。
- 組織の管理設定:管理者は
channelsEnabledで組織全体の利用を、allowedChannelPluginsで使ってよいチャネルのプラグインを決められます。TeamとEnterpriseでは、組織設定の「Claude Code」から「Channels」を有効にします(Ownerの権限が必要)。
自作のチャネルを作る場合も、確認する対象は「どの部屋(グループ)から来たか」ではなく「誰が送ったか」です。公式資料は、グループチャットで部屋単位の許可にすると、そのグループにいる誰でも会話へ指示を入れられてしまうと説明しています。
channelsを止める・受け付けをやめる
チャネルは、セッションを起動するときに--channelsで指定した場合だけ有効になります。受け付けをやめたいときは、次の方法で止めます。
- そのセッションだけ止める:Claude Codeを終了し、
--channelsを付けずに起動し直します。会話を閉じている間は、イベントは届きません。 - 特定の相手やすべての受信を止める:Telegramのチャネルでは、公式プラグインの説明書(ACCESS.md)によると、
/telegram:accessで現在の許可リストを表示できます。特定の相手の許可を外すには、/telegram:access removeの後ろに相手の数字のIDを付けて実行します。/telegram:access policy disabledにすると、許可リストの相手も含めてすべてのメッセージを捨てます。設定はメッセージを受け取るたびに読み直されるため、通常は再起動は要りません(起動時の設定に固定するモードを使っている場合を除きます)。 - 組織として止める:管理者が
channelsEnabledを無効にすると、組織のチャネルは使えなくなります。管理設定でchannelsEnabledが無効または未設定の場合、MCPサーバー自体はつながりますが、チャネルのメッセージは届かず、起動時に警告が表示されます。
自分のシステムからchannelsへ届けるには
社内のCIや監視ツールから届けたい場合は、自分でチャネルを作ることもできます。公式のリファレンスによると、自作のチャネルはMCPの開発キット(@modelcontextprotocol/sdk)で作り、サーバーに次の3点を備えます。
- チャネルとして登録するための宣言(
claude/channel) - 出来事が起きたときの通知(
notifications/claude/channel) - 標準入出力(stdio)でのClaude Codeとの接続
リファレンスには例として、自分のパソコンの8788番ポートでHTTPのPOSTを受け取り、その本文を会話へ届ける小さなwebhook(ほかのサービスが出来事をHTTPで知らせる仕組み)の受信サーバーの作り方が載っています。
研究プレビューの間、自作のチャネルは公式に許可された一覧に入っていないため、--dangerously-load-development-channelsという開発用のフラグで読み込んで試します。このフラグを使うとClaude Codeが確認画面を出すため、対話セッションでしか使えません。claude -pのような非対話の実行やAgent SDKから指定しても無視され、チャネルは登録されません。また、組織のchannelsEnabledの制限はこのフラグでも越えられません。フラグ名にdangerously(危険を承知で)とあるとおり、信頼できない提供元のチャネルには使わないでください。
もう一つ、MCPの公式資料には、新しいMCPクライアントの実行環境(v2)では、MCPのプロトコル版2026-07-28で接続するチャネルのサーバーはチャネルとして登録されない、という注意があります。自作のチャネルが登録されないときは、この条件も確かめてください。公式資料では、標準入出力のサーバーを以前の接続方式にとどめる設定としてMCP_PROTOCOL_NEGOTIATION=legacyが案内されています(すべてのサーバーが以前の方式になります)。
まとめ:channelsは「受け取る会話」と「止め方」を決めてから使う
channelsは、外部の出来事を実行中のClaude Codeの会話へ入れ、作業中の文脈のまま反応させる機能です。最初はfakechatで、起動時の案内と警告、受信の表示、返信の流れを確かめます。実際の通知につなぐ前に、受け取る会話、送ってよい相手、受け取れなかったときの気づき方、止め方の4点を決めておくと、研究プレビューの段階でも、問題が起きたときに原因を切り分けやすくなります。パソコンのセッションを人が別の端末から操作したい場合は、Remote Controlの記事もあわせて読んでください。
業務の通知やチャットの依頼をClaude Codeにつなぐときは、扱ってよい情報、承認を出せる人、止める担当を社内で決めておくと、通知が増えても判断がぶれません。業務に合わせた設計や運用ルールづくりは、PLaiのAI社員導入支援でも相談できます。





