discord-mcp について
discord-mcp は、Agent 経由で Discord サーバーを管理したいユーザー向けの、Discord REST API 用コミュニティ MCP サーバーです。メッセージやチャンネル、メンバーなどをツールセットで提供し、対象サーバーの制限や破壊的操作の承認にも対応します。
主な機能
- 01メッセージ、チャンネル、メンバーなどの API 操作
- 02ツールセットごとの機能有効化
- 03整合性検証付きのファイル送受信
- 04破壊的操作前の承認
- 05ギルドの許可リストと読み取り専用モード
- 06ツール結果やログへのトークン非表示
活用シーン
- 01サーバー内メッセージの要約や検索
- 02添付ファイル付きのお知らせ投稿
- 03スレッド、メンバー、ロールの管理
- 04イベントの登録や Webhook 通知の送信
MCP 対応
MCP サーバーとして、メッセージ、リアクション、スレッド、チャンネル、Webhook、ギルド、メンバー、ロール、モデレーション、イベント、招待に関する Discord REST API ツールをクライアントに公開します。利用可能な機能はツールセットで制御できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @qungtai/discord-mcpDISCORD_TOKENシークレットDiscord Bot TokenDISCORD_MCP_ALLOWED_GUILDSComma-separated list of allowed guild IDs. When set, operations outside these guilds are refused.DISCORD_MCP_TOOLSETSComma-separated list of enabled toolsets. Available: core, messages, reactions, threads, channels, webhooks, guild, members, roles, moderation, events, invites.DISCORD_MCP_READ_ONLYBlocks all mutating actions and allows read-only tools only (true or false). Any other value stops startup.DISCORD_MCP_APPROVALConfirmation mode for destructive operations (elicitation or none). Any other value stops startup.DISCORD_MCP_ALLOW_DMSPermits direct messages and user-scoped operations alongside an active guild allowlist (true or false). Any other value stops startup.DISCORD_MCP_FILE_ROOTSOptional comma-separated list of absolute directory paths accessible for uploads. When unset, empty, or parsing to no entries, file access is open by default for any absolute path, except hidden files and directories.DISCORD_MCP_DOWNLOAD_DIRAbsolute directory path where attachment downloads are stored. Defaults to ~/Downloads/discord-mcp and is created recursively on first download.DISCORD_MCP_MAX_DOWNLOAD_BYTESMaximum download size in bytes for discord_download_attachment (defaults to 100 MiB).DISCORD_MCP_MAX_UPLOAD_BYTESMaximum upload size in bytes (defaults to 20 MiB).DISCORD_MCP_REQUEST_TIMEOUT_MSHTTP request timeout in milliseconds for Discord REST API requests.DISCORD_MCP_RATE_LIMIT_WAIT_MSMaximum wait duration in milliseconds when encountering a Discord rate limit before aborting.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
21掲載時のツール一覧 · 4 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| reason | string | いいえ | X-Audit-Log-Reason ヘッダーで送信する監査ログの理由(最大 512 文字) |
| channel_id | string | はい | 削除するメッセージが含まれるチャンネルの ID |
| message_ids | array | はい | 削除する、14 日以内の重複しないメッセージ ID を 2~100 件含む配列 |
詳細
discord-mcp
Discord REST API 用のコミュニティ製 Model Context Protocol(MCP)サーバーです。
-
コア、メッセージ、リアクション、スレッド、チャンネル、Webhook、ギルド、メンバー、ロール、モデレーション、イベント、招待にわたる 137 個のツールを提供します。
-
安定版の Discord API 操作 250 件のうち 141 件を実装しています(docs/coverage.md を参照)。123 件は稼働中のサーバーで、18 件はモック契約で検証済みです。
-
サンドボックス化されたディレクトリ境界と SHA-256 整合性チェックに対応したファイルのアップロードとダウンロード。
-
MCP エリシテーションによる、破壊的な操作の前の承認。
-
ギルドの許可リスト、読み取り専用モード、ツールセットの選択。
-
トークンがツールの引数、出力、ログストリームに表示されることはありません。
ステータス
0.1.0、初期リリースです。npm では @qungtai/discord-mcp、MCP Registry では io.github.qungtai/discord-mcp として利用できます。
クイックスタート
1. Discord bot を作成する
- Discord Developer Portal を開き、「New Application」を選択します。
- 「Bot」タブに移動し、「Reset Token」を選択して、bot トークンを安全な場所にコピーします。
- 「Privileged Gateway Intents」で「Message Content」インテント(メッセージ本文の読み取りに必要)と「Server Members」インテント(メンバーの一覧表示と検索に必要)を有効にします。「Presence」インテントは有効にしないでください。このサーバーは REST API を使用し、Gateway には接続しません。
- 「OAuth2」>「URL Generator」に移動します。
botスコープを選択し、ツールに必要な権限を選択します(ツールセットごとの要件と権限整数については、以下のツールセットセクションを参照してください)。生成された招待 URL では、permissions=<integer>を指定します(たとえば、デフォルトのツールセットの場合はhttps://discord.com/oauth2/authorize?client_id=<application_id>&scope=bot&permissions=2815162084228096)。Developer Portal では権限が「Send Messages」や「Manage Channels」のように表示されます。ロールまたはメンバーを管理する場合は、「Discord Server Settings」>「Roles」で、bot の最上位ロールが管理対象のロールより上にあることを確認してください。ブラウザーで招待 URL を開き、bot をサーバーに招待します。 - Discord クライアントで「User Settings」>「Advanced」を開き、「Developer Mode」を有効にします。サイドバーのサーバーアイコンを右クリックし、「Copy Server ID」を選択します。
2. 標準構成
MCP クライアントの構成にサーバーを追加します。
{
"mcpServers": {
"discord": {
"command": "npx",
"args": ["-y", "@qungtai/discord-mcp"],
"env": {
"DISCORD_TOKEN": "your-bot-token"
}
}
}
}
推奨:DISCORD_MCP_ALLOWED_GUILDS を env に追加し、手順 5 で取得したサーバー ID を設定してください。これにより、bot がそのサーバー内でのみ操作できるようになります。
"DISCORD_MCP_ALLOWED_GUILDS": "123456789012345678"
DISCORD_MCP_TOOLSETS を使用して、さらにツールセットを有効にできます。DISCORD_MCP_FILE_ROOTS を使用してアップロード先を特定のフォルダーに制限できます。ダウンロード先には DISCORD_MCP_DOWNLOAD_DIR を設定します。
3. クライアントのセットアップ
Claude Code
CLI から追加します(デフォルトではローカルプロジェクトのスコープです。すべてのプロジェクトに適用するには -s user を追加します)。
claude mcp add discord -e DISCORD_TOKEN="your-bot-token" -- npx -y @qungtai/discord-mcp
または、~/.claude.json で手動で設定します。
{
"mcpServers": {
"discord": {
"command": "npx",
"args": ["-y", "@qungtai/discord-mcp"],
"env": {
"DISCORD_TOKEN": "your-bot-token"
}
}
}
}
Claude Desktop
お使いのオペレーティングシステムの設定ファイルを編集します。
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%/Claude/claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json(非公式ビルド)
サーバーブロックを追加します。
{
"mcpServers": {
"discord": {
"command": "npx",
"args": ["-y", "@qungtai/discord-mcp"],
"env": {
"DISCORD_TOKEN": "your-bot-token"
}
}
}
}
Codex
CLI から追加します。
codex mcp add discord --env DISCORD_TOKEN="your-bot-token" -- npx -y @qungtai/discord-mcp
または、~/.codex/config.toml に追加します。
[mcp_servers.discord]
command = "npx"
args = ["-y", "@qungtai/discord-mcp"]
[mcp_servers.discord.env]
DISCORD_TOKEN = "your-bot-token"
Cursor
.cursor/mcp.json に追加するか、Cursor Settings > MCP で設定します。
{
"mcpServers": {
"discord": {
"command": "npx",
"args": ["-y", "@qungtai/discord-mcp"],
"env": {
"DISCORD_TOKEN": "your-bot-token"
}
}
}
}
VS Code
ボットトークン用の入力変数を指定して、.vscode/mcp.json で設定します。
{
"servers": {
"discord": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@qungtai/discord-mcp"],
"env": {
"DISCORD_TOKEN": "${input:discordToken}"
}
}
},
"inputs": [
{
"id": "discordToken",
"type": "promptString",
"description": "Discord Bot Token",
"password": true
}
]
}
MCP Inspector
インスペクターを起動します。
npx @modelcontextprotocol/inspector -- npx -y @qungtai/discord-mcp
接続する前に、インスペクターの環境パネルで DISCORD_TOKEN を設定します。
Docker を使用したインストール
Docker でサーバーを起動します。
docker run -i --rm -e DISCORD_TOKEN="your-bot-token" -v /path/to/downloads:/home/node/Downloads/discord-mcp -v /path/to/uploads:/uploads ghcr.io/qungtai/discord-mcp:latest
ファイルツールを使用する場合は、ホストディレクトリを -v host_path:container_path でマウントして、コンテナーの外部からアップロードとダウンロードにアクセスできるようにします。ツールに渡すアップロードパスには、コンテナーパスを指定する必要があります。Linux のバインドマウントで、コンテナーのユーザー権限によりマウントしたホストディレクトリに書き込めない場合は、--user "$(id -u):$(id -g)" -e DISCORD_MCP_DOWNLOAD_DIR=/home/node/Downloads/discord-mcp を渡します。
MCP クライアントで設定します(Linux でカスタムの --user を使用する場合は、引数にも -e DISCORD_MCP_DOWNLOAD_DIR=/home/node/Downloads/discord-mcp を追加します)。
{
"mcpServers": {
"discord": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"DISCORD_TOKEN",
"-v",
"/path/to/downloads:/home/node/Downloads/discord-mcp",
"-v",
"/path/to/uploads:/uploads",
"ghcr.io/qungtai/discord-mcp:latest"
],
"env": {
"DISCORD_TOKEN": "your-bot-token"
}
}
}
}
プロンプトの例
これらのプロンプトを実行するには、各プロンプトで必要なツールセットを DISCORD_MCP_TOOLSETS で有効にします(例:DISCORD_MCP_TOOLSETS="core,messages,threads,members,events,webhooks")。
- "チャンネル 123456789012345678 の直近 50 件のメッセージを要約してください。"(messages ツールセット)
- "リリースノートを添えてチャンネル 123456789012345678 にお知らせを投稿し、
/Users/name/Downloads/banner.pngを添付してください。"(messages ツールセット) - "チャンネル 123456789012345678 に 'incident-402' という名前のプライベートスレッドを作成し、ユーザー 987654321098765432 を追加してください。"(threads ツールセット)
- "現在ロール 555666777888999000 を持っているサーバーメンバーをすべて一覧表示してください。"(members ツールセット)
- "ステージチャンネル 123456789012345678 で、明日 18:00 UTC に開始する 'Sprint Planning' というコミュニティ通話イベントをスケジュールしてください。"(events ツールセット)
- "カスタムユーザー名 'Deploy Bot' を使って、Webhook 111222333444555666 からリリース通知を送信してください。"(webhooks ツールセット)
ツールセット
| ツールセット | デフォルト | ツール数 | 対応範囲 | ボットの権限 |
|---|---|---|---|---|
| core | はい | 6 | 現在のボットユーザー、ユーザー検索、ギルド一覧と退出、ユーザー接続 | なし |
| messages | はい | 15 | メッセージの送信、取得、編集、削除、ピン留め、検索、投票、添付ファイル | AttachFiles, EmbedLinks, ManageMessages, MentionEveryone, PinMessages, ReadMessageHistory, SendMessages, SendMessagesInThreads, SendPolls, SendTTSMessages, UseExternalStickers, ViewChannel |
| reactions | いいえ | 6 | メッセージへのリアクションの追加、削除、一覧表示 | AddReactions, ManageMessages, ReadMessageHistory, UseExternalEmojis, ViewChannel |
| threads | いいえ | 13 | スレッドとスレッドメンバーの作成、一覧表示、参加、退出、アーカイブ | CreatePrivateThreads, CreatePublicThreads, EmbedLinks, ManageThreads, ReadMessageHistory, SendMessages, SendMessagesInThreads, ViewChannel |
| channels | いいえ | 13 | チャンネルの作成、編集、削除、権限の上書き、ボイスチャンネルのステータス | Connect, ManageChannels, ManageRoles, ManageThreads, ManageWebhooks, SetVoiceChannelStatus, ViewChannel |
| webhooks | いいえ | 10 | ウェブフックの作成、編集、削除、実行、ウェブフックメッセージの編集 | ManageWebhooks |
| guild | いいえ | 22 | ギルド設定、監査ログ、オンボーディング、ウェルカム画面、ウィジェット | ManageGuild, ManageRoles, ViewAuditLog |
| members | いいえ | 12 | メンバーの一覧表示、検索、更新、キック、ミュート、スピーカー無効化、整理 | ChangeNickname, Connect, DeafenMembers, KickMembers, ManageGuild, ManageNicknames, ManageRoles, ModerateMembers, MoveMembers, MuteMembers |
| roles | いいえ | 7 | ギルドロールの作成、更新、削除、一覧表示、ロール別メンバー数 | ManageRoles |
| moderation | いいえ | 10 | メンバーのBAN、BAN解除、BAN一覧、自動モデレーションのルール | BanMembers, ManageGuild, ModerateMembers |
| events | いいえ | 11 | スケジュール済みイベントの作成、更新、削除、参加者の一覧表示 | CreateEvents, ManageEvents |
| invites | いいえ | 12 | 招待の作成、取得、削除、ギルド/チャンネルの招待、対象ユーザー | CreateInstantInvite, ManageChannels, ManageGuild, ManageRoles |
デフォルトは core,messages です。DISCORD_MCP_TOOLSETS(カンマ区切り)で、さらに多くのツールセットを有効にできます。 |
デフォルトのツールセットの権限整数値:2815162084228096。
実装されているすべてのツールセットの権限整数値:3115458644933879。
core(6 個のツール)
discord_get_my_user:現在のボットユーザーを取得しますdiscord_get_user:ID でユーザーを取得しますdiscord_leave_guild:ギルドから退出します(承認を求めます)discord_list_my_connections:ボットユーザーの接続一覧を取得しますdiscord_list_my_guilds:ボットがメンバーになっているギルドの一覧を取得します。after=next_afterでページングします。DISCORD_MCP_ALLOWED_GUILDS が設定されている場合、ページングは利用できません。許可されているすべてのギルドが 1 回の呼び出しで返されます。discord_update_my_user:現在のボットのユーザー名、アバター、またはバナーを更新します(承認を求めます)
messages(15 個のツール)
discord_bulk_delete_messages:チャンネルから複数のメッセージ(2~100 件、14 日未満)を一度に削除します(承認を求めます)discord_create_pin:チャンネル内のメッセージをピン留めしますdiscord_crosspost_message:アナウンスチャンネルのメッセージをクロスポスト(公開)して、フォロー中のチャンネルに配信しますdiscord_delete_message:チャンネルからメッセージを削除します(承認を求めます)discord_delete_pin:チャンネル内のメッセージのピン留めを解除しますdiscord_download_attachment:メッセージの添付ファイルを DISCORD_MCP_DOWNLOAD_DIR にダウンロードしますdiscord_edit_message:メッセージの内容、埋め込み、添付ファイルのメタデータを編集するか、添付ファイルを追加しますdiscord_end_poll:メッセージの投票をただちに終了しますdiscord_get_message:メッセージを取得しますdiscord_list_messages:メッセージを新しい順に一覧表示します。before=next_beforeでページングしますdiscord_list_pins:チャンネル内のピン留めされたメッセージを一覧表示しますdiscord_list_poll_answer_voters:特定の投票回答に投票したユーザーの一覧を取得しますdiscord_search_guild_messages:ギルド内のメッセージを検索します。offset=next_offsetでページングしますdiscord_send_message:メッセージを送信しますdiscord_trigger_typing_indicator:チャンネルに入力中インジケーターを表示します
reactions(6 個のツール)
discord_add_my_message_reaction:現在のユーザーとしてメッセージにリアクションを追加しますdiscord_delete_all_message_reactions:メッセージのリアクションをすべて削除します(承認を求めます)discord_delete_all_message_reactions_by_emoji:メッセージの特定の絵文字によるリアクションをすべて削除します(承認を求めます)discord_delete_my_message_reaction:メッセージから現在のユーザーのリアクションを削除しますdiscord_delete_user_message_reaction:メッセージから別のユーザーのリアクションを削除します(承認を求めます)discord_list_message_reactions_by_emoji:特定の絵文字でリアクションしたユーザーの一覧を取得します
threads(13 個のツール)
- `discord_add_thread_member`: スレッドにユーザーを追加します - `discord_create_thread`: 既存のメッセージなしでチャンネルに新しいスレッドを作成します(メッセージが指定されている場合はフォーラム投稿を開始します)。テキストチャンネルでタイプが省略された場合、デフォルトでプライベートスレッド(タイプ 12)になります。招待可能の設定はプライベートスレッドにのみ適用されます。 - `discord_create_thread_from_message`: チャンネル内の既存のメッセージから新しいスレッドを作成します - `discord_delete_thread_member`: スレッドからユーザーを削除します(承認を求めます) - `discord_get_thread_member`: ユーザー ID でスレッドのメンバーを取得します - `discord_join_thread`: 現在のユーザーをスレッドに追加します - `discord_leave_thread`: 現在のユーザーをスレッドから削除します - `discord_list_active_guild_threads`: パブリックスレッドとプライベートスレッドを含む、サーバー内のすべてのアクティブなスレッドを取得します - `discord_list_my_private_archived_threads`: チャンネル内でボットが参加しているプライベートなアーカイブ済みスレッドを一覧表示します。`before=next_before` でページングします - `discord_list_private_archived_threads`: チャンネル内のプライベートなアーカイブ済みスレッドを一覧表示します。`before=next_before` でページングします - `discord_list_public_archived_threads`: チャンネル内のパブリックなアーカイブ済みスレッドを一覧表示します。`before=next_before` でページングします - `discord_list_thread_members`: スレッドのメンバーを一覧表示します。注:`after` と `limit` によるページングは、`with_member` が true で、ボットに GUILD_MEMBERS インテントがある場合にのみ適用されます。`after=next_after` でページングします - `discord_search_threads`: チャンネル内のスレッドを検索します。新しいスレッドが検索結果に表示されるまで、約 30 秒かかることがあります。`offset=next_offset` でページングしますチャンネル(13 ツール)
discord_bulk_update_guild_channels: サーバー内の複数のチャンネルの位置を変更します(承認を求めます)discord_create_dm: ユーザーとのダイレクトメッセージチャンネルを開きますdiscord_create_guild_channel: サーバーに新しいチャンネルを作成します(承認を求めます)discord_delete_channel: チャンネルを削除するか、プライベートメッセージを閉じます(承認を求めます)discord_delete_channel_permission_overwrite: チャンネルの権限上書きを削除します(承認を求めます)discord_follow_channel: アナウンスチャンネルをフォローして、対象チャンネルにメッセージを送信しますdiscord_get_channel: ID でチャンネルを取得しますdiscord_get_member_permissions: サーバーまたはチャンネルにおけるメンバーの計算済み権限を取得しますdiscord_get_role_permissions: サーバーまたはチャンネルにおけるロールの計算済み権限を取得しますdiscord_list_guild_channels: サーバー内のチャンネルを一覧表示しますdiscord_set_channel_permission_overwrite: チャンネルの権限上書きを設定または更新します(承認を求めます)discord_update_channel: チャンネルの設定を更新します(承認を求めます)discord_update_voice_channel_status: ボイスチャンネルのステータスを設定またはクリアします(承認を求めます)
ウェブフック(10 ツール)
discord_create_webhook: チャンネルに新しいウェブフックを作成しますdiscord_delete_webhook: ウェブフックを完全に削除します(承認を求めます)discord_delete_webhook_message: ウェブフックが以前に送信したメッセージを削除します(承認を求めます)discord_edit_webhook_message: ウェブフックが以前に送信したメッセージを編集します(承認を求めます)discord_execute_webhook: ウェブフックを実行してメッセージを送信します(承認を求めます)discord_get_webhook: ID でウェブフックを取得しますdiscord_get_webhook_message: ウェブフックが以前に送信したメッセージを取得しますdiscord_list_channel_webhooks: チャンネル内のウェブフックを一覧表示しますdiscord_list_guild_webhooks: サーバー内のウェブフックを一覧表示しますdiscord_update_webhook: ウェブフックの名前やアバターを更新するか、別のチャンネルに移動します(承認を求めます)
サーバー(22 ツール)
- `discord_create_guild_template`: ギルドのテンプレートを作成します - `discord_delete_guild_integration`: ギルドからインテグレーションを削除します(承認を求めます) - `discord_delete_guild_template`: ギルドのテンプレートを削除します(承認を求めます) - `discord_get_guild`: IDでギルドを取得します - `discord_get_guild_new_member_welcome`: ギルドの新規メンバー向けウェルカム設定(ホーム設定)を取得します - `discord_get_guild_onboarding`: ギルドのオンボーディング設定を取得します - `discord_get_guild_preview`: ギルドのプレビューを取得します - `discord_get_guild_template`: コードでギルドのテンプレートを取得します - `discord_get_guild_vanity_url`: ギルドのバニティURLコードを取得します - `discord_get_guild_welcome_screen`: ギルドのウェルカム画面を取得します - `discord_get_guild_widget`: ギルドのウィジェットデータを取得します - `discord_get_guild_widget_settings`: ギルドのウィジェット設定を取得します - `discord_list_guild_audit_log_entries`: ギルドの監査ログエントリを一覧表示します - `discord_list_guild_integrations`: ギルドのインテグレーションを一覧表示します - `discord_list_guild_templates`: ギルドのテンプレートを一覧表示します - `discord_sync_guild_template`: ギルドのテンプレートを現在のギルドの状態に同期します(承認を求めます) - `discord_update_guild`: ギルドの設定を更新します(承認を求めます) - `discord_update_guild_incident_actions`: ギルドで招待またはDMが無効になるまでの時間を更新します(承認を求めます) - `discord_update_guild_onboarding`: ギルドのオンボーディング設定を設定します(承認を求めます) - `discord_update_guild_template`: ギルドのテンプレートのメタデータを更新します(承認を求めます) - `discord_update_guild_welcome_screen`: ギルドのウェルカム画面を更新します(承認を求めます) - `discord_update_guild_widget_settings`: ギルドのウィジェット設定を更新します(承認を求めます)メンバー(12個のツール)
discord_add_guild_member_role: ギルドメンバーにロールを追加します(承認を求めます)discord_delete_guild_member: ギルドからメンバーを削除(キック)します(承認を求めます)discord_delete_guild_member_role: ギルドメンバーからロールを削除します(承認を求めます)discord_get_guild_member: ユーザーIDでギルドメンバーを取得しますdiscord_list_guild_join_requests: ギルドへの参加リクエストを一覧表示します。申請ステータスで絞り込むこともできますdiscord_list_guild_members: ギルドメンバーを一覧表示します。特権GatewayインテントのServer Members(GUILD_MEMBERS)が必要です。after=next_afterでページ分割しますdiscord_preview_prune_guild: プルーニング操作で削除されるメンバー数を取得しますdiscord_prune_guild: ギルドから非アクティブなメンバーを削除するプルーニング操作を開始します(承認を求めます)discord_review_guild_join_request: ギルドへの参加リクエストを承認または拒否します。rejection_reasonは、actionがREJECTEDの場合にのみ使用されます(承認を求めます)discord_search_guild_members: ユーザー名またはニックネームが検索語で始まるギルドメンバーを検索します。特権GatewayインテントのServer Members(GUILD_MEMBERS)が必要ですdiscord_update_guild_member: ギルドメンバーの属性を更新します。Discordではここでボット自身を編集できません。ボット自身のニックネームを変更するにはdiscord_update_my_guild_memberを使用します。channel_idを指定するとメンバーをボイスチャンネルに移動し、nullを指定すると切断します(承認を求めます)discord_update_my_guild_member: 現在のボットのニックネームまたはギルド内のメンバープロフィールを更新します
ロール(7個のツール)
discord_bulk_update_guild_roles: ギルド内のロールオブジェクトのリストの位置を変更します(承認を求めます)discord_create_guild_role: ギルドに新しいロールを作成します(承認を求めます)discord_delete_guild_role: ギルドのロールを削除します(承認を求めます)discord_get_guild_role: ギルドのロールを取得しますdiscord_get_guild_role_member_counts: ギルドのロールごとのメンバー数を取得しますdiscord_list_guild_roles: ギルドのロールを一覧表示しますdiscord_update_guild_role: ギルドのロールを更新します(承認を求めます)
モデレーション(10個のツール)
イベント(11 個のツール)
discord_count_guild_scheduled_event_users:ギルドのスケジュール済みイベントとその例外のユーザー数を取得しますdiscord_create_guild_scheduled_event:ギルドのスケジュール済みイベントを作成しますdiscord_create_guild_scheduled_event_exception:繰り返し行われるギルドのスケジュール済みイベントの例外を作成しますdiscord_delete_guild_scheduled_event:ギルドのスケジュール済みイベントを削除します(承認を求めます)discord_delete_guild_scheduled_event_exception:繰り返し行われるギルドのスケジュール済みイベントの例外を削除します(承認を求めます)discord_get_guild_scheduled_event:ID でギルドのスケジュール済みイベントを取得しますdiscord_list_guild_scheduled_event_exception_users:ギルドのスケジュール済みイベントの特定の繰り返し例外を購読しているユーザーを、ユーザー ID の昇順で一覧表示します。after=next_after でページ分けしますdiscord_list_guild_scheduled_event_users:ギルドのスケジュール済みイベントを購読しているユーザーを、ユーザー ID の昇順で一覧表示します。after=next_after でページ分けしますdiscord_list_guild_scheduled_events:ギルドのスケジュール済みイベントを一覧表示しますdiscord_update_guild_scheduled_event:ギルドのスケジュール済みイベントを変更します(承認を求めます)discord_update_guild_scheduled_event_exception:繰り返し行われるギルドのスケジュール済みイベントの例外を変更します(承認を求めます)
招待(12 個のツール)
discord_add_invite_target_user:既存の招待に対象ユーザーを追加します(承認を求めます)discord_bulk_add_invite_target_users:既存の招待に複数の対象ユーザーを追加します(承認を求めます)discord_bulk_delete_invite_target_users:既存の招待から複数の対象ユーザーを削除します(承認を求めます)discord_create_channel_invite:チャンネルの新しい招待を作成します(承認を求めます)discord_delete_invite:コードで招待を削除します(承認を求めます)discord_delete_invite_target_user:既存の招待から対象ユーザーを削除します(承認を求めます)discord_get_invite:コードで招待を取得します。許可リストの設定下では、メッセージを確認できるように、target_message_id を設定する場合は target_channel_id も必要です。discord_get_invite_target_users_job_status:招待の対象ユーザー処理のステータスを取得しますdiscord_list_channel_invites:チャンネルの有効な招待をすべて取得しますdiscord_list_guild_invites:ギルドの有効な招待をすべて取得しますdiscord_list_invite_target_users:招待の対象ユーザーを取得します。レスポンスは csv フィールドの CSV テキストとして返されます。discord_set_invite_target_users:CSV ファイルを使用して招待の対象ユーザーを設定します。(承認を求めます)
設定
| 変数 | デフォルト | 説明 |
|---|---|---|
DISCORD_TOKEN | 必須 | Discord ボットの認証トークンです。 |
DISCORD_MCP_ALLOWED_GUILDS | (空) | 許可するギルド ID のカンマ区切りリストです。設定すると、これらのギルド以外での操作は拒否されます。 |
DISCORD_MCP_ALLOW_DMS | false | 有効なギルド許可リストと併用して、ダイレクトメッセージおよびユーザー単位の操作を許可します(true または false)。それ以外の値を指定すると起動が停止します。 |
DISCORD_MCP_TOOLSETS | core,messages | 有効にするツールセットのカンマ区切りリストです。利用可能な項目:core、messages、reactions、threads、channels、webhooks、guild、members、roles、moderation、events、invites。 |
DISCORD_MCP_READ_ONLY | false | すべての変更操作をブロックし、読み取り専用ツールのみを許可します(true または false)。それ以外の値を指定すると起動が停止します。 |
DISCORD_MCP_APPROVAL | elicitation | 破壊的操作の確認モードです(elicitation または none)。それ以外の値を指定すると起動が停止します。 |
DISCORD_MCP_FILE_ROOTS | (空) | アップロードにアクセスできるディレクトリパスの任意のカンマ区切りリストです。先頭の ~/ はユーザーのホームディレクトリに展開されます。未設定、空、または解析後に項目がない場合、隠しファイルと隠しディレクトリ、システムパス(/proc、/sys、/dev)、およびアプリケーション設定ディレクトリ(macOS の ~/Library、Windows の %APPDATA% と %LOCALAPPDATA%)を除き、任意の絶対パスへのファイルアクセスがデフォルトで許可されます。 |
DISCORD_MCP_DOWNLOAD_DIR | ~/Downloads/discord-mcp | 添付ファイルのダウンロードを保存するディレクトリパスです。先頭の ~/ はユーザーのホームディレクトリに展開されます。デフォルトは ~/Downloads/discord-mcp で、初回のダウンロード時に再帰的に作成されます。 |
DISCORD_MCP_REQUEST_TIMEOUT_MS | 15000 | Discord REST API リクエストの HTTP タイムアウト(ミリ秒)です。 |
DISCORD_MCP_RATE_LIMIT_WAIT_MS | 5000 | Discord のレート制限に達した場合に中断するまでの最大待機時間(ミリ秒)です。 |
DISCORD_MCP_MAX_UPLOAD_BYTES | 20971520 | アップロードの最大サイズ(バイト単位)です(デフォルトは 20 MiB)。 |
DISCORD_MCP_MAX_DOWNLOAD_BYTES | 104857600 | discord_download_attachment のダウンロード最大サイズ(バイト単位)です(デフォルトは 100 MiB)。 |
安全性
ギルドの許可リストとDMポリシー
DISCORD_MCP_ALLOWED_GUILDS:すべてのボット操作を特定のギルドIDに制限します。許可リストにないギルドを対象とする操作は拒否されます。- DM以外のギルド外リソース(アプリケーションレベルのWebhookやフレンド招待など)は、ギルドの許可リストが有効な場合、
DISCORD_MCP_ALLOW_DMSの設定にかかわらず拒否されます。 discord_list_my_guildsは、許可されているすべてのギルドを1つの応答で返します。許可リストが設定されている場合、ページネーション用パラメーター(before、after、limit)を拒否します。- ギルドの許可リストが設定されている場合、ダイレクトメッセージとユーザー単位の操作には
DISCORD_MCP_ALLOW_DMS=trueが必要です。
エリシテーションによる承認
「承認を求める」と記されたツールは、MCPエリシテーション(elicitation/create)による確認が必要です。破壊的な操作はデフォルトで承認が必要ですが、次の6つは例外です。
discord_edit_message:ボット自身のメッセージを編集しても、ほかのユーザーの履歴は削除されず、内容が置き換えられるだけなので、承認は不要です。discord_end_poll:Discordでは投票の作成者のみが投票を終了できるため、ボット自身の投票のみを終了できます。discord_delete_pin:ピン留めの解除は元に戻せる操作であり、メッセージの内容も削除されません。discord_delete_my_message_reaction:ボット自身のリアクションを削除しても、ボット自身の状態だけに影響します。discord_leave_thread:公開スレッドから退出しても、ボット自身のメンバーシップだけが削除されます。discord_update_my_guild_member:ボット自身のギルドメンバープロフィールを編集しても、ボット自身のニックネーム、アバター、バナーだけに影響します。
サーバーでは、クライアントがelicitation.formを通知する必要があります。検証済みなのはClaude CodeとCodexのみです。Claude Desktop、Cursor、VS Codeは未検証です。
- Claude Codeではエリシテーションのダイアログが表示され、ユーザーが承認すると処理が続行されます。
- Codexのオンデマンド承認モード(
codex -a on-request)では、確認プロンプトが表示されます。フルアクセスモードでは、Codexはエリシテーションのリクエストを自動的に拒否し、ツールは「Approval declined」を返します。 - MCPエリシテーションに対応していないクライアントを使用する場合は、
DISCORD_MCP_APPROVAL=noneを設定してサーバー側のエリシテーションを回避し、クライアント標準のツール実行確認を使用してください。エリシテーションがない状態では、破壊的なツールはDISCORD_MCP_APPROVAL=noneを指定するポリシーエラーを返し、拒否されます。 DISCORD_MCP_APPROVAL=noneを設定すると、破壊的なツールに対するサーバー側の承認が無効になります。サーバーは起動時に警告をstderrに出力します。
読み取り専用モード
DISCORD_MCP_READ_ONLY=trueを設定すると、すべての変更を伴うツール(書き込みおよび破壊的な操作)がパイプラインレベルで拒否されます。
ファイルシステムの境界
- アップロード:デフォルトではファイルアクセスに制限がありません。
DISCORD_MCP_FILE_ROOTSが未設定または空の場合、ファイルを添付するツールは、隠しファイルやディレクトリ(.で始まる要素を含むパス)、/proc、/sys、/dev以下のシステムパス、アプリケーション設定ディレクトリ(macOSでは~/Library、Windowsでは%APPDATA%および%LOCALAPPDATA%)を除き、任意の絶対パスを読み取ることができます。オープンモードのルールは、チャンネルのコンテンツを通じて認証情報を漏えいさせようとするプロンプトインジェクションから保護します。これらのディレクトリ内のファイルへのハードリンクや、ほかの場所にあるドットで始まらない名前のシークレットは検出されません。ボットトークンを含むバイト列のファイルはアップロードを拒否されます。アップロードを制限するには、許可するディレクトリをカンマ区切りで指定してDISCORD_MCP_FILE_ROOTSを設定します。明示的に指定したルート内では、隠しファイルも許可されます。相対パスと..セグメントは常に拒否されます。検査は字句上のパスと解決後のrealpathの両方に対して行われます。 - ダウンロード:
discord_download_attachmentでダウンロードした添付ファイルは、DISCORD_MCP_DOWNLOAD_DIR(デフォルトは~/Downloads/discord-mcp)内に保存されます。このディレクトリは初回のダウンロード時に再帰的に作成され、SHA-256による完全性検証が行われます。DISCORD_MCP_MAX_DOWNLOAD_BYTES(デフォルトは100 MiB)を超えるダウンロードは、ダウンロード前に拒否されるか、ストリーミング中に中止されます。
認証情報の保護
DISCORD_TOKEN は環境変数から直接読み込まれます。このトークンがツールの引数として渡されることはなく、ツールの応答に含まれることもありません。また、ログやエラートレースでは自動的にマスキングされます。
開発
ソースからインストール
前提条件:Node >= 22。Node 25 以降では、最初に npm install -g corepack を実行してください。
リポジトリをクローンし、依存関係をインストールします。
git clone https://github.com/qungtai/discord-mcp.git
cd discord-mcp
corepack enable
pnpm install --frozen-lockfile
pnpm build
Node でサーバーを実行します。
DISCORD_TOKEN="your-bot-token" node dist/index.js
ローカルビルド用のクライアント設定
クローンしたリポジトリ内で pwd を実行し、dist/index.js の絶対パスを取得します(例:/Users/name/discord-mcp/dist/index.js)。MCP クライアントの設定で dist/index.js を指定します。
{
"mcpServers": {
"discord": {
"command": "node",
"args": ["/absolute/path/to/discord-mcp/dist/index.js"],
"env": {
"DISCORD_TOKEN": "your-bot-token"
}
}
}
}
検証
AGENTS.md に定義されている検証スイート全体を実行します。
貢献ガイドラインとセキュリティ情報の開示ポリシーについては、CONTRIBUTING.md と SECURITY.md を参照してください。
ライセンス
Discord Inc. とは提携関係になく、同社から承認も受けていません。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。