discord-mcp について
discord-mcp は軽量な Discord 向け MCP サーバーで、95 個以上のツールを備え、複数のサーバーでメッセージ、チャンネル、ロール、権限、モデレーションを管理できます。Claude や Cursor などのクライアントから Discord サーバーを運用したい利用者に向いています。
主な機能
- 01日常的なサーバー管理をカバーする 95 個以上のツール
- 02複数の Discord サーバーでの動作
- 03ツールセットによる公開ツールの絞り込み
- 04ギルド許可リストによる操作対象サーバーの制限
- 05npm と Docker による導入
活用シーン
- 01自然言語による Discord メッセージの読み取り、送信、検索
- 02チャンネル権限とロール割り当ての一括管理
- 03一括削除や BAN などのメンバーのモデレーション
MCP 対応
本プロジェクトは MCP サーバーとして、Claude Desktop、Claude Code、Cursor、VS Code Copilot などの MCP クライアントに Discord 関連のツールを公開します。接続には Discord Bot トークンを使用します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
99掲載時のツール一覧 · 2 週間前に更新
このツールにパラメーターはありません。
詳細
Discord MCP サーバー
95 以上のツールを備えた、軽量なマルチギルド対応 Discord MCP サーバー
Claude Desktop、Claude Code、Cursor、VS Code Copilot、または MCP 対応クライアントから、Discord サーバー全体を管理できます。 メッセージ、チャンネル、ロール、権限、モデレーション、フォーラム、Webhook などをすべて自然言語で操作できます。
このサーバーを選ぶ理由
- 95 以上のツール:メッセージ、チャンネル、ロール、権限、モデレーション、フォーラム、Webhook、スケジュール済みイベント、招待、DM、埋め込みなど
- マルチギルド対応:複数のサーバーで動作し、
GUILD_IDに固定されません - 軽量:TypeScript + Node.js、パッケージは約 70kB、Docker イメージは約 73MB(Java ベースの代替製品は 400MB 以上)
- モジュール式:すっきりしたアーキテクチャで、新しいツールを簡単に追加できます
- 2 種類のインストール方法:npm または Docker から選択できます
クイックスタート
これを MCP クライアントの設定に追加し、YOUR_TOKEN_HERE をボットのトークンに置き換えてください。
{
"mcpServers": {
"discord": {
"command": "npx",
"args": ["-y", "@pasympa/discord-mcp"],
"env": {
"DISCORD_TOKEN": "YOUR_TOKEN_HERE"
}
}
}
}
インストールは不要です。npx がすべて処理します。
まだボットを作成していませんか?Discord ボットの作成をご覧ください。
設定
Claude Desktop
上記の設定を claude_desktop_config.json に追加してください。
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
保存後、Claude Desktop を再起動してください。
Claude Code
claude mcp add discord -e DISCORD_TOKEN=YOUR_TOKEN_HERE -- npx -y @pasympa/discord-mcp
Cursor
上記の設定を ~/.cursor/mcp.json に追加してください。詳しくはCursor MCP ドキュメントをご覧ください。
VS Code / GitHub Copilot
.vscode/mcp.json に追加してください。
{
"inputs": [
{
"type": "promptString",
"id": "discord-token",
"description": "Discord Bot Token",
"password": true
}
],
"servers": {
"discord": {
"command": "npx",
"args": ["-y", "@pasympa/discord-mcp"],
"env": {
"DISCORD_TOKEN": "${input:discord-token}"
}
}
}
}
詳しくはVS Code MCP ドキュメントをご覧ください。
Docker
{
"mcpServers": {
"discord": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e",
"DISCORD_TOKEN=YOUR_TOKEN_HERE",
"pasympa/discord-mcp:latest"
]
}
}
}
ソースから実行
git clone https://github.com/PaSympa/discord-mcp
cd discord-mcp
npm install && npm run build
{
"mcpServers": {
"discord": {
"command": "node",
"args": ["/absolute/path/to/discord-mcp/dist/index.js"],
"env": {
"DISCORD_TOKEN": "YOUR_TOKEN_HERE"
}
}
}
}
.env ファイル(代替方法)
MCP 設定でトークンを渡す代わりに、プロジェクトのルートに .env ファイルを作成してください。
DISCORD_TOKEN=YOUR_TOKEN_HERE
サーバーは dotenv を使って .env を自動的に読み込みます。
| 変数 | デフォルト | 説明 |
|---|---|---|
DISCORD_TOKEN | なし | 必須。 ボットトークン。 |
DISCORD_MESSAGE_CONTENT | true | false に設定すると、接続時に Message Content 特権ゲートウェイインテントを要求しなくなります。 |
DISCORD_GUILD_MEMBERS | true | false に設定すると、接続時に Server Members 特権ゲートウェイインテントを要求しなくなります。 |
DISCORD_MCP_TOOLSETS | all | ツール一覧を小さく保つために公開するツールセットのカンマ区切りリスト。未設定または all ですべてのツールを公開します。 |
DISCORD_ALLOWED_GUILDS | すべて | サーバーが操作を許可されるギルド ID のカンマ区切りリスト。設定すると、ギルド ID、チャンネル ID、スレッド ID、Webhook、招待コードのいずれで指定された場合でも、それ以外のギルドを対象とするツール呼び出しは拒否されます。 |
2.1.1 以降、サーバーは GuildMessages インテントを一切要求しなくなりました。ここではメッセージイベントを購読しておらず、このサーバーが返すすべてのメッセージは REST 経由で取得されるため、接続インテントによる制御は受けません。このインテントは、discord.js があらゆるチャンネルを流れるすべてのメッセージをその投稿者とともにキャッシュする原因となっており、長時間稼働するサーバーでは無制限に増大していました。現在はキャッシュスイーパーが残存分を制限しています。したがって DISCORD_MESSAGE_CONTENT は、接続時に Message Content インテントを要求するかどうかにのみ影響し、いずれかのツールが返す内容を変えるものではありません。
これらのフラグは、サーバーが識別時に要求するゲートウェイインテントを制御するだけです。Developer Portal で有効化されていない特権インテントを要求すると、最初のツール呼び出しで接続が失敗します (クローズコード 4014)。そのまま接続するにはフラグを false に設定してください。
データアクセスはこれらのフラグではなく、ポータルのトグルによって制御されます。このサーバーは REST API 経由ですべてを読み取っており、Discord はポータル設定のみでこれを制御します。したがって、ポータルのトグルがオンの状態でこれらのフラグを false に設定しても、失われるものはありません。ポータルのトグルがオフの場合、対応するデータはフラグに関係なく制限されます。メッセージ本文は空で返り (content、embeds、attachments。ただしボット自身のメッセージ、DM、およびボットに言及したメッセージを除く)、メンバー一覧の取得も失敗します。ポータルでトグルを有効にすると復元されます。
ツールセット (DISCORD_MCP_TOOLSETS): discovery、messages、channels、permissions、members、roles、moderation、screening、stats、forums、webhooks、scheduled_events、invites、dm。例: DISCORD_MCP_TOOLSETS=discovery,messages,members は discovery、message、member のツールのみを公開します。注意: ツールセットはそのモジュール全体を同梱し、破壊的なツールも含まれます (messages には一括削除が含まれ、members には kick/ban が含まれます)。これらを制限するには DISCORD_ALLOWED_GUILDS とドライランのデフォルト値を使用してください。公開および呼び出し可能なのは、リストされたツールセットのツールのみです。不明な名前を指定すると、すべてを暗黙的に公開するのではなく、サーバーは起動時に失敗します (空の値は未設定として扱われ、すべてを公開します)。
Discord ボットの作成
-
discord.com/developers/applications にアクセスします
-
New Application > 名前を入力します
-
Bot タブ > Reset Token > トークンをコピーします
-
Privileged Gateway Intents を有効にします(このサーバーはデフォルトで両方を要求しますが、新しい Discord アプリではポータルのトグルが OFF になっています):
- Server Members Intent
- Message Content Intent
重要: ボットがここで有効になっていない特権インテントを要求すると、Discord はコード
4014で接続を閉じ、すべてのツール呼び出しが失敗します。両方を有効にするか、不要なものの要求を上記の環境変数で停止してください。 -
OAuth2 > URL Generator:
- Scopes:
bot - Permissions:
Send Messages、Read Message History、Manage Channels、Manage Roles、Kick Members、Ban Members、Moderate Members、View Audit Log、Manage Messages、Manage Threads、Add Reactions、Manage Guild、Manage Webhooks、Manage Events、Create Events、Create Instant Invite、Manage Nicknames、Pin Messages、Embed Links、Create Public Threads、Send Messages in Threads
- Scopes:
-
生成された URL をコピーして、ボットをサーバーに招待します
利用可能なツール (99)
検出とナビゲーション (4 ツール)
| ツール | 説明 |
|---|---|
discord_list_guilds | ボットが接続しているすべてのサーバーを一覧表示します |
discord_get_guild_info | ギルドの詳細情報(名前、メンバー、チャンネル、ロール、ブースト)を取得します |
discord_list_channels | ギルド内のすべてのチャンネルをカテゴリ別にグループ化して一覧表示します |
discord_find_channel_by_name | 名前でチャンネルを検索します(部分一致) |
メッセージ(20 ツール)
| ツール | 説明 |
|---|---|
discord_read_messages | メッセージを読み取り、履歴を遡ってページングする |
discord_send_message | プレーンテキストのメッセージを送信する |
discord_reply_message | 特定のメッセージに返信する |
discord_edit_message | ボットが送信したメッセージを編集する |
discord_delete_message | 特定のメッセージを削除する |
discord_add_reaction | メッセージにリアクション絵文字を追加する |
discord_remove_reactions | リアクションを削除する(すべて、絵文字単位、またはユーザー単位) |
discord_get_reactions | 特定の絵文字でリアクションしたユーザーを一覧表示する |
discord_create_thread | メッセージから、または単独でスレッドを作成する |
discord_bulk_delete_messages | 複数のメッセージを一度に削除する(2〜100) |
discord_send_embed | すべてのオプションを備えたリッチ埋め込みを送信する |
discord_edit_embed | ボットが以前に送信した埋め込みを編集する |
discord_send_multiple_embeds | 1 つのメッセージで最大 10 個の埋め込みを送信する |
discord_pin_message | メッセージをピン留めまたはピン解除する |
discord_get_message_attachments | メッセージの添付ファイルをダウンロード URL とともに一覧表示する |
discord_fetch_pinned_messages | チャンネル内のすべてのピン留めメッセージを一覧表示する |
discord_search_messages | キーワードでメッセージを検索する(直近 100 件) |
discord_search_guild_messages | Discord の検索インデックスを使用してすべてのチャンネルを横断検索する |
discord_crosspost_message | アナウンスチャンネルのフォロワーにメッセージを公開する |
discord_forward_message | メッセージを別のチャンネルに転送する |
チャンネル(8 ツール)
| ツール | 説明 |
|---|---|
discord_create_channel | テキストチャンネル、ボイスチャンネル、またはカテゴリを作成する |
discord_delete_channel | チャンネルを削除する |
discord_edit_channel | 名前、トピック、スローモード、NSFW フラグを編集する |
discord_move_channel | チャンネルをカテゴリへ移動、またはカテゴリから移動する |
discord_clone_channel | チャンネルを権限ごと複製する |
discord_set_channel_position | カテゴリ内の表示位置を設定する |
discord_follow_announcement_channel | アナウンスチャンネルをフォローする |
discord_lock_channel_permissions | 権限を親カテゴリと同期する |
チャンネル権限(6 ツール)
| ツール | 説明 |
|---|---|
discord_get_channel_permissions | チャンネル上のすべての権限上書きを一覧表示する |
discord_set_role_permission | チャンネル上のロールに対する権限を許可/拒否する |
discord_set_member_permission | チャンネル上のメンバーに対する権限を許可/拒否する |
discord_reset_channel_permissions | すべての上書きを削除する(継承にリセット) |
discord_copy_permissions | あるチャンネルから別のチャンネルへ上書きをコピーする |
discord_audit_permissions | すべてのチャンネルの完全な権限監査 |
メンバー (11 ツール)
| ツール | 説明 |
|---|---|
discord_list_members | ギルドメンバーをロールとともに一覧表示します |
discord_get_member_info | メンバーの詳細情報 (ロール、権限、参加日) |
discord_search_members | ユーザー名またはニックネームでメンバーを検索します |
discord_set_nickname | メンバーのニックネームを設定またはクリアします |
discord_kick_member | メンバーをキックします |
discord_ban_member | メンバーを BAN します (オプションで最近のメッセージを削除) |
discord_unban_member | ユーザーの BAN を解除します |
discord_bulk_ban | 複数のユーザーを一度に BAN します (荒らし対策) |
discord_list_bans | BAN されたすべてのユーザーを一覧表示します |
discord_timeout_member | メンバーをタイムアウトします (0 で解除) |
discord_prune_members | 非アクティブなメンバーを削除します (ドライラン付き) |
ロール (9 ツール)
| ツール | 説明 |
|---|---|
discord_list_roles | すべてのロールを権限とメンバー数とともに一覧表示します |
discord_create_role | 新しいロールを作成します |
discord_edit_role | ロールを編集します (名前、色、権限、hoist、メンション可否) |
discord_delete_role | ロールを削除します |
discord_add_role | メンバーにロールを割り当てます |
discord_remove_role | メンバーからロールを削除します |
discord_get_role_members | 特定のロールを持つすべてのメンバーを一覧表示します |
discord_set_role_position | 階層内でのロールの位置を変更します |
discord_set_role_icon | ロールにカスタムアイコンまたは Unicode 絵文字を設定します |
フォーラム (10 ツール)
| ツール | 説明 |
|---|---|
discord_get_forum_channels | ギルド内のすべてのフォーラムチャンネルを一覧表示します |
discord_create_forum_channel | 新しいフォーラムチャンネルを作成します |
discord_create_forum_post | フォーラムに投稿/スレッドを作成します |
discord_get_forum_post | 投稿の詳細とメッセージを取得します |
discord_list_forum_threads | スレッドを一覧表示します (アクティブ + アーカイブ済み) |
discord_reply_to_forum | フォーラムの投稿に返信します |
discord_delete_forum_post | フォーラムのスレッドを削除します |
discord_get_forum_tags | 利用可能なタグを取得します |
discord_set_forum_tags | フォーラムのタグを設定/更新します |
discord_update_forum_post | タイトル、アーカイブ、ロック、タグを更新します |
Webhook (8 ツール)
| ツール | 説明 |
|---|---|
discord_create_webhook | チャンネルに Webhook を作成します |
discord_send_webhook_message | Webhook 経由で送信します (カスタムユーザー名/アバター、埋め込み) |
discord_edit_webhook | Webhook の名前、アバター、またはチャンネルを編集します |
discord_delete_webhook | Webhook を削除します |
discord_list_webhooks | チャンネルまたはギルドの Webhook を一覧表示します |
discord_edit_webhook_message | Webhook によって送信されたメッセージを編集します |
discord_delete_webhook_message | Webhook によって送信されたメッセージを削除します |
discord_fetch_webhook_message | 特定の Webhook メッセージを取得します |
スケジュール済みイベント (7 ツール)
| ツール | 説明 |
|---|---|
discord_list_scheduled_events | ギルド内のすべてのスケジュール済みイベントを一覧表示します |
discord_get_scheduled_event | スケジュール済みイベントの詳細情報を取得します |
discord_create_scheduled_event | ボイス、ステージ、または外部イベントを作成します |
discord_edit_scheduled_event | 既存のスケジュール済みイベントを編集します |
discord_delete_scheduled_event | スケジュール済みイベントを削除します |
discord_get_event_subscribers | 「興味あり」を設定したユーザーを取得します |
discord_create_event_invite | イベントにリンクされた招待を作成します |
ダイレクトメッセージ (7 ツール)
| ツール | 説明 |
|---|---|
discord_send_dm | ユーザー ID を指定してユーザーにダイレクトメッセージを送信します |
discord_send_dm_embed | ユーザーへの DM に埋め込みを送信します |
discord_read_dms | DM 会話のメッセージ履歴を読み取ります |
discord_reply_dm | 特定の DM メッセージに返信します |
discord_edit_dm | 以前に送信した DM (テキスト) を編集します |
discord_edit_dm_embed | 以前に送信した DM の埋め込みを編集します |
discord_delete_dm | DM メッセージを削除します |
招待 (5 ツール)
| ツール | 説明 |
|---|---|
discord_list_invites | ギルド内のすべての有効な招待を一覧表示します |
discord_list_channel_invites | 特定のチャンネルの招待を一覧表示します |
discord_get_invite | コードで招待の詳細を取得します |
discord_create_invite | チャンネルの招待リンクを作成します |
discord_delete_invite | 招待を取り消します |
モデレーションとスクリーニング (3 ツール)
| ツール | 説明 |
|---|---|
discord_get_audit_log | ギルドの監査ログを取得します |
discord_get_membership_screening | メンバーシップスクリーニングフォームを取得します |
discord_update_membership_screening | 新規メンバーのスクリーニングルールを更新します |
統計 (1 ツール)
| ツール | 説明 |
|---|---|
discord_get_server_stats | サーバー統計: メンバー、チャンネル、ロール、ブーストレベル |
使用例
"List all servers the bot is in"
"Read the last 10 messages in #general"
"Send 'Hello everyone!' to the announcements channel"
"Create a forum channel called 'feedback' with tags Bug, Feature, Question"
"Show the full permission audit for the server"
"Create a webhook on #notifications and send a test message"
"Ban user 112233445566778899 and delete their messages from the last 3 days"
"Create an event called 'Game Night' for next Friday at 8pm"
"List all upcoming events in the server"
"Create a permanent invite for #general"
"List all active invites and delete expired ones"
"Send a DM to user 112233445566778899 saying 'Your build passed!'"
"Search for members named 'john'"
"List all banned users in the server"
"Show all pinned messages in #general"
"Forward that message to #announcements"
Discord ID の確認方法
Discord で 開発者モード を有効にします:
Settings > Advanced > Developer Mode
次に、サーバー、チャンネル、またはユーザーを 右クリック > ID をコピー します。
プロジェクト構造
discord-mcp/
├── src/
│ ├── index.ts ← Entry point (MCP server + transport)
│ ├── client.ts ← Discord client + shared helpers
│ ├── constants.ts ← Shared constants (limits, defaults)
│ ├── embeds.ts ← Shared embed schema + builder
│ └── tools/
│ ├── index.ts ← Tool registry (toolset gating, dispatch)
│ ├── define.ts ← defineTool/defineModule + shared zod fields
│ ├── types.ts ← Shared TypeScript interfaces
│ ├── discovery.ts ← Guild/channel discovery
│ ├── messages.ts ← Message CRUD, reactions, threads, embeds
│ ├── channels.ts ← Channel management
│ ├── permissions.ts ← Permission overwrites
│ ├── members.ts ← Member management
│ ├── roles.ts ← Role CRUD and assignment
│ ├── moderation.ts ← Audit log
│ ├── screening.ts ← Membership screening
│ ├── stats.ts ← Server statistics
│ ├── forums.ts ← Forum channels, posts, tags
│ ├── webhooks.ts ← Webhook management
│ ├── scheduledEvents.ts ← Scheduled events
│ ├── invites.ts ← Invite management
│ └── dm.ts ← Direct messages
├── test/ ← node:test suite (schemas, gating, allow-list)
├── scripts/ ← sync-version.js (npm version hook)
├── .github/workflows/ ← CI/CD (build check + auto release)
├── Dockerfile
├── .dockerignore
├── .env.example
├── package.json
├── tsconfig.json
├── CHANGELOG.md
├── CONTRIBUTING.md
├── SECURITY.md
└── README.md
新しいツールの追加
src/tools/に新しいファイルを作成します(例:events.ts)- 各ツールを
defineTool({ name, description, annotations, schema, handle })で宣言し、defineModule([...])をデフォルトとしてエクスポートします - それをインポートし、
src/tools/index.ts内のallToolsetsに追加します(キーはそのDISCORD_MCP_TOOLSETS名です)
セキュリティ
- Discord トークンを絶対に Git にコミットしないでください
- 環境変数または
.envファイル(バージョン管理対象外)を使用してください - ボットには必要な権限のみを付与してください
DISCORD_ALLOWED_GUILDSでサーバーを特定のサーバーに制限してください- 取り消し不可能な一括操作(
bulk_ban、prune_members、bulk_delete_messages、delete_channel)はデフォルトでdry_runプレビューになります。適用するにはdry_run:falseを渡してください
コントリビューション
コントリビューションを歓迎します!
- リポジトリをフォークします
- フィーチャーブランチを作成します(
git checkout -b feature/my-feature) - モジュール構造に従ってください。新しいツールの追加を参照してください
- 変更をコミットし、プルリクエストを作成します
ライセンス
MIT、詳細は LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。