Slack对话访问服务

一个通过Model Context Protocol(MCP)提供程序化访问Slack对话、线程和工作区信息的服务器,专为AI助手如Claude设计,使其能够通过标准化接口与Slack工作区交互。

  • by stevenvo
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 stevenvo/slack-mcp-server

使用说明

Slack MCP服务器

一种模型上下文协议(MCP)服务器,提供对Slack对话、线程和工作区信息的编程访问。专为像Claude这样的人工智能助手设计,通过标准化的界面与您的Slack工作区进行交互。

什么是MCP?

这 模型上下文协议 是一个开放标准,使人工智能助手能够安全地访问外部数据源和工具。此服务器实现了MCP,使Claude可以直接访问您的Slack工作区。

特性

📨 消息操作

  • 读取频道消息:通过灵活的基于时间的过滤从任何渠道获取最新消息
  • 读取线程消息:访问完整的对话线程,包括所有回复
  • 获取消息固定链接:生成指向特定消息的永久、可共享链接

🔍 发现和搜索

  • 列出您的频道:枚举您所属的所有频道(公共、私有、DM、组DM)
  • 搜索对话:使用Slack的搜索功能查找提及或涉及您的邮件

📊 元数据和上下文

  • 获取频道信息:查看频道详细信息、主题、目的、成员数量和设置
  • 获取用户信息:查找用户资料、电子邮件、标题、时区和状态信息

快速开始

选项1:从PyPI安装(推荐)

使用此MCP服务器的最简单方法是直接从PyPI安装:

# Install via pip
pip install slack-mcp-server-v2

# Or install via uvx (recommended for MCP servers)
uvx slack-mcp-server-v2

选项2:从源代码安装

# Clone the repository
git clone https://github.com/stevenvo/slack-mcp-server.git
cd slack-mcp-server

# Install dependencies
pip install -r requirements.txt

安装后,您需要设置身份验证(见下文)。

认证

选项1:用户令牌(推荐)

用户令牌使用您的个人Slack权限,可以访问您所属的所有频道。

  1. 首选https://api.slack.com/apps
  2. 创建新应用程序(或使用现有应用程序)
  3. 导航到“OAuth和权限”
  4. 添加以下内容 用户令牌范围:
    • channels:history -查看公共频道中的消息
    • channels:read -查看基本频道信息
    • groups:history -查看私人频道中的消息
    • groups:read -查看基本私人频道信息
    • im:history -查看直接消息中的消息
    • im:read -查看基本DM信息
    • mpim:history -查看组DM中的消息
    • mpim:read -查看基本组DM信息
    • users:read -查看用户信息
    • search:read -搜索邮件
  5. 将应用程序安装到您的工作区
  6. 复制“用户OAuth令牌”(以开头 xoxp-)

选项2:机器人令牌

Bot Token的限制更为有限,但更易于设置以实现团队范围内的访问。

  1. 按照上述步骤1-2进行操作
  2. 添加 Bot令牌范围 相反(列表相同,但在bot部分)
  3. 安装应用程序
  4. 复制“Bot用户OAuth令牌”(以开头 xoxb-)
  5. 邀请机器人加入您想要阅读的频道: /invite @YourBotName

配置环境

创建一个 .env 文件:

cp .env.example .env

编辑 .env 并添加您的令牌:

# Use one of these:
SLACK_USER_TOKEN=xoxp-your-user-token-here
# OR
SLACK_BOT_TOKEN=xoxb-your-bot-token-here

Claude代码的配置

通过编辑您的 ~/.claude.json 文件:

使用PyPI包(推荐)

{
  "mcpServers": {
    "slack": {
      "command": "uvx",
      "args": ["slack-mcp-server-v2"],
      "env": {
        "SLACK_USER_TOKEN": "xoxp-your-user-token-here",
        "SLACK_WORKSPACE_URL": "https://your-workspace.slack.com"
      }
    }
  }
}

使用本地安装

如果从源代码安装:

