Slack MCP 服务器

一个强大的 Slack 工作区 MCP 服务器,支持私聊、群聊、智能历史记录获取,并通过 OAuth 或浏览器令牌工作。

  • by Coykto
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Coykto/slack-mcp

使用说明

Slack MCP服务器(Python)

用于Slack工作区的强大MCP服务器-支持DM、Group DM、智能历史获取,并通过OAuth或浏览器令牌工作。

这是对原始Go语言的Python/FastMCP重写 slack-mcp服务器.

特性

  • 8工具:对话历史、对话回复、对话添加消息、对话搜索消息、频道列表、频道创建、频道邀请用户、频道移除用户
  • 2资源:slack://{workspace}/通道,slack://{workspace}/users
  • 认证:用于大多数操作的Bot OAuth令牌(xoxb),用于搜索的用户OAuth令牌(xoxp)
  • 智能缓存:用户和频道在本地缓存以实现快速查找
  • csv输出:所有响应均为CSV格式,便于解析

安装

使用uvx(建议用于Claude Code)

uvx --from git+https://github.com/korotovsky/slack-mcp-server/python_version slack-mcp-server \
    --bot-token xoxb-your-bot-token

使用pip

pip install git+https://github.com/korotovsky/slack-mcp-server.git#subdirectory=python_version

发展

cd python_version
pip install -e ".[dev]"
pre-commit install

Claude代码配置

添加到您的Claude Code MCP设置中:

使用Bot Token(建议用于大多数操作):

{
  "slack-mcp": {
    "type": "stdio",
    "command": "uvx",
    "args": [
      "--from",
      "git+https://github.com/korotovsky/slack-mcp-server/python_version",
      "slack-mcp-server",
      "--bot-token",
      "xoxb-your-bot-token-here"
    ]
  }
}

使用Bot和用户令牌(用于搜索功能):

{
  "slack-mcp": {
    "type": "stdio",
    "command": "uvx",
    "args": [
      "--from",
      "git+https://github.com/korotovsky/slack-mcp-server/python_version",
      "slack-mcp-server",
      "--bot-token",
      "xoxb-your-bot-token-here",
      "--user-token",
      "xoxp-your-user-token-here"
    ]
  }
}

或者使用浏览器令牌:

{
  "slack-mcp": {
    "type": "stdio",
    "command": "uvx",
    "args": [
      "--from",
      "git+https://github.com/korotovsky/slack-mcp-server/python_version",
      "slack-mcp-server",
      "--xoxc-token",
      "xoxc-your-token",
      "--xoxd-token",
      "xoxd-your-cookie"
    ]
  }
}

认证

服务器支持两种类型的OAuth令牌,每种令牌都有不同的用途:

机器人令牌(xoxb)-必填

Bot OAuth令牌用于大多数操作,是服务器运行所必需的。

令牌格式: xoxb-...

所需范围:

  • channels:manage -创建公共频道
  • groups:write -创建私人频道,邀请/删除用户
  • channels:read -阅读公共频道信息
  • groups:read -读取私人频道信息
  • channels:history -读取公共频道消息历史记录
  • groups:history -读取私人频道消息历史记录
  • im:history -读取DM历史记录
  • mpim:history -读取组DM历史记录
  • users:read -读取用户信息
  • chat:write -发布消息

如何获得Bot令牌:

  1. 在以下位置创建Slack应用程序https://api.slack.com/apps
  2. 导航到“OAuth和权限”
  3. 添加上面列出的所需机器人令牌范围
  4. 将应用程序安装到您的工作区
  5. 复制“Bot用户OAuth令牌”(以开头 xoxb-)

用户令牌(xoxp)-可选

用户OAuth令牌仅用于搜索操作。Bot令牌不能与 search.messages API

令牌格式: xoxp-...

所需范围:

  • search:read -搜索邮件(必填) conversations_search_messages)

如何获取用户令牌:

  1. 在Slack应用程序设置中,导航到“OAuth和权限”
  2. 添加 search:read 用户令牌范围
  3. 将应用程序重新安装到您的工作区
  4. 复制“用户OAuth令牌”(以开头 xoxp-)

注: 如果你不需要搜索功能,你可以省略用户令牌。

浏览器令牌(xoxc/xoxd)-替代方案

从浏览器中提取“隐身模式”:

  1. 在浏览器中打开Slack,打开DevTools
  2. 找到 xoxc- 本地存储或网络请求中的令牌
  3. 找到 d=xoxd-... 在饼干中

环境变量

