问一个人
一个MCP服务器,允许Claude Code暂停并向您询问有关Discord或Slack的问题。你在一个帖子中回复,克劳德继续回答你的问题。
路线图
- 有线索的对话 (2026年3月5日)——允许克劳德在现有的话题中继续对话,而不是为每个问题创建一个新的话题。这使得在需要更多背景或后续行动时能够进行来回对话。
- 电报支持 (2026年3月5日)——让克劳德通过电报向你提问!
为什么
这不是Claude Code的聊天界面。它是完全自主工作流程的逃生舱。
当你让Claude Code独立运行时——重构代码库、端到端构建功能或调试复杂问题——它偶尔会遇到岔路口:你没有预料到的权衡、没有明显正确答案的设计决策,或者在没有你的输入的情况下前进可能意味着浪费工作的关键时刻。在这些时刻,Claude可以选择在Discord或Slack上与你联系,掌握方向,继续前进,而不是猜测错误或完全停止。这是为了让代理人在真的需要的时候联系你,而不是为了每一件小事。
目标是让你在克劳德工作时远离航站楼,只有在真正重要的时候才被拉进来。
运作原理
- 克劳德代码调用
ask_human带问题的工具 - 机器人将问题发布到你的Discord频道或Slack频道,并@提到你
- 为该问题创建了一个线程
- Claude Code会等待您在线程中回复
- 您的回复将返回给Claude,并继续有效
设置
为每个MCP服务器实例选择一个平台。平台会根据环境变量自动检测。
Discord 的中文翻译是“不和谐”或“纷争”。
1.创建Discord机器人
- 去 Discord开发者门户
- 点击 新应用 给它起个名字
- 首选 机器人 在侧边栏中
- 点击 重置令牌 复制它——这是你的
DISCORD_BOT_TOKEN - 启用 消息内容意图 (在Bot页面上向下滚动)
- 首选 OAuth2>URL生成器
- 检查
bot范围 - 检查这些权限: 发送消息, 创建公共线程, 读取消息历史, 嵌入链接
- 复制生成的URL并打开它以邀请机器人到您的服务器
2.获取您的Discord ID
- 打开Discord设置>高级>启用 开发者模式
- 右键单击要发布问题的频道> 复制频道ID --这是你的
DISCORD_CHANNEL_ID - 右键单击您的用户名> 复制用户ID --这是你的
DISCORD_USER_ID
3.添加到克劳德代码
claude mcp add ask-a-human-discord \
-e DISCORD_BOT_TOKEN=your-bot-token \
-e DISCORD_CHANNEL_ID=your-channel-id \
-e DISCORD_USER_ID=your-user-id \
-- npx ask-a-humanSlack
1.创建Slack应用程序
- 首选 Slack API:您的应用程序
- 点击 创建新应用程序 > 从头开始
- 命名它(例如“问一个人”)并选择你的工作空间
2.启用套接字模式
- 首选 设置>基本信息>应用级令牌
- 点击 生成令牌和范围
- 命名它(例如“socket”)并添加
connections:write范围 - 点击 生成 复制令牌——这是你的
SLACK_APP_TOKEN(开始于xapp-) - 首选 设置>套接字模式 并切换它 上
3.配置bot权限
- 首选 OAuth和权限 在侧边栏中
- 在...之下 Bot令牌范围,添加:
- chat:write --发布消息 - channels:history --读取公共频道中的线程回复 - groups:history --在专用通道中读取线程回复(如果需要)
- 点击 安装到工作区 (或 重新安装 如果已安装)
- 复制 Bot用户OAuth令牌 --这是你的
SLACK_BOT_TOKEN(开始于xoxb-)
4.订阅活动
- 首选 事件订阅 并切换它 上
- 在...之下 订阅机器人事件,添加:
- message.channels --公共渠道中的信息 - message.groups --私人渠道中的消息(如果需要)
- 点击 保存更改
5.获取你的Slack ID
- 打开Slack,右键单击频道> 查看频道详细信息 >复制底部的频道ID——这是您的
SLACK_CHANNEL_ID - 点击您的个人资料图片> 个人资料 >单击 ⋯ 菜单> 复制成员ID --这是你的
SLACK_USER_ID - 邀请机器人加入您的频道:键入
/invite @YourBotName在通道中
6.添加到克劳德代码
claude mcp add ask-a-human-slack \
-e SLACK_BOT_TOKEN=xoxb-your-bot-token \
-e SLACK_APP_TOKEN=xapp-your-app-token \
-e SLACK_CHANNEL_ID=your-channel-id \
-e SLACK_USER_ID=your-user-id \
-- npx ask-a-human工具
ask_human
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
question | string | 是 | 要问的问题 |
该问题以带有@提及的纯文本消息的形式发布,并为您的回复创建了一个线程。 重要提示: 你必须在线程中回复,而不是在通道中——只有线程回复会被机器人接收。
例子:
{
"question": "Should I use PostgreSQL or SQLite for the local dev database?"
}配置
| 环境变量 | 平台 | 必填 | 默认 | 描述 |
|---|---|---|---|---|
DISCORD_BOT_TOKEN | Discord | 是 | -- | 您的Discord机器人令牌 |
DISCORD_CHANNEL_ID | 不一致 | 是 | -- | 发布问题的频道ID |
DISCORD_USER_ID | 不一致 | 否 | -- | @提及的用户ID |
SLACK_BOT_TOKEN | Slack | 是 | -- | 机器人用户OAuth令牌(xoxb-) |
SLACK_APP_TOKEN | Slack | 是 | -- | 应用级令牌(xapp-)与 connections:write |
SLACK_CHANNEL_ID | Slack | 是 | -- | 发布问题的频道ID |
SLACK_USER_ID | Slack | 否 | -- | 您@提及的成员ID |
ASK_TIMEOUT_MS | 两者 | 否 | 18000000 | 超时时间(毫秒)(默认值:5小时, 0 无超时) |
边缘案例
- 多个回复:第一个线程应答获胜;后续答复将被忽略
- 空邮件:返回为
(empty message) - 机器人消息:自动过滤掉
- 切断:Discord.js和Slack Bolt都会自动处理重新连接;悬而未决的问题在记忆中挥之不去
- 关机:未决问题返回错误;SIGINT/SIGTERM上的清理很优雅
- 两个平台均已配置:退出时出现明显错误--为每个实例配置一个平台
- 未配置任何平台:退出时出现明显错误
贡献
看 贡献.md 用于开发设置和测试说明。
许可证
麻省理工学院
