Claude Code から Discord を読み書きする ― Bot を作って MCP でつなぎ、削除の機能は止める
Claude Code から Discord のメッセージを読み書きできるようにしました。Discord に Bot を作り、MCP でつなぐ形です。Mac 3台と AI 用の仮想マシンの、4つの環境で同じ設定にそろえました。削除の機能は最初から止めています。
MCP は、AI に外部の道具を使わせるための共通のつなぎ方です。これまでの記事:4つの AI から自分の LINE に知らせる、AI から X を使う、家のサーバーに AI エージェント用の仮想マシンを作る。
全体の構成

- 使った MCP:第三者が公開している
@pasympa/discord-mcpの 2.2.0。Discord 社の公式のものではありません - できること:サーバーとチャンネルの一覧、メッセージを読む・送る・編集する、検索、リアクションを付ける など
- 止めたこと:メッセージの削除・一括削除、リアクションの削除
- 読み書きできる範囲:Bot を招待したサーバーのうち、Bot に権限があるチャンネル
Discord 上で動くのは、自分のアカウントではなく Bot です。送ったメッセージの送信者も Bot の名前になります。
1. Discord 側の準備

- Application を作る:Discord Developer Portal で「New Application」を押し、名前を付ける
- Intent をオンにする:左の「Bot」を開き、下のほうの「Privileged Gateway Intents」で Message Content Intent だけをオンにする。メッセージの本文を読むのに必要です。最後に「変更を保存」を押す
- トークンを発行する:同じ画面の「Reset Token」で発行し、パソコンの secret フォルダのファイルに保存する
- 招待の URL を作る:左の「OAuth2」→「URL Generator」で、Scopes の
botにチェックを入れる - 権限を選ぶ:Bot Permissions は
View Channels・Send Messages・Read Message Historyの3つにする - URL を開く:作られた URL をブラウザーで開き、招待先のサーバーを選ぶ
- 最後まで進める:「はい」→「認証」まで押す
トークンは、Bot のパスワードにあたるものです。AI とのチャットには貼らず、自分で secret フォルダに保存しました。
Bot の画面には「公開Bot」の設定もあります。オンのままだと、ほかの人もこの Bot を自分のサーバーに入れられます。自分だけで使うならオフにしておくと安心です。
2. 起動用のスクリプト
ほかの連携と同じく、トークンは AI の設定ファイルに書かず、起動のたびに secret フォルダから読みます。
#!/bin/zsh
export PATH=/opt/homebrew/bin:/usr/local/bin:$PATH
export DISCORD_TOKEN="$(cat "$HOME/secret/discord_token.txt")"
export DISCORD_MCP_TOOLSETS=discovery,messages
export DISCORD_MESSAGE_CONTENT=true
# Server Members Intent は Bot 側でオンにしていない。要求すると接続が 4014 で切られる
export DISCORD_GUILD_MEMBERS=false
exec npx -y @pasympa/discord-mcp@2.2.0
DISCORD_MCP_TOOLSETS:使う機能のまとまりを、一覧(discovery)とメッセージ(messages)に絞る。これで機能は 24 個になりますDISCORD_MESSAGE_CONTENT:メッセージの本文を読む。Discord 側の Message Content Intent と合わせますDISCORD_GUILD_MEMBERS:メンバーの情報は要らないので要求しない@2.2.0:版を固定する。第三者のものなので、知らないうちに新しい版に変わらないようにしました
3. 削除の機能を止める
メッセージの機能の中には、削除も含まれています。AI がうっかり消すと元に戻せないので、Claude Code の設定(~/.claude/settings.json)で禁止しました。
{
"permissions": {
"deny": [
"mcp__discord__discord_delete_message",
"mcp__discord__discord_bulk_delete_messages",
"mcp__discord__discord_remove_reactions"
]
}
}
これで使える機能は 21 個です。消したいときは、Discord の画面から自分で消します。
4. 登録して、試す
claude mcp add -s user discord -- ~/bin/discord-mcp.sh
claude mcp list # discord が Connected になれば接続できている
まず mac1 で、サーバーとチャンネルの一覧が取れることを確かめました。次に、テキストチャンネルへ「Claude からの接続テストです」と送り、読み返して同じ文面が返ることを確かめました。送信者は Bot の名前になっていました。
同じスクリプトと禁止の設定を、残りの3つの環境にも入れました。Linux の仮想マシンでは、スクリプトの先頭を #!/bin/bash にして、Homebrew の PATH の行を外しています。環境ごとに確かめた範囲は次のとおりです。
| 環境 | 確かめた範囲 |
|---|---|
| mac1 | メッセージの送信と読み返しまで |
| mac2 | サーバー一覧の取得まで |
| mac3 | 接続(Connected)の表示まで |
| AI 用の仮想マシン | サーバー一覧の取得まで |
使うときの決まり
- 送る前に、必ず人が文面を確認する
- 送り先のサーバーとチャンネルも確かめる
- パスワードやキーなど、秘密の情報は送らない
つまずいたところ
「Used disallowed intents」で接続できない
トークンは正しいのに、Discord login failed: Used disallowed intents と出て接続できませんでした。Message Content Intent がオンになっていないのに、スクリプト側で要求していたためです。試しに要求を外すと接続できたので、原因はここだと分かりました。
Intent のスイッチは Bot の画面を下までスクロールしたところにあります。オンにしたあとの「変更を保存」も忘れずに。同じ理由で、オンにしていない Server Members Intent は、スクリプトで要求しないようにしています。
接続できたのに、サーバーの一覧が空
Bot はログインできているのに、サーバーの一覧が空で返ってきました。招待の画面を途中で止めていて、Bot がどのサーバーにも入っていなかったためです。URL を開くだけでは足りず、サーバーを選んで「はい」→「認証」まで進める必要があります。選択肢に出るのは、自分に「サーバー管理」の権限があるサーバーだけです。
思っていたのと別のサーバーに招待していた
Discord にサーバーを2つ持っていて、テストのメッセージは、Claude 用に考えていたのとは別のサーバーに届きました。そちらには、ほかの参加者もいます。Bot は招待されたサーバーのメッセージを読み書きできるので、招待するときはサーバーの名前をよく確かめます。
動いている Claude Code には反映されない
MCP の設定は起動するときに読み込まれるので、すでに動いている Claude Code からは使えません。一度終了して、起動し直します。
- 入力欄で
/exitを実行する(先頭に空白を入れると、ただのメッセージとして届きます) - シェルに戻ったら、同じフォルダで
claude --continueを実行する /mcpでdiscordが出ているか確かめる
ここでは3つ、はまりました。
claude --continueを Claude Code の入力欄に打っても、ただのメッセージになるだけです--continueは、フォルダごとに最後の会話を開きます。別のフォルダで実行すると、別の会話が開きます- Orca を終了して起動し直しても、中の Claude Code は動き続けていて、再起動になりませんでした
claude コマンドが見つからない環境があった
mac2 では、SSH で入ったシェルから claude コマンドが見つかりませんでした。そこで claude mcp add は使わず、~/.claude.json の mcpServers に、控えを取ってから直接書きました。
"mcpServers": {
"discord": {
"type": "stdio",
"command": "/Users/ユーザー名/bin/discord-mcp.sh",
"args": [],
"env": {}
}
}
まとめ
- Discord に Bot を作り、第三者製の MCP で Claude Code からメッセージを読み書きできるようにした
- トークンは設定に書かず、起動のたびに secret フォルダから読む
- 機能は起動時に一覧とメッセージの 24 個に絞り、削除系の3つを Claude Code の設定で禁止した
- Bot は招待されたサーバーを読み書きできるので、招待先をよく確かめる
- 設定を読み込ませるには、Claude Code を起動し直す
