Slack MCP Server
Acesse DMs, canais e mensagens do Slack pelo Claude. Autenticação por token de navegador - sem necessidade de OAuth.
Documentação
Slack MCP Server
Atualize-se no Slack sem precisar ler tudo.
Não lidas, threads e busca — no contexto do seu agente, a partir da sessão que você já tem.
npx -y @jtalk22/slack-mcp --setup
Claude Code Claude Desktop Cursor Copilot Windsurf Gemini CLI Codex CLI qualquer cliente stdio MCP
▶ É segunda-feira, 9h07 — veja o que explodiu durante a noite · passo a passo interativo · guia de configuração
Como funciona · Por que autenticação por sessão · Grid e credenciais · Instalação · 19 ferramentas · Fluxos de trabalho · Local vs. hospedado
É segunda-feira, 9h07. O Slack já formou opiniões.
Você pergunta "o que explodiu durante a noite?" e o agente lê o workspace em vez de você. Ele reconstrói o incidente P1 das 2h da manhã a partir de #incidents — responsável, resolução e a etapa do runbook que ainda está errada. Ele encontra o PIN da impressora que está esperando em #facilities há cinco meses. Depois, ele encerra os loops já tratados — respostas, reações, mudanças de estado de leitura — somente onde você aprovar.
Isso não é automação por captura de tela. O agente chama o Slack por meio de uma superfície real de ferramentas MCP e recebe resultados tipados que pode buscar, resumir, exportar ou usar para agir.
Construído além da demonstração
A parte difícil não é mais uma ferramenta de chat. É a camada operacional por baixo: extração de sessão do navegador que nomeia suas etapas de falha, um ciclo de vida de credenciais feito para rotação, leituras com fidelidade total, gravações protegidas e saída de fluxo de trabalho tipada. O código é JavaScript puro neste repositório — audite-o antes de confiar uma sessão a ele.
A engenharia por baixo — extração, ciclo de vida de credenciais, leituras, gravações protegidas, saída tipada
1. O mecanismo de sessão do navegador
--setup transforma a identidade do Slack que o Chrome já possui em um servidor MCP local:
- encontra o token
xoxc-mais recente no LevelDB em disco do Chrome; - captura o banco de dados SQLite de cookies com seus arquivos WAL;
- recupera o Chrome Safe Storage do chaveiro do macOS;
- executa descriptografia PBKDF2 + AES-128-CBC compatível com Chrome localmente;
- não exige DevTools, etapa de área de transferência, flag do navegador ou aba do Slack aberta;
- nomeia a etapa de extração que falhou —
keychain_timeout,no_slack_cookie_row,cookie_decrypt_failede outras — em vez de retornar um único erro opaco.
2. Ciclo de vida de credenciais, não colagem de credenciais
As credenciais de sessão rotacionam. O servidor é construído em torno dessa realidade:
- backends de armazenamento
auto,keychain-onlyefile; - arquivos de token somente do proprietário e um caminho somente via chaveiro, sem credenciais em texto puro no disco;
- gravações atômicas de arquivos, migração verificada do chaveiro, bloqueios entre processos e mutexes de atualização;
- verificações de saúde proativas e atualização automática no macOS;
- credenciais em memória da última boa configuração quando a persistência está temporariamente indisponível;
- perfis isolados para Slack de trabalho e pessoal;
- tratamento com falha fechada para configuração inválida de armazenamento ou perfil.
3. Leituras do Slack com fidelidade total
Leia DMs e canais, busque no workspace, exporte históricos completos com threads, inspecione o estado de não lidas e resolva usuários. Ative blocos, anexos, arquivos, reações, metadados e marcadores de bots/aplicativos quando o texto sozinho não é a mensagem real.
4. O agente pode concluir o trabalho
Envie uma resposta, adicione ou remova uma reação e marque uma conversa como lida. Cada caminho de gravação no workspace carrega uma anotação destrutiva do MCP para que clientes compatíveis possam colocar a aprovação onde ela pertence.
5. Slack entra, JSON tipado sai
Salve perfis de fluxo de trabalho para salas de incidentes, briefings executivos, caixas de entrada de suporte, monitoramentos de lançamento e operações personalizadas. Os primitivos OSS são JSON local; o cérebro hospedado opcional os transforma em briefings com formato de contrato.
Dois caminhos para o Slack
O Slack já sabe quem você é. O caminho oficial é uma integração remota gerenciada pelo Slack, regida pela política do workspace — um ajuste forte para implantações sancionadas pela organização, documentado pela Slack com configurações de integração sob controle do administrador. Este projeto é o caminho local direto: autenticação baseada em sessão a partir da sessão do navegador já presente no Chrome, stdio local, qualquer cliente stdio MCP e nenhum aplicativo Slack ou solicitação de administrador. Mesma identidade do Slack. Mesmas permissões subjacentes. Um caminho radicalmente mais curto do seu workspace até o seu agente.
Lado a lado: o caminho da integração gerenciada vs. o caminho da sessão local
| Slack MCP oficial | Slack MCP Server — local | |
|---|---|---|
| Ponto de partida | Uma integração remota gerenciada pelo Slack | A sessão do Slack já presente no Chrome |
| Controle do workspace | Regido pelas configurações de integração do workspace | Nenhum aplicativo Slack ou solicitação de administrador para o caminho local |
| Transporte | HTTP streamable | stdio local |
| Superfície de cliente | Integrações parceiras suportadas pelo Slack | Qualquer cliente stdio MCP |
| Autenticação | OAuth | Sessão de navegador existente |
| Vida útil da credencial | OAuth gerenciado | Sessão rotativa com verificações de saúde e atualização |
| Superfície de produto | Capacidades amplas nativas do Slack | 19 ferramentas focadas em leitura, ação e automação |
| Protocolo | Gerenciado pelo Slack | MCP 2026-07-28 e todas as revisões de 2025, a partir do mesmo binário |
| Runtime | Gerenciado pelo Slack | Código MIT na sua máquina |
O caminho local viola os termos do Slack?
Trate a automação de sessão do navegador como uma decisão de uso aceitável para você e seu workspace. O servidor atua como sua identidade conectada ao Slack e não pode ler um canal que você não pode ler nem agir como outro usuário. Ele não contorna retenção no lado do servidor, DLP, exportações de conformidade ou controles de auditoria.
"Nenhuma solicitação de administrador" significa que não há instalação de aplicativo Slack para aprovar. Isso não significa que a atividade do workspace desaparece dos sistemas do Slack. Se sua política exigir uma integração OAuth sancionada, use o MCP oficial ou o caminho OAuth hospedado opcional.
Grid, credenciais e cache
Enterprise Grid. O Grid executa detecção agressiva de anomalias de sessão. A automação de sessão do navegador pode acioná-la, o que sinaliza a sessão e a encerra, independentemente de qual ferramenta dirige o tráfego. Chamadas de saída são limitadas por padrão para permanecer abaixo dos limites de rajada (SLACK_MCP_MIN_REQUEST_INTERVAL_MS, padrão 350; SLACK_MCP_MAX_CONCURRENCY, padrão 3). A limitação reduz esse risco; não o elimina. No Grid, use o nível OAuth hospedado ou o MCP oficial do Slack.
Extração de credenciais. --setup lê o token xoxc- mais recente do LevelDB em disco do Chrome, captura o banco de dados SQLite de cookies, recupera o Chrome Safe Storage do chaveiro do macOS e executa descriptografia PBKDF2 + AES-128-CBC localmente. Ele grava o arquivo de token, entradas do chaveiro e metadados não secretos. Ele não transmite nada — o servidor fala com o Slack e com mais nada.
Este é o mesmo padrão de acesso que ladrões de credenciais usam. O Chrome App-Bound Encryption existe para dificultar essa classe de leitura, e famílias de infostealers (Lumma, Vidar, Meduza) o contornam para roubar sessões ativas. O mecanismo aqui é comparável. O que difere é que você o executa, na sua própria máquina, contra a sua própria sessão, e nada sai do host. O código-fonte é JavaScript puro neste repositório; audite-o antes de entregar uma sessão ativa a ele.
Cache de usuários. Existe um único cache: consultas de nomes de usuário, preenchido sob demanda, máximo de 500 entradas, TTL de uma hora. Nenhum conteúdo de mensagem, histórico de canal ou cópia persistente do workspace é armazenado.
Instalação
Node 22 ou 24 recomendado. Node 20+ é suportado e testado em CI.
npx -y @jtalk22/slack-mcp --setup
Prefere uma CLI persistente: npm install -g @jtalk22/slack-mcp e depois slack-mcp --setup.
Então:
- Escolha seu cliente no guia de configuração.
- Registre o comando stdio gerado.
- Reinicie completamente o cliente.
- Peça ao agente para executar
slack_health_check. - Um nome de workspace na resposta significa que a conexão está ativa.
Use o mesmo comando de servidor em todos os lugares:
{
"command": "npx",
"args": ["-y", "@jtalk22/slack-mcp"]
}
No macOS, a configuração pode extrair do Chrome e persistir o backend de armazenamento selecionado. Em outras plataformas, forneça SLACK_TOKEN e SLACK_COOKIE por meio da configuração de ambiente do cliente. Exemplos de Docker, HTTP e clientes detalhados estão em docs/SETUP.md e docs/DEPLOYMENT-MODES.md.
Matriz de configuração de clientes
| Cliente | Superfície de configuração | Status |
|---|---|---|
| Claude Code | claude mcp add ou ~/.claude.json | Documentado |
| Claude Desktop | Configuração MCP do Desktop | Verificado |
| Cursor | .cursor/mcp.json | Documentado |
| GitHub Copilot | .vscode/mcp.json | Documentado |
| Windsurf | ~/.codeium/windsurf/mcp_config.json | Documentado |
| Gemini CLI | ~/.gemini/settings.json | Documentado |
| Codex CLI | codex mcp add ou ~/.codex/config.toml | Documentado |
| Outros clientes | Qualquer configuração stdio MCP | Compatível com protocolo |
19 ferramentas: ler, agir, automatizar
A superfície local oferece 19 ferramentas hoje: 12 operações Slack somente leitura, 4 ferramentas de caminho de gravação que carregam cada uma uma anotação destrutiva do MCP para que clientes possam controlar gravações no workspace, e 3 ferramentas locais de fluxo de trabalho, incluindo o próprio catch-up. Cada ferramenta faz seu trabalho aqui — lê o Slack ou o estado local — e nenhuma é um substituto para algo pelo qual você teria que pagar. Quatro ferramentas de leitura aceitam include_rich_message_fields: true para exibir anexos, blocos, arquivos, reações e metadados — entradas completas e contratos de resposta estão em docs/API.md.
Fala MCP 2026-07-28 e todas as revisões de 2025 a partir do mesmo binário — negociado por era via stdio, sem estado por solicitação via HTTP (sem Mcp-Session-Id; GET/DELETE respondem 405). A afirmação é um teste, não uma frase: test/mcp-era.test.js dirige o SDK real do cliente em ambas as eras contra os pontos de entrada reais.
Anunciando menos ferramentas. Um cliente paga pelo esquema de ferramentas em cada turno que o carrega. SLACK_MCP_TOOLS=essentials anuncia seis ferramentas — não lidas, histórico, busca, thread, consulta de usuário, envio — custando aproximadamente 985 tokens estimados de esquema por turno contra cerca de 3.134 para todas as 19. SLACK_MCP_TOOLS=read anuncia as 12 operações Slack somente leitura listadas abaixo, perto de 1.690. --tools=slack_x,slack_y aceita um conjunto explícito. O padrão permanece todas as 19. Filtrar muda o que é anunciado, não o que é chamável. Reproduza os números com node scripts/measure-tool-schema.js (uma estimativa de ~4 caracteres por token).
O inventário completo de ferramentas
12 operações Slack somente leitura
| Ferramenta | Finalidade |
|---|---|
slack_health_check | Verificar credenciais e identidade do workspace |
slack_token_status | Inspecionar idade das credenciais, saúde, cache, perfil e estado de armazenamento |
slack_refresh_tokens | Atualizar credenciais locais a partir da sessão do navegador no macOS—lê o Slack, grava apenas estado local |
slack_list_conversations | Listar canais e DMs |
slack_conversations_history | Ler histórico de canal ou DM com campos ricos opcionais |
slack_get_full_conversation | Exportar histórico completo e threads |
slack_search_messages | Pesquisar no workspace |
slack_get_thread | Ler todas as respostas em uma thread |
slack_users_info | Resolver um usuário |
slack_list_users | Paginar grandes diretórios do workspace |
slack_users_search | Pesquisar usuários por nome, nome de exibição ou e-mail |
slack_conversations_unreads | Priorizar conversas com mensagens não lidas |
Atuar no workspace — 4 ferramentas de caminho de escrita
| Ferramenta | Finalidade | Segurança MCP |
|---|---|---|
slack_send_message | Enviar para um canal ou DM | destrutiva |
slack_add_reaction | Adicionar uma reação de emoji | destrutiva |
slack_remove_reaction | Remover uma reação de emoji | destrutiva |
slack_conversations_mark | Marcar uma conversa como lida | destrutiva |
Automatizar localmente — 3 ferramentas de fluxo de trabalho
| Ferramenta | Finalidade |
|---|---|
slack_workflow_save | Salvar um perfil de fluxo de trabalho tipado em ~/.slack-mcp-workflows.json |
slack_workflows | Listar perfis de fluxo de trabalho salvos |
slack_catch_me_up | Ler os canais de um perfil desde sua janela de cadência e retornar evidências estruturadas de atualização |
slack_refresh_tokens lê o Slack e grava apenas estado local de credenciais.
Fluxos de trabalho tipados: Slack entra, JSON sai
Vincule um tipo de fluxo de trabalho a canais, pessoas prioritárias, retenção e cadência. slack_catch_me_up então lê esse escopo localmente e entrega ao seu agente as evidências: quais threads ficaram sem resposta e por quanto tempo, o que suas pessoas prioritárias disseram ou foram fixadas, quais conversas realmente avançaram. Ele faz a coleta; seu agente escreve o resumo conforme o contrato abaixo.
Não há modelo no lado do servidor nesse caminho, porque não precisa haver — o cliente que chama este servidor já é um modelo de linguagem. O Hosted adiciona o que realmente precisa de infraestrutura: executar a mesma atualização em um agendamento enquanto seu laptop está fechado, com um token OAuth que não rotaciona.
npx -y @jtalk22/slack-mcp --apply-template oncall-handoff --channels C012345,C067890
Contratos de fluxo de trabalho e modelos enviados
| Tipo de fluxo de trabalho | Contrato |
|---|---|
incident_room | {incident_summary, timeline, open_risks, owner_gaps, next_actions} |
exec_brief | {summary, decisions, risks, asks, action_items} |
support_inbox | {open_threads, ack_lag, owner_gaps, escalations, next_actions} |
product_launch_watch | {launch_signals, feedback_themes, blockers, metrics, next_actions} |
custom | {summary, highlights, open_questions, next_actions} |
Seis modelos editáveis acompanham o pacote: oncall-handoff, support-triage, exec-monday, sprint-tracker, customer-feedback e incident-room.
Onde as credenciais ficam armazenadas
A resolução é determinística; a primeira correspondência vence:
SLACK_TOKEN+SLACK_COOKIE- arquivo de token (
chmod 600) - Keychain do macOS
- Extração do Chrome no macOS
Credenciais de sessão comumente rotacionam após uma ou duas semanas. Quando o Slack retorna invalid_auth, not_authed, token_expired, token_revoked, account_inactive ou HTTP 401, execute npx -y @jtalk22/slack-mcp --setup para recuperar localmente. No macOS, slack_refresh_tokens ou --refresh-tokens atualiza sem sair do cliente; o LaunchAgent opcional em docs/SETUP.md mantém instalações ociosas por muito tempo saudáveis.
Modos de armazenamento e perfis de múltiplos workspaces
| Modo | Comportamento |
|---|---|
auto | Arquivo de token mais backup no Keychain |
keychain-only | Apenas Keychain; gravações verificadas e sem arquivo de credenciais em texto puro |
file | Arquivo de token somente do proprietário; o Keychain nunca é tocado |
O backend selecionado é lembrado em metadados não secretos e usado pelo servidor, CLI e trabalho de atualização opcional. Um modo não reconhecido falha na inicialização em vez de rebaixar silenciosamente o armazenamento.
{
"mcpServers": {
"slack-work": {
"command": "npx",
"args": ["-y", "@jtalk22/slack-mcp"],
"env": { "SLACK_MCP_PROFILE": "work" }
},
"slack-personal": {
"command": "npx",
"args": ["-y", "@jtalk22/slack-mcp"],
"env": { "SLACK_MCP_PROFILE": "personal" }
}
}
}
Cada perfil tem seu próprio arquivo de token, entradas no Keychain, metadados e bloqueio. Adicione SLACK_MCP_CHROME_PROFILE quando os workspaces estiverem em perfis diferentes do Chrome.
Local gratuito quando você está dirigindo. Hosted quando precisa se dirigir sozinho.
O pacote local coloca o Slack no contexto do seu agente: leia, pesquise, acompanhe threads e atue a partir do seu desktop. O Hosted mantém o resumo recorrente chegando quando seu laptop está fechado:
- OAuth gerenciado do Slack;
- atualização agendada no seu fuso horário;
- resumos de fluxo de trabalho validados por contrato;
- perfis de fluxo de trabalho compartilhados;
- entrega de webhook assinada.
O modo local roda na sua máquina e fala apenas com o Slack. A conexão OAuth hospedada suporta agendamentos sem supervisão e Enterprise Grid. O pacote local é licenciado sob MIT e funciona independentemente do hosted.
Veja preços do hosted ao vivo →
Segurança e proveniência
- Arquivos de credenciais são somente do proprietário; o modo somente Keychain mantém credenciais em texto puro fora do disco.
- A configuração falha de forma fechada para modos de armazenamento desconhecidos e perfis inválidos.
- Gravações são atômicas e o estado compartilhado de credenciais é bloqueado por processo.
- O servidor web local vincula-se a localhost; ferramentas de escrita no workspace carregam anotações destrutivas.
- Cada versão publica a partir de CI com proveniência npm.
Proveniência: não acredite na minha palavra
npm audit signatures
Um resultado limpo verifica que as assinaturas e atestações do pacote rastreiam de volta pela cadeia de versões publicadas. Inspecione o pacote antes de entregá-lo a uma sessão ativa do Slack. Política completa: SECURITY.md.
Documentação
Configuração · API · Arquitetura · Compatibilidade · Modos de implantação · Receitas · Solução de problemas · Roteiro
Contribuindo
PRs são bem-vindos. Leia CONTRIBUTING.md e execute node --check no JavaScript alterado antes de enviar.
Licença
MIT — veja LICENSE.
Aviso legal
Não afiliado à Slack Technologies, Inc. Este servidor usa credenciais de sessão do navegador. Revise a política de uso aceitável do seu workspace antes de executá-lo.
Seu Slack. Seu agente. Um comando.
npx -y @jtalk22/slack-mcp --setup
Se isso remove uma aba do Slack do seu dia, dê uma estrela no repositório. Estrelas são como o próximo desenvolvedor bloqueado pelo admin encontra o caminho local.