slamy--Slack MCP服务器和CLI
懒散 MCP(模型上下文协议) 服务器也可以作为独立的CLI工作。将像Claude这样的AI代理连接到您的Slack工作区,或直接从终端使用它。
特性
- MCP服务器 --将Slack操作作为人工智能代理(Claude Code、Claude Desktop等)的MCP工具公开
- 命令行界面 --直接从终端使用相同的操作
- 频道 --列出频道,检索消息历史记录
- 消息 --发布消息,回复帖子
- 用户 --列出工作区成员,查看配置文件
- 反应 -在消息中添加表情符号反应
- 搜索 --使用Slack查询语法跨渠道搜索消息
- 多种输出格式 --人类可读文本、JSON和TSV
安装
家酿
brew install tackeyy/tap/slamy去
go install github.com/tackeyy/slamy@latest从源代码构建
git clone https://github.com/tackeyy/slamy.git
cd slamy
go build -o slamy .快速开始
1.创建Slack应用程序
- 首选 松弛API 然后单击 创建新应用程序
- 选择 从头开始,命名您的应用程序(例如。,
slamy) - 选择要安装到的工作区
2.配置用户令牌范围
在 OAuth和权限 > 范围 > 用户令牌范围,添加:
| 范围 | 目的 |
|---|---|
channels:history | 查看公共频道中的消息 |
channels:read | 查看基本频道信息 |
chat:write | 发送消息(就像你自己一样) |
files:read | 下载在频道中共享的文件 |
groups:history | 查看私人频道中的消息 |
groups:read | 查看基本私人频道信息 |
reactions:write | 添加表情符号反应 |
search:read | 搜索邮件 |
users:read | 查看用户及其基本信息 |
users:read.email | 查看电子邮件地址 |
users.profile:read | 查看用户资料 |
3.安装和设置环境变量
将应用程序安装到您的工作区,然后设置您的令牌:
export SLACK_USER_TOKEN=xoxp-your-user-token4.跑步
./slamy channels list用户令牌与机器人令牌
Slack Apps可以发行两种类型的代币。使用哪一个取决于你的用例。
机器人令牌(xoxb-) | 用户令牌(xoxp-) | |
|---|---|---|
邮件搜索(search:read) | 不可用 | 可用 |
| 令牌管理 | 如果需要搜索,则需要2个令牌 | 所有内容都需要1个令牌 |
| 消息发布 | 以“应用程序”(机器人名称)发布 | 以用户身份发布 |
| 专用频道访问 | 必须被邀请到频道 | 访问与用户相同的频道 |
在以下情况下使用用户令牌:代表用户行事
slamy是作为 人工智能秘书/个人助理 (Claude Code+MCP)代表特定用户读取、搜索和发布到Slack。在这种情况下,用户令牌是自然的选择:
- 搜索需要它 —
search:read是仅限用户令牌的作用域。机器人令牌根本无法搜索消息 - 单一代币 --无需管理两个令牌,也不必担心哪个操作使用哪个令牌
- 用户上下文 --代理发布的消息显示为用户,明确了谁负责
- 通道接入 --代理可以访问与用户相同的频道,而无需手动邀请
在构建机器人时使用机器人令牌
如果您正在构建Slack机器人(而不是个人助理),Bot Token是正确的选择:
- 机器人有自己的身份,并以“应用程序名称”发布帖子,而不是以特定用户的身份发布
- 多个用户与机器人交互——它不应该像任何单个用户一样
- 您希望通过仅邀请机器人访问特定频道来控制访问
- 您不需要邮件搜索,或者可以接受限制
命令
channels list --列出频道
slamy channels list [--limit ] [--include-archived] [--json] [--plain]| 标志 | 必填 | 说明 |
|---|---|---|
--limit | 否 | 返回的最大通道数 |
--include-archived | 否 | 包括已存档的频道 |
--json | 否 | 输出为JSON |
--plain | 否 | 输出为TSV |
channels history --获取频道消息历史记录
slamy channels history [--limit ] [--json] [--plain]| 标志 | 必填 | 说明 |
|---|---|---|
| `` | 是 | 频道ID |
--limit | 否 | 消息数(默认值:20) |
messages post --发布消息
slamy messages post --text [--json] [--plain]| 标志 | 必填 | 说明 |
|---|---|---|
| `` | 是 | 频道ID |
--text | 是 | 消息文本 |
messages reply --回复一个帖子
slamy messages reply --text [--broadcast] [--json] [--plain]| 标志 | 必填 | 说明 |
|---|---|---|
| `` | 是 | 频道ID |
| `` | 是 | 线程时间戳 |
--text | 是 | 回复文本 |
--broadcast | 否 | 也发布到频道(reply_broadcast) |
users list --列出工作区用户
slamy users list [--include-deactivated] [--include-bots] [--json] [--plain]| 标志 | 必填 | 说明 |
|---|---|---|
--include-deactivated | 否 | 包括已停用的用户 |
--include-bots | 否 | 包括机器人用户 |
users profile --获取用户资料
slamy users profile [--json] [--plain]| 标志 | 必填 | 说明 |
|---|---|---|
| `` | 是 | 用户ID |
reactions add -添加表情符号反应
slamy reactions add --name [--json] [--plain]| 标志 | 必填 | 说明 |
|---|---|---|
| `` | 是 | 频道ID |
| `` | 是 | 消息时间戳 |
--name | 是 | 表情符号名称(无冒号) |
search messages --搜索邮件
slamy search messages [--count ] [--page ] [--sort ] [--sort-dir ] [--json] [--plain]| 标志 | 必填 | 说明 |
|---|---|---|
| `` | 是 | 搜索查询(支持Slack修饰符,如 in:#channel, from:@user) |
--count | 否 | 每页结果 |
--page | 否 | 页码 |
--sort | 否 | 排序字段 |
--sort-dir | 否 | 排序方向 |
auth test --测试身份验证
slamy auth test [--json] [--plain]mcp --启动MCP服务器
slamy mcp通过stdio启动MCP服务器,将所有操作作为AI代理的工具(例如Claude Code)公开。
配置
环境变量
| 变量 | 必填 | 描述 |
|---|---|---|
SLACK_USER_TOKEN | 是 | Slack用户OAuth令牌(xoxp-...) |
SLACK_TEAM_ID | 否 | Slack团队ID(用于特定于工作区的操作) |
输出格式
文本(默认)
#general C01234ABCDE [42 members]
#random C01234FGHIJ (private) [15 members]JSON(--json)
[
{
"id": "C01234ABCDE",
"name": "general",
"num_members": 42,
"is_private": false
}
]TSV(--plain)
C01234ABCDE general 42 public
C01234FGHIJ random 15 privateMCP服务器
使用Claude代码
claude mcp add slamy /path/to/slamy mcp使用Claude Desktop
添加到您的 claude_desktop_config.json:
{
"mcpServers": {
"slamy": {
"command": "/path/to/slamy",
"args": ["mcp"],
"env": {
"SLACK_USER_TOKEN": "xoxp-your-user-token"
}
}
}
}可用工具
| 工具 | 说明 |
|---|---|
slack_list_channels | 列出所有频道 |
slack_get_channel_history | 获取频道消息历史记录 |
slack_get_thread_replies | 获取线程回复 |
slack_post_message | 向频道发布消息 |
slack_reply_to_thread | 回复一个帖子 |
slack_add_reaction | 添加表情符号反应 |
slack_get_users | 列出工作区用户 |
slack_get_user_profile | 获取用户资料 |
slack_search_messages | 搜索邮件 |
发展
# Build
go build -o slamy .
# Run all tests with race detector
go test -race ./...
# Run tests with coverage
go test -cover ./...看 贡献.md 用于开发设置和编码标准。 看 docs/TEST.md 获取全面的测试指南。
贡献
欢迎投稿!请阅读我们的 贡献指南 在提交Pull Request之前。
所有贡献者都应该遵循我们的 行为准则.
许可证
麻省理工学院
