配置 Slack MCP 服务:为 Opik 的 send-code-review-slack 命令打通 Cursor 消息通道
2026/9/13 19:57:46 网站建设 项目流程

配置 Slack MCP 服务:为 Opik 的 send-code-review-slack 命令打通 Cursor 消息通道

【免费下载链接】comet-llmDebug, evaluate, and monitor your LLM applications, RAG systems, and agentic workflows with comprehensive tracing, automated evaluations, and production-ready dashboards.项目地址: https://gitcode.com/GitHub_Trending/co/comet-llm

本篇指南讲解如何在 Cursor IDE 中配置 Slack MCP(Model Context Protocol)服务器,使仓库内置的send-code-review-slack命令能够把代码审查请求自动发送到#code-review频道。读完本文,你将掌握从创建 Slack App、申请 User OAuth Token,到编写mcp.json.env.local、再到验证命令全链路可用的完整实操方案,并理解仓库中该命令的底层调用逻辑。

背景:为什么这套代码审查流程需要 Slack MCP

在 comet-llm(Opik)仓库中,团队通过.agents/commands/comet/send-code-review-slack.md定义了一条名为cursor send-code-review-slack的 Agent 命令,用于在完成分支开发后,自动提取当前分支的 GitHub PR 信息(Jira 工单、测试环境链接、FE/BE/Python/TypeScript 各组件摘要),并按固定模板向#code-review频道发送代码审查请求。

