Claude MCP Slack
一个独立的GitHub Action,为Claude Code Action提供Slack MCP(模型上下文协议)服务器功能,实现安全的Slack映像下载和集成。
特性
- 🔐 安全Slack集成:使用Bot用户OAuth令牌对Slack文件进行身份验证访问
- 📁 灵活的文件管理:具有安全验证功能的可定制下载目录
- 🐳 Docker支持:在本地或具有适当安全约束的容器中运行
- 🛡️ 安全第一:输入验证、路径遍历预防和安全令牌处理
- 🧪 综合测试:单元、集成和安全测试套件
- ⚡ 易于集成:与claude代码操作的兼容性下降
快速开始
基本用法
name: Example Workflow
on:
issues:
types: [opened]
issue_comment:
types: [created]
jobs:
claude-response:
runs-on: ubuntu-latest
steps:
- name: Setup Slack MCP
uses: atlasfutures/claude-mcp-slack@v1
with:
slack_token: ${{ secrets.SLACK_TOKEN }}
id: slack-mcp
- name: Claude Code Action
uses: anthropics/claude-code-action@main
with:
mcp_config: ${{ steps.slack-mcp.outputs.mcp_config }}
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}高级配置
- name: Setup Slack MCP
uses: atlasfutures/claude-mcp-slack@v1
with:
slack_token: ${{ secrets.SLACK_TOKEN }}
download_directory: "./slack-assets"
id: slack-mcp
- name: Claude Code Action with Multiple MCP Servers
uses: anthropics/claude-code-action@main
with:
mcp_config: |
{
"mcpServers": {
"slack": ${{ steps.slack-mcp.outputs.mcp_config }}.mcpServers.slack,
"custom": {
"command": "node",
"args": ["custom-server.js"],
"env": {
"API_KEY": "${{ secrets.CUSTOM_API_KEY }}"
}
}
}
}
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}配置
输入
| 输入 | 说明 | 必填 | 默认 |
|---|---|---|---|
slack_token | Slack Bot用户OAuth令牌(xoxb-\*) | ✅ | - |
download_directory | 下载文件目录 | ❌ | "." |
输出
| 输出 | 描述 |
|---|---|
mcp_config | claude代码操作的JSON配置 |
server_executable | Slack MCP服务器的路径 |
环境变量
该操作为MCP服务器设置以下环境变量:
SLACK_TOKEN:您的Slack Bot用户OAuth令牌DOWNLOAD_DIRECTORY:解析的下载绝对路径
Slack机器人设置
1.创建Slack应用程序
- 首选 api.slack.com/apps
- 点击“创建新应用”→ “从头开始”
- 命名您的应用程序并选择您的工作区
2.配置Bot令牌作用域
在...之下 OAuth和权限,添加以下Bot令牌范围:
files:read # Read file content and metadata3.安装到工作区
- 点击“安装到工作区”
- 复制“Bot用户OAuth令牌”(以开头
xoxb-) - 将其添加到您的存储库机密中
SLACK_TOKEN
4.机器人使用示例
配置后,Claude可以下载Slack图像:
@claude Please analyze this screenshot from our Slack channel: https://files.slack.com/files-tmb/T05EFSVDCLR-F08TC9CP9B8/screenshot_720.png可用的MCP工具
slack_image_download
通过身份验证从Slack下载图像。
参数:
url(必需):Slack文件URL(必须以开头https://files.slack.com/)filename(可选):自定义文件名(将被净化)
例子:
{
"tool": "slack_image_download",
"arguments": {
"url": "https://files.slack.com/files-tmb/T05EFSVDCLR-F08TC9CP9B8/screenshot_720.png",
"filename": "screenshot.png"
}
}slack_health_check
检查Slack MCP服务器的运行状况和配置。
例子:
{
"tool": "slack_health_check",
"arguments": {}
}安全功能
输入验证
- URL验证(必须是Slack文件域)
- 令牌格式验证
- 路径遍历预防
- 文件名清理
安全执行
- 非根容器执行
- 只读文件系统(下载目录除外)
- 资源限制(文件大小、超时)
- 无壳元字符注射
令牌安全
- 环境变量隔离
- 无令牌记录或暴露
- 安全令牌格式验证
发展
本地设置
# Clone repository
git clone https://github.com/atlasfutures/claude-mcp-slack.git
cd claude-mcp-slack
# Install dependencies
bun install
# Run tests
bun test
# Type check
bun run typecheck
# Format code
bun run formatDocker开发
# Build and run with docker-compose
docker-compose up claude-mcp-slack-dev
# Or build manually
docker build -t claude-mcp-slack .
docker run -e SLACK_TOKEN=your-token claude-mcp-slack测试
# Run all tests
bun test
# Run specific test suites
bun run test:unit
bun run test:integration
bun run test:security
# Run with coverage
bun test --coverage故障排除
常见问题
“SLACK_TOKEN环境变量是必需的”
- 确保您的Slack令牌在存储库机密中正确设置
- 验证令牌是否以开头
xoxb-或xoxp-
“URL必须是Slack文件URL”
- 仅限以开头的URL
https://files.slack.com/支持 - 确保URL来自Slack文件,而不是常规消息
“权限被拒绝”错误
- 检查你的Slack机器人是否
files:read范围 - 验证bot是否安装在文件所在的工作区中
下载失败
- 确保该文件未从Slack中删除
- 检查您的机器人是否可以访问该文件
- 验证网络连接和防火墙设置
调试模式
通过设置启用调试日志记录 ACTIONS_STEP_DEBUG=true 在您的存储库秘密中。
贡献
- 分叉存储库
- 创建要素分支(
git checkout -b feature/amazing-feature) - 进行更改
- 添加新功能的测试
- 确保所有测试通过(
bun test) - 提交您的更改(
git commit -m 'Add amazing feature') - 推到分支(
git push origin feature/amazing-feature) - 打开拉取请求
开发指南
- 遵循TypeScript的最佳实践
- 为所有新功能添加测试
- 更新API变更文档
- 确保安全测试通过
- 使用常规提交消息
许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
