Slack

Interaja com workspaces do Slack usando a API do Slack.

Documentação

Slack MCP Server

Um servidor Model Context Protocol (MCP) que permite que LLMs interajam com workspaces do Slack por meio de autenticação OAuth 2.0.

Recursos

  • 🔐 Autenticação OAuth 2.0: Fluxo OAuth seguro do Slack com gerenciamento automático de tokens
  • 🚀 Framework FastMCP: Construído com o framework FastMCP do SDK oficial do MCP
  • 💾 Persistência de Tokens: Tokens são salvos localmente ou no DynamoDB para implantações em nuvem
  • 📱 Integração com Slack: Enviar mensagens e listar canais em workspaces do Slack
  • 🔄 Registro Dinâmico de Clientes: Suporta a extensão MCP do VSCode e outros clientes
  • ☁️ GitHub + App Runner: Implante diretamente do GitHub com AWS App Runner

Pré-requisitos

  • Python 3.11+
  • App do Slack com OAuth 2.0 configurado
  • uv (gerenciador de pacotes Python)

Início Rápido

1. Configuração do App do Slack

  1. Crie um novo App do Slack em https://api.slack.com/apps
  2. Adicione os escopos OAuth em "OAuth & Permissions":
    • chat:write - Enviar mensagens
    • channels:read - Listar canais
  3. Adicione URLs de redirecionamento:
    • Local: http://localhost:8080/slack/callback
    • Produção: https://your-domain.com/slack/callback
  4. Copie o Client ID e o Client Secret

2. Instalação

# 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. Configuração

Crie um arquivo .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. Execute o Servidor

# Start the server
uv run python server.py

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

Uso

Com a Extensão MCP do VSCode

  1. Instale a extensão MCP para VSCode
  2. Conecte-se à URL do servidor: http://localhost:8080/mcp/
  3. O fluxo OAuth será iniciado automaticamente quando você usar uma ferramenta pela primeira vez

Com o Claude Desktop

Adicione à configuração do seu 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"
      ]
    }
  }
}

Ferramentas Disponíveis

  1. list_channels: Obtenha uma lista de canais do Slack

    Returns: Dictionary mapping channel names to IDs
    
  2. post_message: Envie uma mensagem para um canal do Slack

    Args:
    - channel_id: Channel ID (required)
    - text: Message text (required)
    
    Returns: Success/failure message
    
  3. get_auth_status: Verifique o status da autenticação

    Returns: Current authentication state and session info
    

Fluxo de Autenticação

  1. Quando uma ferramenta é usada pela primeira vez, o fluxo OAuth é iniciado automaticamente
  2. Uma janela do navegador é aberta para autorização do Slack
  3. Após a autorização, o token é salvo para uso futuro
  4. Solicitações subsequentes usam o token em cache

Autenticação

O servidor usa o suporte OAuth 2.0 integrado do FastMCP com registro dinâmico de clientes. Isso permite compatibilidade com vários clientes MCP, incluindo a extensão MCP do VSCode.

Gerenciamento de Tokens

  • Tokens OAuth são mapeados entre tokens MCP e tokens do Slack internamente
  • Tokens são persistidos localmente em memória (ou DynamoDB na nuvem)
  • O fluxo OAuth é iniciado automaticamente quando as ferramentas são usadas pela primeira vez
  • Registro dinâmico de clientes suportado para VSCode e outros clientes

Configuração de Porta

O servidor usa uma única porta:

  • 8080: endpoint do servidor MCP (inclui health check e rotas de callback OAuth)

Implantação no AWS App Runner (baseada em ECR)

O projeto usa implantação baseada em ECR com AWS App Runner para produção:

# 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 '...'

O App Runner oferece:

  • Implantação a partir do ECR com imagens Docker pré-construídas
  • HTTPS integrado com certificados automáticos
  • Controle manual de implantação (auto-implantação desabilitada por padrão)
  • Escalonamento automático e gerenciamento simplificado
  • Evita problemas de build do Python 3.11 com a implantação de código-fonte do App Runner

Estrutura do Projeto

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)

Desenvolvimento

Testes

# 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

Depuração

Ative o registro de depuração marcando server.log:

tail -f server.log

Solução de Problemas

Porta Já em Uso

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

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

Erros de OAuth

  1. bad_redirect_uri: Certifique-se de que a URL de redirecionamento no app do Slack corresponda exatamente:

    • Deve incluir o caminho completo: http://localhost:8080/slack/callback
    • A porta deve ser 8080 (porta do servidor MCP)
  2. invalid_client_id: Verifique SLACK_CLIENT_ID no .env

  3. Token não encontrado: Complete o OAuth autorizando no navegador

Considerações de Segurança

  • Tokens OAuth são mapeados entre tokens MCP e tokens do Slack
  • Tokens armazenados em memória localmente, DynamoDB em produção
  • Registro dinâmico de clientes suporta vários clientes MCP
  • Callbacks OAuth usam HTTPS em produção (App Runner)

Contribuição

  1. Faça um fork do repositório
  2. Crie um branch de funcionalidade
  3. Siga as diretrizes no CLAUDE.md
  4. Envie um pull request

Licença

Licença MIT - consulte o arquivo LICENSE para obter detalhes

Referências