Skip to main content
Glama
Discord MCP

Discord MCP

Discord MCP

Leia em português

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 tools
add_reactionReagir a mensagemA
Idempotent

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 mensagemA
DestructiveIdempotent

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 conexaoA
Read-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 mensagemB
Idempotent

Edita o texto de uma mensagem enviada por esta conta.

Inputs: content (required), channelId (required), messageId (required), format.

friendsAmizadesA
Idempotent

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 canalA
Read-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 mensagemB
Read-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 usuarioA
Read-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 entradaA
Read-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 servidorA
Idempotent

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 threadA
Idempotent

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 canaisA
Read-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 DMsA
Read-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 servidoresB
Read-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 forumA
Read-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 tratadoA
Idempotent

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 DMA
Idempotent

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 mensagensC
Read-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 trabalhoA
Read-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 mensagensA
Read-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 canalA
Idempotent

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

    A3.6/5.0

    Scored across 24 tools

    Disambiguation4/5

    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.

    Naming Consistency4/5

    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.

    Tool Count4/5

    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.

    Completeness4/5

    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

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables 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.
      1
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables 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 npm
      MIT
    • A
      license
      Not graded
      quality
      A
      maintenance
      Enables 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 npm
      MIT
    • A
      license
      Not graded
      quality
      A
      maintenance
      Enables 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 npm
      MIT