slack-mcp-server
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.
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.
| name | slack-mcp-server |
|---|---|
| description | 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. |
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
- Token scopes: Ensure bot token has required scopes (canvases:write, etc.)
- Rate limits: Handle Slack API rate limiting gracefully
- Content format: Canvas content must be valid markdown or document JSON
Reference Files
- base-server.md - BaseMCPServer DSL and constants
- canvas-api.md - Canvas create/update/sections operations
- templates.md - YAML template system for resources
- multi-channel.md - Returning resources for multiple channels