slack-mcp y slack-cli: dale a tu asistente de IA acceso de lectura a Slack
← Volver al blog

slack-mcp y slack-cli: dale a tu asistente de IA acceso de lectura a Slack

Publicado el
6 min de lectura
--- vistas
slack-mcp — un asistente de IA buscando mensajes, hilos y usuarios de Slack

Gran parte del contexto que un asistente de IA necesita vive en Slack — la conversación detrás de un ticket, el ida y vuelta que explica un bug, el hilo donde realmente se tomó una decisión. El modelo no puede ver nada de eso. Así que construí un par de herramientas que solucionan esto: slack-mcp, un servidor Model Context Protocol, y slack-cli, la herramienta de línea de comandos en Go que lo impulsa.

Juntas le dan a tu asistente de IA acceso de lectura a Slack — buscar mensajes, desplegar hilos y resolver quién dijo qué — y llevan ese contexto real directamente a su memoria de trabajo.

Dos repos, una herramienta

Estos se distribuyen a propósito como dos binarios:

  • slack-cli es el motor. Se autentica en Slack, cifra y almacena las credenciales, y hace las llamadas reales a la API — utilizable por sí solo desde una terminal o un script.
  • slack-mcp es una capa MCP delgada encima. Expone las mismas capacidades como herramientas MCP sobre stdio para que cualquier agente compatible con MCP (Claude, Cursor, etc.) pueda llamarlas.

Dividirlo de esta forma significa que la lógica de autenticación y Slack vive en un solo lugar bien probado, y el servidor MCP se mantiene pequeño. Puedes manejar Slack desde un script de shell y desde tu asistente de IA con las mismas credenciales.

Herramientas MCP

El servidor expone nueve herramientas de lectura y autenticación. load_slack_context es la estrella:

HerramientaParámetrosDescripción
search_messagesworkspace, query, count?, start_from?Busca mensajes en todos los canales — devuelve canal, autor, fragmento, timestamp, enlace permanente
load_slack_contextworkspace, channel_id, thread_ts, permalink?, channel_name?, search_query?, start_from?Herramienta principal — carga un hilo con cada usuario resuelto, formateado como markdown
load_threadworkspace, channel_id, thread_ts, start_from?Carga cada mensaje de un hilo (IDs de usuario en crudo; pagina hasta ~2000)
get_user_infoworkspace, user_idResuelve un ID de usuario a un nombre visible
list_workspacesLista los espacios de trabajo con credenciales guardadas
get_credentialsworkspaceComprueba si existen credenciales (nunca expone los tokens)
auth_startworkspace?Abre Slack y devuelve instrucciones para extraer el token
auth_completeworkspace, token, cookieValida y guarda las credenciales
delete_credentialsworkspaceElimina las credenciales guardadas

load_slack_context es la herramienta alrededor de la cual diseñé todo: dale un canal y un hilo, y devuelve la conversación completa con cada usuario resuelto a un nombre visible, formateada como markdown — exactamente lo que un LLM quiere leer. Sin IDs U01ABCD en crudo, sin sopa de JSON.

📅 start_from acepta una fecha YYYY-MM-DD — solo se devuelven los mensajes en esa fecha o posteriores. Funciona en search_messages, load_thread y load_slack_context.

Comandos de la CLI

Todo lo que hace el servidor, slack-cli lo expone directamente — útil para autenticación y para scripting:

ComandoParámetrosDescripción
auth[workspace]Autenticación interactiva — abre el navegador, pide token + cookie
auth-start[workspace]Imprime instrucciones de extracción con DevTools sin guardar
auth-complete<workspace> --token --cookieGuarda las credenciales sin interacción
list-workspacesLista todos los nombres de espacios de trabajo guardados
get-credentials<workspace>Muestra si el token + cookie están presentes
test-creds[workspace]Valida las credenciales guardadas contra auth.test de Slack
remove-creds[workspace]Elimina las credenciales guardadas de un espacio de trabajo
show-credsImprime la ruta al archivo de credenciales

Autenticación sin una app de Slack

Esta es la parte que lo hace realmente usable. slack-cli se autentica con un token de sesión de navegador (xoxc-…) más una cookie (xoxd-…) — sin necesidad de registrar una app de Slack, sin aprobación de administrador, sin scopes de OAuth que suplicar. Inicias sesión en el espacio de trabajo que ya usas, extraes el par una vez, y listo.

slack-cli auth acme            # interactive — opens the browser, prompts for token + cookie
# or, non-interactively:
export SLACK_MCP_PASSPHRASE=your-passphrase-here
slack-cli auth-complete acme --token xoxc-... --cookie xoxd-...

Las credenciales están cifradas en reposo con una passphrase leída de SLACK_MCP_PASSPHRASE (o un prompt interactivo). La passphrase que las guardó debe coincidir con la que las lee — el servidor MCP usa la misma variable de entorno, así que el agente descifra y nunca ve los tokens en crudo en una transcripción.

Configuración

Prerrequisitos

  • Go 1.26+ — para compilar o hacer go install
  • slack-cli en tu PATH (o apunta a él con SLACK_CLI_PATH=/abs/path/to/slack-cli) — es el binario complementario que guarda las credenciales y llama a Slack

Instalación

# the CLI engine
go install github.com/artschekoff/slack-cli/cmd/slack-cli@latest

# the MCP server
go install github.com/artschekoff/slack-mcp/cmd/slack-mcp@latest

Ambos también se compilan desde el código fuente con git clone … && make install.

Conéctalo a tu cliente MCP

Añade una entrada de servidor stdio — la passphrase va en env para que las credenciales se descifren en tiempo de ejecución:

{
  "mcpServers": {
    "slack": {
      "type": "stdio",
      "command": "slack-mcp",
      "env": {
        "SLACK_MCP_PASSPHRASE": "your-passphrase"
      }
    }
  }
}

O con la CLI de Claude Code:

claude mcp add slack --env SLACK_MCP_PASSPHRASE=your-passphrase -- slack-mcp

Por qué solo lectura, y por qué dividir el binario

Deliberadamente limité esto a lectura. Un agente que puede publicar en Slack en tu nombre es un perfil de riesgo distinto y más inquietante; un agente que puede extraer el contexto detrás de un ticket simplemente es útil. Mantenerlo de solo lectura significa que puedes dárselo a tu asistente sin preocuparte de que envíe un mensaje a un canal.

Separar la CLI del servidor MCP sigue el mismo principio detrás de mis otras herramientas MCP — poner el trabajo real en un binario maduro y bien probado, y luego envolver exactamente las operaciones que un agente necesita en una capa MCP delgada. Las credenciales se mantienen cifradas, los tokens nunca llegan a la transcripción, y el mismo motor sirve tanto a tu shell como a tu asistente de IA.

Ambos proyectos están abiertos en GitHub — slack-mcp y slack-cli — Go puro, corriendo sobre stdio. Issues y pull requests bienvenidos.

Disponible para colaboración por contrato

Estoy disponible para colaborar por contrato. Si tiene una idea de proyecto interesante, reserve una llamada por Calendly.

Agenda una llamada de 30 min