{
  "mcpServers": {
    "slack": {
      "command": "python",
      "args": ["/path/to/slack-mcp-server/server.py"],
      "env": {
        "SLACK_USER_TOKEN": "xoxp-your-user-token-here",
        "SLACK_WORKSPACE_URL": "https://your-workspace.slack.com"
      }
    }
  }
}

使用Bot令牌

如果您更喜欢使用机器人令牌而不是用户令牌:

{
  "mcpServers": {
    "slack": {
      "command": "uvx",
      "args": ["slack-mcp-server-v2"],
      "env": {
        "SLACK_BOT_TOKEN": "xoxb-your-bot-token-here",
        "SLACK_WORKSPACE_URL": "https://your-workspace.slack.com"
      }
    }
  }
}

备注:记得邀请你的机器人加入频道: /invite @YourBotName

验证安装

重新启动Claude Code并验证服务器是否正在运行:

claude mcp list

你应该看看 slack 在活动MCP服务器列表中。

可用工具

此服务器提供7个MCP工具用于与Slack交互:

📬 read_channel_messages

使用灵活的时间过滤从任何Slack频道检索最近的消息。

参数:

名称 类型 必填 默认 描述
channel_id string ✅ - 空闲频道ID(例如。, C1234567890)
lookback_hours 编号 ❌ 24小时回顾过去
limit 编号 ❌ 100 要检索的最大消息数(最大值:1000)

自然语言示例:

  • “显示过去24小时内来自#general频道的消息”
  • “读取来自信道C1234567890的最后48小时的消息”
  • “从C070PDRHQS1获取最近50条消息”

退货: 带有时间戳、用户提及、线程指示器、反应和永久链接的格式化消息。


💬 read_thread_messages

阅读对话线程中的所有消息,包括父消息和所有回复。

参数:

名称 类型 必填 描述
channel_id string ✅ 线程所在的通道ID
thread_ts string ✅ 线程时间戳( ts 父消息的字段)

自然语言示例:

  • “读取通道C1234567890中时间戳为1699564800.123456的完整线程”
  • “显示对消息ts 1699564800.123456的所有答复”

退货: 用父消息和所有回复完成线程,并用时间戳和反应格式化。


📋 get_channel_info

获取有关Slack频道的详细元数据。

参数:

名称 类型 必填 描述
channel_id string ✅ 松弛频道ID

自然语言示例:

  • “获取有关频道C1234567890的信息”
  • “显示#工程频道的详细信息”

退货: 频道名称、ID、创建日期、成员数、隐私状态、主题和目的。


👤 get_user_info

查找任何Slack用户的详细个人资料信息。

参数:

名称 类型 必填 描述
user_id string ✅ Slack用户ID(例如。, U1234567)

自然语言示例:

  • “获取用户U1234567的信息”
  • “显示@john.doe的详细信息”

退货: 用户的真实姓名、显示名称、电子邮件、标题、状态、时区和管理员/机器人标志。


📑 list_my_channels

列出您所属的所有频道,并支持不同的频道类型。

参数:

名称 类型 必填 默认 描述
types string ❌ public_channel,private_channel 逗号分隔的通道类型

支持的类型:

  • public_channel -公共频道
  • private_channel -私人频道
  • mpim -组直接消息
  • im -直接消息

自然语言示例:

  • “列出我的所有频道”
  • “显示我所在的所有私人频道”
  • “列出我的所有DM”

退货: 频道名称、ID、成员计数和隐私指示器。


🔍 search_my_conversations

在所有提及或涉及你的对话中搜索消息。

参数:

名称 类型 必填 默认 描述
query string ✅ - 搜索词
count 编号 ❌ 20 结果数(最大值:100)

自然语言示例:

  • “在我的对话中搜索‘部署’”
  • “查找上周提到‘bug修复’的消息”
  • “搜索有关‘Q4计划’的消息”

退货: 将消息与频道名称、用户信息、时间戳和永久链接进行匹配。


🔗 get_message_permalink

生成指向特定Slack消息的永久、可共享链接。

参数:

