Pular para o conteúdo
← artigos
atualizado SlackMCPHermes AgentClaude CodeAI Agents

Servidor MCP do Slack: acesso de leitura para agentes, não uma voz

O que um servidor MCP do Slack realmente entrega a um agente, o servidor oficial hospedado pelo Slack versus o korotovsky self-hosted, como configurar qualquer um dos dois no Claude Code ou no Hermes Agent, e por que postar deve ficar desligado por padrão.

Um agente de Slack que serve pra algo lê. Ele puxa o histórico de um canal, busca uma decisão que alguém tomou três semanas atrás e te conta o que achou. Ele não posta. Postar é um privilégio que você libera de propósito, não um padrão que você esqueceu de desligar.

Essa é a tese inteira desta página. Tudo daqui pra frente é sobre como colocar um servidor MCP do Slack num agente, verificado contra a documentação oficial de desenvolvedores do Slack, as duas opções de servidor que valem a pena usar, e a documentação atual do Claude Code da Anthropic, checada hoje.

Qual servidor MCP do Slack usar?

Duas opções cobrem quase todos os casos. O próprio Slack hospeda uma, e a comunidade mantém a outra.

O servidor do próprio Slack vive em mcp.slack.com/mcp, acessível só via Streamable HTTP, sem SSE, sem Dynamic Client Registration. A autenticação é OAuth 2.0 por user-token atrás de um confidential client, o que significa que a sua requisição precisa vir de um app do Slack registrado, com um app ID fixo, e só um app listado no Marketplace ou interno pode usá-lo. O agente que conecta por aí opera sob a concessão OAuth de quem autorizou: ele lê o que essa pessoa pode ler, nada além disso.

O korotovsky/slack-mcp-server é a alternativa self-hosted, licenciada em MIT. Ele suporta três modos de autenticação (mais sobre isso abaixo), os transportes stdio, SSE e HTTP, e vem read-only por padrão: toda ferramenta de escrita fica desativada até você ligar explicitamente.

Servidor MCP do Slack, outubro de 2026

Os dois leem a mesma API do Slack por baixo. A diferença é quem aprova a conexão e o que já vem ligado por padrão.
Oficial (mcp.slack.com)korotovsky/slack-mcp-server
HospedagemRemoto, hospedado pelo SlackSelf-hosted: npx, Docker ou uma extensão DXT
TransporteSó Streamable HTTPStdio, SSE ou HTTP
AutenticaçãoOAuth 2.0 por user-token, confidential client, aprovado pelo adminUser (xoxp), bot (xoxb) ou sessão de navegador (xoxc/xoxd)
Acesso de escrita por padrãoO que você pedir nos scopes OAuthDesligado. Postar e reagir precisam de variável de ambiente própria
Serve paraUma empresa que quer aprovação de admin e trilha de auditoriaUm dev conectando o Slack no Claude Code ou no Hermes hoje
Os dois leem a mesma API do Slack por baixo. A diferença é quem aprova a conexão e o que já vem ligado por padrão.

Autenticação: o que cada token realmente concede

O servidor oficial do Slack precisa do client_id e do client_secret do seu app para um fluxo OAuth confidencial, e pede scopes por ferramenta: channels:history para ler um canal, chat:write para postar, search:read.public mais três outros scopes search:read.* para buscar em diferentes níveis de visibilidade. Peça só o que o agente precisa ler.

Scopes read-only que vale a pena pedir

  • Obrigatório:
    channels:history, groups:history, im:history, mpim:historyLê mensagens em canais públicos, canais privados, DMs e DMs em grupo.
  • Obrigatório:
    channels:read, groups:read, im:read, mpim:readLista conversas e seus metadados sem ler o conteúdo.
  • Obrigatório:
    search:read.public, search:read.private, search:read.mpim, search:read.imBusca nos níveis de visibilidade que você realmente precisa, não no conjunto completo por padrão.
  • Obrigatório:
    users:readResolve IDs de usuário em nomes, necessário pra quase qualquer resumo útil.
Deixe de fora chat:write, reactions:write e qualquer coisa com channels:write, a menos que o agente tenha um motivo aprovado pra postar.

