Slack集成服务器

一个用于与Slack工作空间交互的模型上下文协议(MCP)服务器,提供频道管理、消息发送、线程回复、表情反应、用户管理等功能。

  • by waimakers
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 Generative-AI-Strategy-B-V/slack-mcp

使用说明

slack-mcp服务器

免责声明

该项目包括 代码 最初由Anthropic开发,并在MIT许可证下发布。For Good AI股份有限公司(dba Zencoder股份有限公司)添加了大量修改和新功能,并根据Apache许可证2.0版获得许可。

概述

用于与Slack工作区交互的模型上下文协议(MCP)服务器。此服务器提供列出频道、发布消息、回复线程、添加反应、获取频道历史记录和管理用户的工具。

可用工具

  1. slack_list_channels

    • 列出工作区中的公共或预定义频道
    • 可选输入:
      • limit (数字,默认值:100,最大值:200):要返回的最大通道数
      • cursor (string):下一页的分页光标
    • 返回:通道列表及其ID和信息
  2. slack_post_message

    • 在Slack频道发布新消息
    • 所需输入:
      • channel_id (string):要发布的频道的ID
      • text (string):要发布的消息文本
    • 返回:消息发布确认和时间戳
  3. slack_reply_to_tothread

    • 回复特定消息线程
    • 所需输入:
      • channel_id (string):包含线程的通道
      • thread_ts (string):父消息的时间戳
      • text (string):回复文本
    • 返回:回复确认和时间戳
  4. slack_add_action

    • 在消息中添加表情符号反应
    • 所需输入:
      • channel_id (string):包含消息的通道
      • timestamp (string):要响应的消息时间戳
      • reaction (字符串):不带冒号的表情符号名称
    • 返回:反应确认
  5. slack_get_channel_历史

    • 从频道获取最新消息
    • 所需输入:
      • channel_id (string):通道ID
    • 可选输入:
      • limit (数字,默认值:10):要检索的邮件数
    • 返回:消息及其内容和元数据的列表
  6. slack_get_thread_replys

    • 获取消息线程中的所有回复
    • 所需输入:
      • channel_id (string):包含线程的通道
      • thread_ts (string):父消息的时间戳
    • 返回:回复列表及其内容和元数据
  7. slack_get_users

    • 获取包含基本配置文件信息的工作区用户列表
    • 可选输入:
      • cursor (string):下一页的分页光标
      • limit (数字,默认值:100,最大值:200):可返回的最大用户数
    • 返回:用户及其基本配置文件的列表
  8. slack_get_user_profile

    • 获取特定用户的详细个人资料信息
    • 所需输入:
      • user_id (string):用户的ID
    • 返回:详细的用户配置文件信息

Slack机器人设置

要使用此MCP服务器,您需要创建一个Slack应用程序,并为其配置必要的权限:

1.创建Slack应用程序

  • 访问 Slack应用程序页面
  • 点击“创建新应用”
  • 选择“从头开始”
  • 命名您的应用程序并选择您的工作区

2.配置Bot令牌作用域

导航到“OAuth和权限”并添加以下范围:

  • channels:history -查看公共频道中的消息和其他内容
  • channels:read -查看基本频道信息
  • chat:write -以应用程序的身份发送消息
  • reactions:write -在消息中添加表情符号反应
  • users:read -查看用户及其基本信息
  • users.profile:read -查看用户的详细资料

3.将应用程序安装到工作区

  • 点击“安装到工作区”并授权应用程序
  • 保存以开头的“Bot用户OAuth令牌” xoxb-

4.获取您的团队ID

获取您的团队ID(以 T)通过以下方式 本指南

5.将机器人添加到频道(可选)

为了让机器人访问私人频道或发布消息,您可能需要使用以下方式邀请它访问特定频道 /invite @your-bot-name

特性

  • 多种运输支持:支持stdio和流式HTTP传输
  • 现代MCP SDK:更新为使用最新的MCP SDK(v1.13.2)和现代API
  • 全面的Slack集成:全套Slack操作,包括:
    • 列出频道(具有预定义的频道支持)
    • 发布消息
    • 回复帖子
    • 添加反应
    • 获取频道历史记录
    • 获取线程回复
    • 列出用户
    • 获取用户资料

安装

本地开发

npm install
npm run build

全球安装(NPM)

npm install -g @zencoderai/slack-mcp-server

Docker安装

# Build the Docker image locally
docker build -t slack-mcp-server .

# Or pull from Docker Hub
docker pull zencoderai/slack-mcp:latest

# Or pull a specific version
docker pull zencoderai/slack-mcp:1.0.0

配置

设置以下环境变量:

export SLACK_BOT_TOKEN="xoxb-your-bot-token"
export SLACK_TEAM_ID="your-team-id"
export SLACK_CHANNEL_IDS="channel1,channel2,channel3"  # Optional: predefined channels
export AUTH_TOKEN="your-auth-token"  # Optional: Bearer token for HTTP authorization (Streamable HTTP transport only)

用法

命令行选项

slack-mcp [options]

Options:
  --transport <type>     Transport type: 'stdio' or 'http' (default: stdio)
  --port <number>        Port for HTTP server when using Streamable HTTP transport (default: 3000)
  --token <token>        Bearer token for HTTP authorization (optional, can also use AUTH_TOKEN env var)
  --help, -h             Show this help message