名称 类型 必填 描述
channel_id string ✅ 频道ID
message_ts string ✅ 消息时间戳

自然语言示例:

  • “获取频道C1234567890中消息1699564800.123456的永久链接”
  • “生成指向此消息的链接”

退货: 即使工作区的URL发生变化,也能正常工作的永久URL。

用法示例

在Claude Code中配置后,您可以使用自然语言与Slack工作区进行交互。以下是一些示例查询:

读取消息

👤 "Show me the latest messages from #engineering"
🤖 [Claude fetches and displays recent messages with timestamps, users, and links]

👤 "What were the last 100 messages in the #product-updates channel from the past week?"
🤖 [Claude retrieves messages from the last 168 hours with limit of 100]

以下线索

👤 "Read the full thread that starts at timestamp 1699564800.123456 in channel C1234567890"
🤖 [Claude displays the entire conversation thread with all replies]

发现和搜索

👤 "List all channels I'm a member of"
🤖 [Claude shows all your public and private channels with member counts]

👤 "Search my Slack conversations for 'quarterly review'"
🤖 [Claude searches across all your messages and shows matches with context]

👤 "Find mentions of 'production deployment' in my conversations"
🤖 [Claude uses Slack search to find relevant messages]

获取上下文

👤 "Get info about channel C1234567890"
🤖 [Claude shows channel name, topic, member count, etc.]

👤 "Who is user U1234567?"
🤖 [Claude displays user profile with email, title, timezone]

👤 "Get me a permanent link to message 1699564800.123456 in #general"
🤖 [Claude generates a shareable permalink]

实用工作流程

跟进一个项目:

👤 "Show me all messages from #project-alpha in the last 3 days"

找出那个重要的决定:

👤 "Search for messages about 'API migration decision'"

获取入职背景:

👤 "List all channels I'm in and show me the purpose of each"

查找频道ID

方法1:从Slack URL

当你在频道中时,URL看起来像:

https://your-workspace.slack.com/archives/C1234567890/p1234567890

之后的部分 /archives/ 是频道ID: C1234567890

方法2:使用MCP服务器

问克劳德:

List all my channels

方法3:在Slack中单击鼠标右键

  1. 右键单击频道名称
  2. 点击“复制链接”
  3. 从URL中提取频道ID

需求

  • python:3.10或更高
  • Slack工作区:创建和配置Slack应用程序的管理员权限
  • 克劳德代码:支持MCP的最新版本
  • 操作系统:带WSL的macOS、Linux或Windows

故障排除

“缺少必需的作用域”错误

您的Slack应用程序需要配置正确的OAuth作用域。

解决方案:

  1. 首选https://api.slack.com/apps并选择您的应用程序
  2. 导航到“OAuth和权限”
  3. 确保已添加“身份验证”部分中列出的所有必需作用域
  4. 将应用程序重新安装到您的工作区
  5. 复制新令牌

“未找到频道”错误

对于Bot令牌:

# Invite the bot to the channel first
/invite @YourBotName

对于用户令牌:

  • 确认您是该频道的成员
  • 检查频道ID是否正确(请参阅“查找频道ID”部分)

“未通过身份验证”错误

检查您的配置:

# Verify token is set correctly (check ~/.claude.json)
cat ~/.claude.json | grep -A 5 "slack"

# Ensure no extra whitespace
echo "$SLACK_USER_TOKEN" | wc -c

常见问题:

  • 令牌已过期或被撤销
  • 令牌字符串中的额外空格或换行符
  • 令牌类型错误(用户vs机器人)
  • JSON中未正确引用令牌

MCP服务器未运行

验证服务器是否已加载:

# List all MCP servers
claude mcp list

# Check if slack server is running
claude mcp list | grep slack

检查日志是否有错误:

# View recent MCP server logs
tail -f ~/.claude/debug/*.log

# Filter for slack-related errors
tail -f ~/.claude/debug/*.log | grep -i slack

常见解决方案:

  1. 完全重新启动Claude代码
  2. 检查 ~/.claude.json 语法是有效的JSON
  3. 验证Python版本: python --version (必须为3.10+)
  4. 手动测试服务器: python server.py (如果从源安装)

SSL证书错误

如果您支持公司代理(如Zscaler):

# Set SSL certificate environment variable
export SSL_CERT_FILE=/path/to/your/ca-bundle.pem
export REQUESTS_CA_BUNDLE=/path/to/your/ca-bundle.pem

# Then reinstall
pip install slack-mcp-server-v2

速率限制

Slack API有费率限制。如果你打他们:

  • 减少 limit 参数在 read_channel_messages
  • 增加 lookback_hours 获取更少的消息
  • 请等待几分钟,然后重试

利率限制指标:

Error: ratelimited

解决方案: 服务器将自动处理速率限制,但您可能需要等待。

安全与隐私

令牌安全

  • 从不将令牌提交到版本控制 -The .env 默认情况下,文件被忽略
  • 立即撤销受损代币 在https://api.slack.com/apps
  • 使用环境变量 在生产中,永远不要硬编码令牌
  • 定期旋转令牌 作为安全最佳实践的一部分

数据访问

用户令牌:

  • 可以访问您在Slack中看到的所有内容
  • 使用您的个人权限
  • 查看您所属的所有频道
  • 更便于个人使用

机器人令牌:

  • 仅限于邀请机器人的渠道
  • 与个人身份分离
  • 更适合团队/共享设置
  • 更精细的控制

企业环境

如果您在企业环境中使用此功能:

  • 在创建Slack应用程序之前,请咨询您的IT/安全团队
  • 了解数据保留和合规政策
  • 考虑使用机器人令牌进行审计跟踪
  • 可能需要SSL证书配置(请参阅故障排除)

局限性

  • 只读:此服务器只读取数据,不能发布消息或修改内容
  • 费率限制:受Slack的API速率限制(第3层:每分钟约50个请求)
  • 令牌范围:只能访问令牌有权查看的频道/对话
  • 消息历史记录:仅限于Slack工作区的邮件保留策略

贡献

欢迎投稿!以下是您可以提供帮助的方式:

报告问题

发现错误或有功能请求?

  1. 检查现有问题https://github.com/stevenvo/slack-mcp-server/issues
  2. 使用以下内容创建新问题:
    • 问题/特征的清晰描述
    • 复制步骤(针对bug)
    • 预期行为与实际行为
    • 您的环境(Python版本、操作系统、Claude代码版本)

拉取请求

  1. 分叉存储库
  2. 创建要素分支: git checkout -b feature/amazing-feature
  3. 进行更改
  4. 彻底测试
  5. 以明确的信息承诺: git commit -m "Add amazing feature"
  6. 推你的叉子: git push origin feature/amazing-feature
  7. 打开拉取请求

开发环境设置

# Clone your fork
git clone https://github.com/YOUR_USERNAME/slack-mcp-server.git
cd slack-mcp-server

# Install in development mode
pip install -e .

# Make changes and test
python server.py

更新日志

v0.1.0(2025-01-06)

  • 初始版本
  • 阅读Slack对话的7个核心工具
  • 支持用户和机器人代币
  • 发布到PyPI和MCP注册表
  • 全面的文件

路线图

未来潜在的增强功能:

  • []支持Slack企业网格
  • []按用户或反应筛选消息
  • []将对话导出为不同格式
  • []支持Slack Connect频道
  • []缓存以减少API调用
  • []Webhook支持实时更新

欢迎提出建议 GitHub问题!

相关项目

支持

  • 文档:你在读!
  • 问题: https://github.com/stevenvo/slack-mcp-server/issues
  • 讨论: https://github.com/stevenvo/slack-mcp-server/discussions
  • 松弛API文档: https://api.slack.com/docs

许可证

MIT许可证-请参阅 许可证 文件以获取详细信息。

版权所有(c)2025吴


由以下材料制成❤️ 对于MCP社区

如果你觉得这有用,请⭐ 在GitHub上标记存储库!