Skip to main content
Glama
fboiero

Discord MCP

by fboiero

Discord MCP

Удалённый MCP-сервер (Streamable HTTP), который предоставляет Discord в виде инструментов, предназначен для подключения из Claude → Настройки → Коннекторы → Add custom connector (https://claude.ai/ask-your-org/setup, опция Custom).

Что предоставляет

Инструменты (tools) для работы с API Discord с использованием discord.py:

  • 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(...) — роли.

Все идентификаторы (сервера, канала, сообщения, пользователя, роли) — это snowflake-идентификаторы 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 rebinding в продакшене, задайте ALLOWED_HOSTS (публичное имя хоста сервера) и ALLOWED_ORIGINS (например, https://claude.ai).

4. Подключение в claude.ai в качестве custom-коннектора

  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 добавьте:

    • Заголовок: Authorization

    • Значение: Bearer <el mismo valor que pusiste en MCP_AUTH_TOKEN>

  5. Сохраните и проверьте, попросив Claude что-то вроде "Перечисли доступные серверы Discord" — он должен вызвать list_guilds.

Если вы предпочитаете не использовать аутентификацию (только для быстрых тестов, никогда в продакшене), оставьте MCP_AUTH_TOKEN пустым и не добавляйте заголовок.

Разработка

pip install -e ".[dev]"
pytest

Тесты покрывают конфигурацию, middleware аутентификации и логику DiscordService, которая не требует реального подключения к Discord (интеграционных тестов с реальным API Discord нет).

Заметки по архитектуре

  • Бот discord.py работает как фоновая задача в том же event loop, что и ASGI-сервер (Starlette/uvicorn); он запускается и останавливается вместе с lifespan приложения (src/discord_mcp/server.py).

  • MCP-сервер использует транспорт Streamable HTTP (mcp.server.MCPServer из официального SDK mcp) — удалённый транспорт, поддерживаемый custom-коннекторами Claude.

  • Аутентификация — это статический bearer-токен, проверяемый собственным ASGI-middleware (auth_middleware.py), предназначенным для механизма "Request headers" custom-коннекторов — он не реализует полный поток 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
    36 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    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