Discord MCP
Enables AI agents to operate a personal Discord account, including reading messages, listing servers/channels/DMs/threads, sending, replying, editing, deleting, reacting, opening DMs, marking conversations as read, joining threads and invites, creating threads, looking up users, and managing friends.
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 MCP check my unread DMs and reply to anything that needs an answer"
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.
Discord MCP
Discord MCP is an MCP server that lets an AI agent operate a personal Discord account. It was made for a secondary account, so the agent can keep up with conversations for you. It reads an inbox with the recent messages, lists servers, channels, DMs and threads, reads and searches messages, sends, replies to, edits and deletes messages, reacts, opens DMs, marks conversations as read, joins threads and invites, creates threads, looks up users and manages friends.
It has no dependencies at all and runs on plain Node.js. A live connection to the Discord gateway keeps the state up to date, sending is paced so it does not hit the rate limits, and there is a read only mode that blocks any action that writes something. You can also give the agent a protocol file with the rules it should follow when answering people.
Keep in mind that Discord does not allow automating user accounts, so the account used here can be banned. That is why it was designed around a secondary account.
How to use
You need Node.js 20 or newer. Create a .env file next to servidor.mjs with DISCORD_TOKEN holding the token of the account. Then run node servidor.mjs --check to confirm that the account, the state and the gateway are ready.
By default the server talks over stdio, so in your MCP client you only need to register the node command with the path to servidor.mjs. To use it over HTTP, run npm run http and the server listens on port 8787 of your machine, under the mcp path. Outside of localhost the HTTP mode requires a password in MCP_TOKEN. To try a single tool from the terminal, use the call option, for example node servidor.mjs --call inbox limit=5.
Other settings also go in the .env file, like SOMENTE_LEITURA=1 for read only mode, GATEWAY=0 to turn off the live connection and the sending limits. The repository also has a Cloudflare Workers version, configured in wrangler.toml, for anyone who wants to keep it running online.
Related MCP server: discord-py-self-mcp
Development time
Discord MCP was built in fifty minutes.
License
GNU General Public License version 3. The full text is in the LICENSE file.
Available Tools
24 toolsadd_reactionReagir a mensagemAIdempotent
Adiciona (ou remove, com remove=true) uma reacao da conta em uma mensagem. emoji aceita unicode ("👍") ou emoji personalizado no formato nome:id.
Inputs: emoji (required), channelId (required), messageId (required), format, +1 more.
create_threadCriar thread ou post de forumA
Em um forum: cria um post (name + content obrigatorios, tags opcionais). Em um canal de texto: com messageId abre uma thread a partir daquela mensagem; sem messageId cria uma thread publica avulsa (content vira a primeira mensagem).
Inputs: name (required), channelId (required), tags, format, +3 more.
delete_messageApagar mensagemADestructiveIdempotent
Apaga uma mensagem desta conta (ou de outros, se a conta tiver permissao de moderacao no canal). Irreversivel.
Inputs: channelId (required), messageId (required), format.
discord_statusEstado da conexaoARead-only
Mostra a conta conectada (sem dados sensiveis), o modo (user/bot), o gateway ao vivo, canais vigiados, cursores, limites e estatisticas. Responde mesmo com o token invalido.
Inputs: format.
edit_messageEditar mensagemBIdempotent
Edita o texto de uma mensagem enviada por esta conta.
Inputs: content (required), channelId (required), messageId (required), format.
friendsAmizadesAIdempotent
list (padrao): amigos e pedidos pendentes (recebidos/enviados) e bloqueados. accept userId=: aceita um pedido recebido. remove userId=: remove amizade ou recusa/cancela pedido. So em modo user.
Inputs: type, action, format, userId.
get_channelLer canalARead-only
Devolve os dados de um canal, DM ou thread: tipo, nome, topico, servidor, participantes, pai, metadados de thread.
Inputs: channelId (required), format.
get_messageLer uma mensagemBRead-only
Busca uma mensagem especifica pelo id (com fallback para busca ao redor do id em modo user).
Inputs: channelId (required), messageId (required), format.
get_userLer usuarioARead-only
Dados publicos de um usuario (nome, apelido global, bot?, criado em) e, em modo user, bio e servidores em comum. Com guildId, inclui apelido, cargos e data de entrada naquele servidor.
Inputs: userId (required), format, guildId.
inboxCaixa de entradaARead-only
Lista o que chegou e ainda nao foi tratado: DMs novas, mencoes a conta, canais vigiados e eventos do gateway, agrupados por conversa e com channelId/messageId prontos para reply_message. Mensagens da propria conta nao contam. Sem cursor, considera as ultimas "hours" horas.
Inputs: dms, hours, limit, format, +4 more.
join_inviteConvite de servidorAIdempotent
Mostra os dados de um convite (servidor, canal, membros). Com accept=true entra no servidor com esta conta. Entrar pela API pode exigir captcha (CAPTCHA_REQUIRED): o usuario precisa aceitar pelo aplicativo oficial.
Inputs: code (required), accept, format.
join_threadEntrar em threadAIdempotent
Entra em uma thread ou post de forum (leave=true sai). Entrar e necessario em algumas threads para aparecer como participante e receber eventos ao vivo.
Inputs: channelId (required), leave, format.
list_channelsListar canaisARead-only
Lista os canais de um servidor agrupados por categoria: id, tipo (text, forum, announcement, voice...), topico e ultima mensagem. Pode incluir canais sem acesso; read_messages responde FORBIDDEN nesses.
Inputs: guildId (required), query, types, format.
list_dmsListar DMsARead-only
Lista as conversas diretas (DMs e grupos) da conta, da mais recente para a mais antiga, com channelId, participantes, ultima mensagem e se ha algo nao tratado. So em modo user.
Inputs: limit, query, format, onlyUnread.
list_guildsListar servidoresBRead-only
Lista os servidores em que a conta esta, com id, nome, dono e contagens (quando disponiveis).
Inputs: query, format.
list_threadsListar threads e posts de forumARead-only
Lista threads/posts de um canal de texto ou forum (ativos por padrao; archived=true para arquivados), com id, nome, autor, quantidade de mensagens e ultima atividade. Cada post de forum e uma thread: leia com read_messages channelId=.
Inputs: channelId (required), limit, format, offset, +1 more.
mark_readMarcar como tratadoAIdempotent
Marca uma conversa como tratada ate uma mensagem (padrao: a ultima conhecida): avanca o cursor local (sai do inbox) e faz ack no Discord. Use quando decidir nao responder.
Inputs: channelId (required), format, messageId.
open_dmAbrir DMAIdempotent
Abre (ou reabre) a conversa direta com um usuario e devolve o channelId para read_messages/send_message. Nao envia nada.
Inputs: userId (required), format.
read_messagesLer mensagensCRead-only
Le mensagens de um canal, DM ou thread (mais recentes primeiro, devolvidas em ordem cronologica). before/after/around paginam por id de mensagem. markRead=true marca a conversa como tratada ate a ultima mensagem lida.
Inputs: channelId (required), after, limit, around, +3 more.
read_protocolProtocolo de trabalhoARead-only
Devolve o protocolo de atendimento escrito pelo usuario (protocolo.md ou variavel PROTOCOLO): regras, precos, prazos, tom, o que pode ou nao prometer. Leia antes de responder clientes.
Inputs: format.
reply_messageResponder mensagemA
Responde a uma mensagem especifica (a resposta sai com referencia a ela). Escolha a mensagem pelo messageId devolvido por inbox/read_messages. Marca a conversa como tratada e recusa responder duas vezes a mesma mensagem.
Inputs: content (required), channelId (required), messageId (required), split, +6 more.
search_messagesProcurar mensagensARead-only
Procura mensagens por texto, autor ou tipo de conteudo em um servidor (guildId) ou em uma DM (channelId). So em modo user. O indice do Discord pode demorar (SEARCH_INDEXING com retryAfterMs).
Inputs: has, after, limit, before, +6 more.
send_messageEnviar mensagemA
Envia uma mensagem em um canal, DM ou thread. replyTo= transforma em resposta a uma mensagem (igual a reply_message). Marca a conversa como tratada. Recusa duplicatas, textos acima de 2000 caracteres (sem split) e excesso de envios por minuto.
Inputs: content (required), channelId (required), split, format, +6 more.
watch_channelVigiar canalAIdempotent
add: tudo o que chegar em um canal de servidor passa a aparecer no inbox, mesmo sem mencao. remove: para de vigiar. list (padrao): mostra os canais vigiados. A lista e persistida.
Inputs: note, action, format, channelId.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 24 tools
Tools target distinct resources and actions across messages, channels, guilds, threads, and DMs. Minor overlap exists (send_message vs reply_message; read_messages markRead vs mark_read), but descriptions clarify the intended use.
Almost all names use snake_case and follow a verb_noun pattern (list_channels, send_message, get_user). Deviations are minor: inbox and friends are noun-only, and discord_status prefixes the domain rather than using a verb.
24 tools is on the heavy side, but each covers a distinct Discord operation and multi-mode tools (watch_channel, friends) consolidate related actions. The scope justifies the count; it is not artificially inflated.
Core lifecycle is covered: read/send/reply/edit/delete messages, reactions, threads, DMs, guilds, invites, friends, inbox, and watch. Gaps exist in attachments/embeds, channel/role management, and thread archival/deletion, but these are outside the apparent text-atendimento focus.
Maintenance
Related MCP Connectors
Control your Discord community: send/read messages, manage channels and forums, and handle webhook…
Build Discord communities with AI: roles, channels, modules, automations and reviewed announcements.
Remote streamable-HTTP MCP server running on a single Cloudflare Worker. Your assistant gets live Airbnb, Amazon, Booking.com, Google Flights, Maps and Reddit data, social search on X, Instagram and TikTok, the Meta Ad Library, and image/video generation without any keys. Connect your own accounts to let it send WhatsApp or Telegram messages, work an IMAP inbox, manage Meta Ads campaigns and publish to X and LinkedIn. OAuth 2.1 with PKCE; stored credentials are AES-256-GCM encrypted.
Build and change Discord bots by describing them: slash commands, events, embeds, modals and data.
1
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to access and interact with a Discord user account via the Discord client API, allowing them to read servers, channels, DMs, mentions, and message history, and optionally send messages and perform other actions.1MIT
- AlicenseNot gradedqualityBmaintenanceEnables an AI assistant to drive a personal Discord account as if it were the user: reading and sending messages and DMs, managing servers, channels, roles, permissions, threads, invites and friends, joining voice, and clicking buttons, menus, modals and slash commands. An optional hardened mode runs it as an always-on local service with loopback-only HTTP access, encrypted credentials, an allowlist of reviewed tools, and an AFK session that keeps push notifications flowing.39 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to interact with the Discord platform, including listing servers and members, managing channels, categories, forums and roles, sending, searching, editing and deleting messages, handling reactions, permissions and webhooks, and operating through either stdio or streamable HTTP transports.825 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to interact with the Discord platform, covering bot login, server and member inspection, channel, category and forum management, message reading, sending, editing and deletion, reactions, roles, and webhooks. Supports both stdio and streamable HTTP transports with token-based configuration.825 npmMIT