Claude MCP Slack
Una acción de GitHub que funciona como un servidor MCP de Slack, permitiendo descargas seguras de imágenes e integraciones con Slack.
Documentación
Claude MCP Slack
Una acción de GitHub independiente que proporciona funcionalidad de servidor Slack MCP (Model Context Protocol) para Claude Code Action, permitiendo descargas e integraciones seguras de imágenes de Slack.
Características
- 🔐 Integración segura con Slack: Acceso autenticado a archivos de Slack mediante tokens OAuth de usuario bot
- 📁 Gestión flexible de archivos: Directorios de descarga personalizables con validación de seguridad
- 🐳 Soporte Docker: Ejecución local o en contenedores con restricciones de seguridad adecuadas
- 🛡️ Seguridad primero: Validación de entradas, prevención de recorrido de rutas y manejo seguro de tokens
- 🧪 Pruebas exhaustivas: Suites de pruebas unitarias, de integración y de seguridad
- ⚡ Integración sencilla: Compatibilidad directa con claude-code-action
Inicio rápido
Uso básico
name: Example Workflow
on:
issues:
types: [opened]
issue_comment:
types: [created]
jobs:
claude-response:
runs-on: ubuntu-latest
steps:
- name: Setup Slack MCP
uses: atlasfutures/claude-mcp-slack@v1
with:
slack_token: ${{ secrets.SLACK_TOKEN }}
id: slack-mcp
- name: Claude Code Action
uses: anthropics/claude-code-action@main
with:
mcp_config: ${{ steps.slack-mcp.outputs.mcp_config }}
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
Configuración avanzada
- name: Setup Slack MCP
uses: atlasfutures/claude-mcp-slack@v1
with:
slack_token: ${{ secrets.SLACK_TOKEN }}
download_directory: "./slack-assets"
id: slack-mcp
- name: Claude Code Action with Multiple MCP Servers
uses: anthropics/claude-code-action@main
with:
mcp_config: |
{
"mcpServers": {
"slack": ${{ steps.slack-mcp.outputs.mcp_config }}.mcpServers.slack,
"custom": {
"command": "node",
"args": ["custom-server.js"],
"env": {
"API_KEY": "${{ secrets.CUSTOM_API_KEY }}"
}
}
}
}
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
Configuración
Entradas
| Entrada | Descripción | Requerido | Predeterminado |
|---|---|---|---|
slack_token | Token OAuth de usuario bot de Slack (xoxb-*) | ✅ | - |
download_directory | Directorio para archivos descargados | ❌ | "." |
Salidas
| Salida | Descripción |
|---|---|
mcp_config | Configuración JSON para claude-code-action |
server_executable | Ruta al servidor MCP de Slack |
Variables de entorno
La acción configura las siguientes variables de entorno para el servidor MCP:
SLACK_TOKEN: Tu token OAuth de usuario bot de SlackDOWNLOAD_DIRECTORY: Ruta absoluta resuelta para descargas
Configuración del bot de Slack
1. Crear una aplicación de Slack
- Ve a api.slack.com/apps
- Haz clic en "Create New App" → "From scratch"
- Ponle nombre a tu aplicación y selecciona tu espacio de trabajo
2. Configurar los alcances del token del bot
En OAuth & Permissions, agrega estos alcances de token de bot:
files:read # Read file content and metadata
3. Instalar en el espacio de trabajo
- Haz clic en "Install to Workspace"
- Copia el "Bot User OAuth Token" (comienza con
xoxb-) - Agrégalo a los secretos de tu repositorio como
SLACK_TOKEN
4. Ejemplo de uso del bot
Una vez configurado, Claude puede descargar imágenes de Slack:
@claude Please analyze this screenshot from our Slack channel: https://files.slack.com/files-tmb/T05EFSVDCLR-F08TC9CP9B8/screenshot_720.png
Herramientas MCP disponibles
slack_image_download
Descarga imágenes de Slack con autenticación.
Parámetros:
url(requerido): URL de archivo de Slack (debe comenzar conhttps://files.slack.com/)filename(opcional): Nombre de archivo personalizado (se sanitizará)
Ejemplo:
{
"tool": "slack_image_download",
"arguments": {
"url": "https://files.slack.com/files-tmb/T05EFSVDCLR-F08TC9CP9B8/screenshot_720.png",
"filename": "screenshot.png"
}
}
slack_health_check
Verifica el estado y la configuración del servidor MCP de Slack.
Ejemplo:
{
"tool": "slack_health_check",
"arguments": {}
}
Características de seguridad
Validación de entradas
- Validación de URL (debe ser del dominio de archivos de Slack)
- Verificación del formato del token
- Prevención de recorrido de rutas
- Sanitización de nombres de archivo
Ejecución segura
- Ejecución en contenedor sin usuario root
- Sistema de archivos de solo lectura (excepto el directorio de descargas)
- Límites de recursos (tamaño de archivo, tiempo de espera)
- Sin inyección de metacaracteres de shell
Seguridad de tokens
- Aislamiento de variables de entorno
- Sin registro ni exposición de tokens
- Validación segura del formato del token
Desarrollo
Configuración local
# Clone repository
git clone https://github.com/atlasfutures/claude-mcp-slack.git
cd claude-mcp-slack
# Install dependencies
bun install
# Run tests
bun test
# Type check
bun run typecheck
# Format code
bun run format
Desarrollo con Docker
# Build and run with docker-compose
docker-compose up claude-mcp-slack-dev
# Or build manually
docker build -t claude-mcp-slack .
docker run -e SLACK_TOKEN=your-token claude-mcp-slack
Pruebas
# Run all tests
bun test
# Run specific test suites
bun run test:unit
bun run test:integration
bun run test:security
# Run with coverage
bun test --coverage
Solución de problemas
Problemas comunes
"La variable de entorno SLACK_TOKEN es obligatoria"
- Asegúrate de que tu token de Slack esté configurado correctamente en los secretos del repositorio
- Verifica que el token comience con
xoxb-oxoxp-
"La URL debe ser una URL de archivo de Slack"
- Solo se admiten URLs que comiencen con
https://files.slack.com/ - Asegúrate de que la URL sea de un archivo de Slack, no de un mensaje normal
Errores de "Permission denied"
- Verifica que tu bot de Slack tenga el alcance
files:read - Verifica que el bot esté instalado en el espacio de trabajo donde se encuentra el archivo
Fallos de descarga
- Asegúrate de que el archivo no haya sido eliminado de Slack
- Verifica que el archivo sea accesible para tu bot
- Verifica la conectividad de red y la configuración del firewall
Modo de depuración
Habilita el registro de depuración configurando ACTIONS_STEP_DEBUG=true en los secretos de tu repositorio.
Contribuciones
- Haz un fork del repositorio
- Crea una rama de características (
git checkout -b feature/amazing-feature) - Realiza tus cambios
- Agrega pruebas para la nueva funcionalidad
- Asegúrate de que todas las pruebas pasen (
bun test) - Haz commit de tus cambios (
git commit -m 'Add amazing feature') - Haz push a la rama (
git push origin feature/amazing-feature) - Abre un Pull Request
Directrices de desarrollo
- Sigue las mejores prácticas de TypeScript
- Agrega pruebas para todas las funciones nuevas
- Actualiza la documentación para cambios de API
- Asegúrate de que las pruebas de seguridad pasen
- Usa mensajes de commit convencionales
Licencia
Este proyecto está licenciado bajo la Licencia MIT; consulta el archivo LICENSE para más detalles.
Soporte
Proyectos relacionados
- claude-code-action - Acción oficial de Claude para GitHub
- MCP SDK - SDK del Protocolo de Contexto de Modelo