变量 描述
SLACK_MCP_BOT_TOKEN Bot OAuth令牌(xoxb-…)-大多数操作都需要
SLACK_MCP_USER_TOKEN 用户OAuth令牌(xoxp-…)-可选,用于搜索操作
SLACK_MCP_XOXC_TOKEN 浏览器令牌(替代身份验证)
SLACK_MCP_XOXD_TOKEN 浏览器cookie(替代身份验证)
SLACK_MCP_ADD_MESSAGE_TOOL 启用发布: true, 1,或频道列表
SLACK_MCP_ADD_MESSAGE_MARK 发布后标记为已读
SLACK_MCP_ADD_MESSAGE_UNFURLING 链接展开: yes 或域列表
SLACK_MCP_CHANNEL_MANAGEMENT 启用渠道管理工具: true, 1,或 yes
SLACK_MCP_USERS_CACHE 自定义用户缓存路径
SLACK_MCP_CHANNELS_CACHE 自定义通道缓存路径
SLACK_MCP_LOG_LEVEL 日志级别(调试/信息/警告/错误)

工具

对话_历史

从频道或DM获取消息。

channel_id: Channel ID (Cxxxxxxxxxx) or name (#general, @username)
include_activity_messages: Include join/leave messages (default: false)
cursor: Pagination cursor
limit: '1d', '1w', '30d', '90d' or number like '50'

对话回复

获取线程回复。

channel_id: Channel ID or name
thread_ts: Thread timestamp (1234567890.123456)
include_activity_messages: Include activity messages
cursor: Pagination cursor
limit: Time range or number

对话_添加_消息

发布消息(默认情况下禁用,将SLACK_MCP_ADD_message_TOOL设置为启用)。

channel_id: Channel ID or name
payload: Message text
thread_ts: Optional thread to reply to
content_type: 'text/markdown' or 'text/plain'

对话_搜索_消息

使用过滤器搜索邮件。

search_query: Search text or Slack message URL
filter_in_channel: Filter by channel
filter_in_im_or_mpim: Filter by DM
filter_users_with: Filter threads with user
filter_users_from: Filter messages from user
filter_date_before/after/on/during: Date filters
filter_threads_only: Only thread messages
cursor: Pagination cursor
limit: Max results (1-100)

频道列表

获取频道列表。

channel_types: Comma-separated: 'mpim', 'im', 'public_channel', 'private_channel'
sort: 'popularity' to sort by member count
limit: Max results (1-999)
cursor: Pagination cursor

channels_create

创建新的Slack频道(需要 SLACK_MCP_CHANNEL_MANAGEMENT=true).

参数:

name: Channel name (lowercase, numbers, hyphens, underscores; max 80 chars)
is_private: Create as private channel (default: false)
description: Channel description/purpose

使用示例:

# Create a public channel
channels_create(name="project-alpha", description="Main project discussion")

# Create a private channel for team leads
channels_create(name="team-leads", is_private=true, description="Leadership discussions")

重要行为:

创意创作: 此工具创建的所有频道都标有 [managed by slack-mcp] 在他们的目标领域。如果你打电话 channels_create 名称已存在:

  • 如果通道是由此MCP实例创建的(具有标记),它将返回现有通道
  • 如果通道存在但不是由此MCP创建的,则返回错误

这可确保安全、幂等的通道创建,同时防止意外修改不受此工具管理的现有通道。

所需范围:

  • 公共渠道: channels:manage bot令牌范围
  • 私人渠道: groups:write bot令牌范围

channels_invite_users

邀请用户加入Slack频道(需要 SLACK_MCP_CHANNEL_MANAGEMENT=true).

参数:

channel_id: Channel ID or name (e.g., C1234567890 or #project-alpha)
user_ids: Comma-separated user IDs or @mentions (e.g., 'U123,U456' or '@alice,@bob')

使用示例:

# Invite users by @mention
channels_invite_users(channel_id="#project-alpha", user_ids="@alice,@bob")

# Invite users by ID
channels_invite_users(channel_id="C1234567890", user_ids="U123456,U789012")

# Mix of @mentions and IDs
channels_invite_users(channel_id="#project-alpha", user_ids="@alice,U789012")

重要行为:

  • 已在通道中的用户会被自动跳过(幂等行为)
  • 为方便起见,同时支持用户ID(U…)和@提及
  • 需要 groups:write bot令牌范围

channels_remove_user

从Slack频道中删除用户(需要 SLACK_MCP_CHANNEL_MANAGEMENT=true).

参数:

channel_id: Channel ID or name (e.g., C1234567890 or #project-alpha)
user_id: User ID or @mention to remove (e.g., 'U123' or '@alice')

使用示例:

# Remove user by @mention
channels_remove_user(channel_id="#project-alpha", user_id="@alice")

# Remove user by ID
channels_remove_user(channel_id="C1234567890", user_id="U123456")

重要行为:

  • 删除不在频道中的用户将返回 not_in_channel 状态(不是错误)
  • 为方便起见,同时支持用户ID(U…)和@提及
  • 需要 groups:write bot令牌范围

资源

  • slack://{workspace}/channels -所有通道的CSV目录
  • slack://{workspace}/users -所有用户的CSV目录

发展

# Install dev dependencies
pip install -e ".[dev]"

# Install pre-commit hooks
pre-commit install

# Run linting
ruff check .
ruff format .

许可证

麻省理工学院