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

EntradaDescripciónRequeridoPredeterminado
slack_tokenToken OAuth de usuario bot de Slack (xoxb-*)-
download_directoryDirectorio para archivos descargados"."

Salidas

SalidaDescripción
mcp_configConfiguración JSON para claude-code-action
server_executableRuta 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 Slack
  • DOWNLOAD_DIRECTORY: Ruta absoluta resuelta para descargas

Configuración del bot de Slack

1. Crear una aplicación de Slack

  1. Ve a api.slack.com/apps
  2. Haz clic en "Create New App" → "From scratch"
  3. 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

  1. Haz clic en "Install to Workspace"
  2. Copia el "Bot User OAuth Token" (comienza con xoxb-)
  3. 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 con https://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- o xoxp-

"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

  1. Haz un fork del repositorio
  2. Crea una rama de características (git checkout -b feature/amazing-feature)
  3. Realiza tus cambios
  4. Agrega pruebas para la nueva funcionalidad
  5. Asegúrate de que todas las pruebas pasen (bun test)
  6. Haz commit de tus cambios (git commit -m 'Add amazing feature')
  7. Haz push a la rama (git push origin feature/amazing-feature)
  8. 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