O servidor do korotovsky recebe o token por uma variável de ambiente, em vez de uma dança OAuth completa: SLACK_MCP_XOXP_TOKEN para um user token, SLACK_MCP_XOXB_TOKEN para um bot token, ou SLACK_MCP_XOXC_TOKEN e SLACK_MCP_XOXD_TOKEN juntos para um par de sessão de navegador, tirado da sua própria aba do Slack logada. Um bot token é a opção mais contida: ele só vê canais pros quais foi convidado e não consegue chamar search.messages de forma alguma, então conversations_search_messages nunca é registrada. Qualquer token que você use, os padrões do próprio servidor já batem com a tese aqui: as ferramentas de escrita (conversations_add_message, reactions_add, reactions_remove, attachment_get_data) não são registradas a menos que você configure a variável de ambiente específica ou liste elas explicitamente em SLACK_MCP_ENABLED_TOOLS. Read-only não é uma configuração que você escolhe. É o que você tem até escolher o contrário.

Servidor MCP do Slack no Claude Code: a sintaxe do claude mcp add

A documentação atual do Claude Code dá dois caminhos, e qual você usa depende de qual servidor você escolheu.

Pro servidor oficial hospedado, adicione como servidor HTTP, depois abra /mcp dentro de uma sessão do Claude Code, selecione slack e autentique:

Servidor MCP oficial do Slack no Claude Code

  1. claude mcp add --transport http slack https://mcp.slack.com/mcp

Pra fixar os scopes que o Claude Code pede, em vez de aceitar o que o servidor oferecer, configure oauth.scopes na entrada. A própria documentação da Anthropic usa esse servidor exato como exemplo:

{
  "mcpServers": {
    "slack": {
      "type": "http",
      "url": "https://mcp.slack.com/mcp",
      "oauth": {
        "scopes": "channels:history channels:read search:read.public users:read"
      }
    }
  }
}

Pro servidor do korotovsky, adicione como um processo stdio local, com o token como variável de ambiente:

Servidor MCP comunitário do Slack no Claude Code

  1. claude mcp add --env SLACK_MCP_XOXB_TOKEN=xoxb-your-token -- npx -y slack-mcp-server@latest --transport stdio

O separador -- importa aqui: tudo depois dele é o comando que o Claude Code roda pra iniciar o servidor, sem alteração. Sem ele, o Claude Code tenta interpretar --transport como uma flag própria, em vez de ser do servidor.

Conectando no Hermes Agent: mcp_servers, não um plugin

O Hermes Agent recebe o mesmo servidor pelo seu próprio bloco mcp_servers, coberto por completo em Hermes Agent e MCP. O formato stdio pro servidor do korotovsky:

mcp_servers:
  slack:
    command: "npx"
    args: ["-y", "slack-mcp-server@latest", "--transport", "stdio"]
    env:
      SLACK_MCP_XOXB_TOKEN: "${env:SLACK_MCP_XOXB_TOKEN}"
    tools:
      include:
        [
          conversations_history,
          conversations_replies,
          conversations_search_messages,
          channels_list,
          users_search,
        ]

tools.include é quem faz o trabalho de verdade nessa entrada. É uma segunda trava, no nível da config, por cima do padrão read-only do próprio servidor: mesmo que uma versão futura do servidor mude os padrões, esse agente só vai ver essas cinco ferramentas listadas aqui.

Slack como gateway versus Slack como fonte MCP

São dois fios diferentes, e é fácil confundir os dois. O Hermes vem com os dois.

Slack como gateway

  1. 01Slack fala com o Hermes: slash commands, threads, menções
  2. 02Precisa de um bot token (xoxb) e um app-level token (xapp) via Socket Mode
  3. 03Vive no plugin de plataforma slack do Hermes, um setup por workspace
  4. 04O Hermes é quem posta, com blocos de aprovação em ações arriscadas

Slack como fonte MCP

  1. 01O Hermes lê o histórico do Slack como dado, nada responde por padrão
  2. 02Precisa do token que o servidor MCP pedir: bot, user ou OAuth
  3. 03Configurado por entrada dentro de mcp_servers, como qualquer outro servidor MCP
  4. 04Postar por esse caminho fica desligado até você ligar explicitamente
Um deixa o Slack falar com o Hermes. O outro deixa o Hermes ler o Slack.

Um workspace pode rodar os dois ao mesmo tempo: um bot que responde quando é mencionado, e um agente separado, disparado por cron, que só lê. Mantenha eles em tokens diferentes. Um bot token de gateway convidado em dezenas de canais não é a credencial que você quer na config de um agente de pesquisa read-only, e o contrário também é verdade.

