discord-web
Provides tools for interacting with an open Discord Web tab, including sending messages, replies, reactions, GIFs, listing servers/channels/threads, reading messages, and collecting channel content.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@discord-webcheck the latest messages in #general and summarize them"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
title: Discord Web status: experimental version: 0.3.5 updated: 2026-09-20 tags: [discord, mcp, chrome-extension]
Discord Web
Локальный мост: агент пишет и читает открытую вкладку Discord Web от вашего аккаунта. Без бота, без user token и без discord.com/api.
Расширение Chrome (MV3, unpacked) кликает DOM. HTTP-мост слушает только 127.0.0.1. MCP отдаёт инструменты агенту.
Автоматизация пользовательского аккаунта нарушает правила Discord и может привести к ограничениям или бану. Редкие свои посты в своём тестовом канале — да. Рассылка, чужой аккаунт, личные сообщения — нет.
Related MCP server: discord-mcp-server
Что умеет
Действие | Инструмент | Нужен allowlist |
Текст |
| да |
Ответ |
| да |
Реакция |
| да |
GIF из пикера |
| да |
Статус вкладки |
| нет |
Серверы / каналы / треды |
| нет |
Сообщения из ленты |
| нет |
Обход каналов |
| только при |
Reload расширения |
| нет |
Чтение — любой канал сервера в открытой вкладке. Запись — только URL из списка в настройках расширения.
Личные сообщения (@me) не поддерживаются.
Схема
flowchart LR
A[агент] -->|MCP stdio| B[server/mcp.js]
B -->|HTTP 127.0.0.1| C[server/bridge.js]
D[расширение] -->|long-poll| C
D --> E[вкладка discord.com]discord-web/
├── README.md
├── LIVE-CHECK.md
├── mcp-config.example.json
├── server/ # мост + MCP
├── extension/ # Chrome MV3, Load unpacked
├── tests/
└── bin/chrome-with-extension.shТребования
Node.js 22+
Google Chrome
Открытая вкладка
discord.com/ptb/canary, вход вы делаете сами
Установка
Клонируйте репозиторий и поставьте зависимости:
git clone https://github.com/VKirill/discord-web.git
cd discord-web
npm installЗапустите мост:
npm start. При первом запуске появятся.local/bridge.jsonиextension/local-config.js. В лог идёт только127.0.0.1:порт, не ключ.Chrome →
chrome://extensions→ Developer mode → Load unpacked → папкаextension/.После первого запуска моста нажмите Reload у расширения, чтобы подтянуть
local-config.js.В Chrome Web Store ничего публиковать не нужно.
Порт: DISCORD_WEB_BRIDGE_PORT или поле в .local/bridge.json. Слушает только 127.0.0.1.
Discord и вход
В том же профиле Chrome откройте Discord.
Войдите сами: логин, капча и 2FA расширение не заполняет.
Откройте канал или тред сервера.
Нет вкладки Discord —
tab_not_open. Расширение вкладку само не создаёт.
Список каналов на запись
Откройте настройки расширения.
Вставьте URL
https://discord.com/channels/<guildId>/<channelId>.Пустой список блокирует только отправку (
channel_not_allowed). Читать можно без списка.Список хранится в
chrome.storage.localэтого браузера.
MCP
Образец: mcp-config.example.json. cwd — корень клона, команда node server/mcp.js (или npm run mcp). Мост уже должен работать.
{
"mcpServers": {
"discord-web": {
"command": "node",
"args": ["server/mcp.js"],
"cwd": "."
}
}
}Проверка без отправки:
{
"name": "discord_status",
"arguments": {
"url": "https://discord.com/channels/123456789012345678/987654321098765432"
}
}Отправка, ответ, реакция, GIF — только канал из allowlist:
{"name": "discord_send_message", "arguments": {"url": "https://discord.com/channels/…/…", "text": "тест из локального моста"}}
{"name": "discord_send_message", "arguments": {"url": "https://discord.com/channels/…/…", "text": "ответ", "replyTo": "111222333444555666"}}
{"name": "discord_add_reaction", "arguments": {"url": "https://discord.com/channels/…/…", "messageId": "111222333444555666", "emoji": "👍"}}
{"name": "discord_send_gif", "arguments": {"url": "https://discord.com/channels/…/…", "query": "cat"}}Либо guildId + channelId. Для треда передайте threadId вместо channelId.
Перезагрузка unpacked-расширения (подхватывает файлы с диска):
{"name": "discord_reload_extension", "arguments": {"extension": true, "bridge": false}}bridge: true перезапускает LaunchAgent, если вы его ставили сами.
Чтение ленты (DOM вкладки, не архив Discord):
{"name": "discord_list_guilds", "arguments": {}}
{"name": "discord_list_channels", "arguments": {"url": "https://discord.com/channels/…/…"}}
{"name": "discord_list_threads", "arguments": {"url": "https://discord.com/channels/…/…"}}
{"name": "discord_allowlist_add", "arguments": {"url": "https://discord.com/channels/…/…"}}
{"name": "discord_read_messages", "arguments": {"url": "https://discord.com/channels/…/…", "limit": 50, "after": "2026-09-01", "before": "2026-09-21", "scroll": true}}
{"name": "discord_collect_content", "arguments": {"url": "https://discord.com/channels/…/…", "scope": "visible", "includeThreads": true, "limit": 20, "maxChannels": 8, "maxThreads": 4}}discord_read_messages возвращает author, text, timestamp (ISO), day. Дата в after / before режет уже загруженные сообщения. Если Discord не дорисовал историю в вкладке, мост её не достанет.
discord_collect_content обходит текстовые и форумные каналы сайдбара и треды. scope: visible — любой канал сервера; scope: allowlist — только список отправки. Лимит: до 12 каналов и 8 тредов на канал. Отправку не делает.
После правкиextension/ вызовите discord_reload_extension. Иначе service worker держит старый код. GIF подтверждается только если в ленте появилось сообщение с video/img — не по клику на плитку категории.
Ошибки
Код | Что значит | Что сделать |
| MCP не достучался до моста |
|
| Расширение не опрашивало мост ≤ 70 с | Включите unpacked, откройте Discord, Reload после запуска моста |
| Неверный URL или id, либо | Канал |
| Пусто или длиннее 2000 после trim | Сократите текст |
| Чаще 1 / 5 с, больше 10 / 10 мин или очередь > 20 | Подождите, одно сообщение |
| Нет ответа расширения | Проверьте вкладку и |
| Канала нет в списке отправки | Для чтения список не нужен |
| Нет вкладки Discord | Откройте discord.com сами |
| Страница входа | Войдите в браузере |
| Канал не открылся | Откройте его вручную |
| Нет поля Slate | Дождитесь загрузки чата |
| Поле заблокировано | Проверьте право писать |
| Сообщение не появилось за 15 с | Не считайте его отправленным |
| Цели нет в видимой ленте | Прокрутите канал |
| Нет кнопки Reply / реакция / GIF | Наведите курсор или откройте композер |
| Пустой emoji | Unicode или shortcode |
| Нет такого эмодзи в пикере | Например 👍 |
| Реакция не появилась | Проверьте канал глазами |
| Пикер без результата | Подождите сетку GIF и повторите |
| Сбой моста или расширения | Повторите, затем перезапустите мост |
Нельзя
Discord Bot Token, user token, cookies и
discord.com/api/*Сторонние discord-mcp и публикация этого расширения в Chrome Web Store
Чтение storage Discord, заголовка
Authorization, webpack-модулей страницыОткрывать вкладку за пользователя, проходить логин, капчу и 2FA
Личные сообщения и рассылки
Чужой аккаунт
Безопасность
Ключ моста (≥32 байт hex) — в
.local/bridge.jsonиextension/local-config.js. Оба в.gitignore. Значение не пишите в чаты и логи.Кроме
GET /v1/healthнужен заголовокx-bridge-key(timingSafeEqual). Неверный ключ → 401.Originне изchrome-extension://→ 403.Пароль Discord, cookies и токены сессии компонент не хранит и не запрашивает.
Восстановление
Остановите
node server/bridge.js.Удалите
.local/bridge.jsonиextension/local-config.js.Снова
npm start— ключ и порт создадутся заново.Reload unpacked-расширения.
Список каналов в Chrome от удаления ключа не сбрасывается.
Ограничения
Селекторы Discord Web ([role="textbox"][data-slate-editor="true"], [data-list-id="chat-messages"], пикер GIF) могут смениться без предупреждения. Тогда будет composer_not_found, send_not_confirmed или gif_not_found. Диагностика: discord_status и LIVE-CHECK.md.
discord_read_messages не отдаёт вложения: у GIF в ленте часто пустой text.
Проверка
npm testПроходят tests/server, tests/extension и tests/e2e (успех send_message и ошибки tab_not_open, not_logged_in, composer_not_found, extension_not_connected через настоящий мост и MCP stdio).
Живая отправка — только вами, по LIVE-CHECK.md.
Лицензия
MIT. См. LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP server to assist with JxBrowser development.
Your own WhatsApp as an MCP server: read, search and send from any MCP client.
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
MCP server for RiverScript, an AI transcription platform - fetches transcripts shared via a link.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Discord using personal user tokens instead of bot applications, allowing for seamless message management and server exploration. It provides tools for reading history, sending messages, and searching across channels and DMs directly through MCP-compatible clients.9MIT
- AlicenseNot gradedqualityDmaintenanceLets any MCP-compatible AI client interact with Discord — send messages, manage channels, create webhooks, assign roles, and more.21 npm2MIT
- AlicenseBqualityDmaintenanceEnables MCP clients to interact with Discord servers, allowing operations such as sending messages and reading message history through the Discord API.23127 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables managing Discord servers through a bot, including channel and role administration, messaging, and direct Discord API calls via MCP tools.1MIT