MCP server de Slack: acceso de lectura para tu agente, no una voz
Qué te da en realidad un MCP server de Slack, la opción oficial alojada por Slack frente al server korotovsky self-hosted, cómo conectar cualquiera de los dos a Claude Code o Hermes Agent, y por qué publicar mensajes debería quedar apagado por defecto.
El agente de Slack que sirve, lee. Saca el historial de un canal, busca una decisión que alguien tomó hace tres semanas y te cuenta qué encontró. No publica. Publicar es un privilegio que otorgas a propósito, no un default que te olvidaste de apagar.
Esa es toda la tesis de esta página. Por si no te queda claro qué es MCP: es el estándar abierto que le da a un agente de IA una lista de herramientas externas a las que puede llamar, como leer Slack o Gmail, sin que tengas que programar esa integración a mano. Todo lo que sigue es cómo meter un MCP server de Slack en un agente, verificado contra la documentación oficial de Slack para desarrolladores, las dos opciones de server que vale la pena usar, y la documentación actual de Claude Code de Anthropic, revisada hoy.
¿Qué MCP server de Slack deberías usar?
Dos opciones cubren casi todos los casos. Slack mismo alberga una, y la comunidad corre la otra.
El server propio de Slack vive en mcp.slack.com/mcp, alcanzable solo por Streamable HTTP, sin SSE y sin Dynamic Client Registration. Se autentica con OAuth 2.0 de token de usuario detrás de un cliente confidencial, lo que significa que tu request tiene que venir de una app de Slack registrada, con un app ID fijo, y solo puede usarla una app publicada en el Marketplace o interna. El agente que se conecta a través de él opera bajo el grant de OAuth de quien lo autorizó: lee lo que esa persona puede leer, nada más.
korotovsky/slack-mcp-server es la alternativa self-hosted, con licencia MIT. Soporta tres modos de autenticación (más abajo), los transportes stdio, SSE y HTTP, y viene de fábrica en modo solo lectura: cada herramienta de escritura está desactivada hasta que la activas a propósito.
MCP server de Slack, octubre de 2026
| Oficial (mcp.slack.com) | korotovsky/slack-mcp-server | |
|---|---|---|
| Hosting | Remoto, alojado por Slack | Self-hosted: npx, Docker o una extensión DXT |
| Transporte | Solo Streamable HTTP | Stdio, SSE o HTTP |
| Auth | OAuth 2.0 de token de usuario, cliente confidencial, aprobado por un admin | De usuario (xoxp), de bot (xoxb), o sesión de navegador (xoxc/xoxd) |
| Acceso de escritura por defecto | Los scopes de OAuth que pidas | Apagado. Publicar y reaccionar necesitan su propia env var |
| Encaja con | Una empresa que quiere aprobación de un admin y un registro de auditoría | Un developer que quiere meter Slack en Claude Code o Hermes hoy mismo |
Auth: qué otorga en realidad cada token
El server oficial de Slack necesita el client_id y el client_secret de tu app para un flujo de OAuth confidencial, y pide scopes por herramienta: channels:history para leer un canal, chat:write para publicar, search:read.public más otros tres scopes search:read.* para buscar en distintos niveles de visibilidad. Pide solo lo que el agente necesita leer.
Scopes de solo lectura que vale la pena pedir
- Obligatorio:channels:history, groups:history, im:history, mpim:historyLee mensajes en canales públicos, canales privados, DMs y DMs grupales.
- Obligatorio:channels:read, groups:read, im:read, mpim:readLista conversaciones y su metadata sin leer el contenido.
- Obligatorio:search:read.public, search:read.private, search:read.mpim, search:read.imBusca en los niveles de visibilidad que en verdad necesitas, no en el set completo por defecto.
- Obligatorio:users:readResuelve IDs de usuario a nombres, necesario para casi cualquier resumen útil.
El server de korotovsky toma un token por una variable de entorno en vez de todo el baile de OAuth: SLACK_MCP_XOXP_TOKEN para un token de usuario, SLACK_MCP_XOXB_TOKEN para un token de bot, o SLACK_MCP_XOXC_TOKEN junto con SLACK_MCP_XOXD_TOKEN para un par de sesión de navegador sacado de tu propia pestaña de Slack ya logueada. Un token de bot es la opción más contenida: solo ve los canales a los que fue invitado y no puede llamar search.messages para nada, así que conversations_search_messages nunca se registra. Cualquiera sea el token que uses, los defaults del server ya coinciden con la tesis de esta página: las herramientas de escritura (conversations_add_message, reactions_add, reactions_remove, attachment_get_data) no se registran salvo que configures su variable de entorno específica o las listes a mano en SLACK_MCP_ENABLED_TOOLS. Solo lectura no es una opción que elijas. Es lo que obtienes hasta que elijas lo contrario.
MCP de Slack en Claude Code: la sintaxis de claude mcp add
La documentación actual de Claude Code da dos caminos, y cuál uses depende de qué server elegiste.
Para el server oficial alojado, agrégalo como un server HTTP, después abre /mcp dentro de una sesión de Claude Code, selecciona slack y autentícate:
MCP server oficial de Slack en Claude Code
claude mcp add --transport http slack https://mcp.slack.com/mcp
Para fijar los scopes que pide Claude Code en vez de aceptar lo que el server ofrezca, configura oauth.scopes en la entrada. La documentación de Anthropic usa este mismo server como ejemplo:
{
"mcpServers": {
"slack": {
"type": "http",
"url": "https://mcp.slack.com/mcp",
"oauth": {
"scopes": "channels:history channels:read search:read.public users:read"
}
}
}
}
Para el server de korotovsky, agrégalo como un proceso stdio local con el token como variable de entorno:
MCP server de Slack de la comunidad en Claude Code
claude mcp add --env SLACK_MCP_XOXB_TOKEN=xoxb-your-token -- npx -y slack-mcp-server@latest --transport stdio
El separador -- importa acá: todo lo que viene después es el comando que Claude Code corre para levantar el server, sin tocarlo. Sin él, Claude Code trata de parsear --transport como su propia flag en vez de la del server.
Cómo conectarlo a Hermes Agent: mcp_servers, no un plugin
Hermes Agent toma el mismo server a través de su propio bloque mcp_servers, cubierto a fondo en Hermes Agent y MCP. La forma stdio para el server de 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 es lo que hace el trabajo real en esta entrada. Es un segundo cerrojo, a nivel de config, encima del default de solo lectura del server: aunque una futura versión del server cambie sus defaults, este agente solo va a ver las cinco herramientas nombradas acá.
Slack como gateway contra Slack como fuente de MCP
Son dos cables distintos, y es fácil confundirlos. Hermes trae los dos.
Slack como gateway
- 01Slack le habla a Hermes: slash commands, threads, menciones
- 02Necesita un token de bot (xoxb) y un token a nivel de app (xapp) sobre Socket Mode
- 03Vive en el plugin de plataforma slack de Hermes, un setup por workspace
- 04Hermes es el que publica, con bloques de aprobación para acciones riesgosas
Slack como fuente de MCP
- 01Hermes lee el historial de Slack como datos, nada responde por defecto
- 02Necesita el token que pida el MCP server: de bot, de usuario, u OAuth
- 03Se configura por entrada bajo mcp_servers, como cualquier otro MCP server
- 04Publicar por este camino está apagado hasta que lo activas a propósito
Un workspace puede correr los dos a la vez: un bot que responde preguntas cuando lo mencionan, y un agente separado, disparado por cron, que solo lee. Mantenlos en tokens distintos. Un token de bot de gateway invitado a decenas de canales no es la credencial que quieres en el config de un agente de investigación de solo lectura, y lo contrario es igual de cierto.
Confirma el límite antes de confiar en él
- 01
Haz que el agente liste lo que no puede hacer, no solo lo que puede.
Solo lectura es una configuración del server. El agente no va a ofrecer ese límite si no se lo pides directamente.
Escribe esto
Lista cada herramienta de Slack que tienes ahora mismo, y dime cuáles de ellas, si alguna, pueden publicar un mensaje, agregar una reacción o escribir en un canal.
- 02
Pregunta por el scope, no por la capacidad.
Que una herramienta aparezca en una lista y que un scope esté otorgado son dos cosas distintas. El token decide qué hace en realidad una llamada.
Escribe esto
¿Qué tipo de token y qué scopes de OAuth está usando esta conexión de Slack en este momento?
- 03
Haz que nombre los canales exactos antes de empezar una tarea real.
Un token de bot solo ve los canales a los que fue invitado. Confirmar la lista de entrada le gana a una respuesta segura pero equivocada a mitad de tarea.
Escribe esto
Lista por nombre cada canal que puedes leer ahora mismo, antes de que empecemos.
Rate limits y tokens en los logs
Slack aplica sus niveles de rate limit de la Web API a las llamadas de MCP exactamente igual que a las llamadas directas a la API: más de 20 requests por minuto en métodos de Tier 2, como la búsqueda de canales; más de 50 en métodos de Tier 3, como leer un canal; más de 100 en métodos de Tier 4, como leer el perfil de un usuario. chat.postMessage y la búsqueda de mensajes tienen sus propios límites especiales, documentados por método. Nada de esto es exclusivo de MCP. Es el mismo techo al que llegarías llamando a la API de Slack directamente, y ese es justamente el punto: un MCP server no le da al agente más de lo que el token ya permite.
El token en sí es lo que vale la pena proteger. Una vez tuve que rotar un set de tokens de API, después de que un dump de config.yaml dentro de una sesión de Hermes los escribiera en el log de la sesión. Un token de bot o de usuario de Slack sentado en env: está tan expuesto como cualquier otra cosa en ese archivo. No dejes que un agente imprima su propio config, y trata un token de Slack filtrado igual que tratarías cualquier otra credencial: rótalo, no esperes a que alguien limpie el log.
Mi uso real: un briefing, no un chatbot
En mi trabajo, un cron job de Hermes lee el Slack de la empresa junto con Google Workspace, Git y Confluence o Jira, y me escribe un briefing diario de lo que está pasando. Su trabajo es leer: cuatro fuentes a través de MCP servers, convertidas en un solo mensaje para mí. El setup completo, incluyendo por qué un briefing le gana a una interfaz de chat para este trabajo, está en Hermes Agent y el briefing diario.
Esa es la forma que recomendaría para la mayoría de los setups de Slack más agente: scopes acotados, un server que por defecto es solo lectura, y un cron job en vez de un bot que está siempre escuchando por una razón para responder.
MCP server de Slack: respuestas rápidas
¿Existe un MCP server oficial de Slack?
Sí. Slack aloja uno en mcp.slack.com/mcp, alcanzable por Streamable HTTP, autenticado con OAuth 2.0 de token de usuario detrás de una app de Slack aprobada por un admin, publicada en el Marketplace o interna.
¿Cuál es el mejor MCP server de Slack para Claude Code?
El server oficial si tu workspace exige aprobación de un admin para acceso de terceros. korotovsky/slack-mcp-server si quieres una opción self-hosted que puedas conectar hoy mismo con un solo token y sin revisión de app, y que ya viene en modo solo lectura por defecto.
¿Cómo conecto el MCP de Slack a Claude Code?
claude mcp add --transport http slack https://mcp.slack.com/mcp para el server oficial, y después autentícate con /mcp dentro de una sesión. Para el server de la comunidad, claude mcp add --env SLACK_MCP_XOXB_TOKEN=... -- npx -y slack-mcp-server@latest --transport stdio, con -- separando las flags propias de Claude Code de las del server.
¿Un MCP server de Slack puede publicar mensajes?
El server de korotovsky viene con cada herramienta de escritura desactivada hasta que configuras su variable de entorno específica o la listas a mano. El server oficial puede publicar si el scope de OAuth que pides incluye chat:write. Pide scopes de solo lectura salvo que el agente tenga una razón aprobada para publicar.
¿Cuál es la diferencia entre el MCP de Slack y el gateway de Slack de Hermes?
El plugin de gateway deja que Slack le hable a Hermes: slash commands, menciones, un bot que responde en threads. Un MCP server deja que Hermes lea Slack como fuente de datos, a través de mcp_servers, sin publicar nada salvo que lo actives. Usan tokens distintos y resuelven problemas distintos.
¿Qué es MCP?
MCP (Model Context Protocol) es el estándar abierto que conecta un agente de IA con herramientas externas, como Slack, Gmail o un repo de Git, sin que tengas que programar cada integración a mano. El agente ve una lista de herramientas disponibles y llama a la que necesita; el MCP server es el puente hacia el servicio real.
La newsletter
Don’t Code, Specify. Cada semana, agentes de IA en producción de verdad. Sin hype: lo que funcionó y lo que se rompió.
Suscríbete en Substack (se abre en una pestaña nueva)