Claude MCP Slack

Uma ação do GitHub que funciona como um servidor MCP do Slack, permitindo downloads seguros de imagens e integrações com o Slack.

Documentação

Claude MCP Slack

Uma GitHub Action independente que fornece funcionalidade de servidor Slack MCP (Model Context Protocol) para Claude Code Action, permitindo downloads seguros de imagens do Slack e integrações.

Recursos

  • 🔐 Integração Segura com Slack: Acesso autenticado a arquivos do Slack usando tokens OAuth de Bot User
  • 📁 Gerenciamento Flexível de Arquivos: Diretórios de download personalizáveis com validação de segurança
  • 🐳 Suporte a Docker: Execute localmente ou em contêineres com restrições de segurança adequadas
  • 🛡️ Segurança em Primeiro Lugar: Validação de entrada, prevenção de path traversal e manipulação segura de tokens
  • 🧪 Testes Abrangentes: Suites de testes unitários, de integração e de segurança
  • Integração Fácil: Compatibilidade plug-and-play com claude-code-action

Início 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 }}

Configuração Avançada

- 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 }}

Configuração

Entradas

EntradaDescriçãoObrigatórioPadrão
slack_tokenToken OAuth de Bot User do Slack (xoxb-*)-
download_directoryDiretório para arquivos baixados"."

Saídas

SaídaDescrição
mcp_configConfiguração JSON para claude-code-action
server_executableCaminho para o servidor Slack MCP

Variáveis de Ambiente

A ação configura as seguintes variáveis de ambiente para o servidor MCP:

  • SLACK_TOKEN: Seu token OAuth de Bot User do Slack
  • DOWNLOAD_DIRECTORY: Caminho absoluto resolvido para downloads

Configuração do Bot do Slack

1. Criar um App do Slack

  1. Acesse api.slack.com/apps
  2. Clique em "Create New App" → "From scratch"
  3. Dê um nome ao seu app e selecione seu workspace

2. Configurar Escopos do Token do Bot

Em OAuth & Permissions, adicione estes escopos de Token do Bot:

files:read      # Read file content and metadata

3. Instalar no Workspace

  1. Clique em "Install to Workspace"
  2. Copie o "Bot User OAuth Token" (começa com xoxb-)
  3. Adicione-o aos segredos do seu repositório como SLACK_TOKEN

4. Exemplo de Uso do Bot

Uma vez configurado, o Claude pode baixar imagens do Slack:

@claude Please analyze this screenshot from our Slack channel: https://files.slack.com/files-tmb/T05EFSVDCLR-F08TC9CP9B8/screenshot_720.png

Ferramentas MCP Disponíveis

slack_image_download

Baixa imagens do Slack com autenticação.

Parâmetros:

  • url (obrigatório): URL do arquivo do Slack (deve começar com https://files.slack.com/)
  • filename (opcional): Nome de arquivo personalizado (será sanitizado)

Exemplo:

{
  "tool": "slack_image_download",
  "arguments": {
    "url": "https://files.slack.com/files-tmb/T05EFSVDCLR-F08TC9CP9B8/screenshot_720.png",
    "filename": "screenshot.png"
  }
}

slack_health_check

Verifica a saúde e a configuração do servidor Slack MCP.

Exemplo:

{
  "tool": "slack_health_check",
  "arguments": {}
}

Recursos de Segurança

Validação de Entrada

  • Validação de URL (deve ser domínio de arquivos do Slack)
  • Verificação do formato do token
  • Prevenção de path traversal
  • Sanitização de nomes de arquivo

Execução Segura

  • Execução em contêiner como usuário não-root
  • Sistema de arquivos somente leitura (exceto diretório de download)
  • Limites de recursos (tamanho de arquivo, timeout)
  • Sem injeção de metacaracteres de shell

Segurança do Token

  • Isolamento de variáveis de ambiente
  • Sem registro ou exposição de tokens
  • Validação segura do formato do token

Desenvolvimento

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

Desenvolvimento com 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

Testes

# 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

Solução de Problemas

Problemas Comuns

"SLACK_TOKEN environment variable is required"

  • Certifique-se de que seu token do Slack está configurado corretamente nos segredos do repositório
  • Verifique se o token começa com xoxb- ou xoxp-

"URL must be a Slack file URL"

  • Apenas URLs que começam com https://files.slack.com/ são suportadas
  • Certifique-se de que a URL é de um arquivo do Slack, não de uma mensagem comum

Erros de "Permission denied"

  • Verifique se seu bot do Slack tem o escopo files:read
  • Confirme que o bot está instalado no workspace onde o arquivo está localizado

Falhas no download

  • Certifique-se de que o arquivo não foi excluído do Slack
  • Verifique se o arquivo está acessível ao seu bot
  • Verifique a conectividade de rede e as configurações de firewall

Modo de Depuração

Ative o registro de depuração definindo ACTIONS_STEP_DEBUG=true nos segredos do seu repositório.

Contribuindo

  1. Faça um fork do repositório
  2. Crie um branch de funcionalidade (git checkout -b feature/amazing-feature)
  3. Faça suas alterações
  4. Adicione testes para novas funcionalidades
  5. Certifique-se de que todos os testes passem (bun test)
  6. Faça commit das suas alterações (git commit -m 'Add amazing feature')
  7. Envie para o branch (git push origin feature/amazing-feature)
  8. Abra um Pull Request

Diretrizes de Desenvolvimento

  • Siga as melhores práticas de TypeScript
  • Adicione testes para todos os novos recursos
  • Atualize a documentação para mudanças na API
  • Certifique-se de que os testes de segurança passem
  • Use mensagens de commit convencionais

Licença

Este projeto é licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.

Suporte

Projetos Relacionados