trackmcp
Back to directory
miyatsuki

study-slack-remote-mcp

View on GitHub

Slack

0 stars PythonOthers Updated Jun 29, 2025

Documentation

Slack MCP Server

A Model Context Protocol (MCP) server that enables LLMs to interact with Slack workspaces through OAuth 2.0 authentication.

Features

  • ๐Ÿ” OAuth 2.0 Authentication: Secure Slack OAuth flow with automatic token management
  • ๐Ÿš€ FastMCP Framework: Built with the official MCP SDK's FastMCP framework
  • ๐Ÿ’พ Token Persistence: Tokens are saved locally or in DynamoDB for cloud deployments
  • ๐Ÿ“ฑ Slack Integration: Post messages and list channels in Slack workspaces
  • ๐Ÿ”„ Dynamic Client Registration: Supports VSCode MCP extension and other clients
  • โ˜๏ธ GitHub + App Runner: Deploy directly from GitHub with AWS App Runner

Prerequisites

  • Python 3.11+
  • Slack App with OAuth 2.0 configured
  • uv (Python package manager)

Quick Start

1. Slack App Configuration

1. Create a new Slack App at https://api.slack.com/apps

2. Add OAuth Scopes in "OAuth & Permissions":

    3. Add Redirect URLs:

      4. Copy the Client ID and Client Secret

      2. Installation

      bash
      # 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. Configuration

      Create a `.env` file:

      bash
      # 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. Run the Server

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

      Usage

      With VSCode MCP Extension

      1. Install the MCP extension for VSCode

      2. Connect to the server URL: `http://localhost:8080/mcp/`

      3. The OAuth flow will start automatically when you first use a tool

      With Claude Desktop

      Add to your Claude Desktop configuration:

      macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`

      Windows: `%APPDATA%\Claude\claude_desktop_config.json`

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

      Available Tools

      1. list_channels: Get a list of Slack channels

      code
      Returns: Dictionary mapping channel names to IDs

      2. post_message: Post a message to a Slack channel

      code
      Args:
         - channel_id: Channel ID (required)
         - text: Message text (required)
         
         Returns: Success/failure message

      3. get_auth_status: Check authentication status

      code
      Returns: Current authentication state and session info

      Authentication Flow

      1. When a tool is first used, the OAuth flow automatically starts

      2. A browser window opens for Slack authorization

      3. After authorization, the token is saved for future use

      4. Subsequent requests use the cached token

      Authentication

      The server uses FastMCP's built-in OAuth 2.0 support with dynamic client registration. This allows compatibility with various MCP clients including VSCode's MCP extension.

      Token Management

      • OAuth tokens are mapped between MCP tokens and Slack tokens internally
      • Tokens are persisted locally in memory (or DynamoDB in cloud)
      • OAuth flow starts automatically when tools are first used
      • Dynamic client registration supported for VSCode and other clients

      Port Configuration

      The server uses a single port:

      • 8080: MCP server endpoint (includes health check and OAuth callback routes)

      AWS App Runner Deployment (ECR-based)

      The project uses ECR-based deployment with AWS App Runner for production:

      bash
      # 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  --source-configuration '...'

      App Runner provides:

      • Deployment from ECR with pre-built Docker images
      • Built-in HTTPS with automatic certificates
      • Manual deployment control (auto-deploy disabled by default)
      • Auto-scaling and simplified management
      • Avoids Python 3.11 build issues with App Runner's source code deployment

      Project Structure

      code
      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)

      Development

      Testing

      bash
      # 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

      Debugging

      Enable debug logging by checking `server.log`:

      bash
      tail -f server.log

      Troubleshooting

      Port Already in Use

      bash
      # Check what's using port 8080
      lsof -i :8080
      
      # Kill process using port 8080 if needed
      kill -9 $(lsof -ti:8080)

      OAuth Errors

      1. bad_redirect_uri: Ensure the redirect URL in Slack app matches exactly:

        2. invalid_client_id: Verify SLACK_CLIENT_ID in .env

        3. Token not found: Complete OAuth by authorizing in browser

        Security Considerations

        • OAuth tokens are mapped between MCP tokens and Slack tokens
        • Tokens stored in memory locally, DynamoDB in production
        • Dynamic client registration supports various MCP clients
        • OAuth callbacks use HTTPS in production (App Runner)

        Contributing

        1. Fork the repository

        2. Create a feature branch

        3. Follow the guidelines in CLAUDE.md

        4. Submit a pull request

        License

        MIT License - see LICENSE file for details

        References

        Frequently asked questions

        What is study-slack-remote-mcp?

        study-slack-remote-mcp is Slack

        How do I install study-slack-remote-mcp?

        Open the GitHub repository and follow its README. Most MCP servers are added to your client's MCP config, then called by your agent.

        Is study-slack-remote-mcp open source?

        Yes โ€” it is hosted on GitHub at https://github.com/miyatsuki/study-slack-remote-mcp.

        Related MCP tools

        Run your own MCP server? See who uses it and what to fix.

        Measure it with TrackMCP