Confirme a coleira antes de confiar nela

  1. 01

    Faça o agente listar o que ele não pode fazer, não só o que pode.

    Read-only é uma configuração do servidor. O agente não vai contar esse limite de bandeja, você precisa perguntar direto.

    Digite isto

    List every Slack tool you currently have, and tell me which of them, if any, can post a message, add a reaction, or write to a channel.
  2. 02

    Pergunte pelo scope, não pela capacidade.

    Uma ferramenta aparecer numa lista e um scope ser concedido são duas afirmações diferentes. O token é quem decide o que uma chamada realmente faz.

    Digite isto

    What token type and OAuth scopes is this Slack connection using right now?
  3. 03

    Peça pra ele nomear os canais exatos antes de começar uma tarefa de verdade.

    Um bot token só vê canais pros quais foi convidado. Confirmar a lista antes vale mais que uma resposta errada e confiante no meio da tarefa.

    Digite isto

    List every channel you can currently read from, by name, before we start.
Três perguntas que transformam 'está conectado' em algo que você consegue verificar de fato.

Rate limits e tokens em logs

O Slack aplica os tiers de rate limit da Web API nas chamadas MCP exatamente como aplica nas chamadas diretas de API: 20 ou mais requisições por minuto nos métodos do Tier 2, como busca de canal; 50 ou mais no Tier 3, como ler um canal; 100 ou mais no Tier 4, como ler o perfil de um usuário. chat.postMessage e a busca de mensagens têm limites especiais próprios, documentados por método. Nada disso é exclusivo do MCP. É o mesmo teto que você bateria chamando a API do Slack direto, e esse é o ponto: um servidor MCP não dá ao agente mais acesso do que o token já permite.

O token em si é a parte que vale proteger. Já precisei rotacionar um conjunto de tokens de API, depois que um dump do config.yaml dentro de uma sessão do Hermes escreveu eles no log da sessão. Um bot token ou user token do Slack dentro de env: fica tão exposto quanto qualquer outra coisa nesse arquivo. Não deixe um agente imprimir a própria config, e trate um token do Slack vazado do mesmo jeito que qualquer outra credencial: rotacione, não fique só esperando que o log seja limpo.

Meu uso real: um briefing, não um chatbot

No meu trabalho, um cron job do Hermes lê o Slack da empresa junto com Google Workspace, Git e Confluence ou Jira, e escreve pra mim um briefing diário do que está acontecendo. O trabalho dele é ler: quatro fontes via servidores MCP, virando uma mensagem só pra mim. O setup completo, incluindo por que um briefing ganha de uma interface de chat nesse trabalho, está em Hermes Agent e o briefing diário.

Esse é o formato que eu recomendaria pra maioria dos setups de Slack mais agente: scopes estreitos, um servidor que já vem read-only por padrão, e um cron job em vez de um bot que fica sempre ouvindo em busca de um motivo pra responder.

Servidor MCP do Slack, respostas rápidas

O que é MCP?

MCP (Model Context Protocol) é o protocolo aberto que deixa um agente de IA, como o Claude Code ou o Hermes Agent, se conectar a uma ferramenta ou fonte de dados externa (Slack, Google Workspace, um banco de dados) através de um servidor MCP padronizado, em vez de uma integração feita na mão pra cada caso.

Existe um servidor MCP oficial do Slack?

Existe. O Slack hospeda um em mcp.slack.com/mcp, acessível via Streamable HTTP, autenticado com OAuth 2.0 por user-token, atrás de um app do Slack aprovado pelo admin, listado no Marketplace ou interno.

Qual é o melhor servidor MCP do Slack para o Claude Code?

O servidor oficial, se o seu workspace exige aprovação de admin para acesso de terceiros. O korotovsky/slack-mcp-server, se você quer uma opção self-hosted que já conecta hoje com um único token, sem review de app, e que já vem read-only por padrão.

Como conectar o MCP do Slack no Claude Code?

claude mcp add --transport http slack https://mcp.slack.com/mcp para o servidor oficial, depois autentique via /mcp numa sessão. Para o servidor comunitário, claude mcp add --env SLACK_MCP_XOXB_TOKEN=... -- npx -y slack-mcp-server@latest --transport stdio, com -- separando as flags do próprio Claude Code das do servidor.

Um servidor MCP do Slack consegue postar mensagens?

O servidor do korotovsky vem com toda ferramenta de escrita desativada até você configurar a variável de ambiente específica ou listar ela explicitamente. O servidor oficial consegue postar se o scope OAuth que você pedir incluir chat:write. Peça scopes read-only, a menos que o agente tenha um motivo aprovado pra postar.

Qual é a diferença entre o MCP do Slack e o gateway do Slack no Hermes?

O plugin de gateway deixa o Slack falar com o Hermes: slash commands, menções, um bot que responde em threads. Um servidor MCP deixa o Hermes ler o Slack como fonte de dados, via mcp_servers, sem postar a menos que você ligue isso. Eles usam tokens diferentes e resolvem problemas diferentes.