本地使用示例

使用slack-mcp命令(全局安装后)

# Use stdio transport (default)
slack-mcp

# Use stdio transport explicitly
slack-mcp --transport stdio

# Use Streamable HTTP transport on default port 3000
slack-mcp --transport http

# Use Streamable HTTP transport on custom port
slack-mcp --transport http --port 8080

# Use Streamable HTTP transport with custom auth token
slack-mcp --transport http --token mytoken

# Use Streamable HTTP transport with auth token from environment variable
AUTH_TOKEN=mytoken slack-mcp --transport http

直接使用节点(用于开发)

# Use stdio transport (default)
node dist/index.js

# Use stdio transport explicitly
node dist/index.js --transport stdio

# Use Streamable HTTP transport on default port 3000
node dist/index.js --transport http

# Use Streamable HTTP transport on custom port
node dist/index.js --transport http --port 8080

# Use Streamable HTTP transport with custom auth token
node dist/index.js --transport http --token mytoken

# Use Streamable HTTP transport with auth token from environment variable
AUTH_TOKEN=mytoken node dist/index.js --transport http

Docker使用示例

直接使用Docker

# Run with stdio transport (default)
docker run --rm \
  -e SLACK_BOT_TOKEN="xoxb-your-bot-token" \
  -e SLACK_TEAM_ID="your-team-id" \
  zencoderai/slack-mcp:latest

# Run with HTTP transport on port 3000
docker run --rm -p 3000:3000 \
  -e SLACK_BOT_TOKEN="xoxb-your-bot-token" \
  -e SLACK_TEAM_ID="your-team-id" \
  zencoderai/slack-mcp:latest --transport http

# Run with HTTP transport on custom port
docker run --rm -p 8080:8080 \
  -e SLACK_BOT_TOKEN="xoxb-your-bot-token" \
  -e SLACK_TEAM_ID="your-team-id" \
  zencoderai/slack-mcp:latest --transport http --port 8080

# Run with custom auth token
docker run --rm -p 3000:3000 \
  -e SLACK_BOT_TOKEN="xoxb-your-bot-token" \
  -e SLACK_TEAM_ID="your-team-id" \
  -e AUTH_TOKEN="mytoken" \
  zencoderai/slack-mcp:latest --transport http

使用Docker Compose

创建一个 docker-compose.yml 文件:

version: '3.8'

services:
  slack-mcp:
    # Use published image:
    image: zencoderai/slack-mcp:latest
    # Or build locally:
    # build: .
    environment:
      - SLACK_BOT_TOKEN=xoxb-your-bot-token
      - SLACK_TEAM_ID=your-team-id
      - SLACK_CHANNEL_IDS=channel1,channel2,channel3  # Optional
      - AUTH_TOKEN=your-auth-token  # Optional for HTTP transport
    ports:
      - "3000:3000"  # Only needed for HTTP transport
    command: ["--transport", "http"]  # Optional: specify transport type
    restart: unless-stopped

然后运行:

# Start the service
docker compose up -d

# View logs
docker compose logs -f slack-mcp

# Stop the service
docker compose down

运输类型

标准运输

  • 用例:命令行工具和直接集成
  • 沟通:标准输入/输出流
  • 默认:是的

可流式HTTP传输

  • 用例:远程服务器和基于web的集成
  • 沟通:带有可选服务器发送事件流的HTTP POST请求
  • 特性:
    • 会话管理
    • 双向通信
    • 可恢复连接
    • RESTful API端点
    • 承载令牌身份验证

身份验证(仅限流式HTTP传输)

使用Streamable HTTP传输时,服务器支持承载令牌身份验证:

  1. 命令行:使用 --token <token> 指定自定义令牌
  2. 环境变量:设置 AUTH_TOKEN=<token> 作为退路
  3. 自动生成:如果两者都没有提供,则生成随机令牌

命令行选项优先于环境变量。使用以下命令在HTTP请求中包含令牌 Authorization: Bearer <token> 头球

故障排除

如果遇到权限错误,请验证:

  1. 所有必需的范围都已添加到您的Slack应用程序中
  2. 应用程序已正确安装到您的工作区
  3. 令牌和工作区ID已正确复制到您的配置中
  4. 该应用程序已添加到它需要访问的频道中

发展

构建

npm run build

观看模式

npm run watch

API端点(可流式HTTP传输)

使用Streamable HTTP传输时,服务器会公开以下端点:

  • POST /mcp -客户端到服务器通信
  • GET /mcp -服务器到客户端通知(服务器发送的事件流)
  • DELETE /mcp -会话终止

与以前版本的更改

  • 更新MCP SDK:从v1.0.1升级到v1.13.2
  • 现代API:从低级服务器类迁移到高级McpServer类
  • Zod验证:使用Zod添加了正确的模式验证
  • 运输灵活性:添加了对流式HTTP传输的支持
  • 命令行界面:添加了用于传输选择的CLI参数
  • 会话管理:为HTTP传输实现了正确的会话处理
  • 更好的错误处理:改进了错误处理和日志记录