Slack

Interactúa con espacios de trabajo de Slack usando la API de Slack.

Documentación

Servidor MCP de Slack

Un servidor de Model Context Protocol (MCP) que permite a los LLMs interactuar con espacios de trabajo de Slack mediante autenticación OAuth 2.0.

Características

  • 🔐 Autenticación OAuth 2.0: Flujo OAuth seguro de Slack con gestión automática de tokens
  • 🚀 Framework FastMCP: Construido con el framework FastMCP del SDK oficial de MCP
  • 💾 Persistencia de Tokens: Los tokens se guardan localmente o en DynamoDB para despliegues en la nube
  • 📱 Integración con Slack: Publica mensajes y lista canales en espacios de trabajo de Slack
  • 🔄 Registro Dinámico de Clientes: Compatible con la extensión MCP de VSCode y otros clientes
  • ☁️ GitHub + App Runner: Despliega directamente desde GitHub con AWS App Runner

Requisitos Previos

  • Python 3.11+
  • Aplicación de Slack con OAuth 2.0 configurado
  • uv (gestor de paquetes de Python)

Inicio Rápido

1. Configuración de la Aplicación de Slack

  1. Crea una nueva aplicación de Slack en https://api.slack.com/apps
  2. Agrega los Alcances de OAuth en "OAuth & Permissions":
    • chat:write - Publicar mensajes
    • channels:read - Listar canales
  3. Agrega las URLs de Redirección:
    • Local: http://localhost:8080/slack/callback
    • Producción: https://your-domain.com/slack/callback
  4. Copia el ID de Cliente y el Secreto de Cliente

2. Instalación

# Clone the repository
git clone https://github.com/miyatsuki/study-slack-remote-mcp.git
cd study-slack-remote-mcp

# Install dependencies using uv
uv sync

3. Configuración

Crea un archivo .env:

# Required: Slack OAuth credentials
SLACK_CLIENT_ID=your_client_id
SLACK_CLIENT_SECRET=your_client_secret

# Optional: Service base URL (for production deployments)
# SERVICE_BASE_URL=https://your-apprunner-url.awsapprunner.com

4. Ejecutar el Servidor

# Start the server
uv run python server.py

# Or run in background
nohup uv run python server.py > server.log 2>&1 &

Uso

Con la Extensión MCP de VSCode

  1. Instala la extensión MCP para VSCode
  2. Conéctate a la URL del servidor: http://localhost:8080/mcp/
  3. El flujo OAuth se iniciará automáticamente cuando uses una herramienta por primera vez

Con Claude Desktop

Agrega a tu configuración de Claude Desktop:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "slack": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/slack-mcp-server",
        "run",
        "python",
        "server.py"
      ]
    }
  }
}

Herramientas Disponibles

  1. list_channels: Obtén una lista de los canales de Slack

    Returns: Dictionary mapping channel names to IDs
    
  2. post_message: Publica un mensaje en un canal de Slack

    Args:
    - channel_id: Channel ID (required)
    - text: Message text (required)
    
    Returns: Success/failure message
    
  3. get_auth_status: Verifica el estado de autenticación

    Returns: Current authentication state and session info
    

Flujo de Autenticación

  1. Cuando se usa una herramienta por primera vez, el flujo OAuth se inicia automáticamente
  2. Se abre una ventana del navegador para la autorización de Slack
  3. Después de la autorización, el token se guarda para uso futuro
  4. Las solicitudes posteriores usan el token almacenado en caché

Autenticación

El servidor utiliza el soporte OAuth 2.0 integrado de FastMCP con registro dinámico de clientes. Esto permite compatibilidad con varios clientes MCP, incluida la extensión MCP de VSCode.

Gestión de Tokens

  • Los tokens OAuth se mapean internamente entre tokens MCP y tokens de Slack
  • Los tokens se persisten localmente en memoria (o en DynamoDB en la nube)
  • El flujo OAuth se inicia automáticamente cuando se usan las herramientas por primera vez
  • Registro dinámico de clientes compatible con VSCode y otros clientes

Configuración del Puerto

El servidor utiliza un solo puerto:

  • 8080: Endpoint del servidor MCP (incluye verificación de salud y rutas de devolución de llamada OAuth)

Despliegue en AWS App Runner (basado en ECR)

El proyecto utiliza despliegue basado en ECR con AWS App Runner para producción:

# First, set up AWS Systems Manager parameters:
aws ssm put-parameter --name "/slack-mcp/dev/client-id" --value "your-client-id" --type "String"
aws ssm put-parameter --name "/slack-mcp/dev/client-secret" --value "your-secret" --type "SecureString"
aws ssm put-parameter --name "/slack-mcp/dev/service-base-url" --value "https://your-apprunner-url.awsapprunner.com" --type "String"

# Build and push Docker image to ECR:
./build-and-push.sh

# Create App Runner service (if not exists) or update existing service
aws apprunner update-service --service-arn <your-service-arn> --source-configuration '...'

App Runner proporciona:

  • Despliegue desde ECR con imágenes Docker preconstruidas
  • HTTPS integrado con certificados automáticos
  • Control manual del despliegue (auto-despliegue deshabilitado por defecto)
  • Auto-escalado y gestión simplificada
  • Evita problemas de compilación de Python 3.11 con el despliegue de código fuente de App Runner

Estructura del Proyecto

study-slack-remote-mcp/
├── server.py               # Main MCP server using FastMCP framework
├── slack_oauth_provider.py # Slack OAuth provider implementation
├── storage_interface.py    # Storage abstraction (local/cloud)
├── storage_dynamodb.py     # DynamoDB storage for AWS
├── token_storage.py        # Local file-based token storage
├── Dockerfile             # Docker container configuration
├── build-and-push.sh      # ECR deployment script
├── requirements.txt       # Python dependencies for Docker
├── pyproject.toml         # Project dependencies
├── uv.lock               # Locked dependencies
├── tests/                 # Unit tests
├── infrastructure/        # AWS CDK deployment code
├── CLAUDE.md             # Development guidelines
└── .env                  # Environment variables (create from .env.example)

Desarrollo

Pruebas

# Check server health
curl http://localhost:8080/health

# Test with MCP client
mcp run uv --directory /path/to/study-slack-remote-mcp run python server.py

Depuración

Habilita el registro de depuración marcando server.log:

tail -f server.log

Solución de Problemas

Puerto Ya en Uso

# Check what's using port 8080
lsof -i :8080

# Kill process using port 8080 if needed
kill -9 $(lsof -ti:8080)

Errores de OAuth

  1. bad_redirect_uri: Asegúrate de que la URL de redirección en la aplicación de Slack coincida exactamente:

    • Debe incluir la ruta completa: http://localhost:8080/slack/callback
    • El puerto debe ser 8080 (puerto del servidor MCP)
  2. invalid_client_id: Verifica SLACK_CLIENT_ID en .env

  3. Token no encontrado: Completa el OAuth autorizando en el navegador

Consideraciones de Seguridad

  • Los tokens OAuth se mapean entre tokens MCP y tokens de Slack
  • Los tokens se almacenan en memoria localmente, en DynamoDB en producción
  • El registro dinámico de clientes admite varios clientes MCP
  • Las devoluciones de llamada OAuth usan HTTPS en producción (App Runner)

Contribuciones

  1. Haz un fork del repositorio
  2. Crea una rama de características
  3. Sigue las pautas en CLAUDE.md
  4. Envía una solicitud de extracción

Licencia

Licencia MIT: consulta el archivo LICENSE para más detalles

Referencias