Skip to main content
Glama

Claude MCP Slack

A standalone GitHub Action that provides Slack MCP (Model Context Protocol) server functionality for Claude Code Action, enabling secure Slack image downloads and integrations.

Features

  • ๐Ÿ” Secure Slack Integration: Authenticated access to Slack files using Bot User OAuth tokens

  • ๐Ÿ“ Flexible File Management: Customizable download directories with security validation

  • ๐Ÿณ Docker Support: Run locally or in containers with proper security constraints

  • ๐Ÿ›ก๏ธ Security First: Input validation, path traversal prevention, and secure token handling

  • ๐Ÿงช Comprehensive Testing: Unit, integration, and security test suites

  • โšก Easy Integration: Drop-in compatibility with claude-code-action

Quick Start

Basic Usage

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

Advanced Configuration

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

Configuration

Inputs

Input

Description

Required

Default

slack_token

Slack Bot User OAuth Token (xoxb-*)

โœ…

-

download_directory

Directory for downloaded files

โŒ

"."

Outputs

Output

Description

mcp_config

JSON configuration for claude-code-action

server_executable

Path to the Slack MCP server

Environment Variables

The action sets up the following environment variables for the MCP server:

  • SLACK_TOKEN: Your Slack Bot User OAuth Token

  • DOWNLOAD_DIRECTORY: Resolved absolute path for downloads

Slack Bot Setup

1. Create a Slack App

  1. Go to api.slack.com/apps

  2. Click "Create New App" โ†’ "From scratch"

  3. Name your app and select your workspace

2. Configure Bot Token Scopes

Under OAuth & Permissions, add these Bot Token Scopes:

files:read # Read file content and metadata

3. Install to Workspace

  1. Click "Install to Workspace"

  2. Copy the "Bot User OAuth Token" (starts with xoxb-)

  3. Add it to your repository secrets as SLACK_TOKEN

4. Example Bot Usage

Once configured, Claude can download Slack images:

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

Available MCP Tools

slack_image_download

Downloads images from Slack with authentication.

Parameters:

  • url (required): Slack file URL (must start with https://files.slack.com/)

  • filename (optional): Custom filename (will be sanitized)

Example:

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

slack_health_check

Checks the health and configuration of the Slack MCP server.

Example:

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

Security Features

Input Validation

  • URL validation (must be Slack files domain)

  • Token format verification

  • Path traversal prevention

  • Filename sanitization

Secure Execution

  • Non-root container execution

  • Read-only filesystem (except download directory)

  • Resource limits (file size, timeout)

  • No shell metacharacter injection

Token Security

  • Environment variable isolation

  • No token logging or exposure

  • Secure token format validation

Development

Local Setup

# 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

Docker Development

# 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

Testing

# 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

Troubleshooting

Common Issues

"SLACK_TOKEN environment variable is required"

  • Ensure your Slack token is properly set in repository secrets

  • Verify the token starts with xoxb- or xoxp-

"URL must be a Slack file URL"

  • Only URLs starting with https://files.slack.com/ are supported

  • Ensure the URL is from a Slack file, not a regular message

"Permission denied" errors

  • Check that your Slack bot has files:read scope

  • Verify the bot is installed in the workspace where the file is located

Download failures

  • Ensure the file hasn't been deleted from Slack

  • Check that the file is accessible to your bot

  • Verify network connectivity and firewall settings

Debug Mode

Enable debug logging by setting ACTIONS_STEP_DEBUG=true in your repository secrets.

Contributing

  1. Fork the repository

  2. Create a feature branch (git checkout -b feature/amazing-feature)

  3. Make your changes

  4. Add tests for new functionality

  5. Ensure all tests pass (bun test)

  6. Commit your changes (git commit -m 'Add amazing feature')

  7. Push to the branch (git push origin feature/amazing-feature)

  8. Open a Pull Request

Development Guidelines

  • Follow TypeScript best practices

  • Add tests for all new features

  • Update documentation for API changes

  • Ensure security tests pass

  • Use conventional commit messages

License

This project is licensed under the MIT License - see the LICENSE file for details.

Support

-
security - not tested
A
license - permissive license
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/atlasfutures/claude-mcp-slack'

If you have feedback or need assistance with the MCP directory API, please join our Discord server