这条命令的发送环节依赖Slack MCP 服务器。仓库选用的是支持User OAuth Token(SLACK_MCP_XOXP_TOKEN的自定义 MCP 服务器(Docker 镜像ghcr.io/korotovsky/slack-mcp-server),其关键特性是:消息将以你本人(authenticated user)的身份发送,而不是以 bot 身份发送,这使代码审查通知更贴近人工提交流程,团队成员可以直接看到"谁请求了审查"。

整套配置的落点分为两个层面:

  • 工作区级(一次性,由管理员完成):创建 Slack App、配置 User Token Scopes;
  • 用户级(每位开发者各自完成):安装 App 到工作区、获取自己的 User OAuth Token、配置环境变量、重启 Cursor。

具体配置位于仓库的.agents/docs/SLACK_MCP_SETUP.md,实际的 MCP 服务器声明则位于 .agents/mcp.json,本文会结合这两份文件与相关命令文档展开。

总体配置概览:六个步骤

步骤层级操作产物
Step 1工作区(管理员)创建 Slack AppApp ID
Step 2工作区(管理员)配置 User Token Scopeschat:writechannels:readusers:readchannels:history
Step 3用户安装 App 到工作区授权关系
Step 4用户获取 User OAuth Tokenxoxp-开头的令牌
Step 5用户配置.env.local与 MCP 声明SLACK_MCP_XOXP_TOKEN等环境变量
Step 6用户重启 Cursor 并验证send-code-review-slack可用

其中 Step 1、Step 2 只需要做一次:App 创建并配置完成后,工作区所有用户都可以安装它,并各自取得属于自己的 User OAuth Token。

Step 1:创建 Slack App

这是工作区管理员的一次性操作,创建完成后整个工作区共用这一个 App:

  1. 进入 Slack API 的 Apps 管理页面;
  2. 点击"Create New App""From scratch"
  3. 为 App 命名(仓库示例命名为 "Opik Code Review");
  4. 选择目标工作区;
  5. 点击"Create App"完成创建。

Step 2:配置 User Token Scopes(关键区分点)

CRITICAL:Scope 必须添加到"User Token Scopes"(而不是其上方相邻的 "Bot Token Scopes"),否则页面不会出现 User OAuth Token,后续步骤将无法继续。

在 App 设置页面进入"OAuth & Permissions",滚动到"Scopes"区域,找到"User Token Scopes"小节(其描述为"Scopes that access user data and act on behalf of users that authorize them"——确认你在正确位置,这些 scope 让 App 以"你"的身份行动,而不是以 bot 身份),然后逐条添加以下 OAuth Scope:

Scope用途
chat:write以你认证的用户账号发送消息
channels:read查看公共频道的基本信息
users:read读取用户信息(slack-mcp-server做缓存所需)
channels:history查看公共频道中的消息(MCP 服务器做频道缓存所需)

添加完成后点击"Save Changes"

注意:users:readchannels:historyghcr.io/korotovsky/slack-mcp-server正确缓存、访问频道信息所必需的。缺失时日志中可能出现missing_scope错误,尽管基础的发送消息功能可能仍可用,仍建议按上表配齐以保证 MCP 服务器全功能运行。

Step 3:安装 App 到工作区

这是每位开发者各自执行的步骤,用于授权 App 并生成属于自己的 User OAuth Token:

  1. 回到"OAuth & Permissions"页面顶部;
  2. 点击"Install to Workspace"(若已安装过则点击"Reinstall to Workspace");
  3. 审阅权限并点击"Allow"

说明:授权页面可能出现 "Send messages as [App Name]" 的字样,这只是 App 在请求权限。当你实际使用 User OAuth Token 时,消息将以你个人的账号发出,而不是以 App 名义发出。

Step 4:获取你的 User OAuth Token

安装/重新安装 App 之后:

  1. 停留在"OAuth & Permissions"页面(必要时刷新);
  2. 滚动到"OAuth Tokens for Your Workspace"区域;
  3. 找到"User OAuth Token"(注意不是"Bot User OAuth Token"):
    • 如果只看到 "Bot User OAuth Token",说明 Scope 被误加到了 Bot Token Scopes,请回到 Step 2 修正,再回到此处点击"Reinstall to Workspace"
  4. User OAuth Token 应以xoxp-开头(而不是xoxb-);
  5. 点击"Show"/"Reveal"查看完整令牌并复制——这就是用于以你本人身份发消息的令牌。

Step 5:配置环境变量与 mcp.json

5.1 将令牌写入.env.local

在项目根目录创建或编辑.env.local,加入 User OAuth Token:

SLACK_MCP_XOXP_TOKEN=xoxp-your-user-oauth-token-here

务必把xoxp-your-user-oauth-token-here替换为 Step 4 拿到的真实令牌(xoxp-开头,绝不是xoxb-)。令牌通过envFile.env.local加载,从而不会直接写进mcp.json

5.2 mcp.json 中的 Slack 服务器声明

仓库根目录的 .agents/mcp.json 中已经写好了 Slack MCP 服务器的完整声明(Cursor 通过make cursor.cursor符号链接指向.agents后即可加载),核心片段如下:

{ "mcpServers": { "GitHub": { "command": "docker", "args": [ "run", "-i", "--rm", "-e", "GITHUB_PERSONAL_ACCESS_TOKEN", "-e", "GITHUB_TOOLSETS=repos,pull_requests,issues", "ghcr.io/github/github-mcp-server" ], "envFile": "${workspaceFolder}/.env.local" }, "slack": { "command": "docker", "args": [ "run", "-i", "--rm", "-e", "SLACK_MCP_XOXP_TOKEN", "-e", "LOG_LEVEL=error", "-e", "SLACK_MCP_ADD_MESSAGE_TOOL=true", "ghcr.io/korotovsky/slack-mcp-server:latest", "mcp-server", "--transport", "stdio" ], "envFile": "${workspaceFolder}/.env.local" } } }

从中可以看到三个关键配置项:

  1. mcp-server --transport stdio:必填。指定服务器通过 stdio 传输与 Cursor 走 MCP 协议通信;缺失时服务器会退化为启动 SSE 服务器,无法与 Cursor 的 MCP 集成协作。
  2. SLACK_MCP_ADD_MESSAGE_TOOL:必填,用于启用conversations_add_message工具(该工具默认关闭,属于安全设计)。取值规则:
    • true1:对所有频道与私聊(DM)启用;
    • 以逗号分隔的频道 ID(如XXXXXXXX,YYYYYYYY):仅对这些频道启用;
    • !XXXXXXXX:除指定频道外的所有频道启用。
    • 对本仓库的代码审查命令而言,使用true以允许向#code-review发消息。
  3. envFile:指向${workspaceFolder}/.env.local,其中存放SLACK_MCP_XOXP_TOKEN,保证令牌不进入mcp.json(也降低误提交风险)。

仓库还通过-e LOG_LEVEL=error降低 MCP 服务器日志噪音,便于聚焦真正的错误。

5.3 前置要求

  • 本机已安装并正在运行 Docker;
  • 首次使用时,Docker 会自动拉取镜像ghcr.io/korotovsky/slack-mcp-server:latest
  • .env.local应加入.gitignore,防止令牌被提交进 Git 历史。

Step 6:重启 Cursor 并验证

  1. 完全关闭并重新打开 Cursor IDE(仅 Reload Window 不够,需彻底退出);
  2. 在 Cursor Settings > Features > MCP 中确认 Slack MCP 服务器已列出、无报错;
  3. 在存在已打开 PR 的分支上运行:
cursor send-code-review-slack

若能收到发送成功确认,说明整条链路已打通。

命令如何使用这套 MCP 配置:源码级工作流

发送命令send-code-review-slack

.agents/commands/comet/send-code-review-slack.md 定义了完整执行模型:自动从 GitHub PR 提取信息,仅对缺失信息提问,按模板格式化后经 Slack MCP 发送。与本文 MCP 配置直接相关的环节包括:

  • Preflight 阶段:命令会先调用 Slack MCP 的channels_list工具(以limit: 1的最小参数调用,确保公共与私有频道都能返回)来探测 MCP 是否可用;若工具不可用,会提示按 .agents/docs/SLACK_MCP_SETUP.md 配置并重启 Cursor。这一探测依赖 Step 5 中mcp-server --transport stdioSLACK_MCP_ADD_MESSAGE_TOOL=true的正确配置。
  • 发送阶段:调用conversations_add_message工具,参数为channel_id: #code-reviewpayload: <格式化后的完整消息>content_type: text/markdown(可选,默认即此值)。命令文档明确要求服务器必须带mcp-server --transport stdioSLACK_MCP_ADD_MESSAGE_TOOL=true,否则会遇到 "tool disabled" 错误。
  • 失败处理:命令对常见错误给出了与本文 Troubleshooting 一一对应的提示,例如认证错误检查SLACK_MCP_XOXP_TOKEN是否xoxp-开头、权限错误检查chat:write是否位于 User Token Scopes、Docker 错误检查镜像能否拉取等。

消息采用固定模板(greeting 后依次为 Jira 链接、PR 链接、PR size、测试环境链接、可选组件摘要),并且只有被提供或提取到的可选字段才会出现。典型输出形如:

Hi team, Please review the following PR: :jira_epic: jira link: https://comet-ml.atlassian.net/browse/OPIK-1234 :github: pr link: https://github.com/comet-ml/opik/pull/1234 :straight_ruler: pr size: 🟠 L :test_tube: test env link: https://test.opik.com :react: fe summary (optional): Added new metrics dashboard UI :java: be summary (optional): Implemented metrics aggregation endpoint :typescript: typescript summary (optional): Added TypeScript SDK support for metrics

不发送消息的替代命令generate-code-review-slack-command

.agents/commands/comet/generate-code-review-slack-command.md 定义了孪生命令cursor generate-code-review-slack-command:信息提取与格式化逻辑完全相同,但它不依赖 Slack MCP、也不自动发送,而是生成一段可复制、可编辑的 Slack 消息。适合需要人工补充的场景:添加@提及、附带视频/媒体链接(Slack 不支持直接通过 MCP 发送视频,视频应放入 PR 描述后分享链接)、最终校对等。命令文档中明确建议:如需自动发送则用send-code-review-slack,如需先编辑再发送则用本命令。

PR size 字段的提取逻辑

消息模板中的:straight_ruler: pr size字段由两份文档共享的提取逻辑 .agents/docs/PR_SIZE_EXTRACTION.md 决定:优先读取 GitHub PR 的size/*标签(🔵 size/XS🟢 size/S🟡 size/M🟠 size/L🔴 size/XL),仅存储为{emoji} {BUCKET}(如🟠 L),不带行数统计;只有在标签缺失时才按additions + deletions计算回退,且回退使用的忽略清单与阈值必须与标签工作流保持一致(见 .github/workflows/labeler.yml 中的阈值:XS < 20、S ≤ 100、M ≤ 300、L ≤ 600、XL > 600)。

配置文件如何被 Cursor 加载

仓库 Makefile 中定义了make cursor(将.cursor符号链接指向.agents/)与make claude(将.agents同步为.claude/并生成.mcp.json)。也就是说,本文提到的mcp.json与命令/文档体系由.agents/目录统一管理,运行make cursor后 Cursor 即可识别全部 MCP 服务器与 Agent 命令。

安全注意事项

  • 绝不把令牌提交进 Git.env.local必须加入.gitignoremcp.json通过环境变量引用令牌,不直接存放令牌,但提交前仍需检查其中是否意外包含敏感内容。
  • 令牌存储位置SLACK_MCP_XOXP_TOKEN只存放在.env.local(且已被.gitignore忽略),不直接写入mcp.json
  • 令牌类型:务必使用以xoxp-开头的 User OAuth Token,而不是以xoxb-开头的 Bot Token,否则消息发送身份与预期不符。
  • 仓库的 .agents/rules/security.mdc 还针对 Agent 交互场景定义了安全红线(如禁止执行危险命令、避免提交密钥等),配置 MCP 令牌时同样适用。

故障排查

MCP 服务器未出现在 Cursor 中

  1. 检查mcp.json是否位于正确位置(.cursor/mcp.json或用户级~/.cursor/mcp.json,本仓库通过make cursor完成.cursor -> .agents链接);
  2. 校验 JSON 语法是否合法(可使用 JSON 校验器);
  3. 彻底重启 Cursor(退出并重新打开,而非仅 Reload Window);
  4. 查看 Cursor Settings > Features > MCP 中的错误信息;
  5. 确认 Docker 已安装且运行中:docker --versiondocker ps

Docker 命令错误(日志出现 "Usage: docker [OPTIONS] COMMAND")

  1. 确认 Docker 正在运行:执行docker ps,失败则启动 Docker Desktop 或 Docker daemon;
  2. 手动测试 MCP 服务器命令
docker run -i --rm -e SLACK_MCP_XOXP_TOKEN=xoxp-your-token -e LOG_LEVEL=error ghcr.io/korotovsky/slack-mcp-server:latest

正常应启动 MCP 服务器,失败时查看具体报错; 3.手动拉取镜像

docker pull ghcr.io/korotovsky/slack-mcp-server:latest
  1. 检查 mcp.json 结构:确保args数组格式正确,每个参数都是独立的字符串元素(可对照 .agents/mcp.json 中slack节点的写法)。

认证错误

  1. 确认令牌以xoxp-开头而非xoxb-(日志中出现xoxb-说明误用了 Bot Token,回到 Step 4 重新获取 User OAuth Token);
  2. 确认 App 已安装到你的工作区;
  3. 确认 User Token Scopes 包含全部必需 scope:chat:write(发消息必需)、channels:read(访问频道必需)、users:read(MCP 服务器缓存必需)、channels:history(完整功能推荐);
  4. 确认 Docker 参数中用的是SLACK_MCP_XOXP_TOKEN而非SLACK_BOT_TOKEN
  5. 检查实际mcp.json中 Docker 参数里的令牌确实是xoxp-...
  6. 更新令牌后彻底重启 Cursor
  7. 确认 Docker 运行中且能拉取镜像。

missing_scope 错误

  1. 从错误信息中确认具体缺失的 scope;
  2. 在 Slack App 的 "OAuth & Permissions" → "User Token Scopes" 中添加缺失 scope(常见缺失项:users:readchannels:history);
  3. 添加后重新安装 App到工作区;
  4. 若生成了新令牌,同步更新mcp.json引用的令牌;
  5. 重启 Cursor 重载 MCP 配置。

部分missing_scope可能只是警告,不阻断基础功能(如发消息);但补齐全部推荐 scope 才能保证 MCP 服务器全功能可用。

权限错误

  1. 确认 User Token Scopes 中包含chat:write
  2. 确认你对#code-review频道有访问权限;
  3. 确认自己是该频道成员;
  4. 使用 Docker 时,确认容器具备访问 Slack API 的网络能力。

小结

通过本文的六个步骤,你可以在工作区级一次性创建 Slack App 与 User Token Scopes,并以个人身份获取xoxp-开头的 User OAuth Token,配合.env.local与 .agents/mcp.json 中mcp-server --transport stdioSLACK_MCP_ADD_MESSAGE_TOOL=true的关键配置,让 Cursor 中的cursor send-code-review-slack命令自动完成"提取 PR 信息 → 格式化消息 → 以你本人身份发送到#code-review"的完整代码审查通知流程。若需要人工编辑(添加@提及、视频链接等),generate-code-review-slack-command提供了不依赖 Slack MCP 的可复制方案。配置完成后,记得把.env.local纳入.gitignore,并妥善保管好你的 User OAuth Token。

如需进一步深入,可在仓库内继续阅读以下资源:

  • Slack MCP 配置指南原文
  • MCP 服务器声明文件
  • 发送代码审查消息命令
  • 生成可复制 Slack 消息命令
  • PR size 提取共享逻辑
  • PR size 标签工作流

【免费下载链接】comet-llmDebug, evaluate, and monitor your LLM applications, RAG systems, and agentic workflows with comprehensive tracing, automated evaluations, and production-ready dashboards.项目地址: https://gitcode.com/GitHub_Trending/co/comet-llm

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询