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
- Crea una nueva aplicación de Slack en https://api.slack.com/apps
- Agrega los Alcances de OAuth en "OAuth & Permissions":
chat:write- Publicar mensajeschannels:read- Listar canales
- Agrega las URLs de Redirección:
- Local:
http://localhost:8080/slack/callback - Producción:
https://your-domain.com/slack/callback
- Local:
- 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
- Instala la extensión MCP para VSCode
- Conéctate a la URL del servidor:
http://localhost:8080/mcp/ - 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
-
list_channels: Obtén una lista de los canales de Slack
Returns: Dictionary mapping channel names to IDs -
post_message: Publica un mensaje en un canal de Slack
Args: - channel_id: Channel ID (required) - text: Message text (required) Returns: Success/failure message -
get_auth_status: Verifica el estado de autenticación
Returns: Current authentication state and session info
Flujo de Autenticación
- Cuando se usa una herramienta por primera vez, el flujo OAuth se inicia automáticamente
- Se abre una ventana del navegador para la autorización de Slack
- Después de la autorización, el token se guarda para uso futuro
- 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
-
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)
- Debe incluir la ruta completa:
-
invalid_client_id: Verifica SLACK_CLIENT_ID en .env
-
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
- Haz un fork del repositorio
- Crea una rama de características
- Sigue las pautas en CLAUDE.md
- Envía una solicitud de extracción
Licencia
Licencia MIT: consulta el archivo LICENSE para más detalles