slack-mcp-server

rbarazi's avatarfrom rbarazi

Create MCP servers that interact with Slack APIs. Use when building agent tools for Slack canvases, posting messages, or other Slack operations via Model Context Protocol.

0stars🔀0forks📁View on GitHub🕐Updated Jan 7, 2026

When & Why to Use This Skill

The Slack MCP Server skill enables developers to build robust Model Context Protocol (MCP) servers that bridge AI agents with Slack's ecosystem. It provides a standardized framework for agents to perform advanced operations beyond simple messaging, such as creating and updating Slack canvases, managing channels, and delivering rich Block Kit content, effectively turning Slack into a programmable interface for AI-driven workflows.

Use Cases

  • Automated Documentation: Empower AI agents to automatically generate and maintain Slack canvases for project updates, meeting summaries, or technical documentation.
  • Interactive Notifications: Enable agents to send rich, interactive Block Kit messages to channels, allowing users to interact with AI-generated data directly within Slack.
  • Agentic Workspace Management: Streamline administrative tasks by allowing AI agents to programmatically create channels, manage permissions, and organize workspace resources via MCP tool calls.
  • Cross-Platform Resource Sharing: Return complex Slack resources (like UI and Slack-specific links) from tool calls to provide context-aware responses across different client interfaces.
nameslack-mcp-server
descriptionCreate MCP servers that interact with Slack APIs. Use when building agent tools for Slack canvases, posting messages, or other Slack operations via Model Context Protocol.

Slack MCP Server Tools

Build MCP servers that enable AI agents to interact with Slack APIs.

Problem Statement

AI agents need to perform actions in Slack beyond just sending messages - creating canvases, managing channels, posting rich content. MCP servers provide a standardized way to expose these capabilities as tools.

When to Use

  • Building agent tools that create/update Slack canvases
  • Exposing Slack API operations as MCP tools
  • Returning rich resources (Block Kit, Work Objects) from tool calls
  • Keywords: mcp server, slack tools, slack canvas, agent tools, model context protocol

Quick Start

module SlackCanvasMCPServer
  class Server < BaseMCPServer
    server_name "slack_canvas"
    server_version "1.0.0"

    tool :create_canvas
    tool :update_canvas

    def create_canvas(title:, content:, channel_id: nil)
      client = Slack::Web::Client.new(token: config[:slack_token])

      response = client.canvases_create(
        title: title,
        document_content: JSON.generate({ type: "markdown", markdown: content })
      )

      build_success_result(
        text: "Created canvas '#{title}'",
        canvas_id: response["canvas_id"]
      )
    end
  end
end

Architecture

Agent → Task → LLM → Tool Call → MCP Server → Slack API
                                      ↓
                              Tool Result with Resources

Key Patterns

Tool registration: Use tool :method_name DSL

Config injection: Credentials via config[:slack_token], config[:team_id]

Multi-channel results: Return ui:// + slack:// resources for different clients

Testing Strategy

RSpec.describe SlackCanvasMCPServer::Server do
  let(:server) { described_class.new(config: { slack_token: "xoxb-test" }) }

  it "creates canvas with valid content" do
    stub_slack_api(:canvases_create).to_return(canvas_id: "C123")

    result = server.create_canvas(title: "Test", content: "# Hello")

    expect(result[:canvas_id]).to eq("C123")
  end
end

Common Pitfalls

  1. Token scopes: Ensure bot token has required scopes (canvases:write, etc.)
  2. Rate limits: Handle Slack API rate limiting gracefully
  3. Content format: Canvas content must be valid markdown or document JSON

Reference Files