Skip to main content
Glama
fboiero

Discord MCP

by fboiero

Discord MCP

Discord をツールとして公開するリモート MCP サーバー(Streamable HTTP)。Claude → 設定 → コネクタ → Add custom connector(https://claude.ai/ask-your-org/setup、Custom オプション)から接続することを想定しています。

公開するもの

discord.py を使用した Discord API のツール:

  • list_guilds — ボットがアクセスできるサーバー。

  • list_channels(guild_id) — サーバーのチャンネル。

  • list_members(guild_id, limit) — サーバーのメンバー。

  • list_roles(guild_id) — サーバーのロール。

  • send_message(channel_id, content) — メッセージを送信。

  • read_messages(channel_id, limit, before_message_id) — 履歴を読む。

  • create_thread(channel_id, name, message_id?, auto_archive_minutes) — スレッドを作成。

  • add_reaction(channel_id, message_id, emoji) / remove_reaction(...) — リアクション。

  • add_role_to_member(guild_id, user_id, role_id) / remove_role_from_member(...) — ロール。

すべての ID(サーバー、チャンネル、メッセージ、ユーザー、ロール)は Discord のスノーフレークで、文字列として扱われます。

Related MCP server: Discord MCP Server

1. Discord ボットを作成する

  1. Discord Developer Portal にアクセスし、New Application を作成します。

  2. Bot セクションでボットを作成し、Token(Reset Token ボタン)をコピーします。これが DISCORD_BOT_TOKEN の値です。

  3. 同じ Bot → Privileged Gateway Intents セクションで、以下を有効にします:

    • Server Members Intent(list_members とロール管理に必要)。

    • Message Content Intent(read_messages でメッセージの内容を読むために必要)。

  4. OAuth2 → URL Generator で:

    • Scopes: bot。

    • Bot Permissions(使用するものに応じて調整):View Channels、Send Messages、Read Message History、Create Public Threads、Add Reactions、Manage Roles。

    • 生成された URL を開き、使用するサーバーにボットを招待します。

  5. add_role_to_member / remove_role_from_member を使用する場合は、ボットのロールが割り当てたいロールより上位にある(階層が高い)ことを確認してください。

2. 環境変数を設定する

.env.example を .env にコピーして、以下を入力します:

cp .env.example .env
  • DISCORD_BOT_TOKEN: 前の手順のトークン。

  • MCP_AUTH_TOKEN: サーバーを保護するための独自のシークレット(python -c "import secrets; print(secrets.token_urlsafe(32))" で生成)。Claude.ai は各リクエストで Authorization: Bearer <token> ヘッダーとして送信します(手順 4 を参照)。

  • 残りの変数には妥当なデフォルト値があります — .env.example のコメントを参照してください。

3. サーバーを実行する

ローカル(Docker なし)

python -m venv .venv && source .venv/bin/activate
pip install -e .
python -m discord_mcp   # o: discord-mcp

デフォルトでは http://0.0.0.0:8000/mcp で待ち受けます。

Docker を使用する場合

docker compose up --build

または手動で:

docker build -t discord-mcp .
docker run --env-file .env -p 8000:8000 discord-mcp

デプロイ(Render / Railway / Fly.io / 任意の VPS)

このイメージは独自の永続状態を持たない汎用 HTTP コンテナです(ボットの状態はメモリと Discord にあります)。そのため、Docker をサポートする任意のプロバイダーで動作します:

  • プロバイダーのパネルで手順 2 の環境変数を設定します。

  • ポート 8000(または PORT で定義したポート)を HTTPS で公開します — Claude.ai は MCP サーバーが https:// でアクセス可能であることを要求します。

  • デプロイ後、コネクタの URL は https://<tu-dominio>/mcp になります。

本番環境での DNS リバインディング対策を強化するには、ALLOWED_HOSTS(サーバーの公開ホスト名)と ALLOWED_ORIGINS(例:https://claude.ai)を設定します。

4. claude.ai でカスタムコネクタとして接続する

  1. https://claude.ai/ask-your-org/setup(または 設定 → コネクタ)にアクセスし、Add custom connector / Custom を選択します。

  2. Name: Discord(または任意の名前)。

  3. URL: https://<tu-dominio>/mcp。

  4. Request headers / Advanced settings で、以下を追加します:

    • Header: Authorization

    • 値: Bearer <MCP_AUTH_TOKEN に設定した値>

  5. 保存して、Claude に "利用可能な Discord サーバーをリストアップして" のような依頼をしてテストします — list_guilds が呼び出されるはずです。

認証を使用しない場合(クイックテストのみ、本番では禁止)、MCP_AUTH_TOKEN を空にしてヘッダーを省略します。

開発

pip install -e ".[dev]"
pytest

テストは設定、認証ミドルウェア、および実際の Discord 接続を必要としない DiscordService のロジックをカバーしています(実際の Discord API に対する統合テストはありません)。

アーキテクチャのメモ

  • discord.py のボットは、ASGI サーバー(Starlette/uvicorn)と同じイベントループ内でバックグラウンドタスクとして実行されます。アプリのライフスパンとともに起動・停止します(src/discord_mcp/server.py)。

  • MCP サーバーは Streamable HTTP トランスポート(公式 SDK mcp の mcp.server.MCPServer)を使用します。これは Claude のカスタムコネクタがサポートするリモートトランスポートです。

  • 認証は、独自の ASGI ミドルウェア(auth_middleware.py)で検証される静的ベアラートークンです。カスタムコネクタの「Request headers」メカニズムを想定しており、完全な OAuth フローは実装していません。

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A Dockerized MCP server that enables Discord integration, offering tools for role management, messaging, moderation, and server administration via natural language.
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    An MCP server that enables LLMs to control Discord servers via a bot token, providing comprehensive management tools for messages, members, roles, channels, permissions, and more.
    67
    56 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that enables AI assistants to manage Discord servers, including roles, channels, members, messages, and moderation, via natural language commands.
    1
    MIT