Slack数据访问服务器

一个基于FastMCP构建的Slack模型上下文协议(MCP)服务器,提供对Slack数据的只读访问,包括消息、频道和用户信息,并通过Bearer令牌认证保护所有API端点。

  • by aryahadii
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 aryahadii/slack-mcp-server

使用说明

Slack MCP服务器

使用FastMCP构建的Slack模型上下文协议(MCP)服务器。此服务器提供对Slack数据(包括消息、通道和用户)的只读访问,并通过承载令牌身份验证保护所有API端点。

特性

  • 列出工作区中的所有频道
  • 获取特定频道的详细信息
  • 从频道读取消息
  • 列出工作区中的所有用户
  • 获取特定用户的详细信息
  • 通过承载令牌身份验证实现API安全访问

设置

  1. 安装依赖项:

    pip install -r requirements.txt
    
  2. 创建一个 .env 使用您的Slack机器人令牌的文件:

    cp sample.env .env
    
  3. 编辑 .env 文件并添加您的Slack Bot用户OAuth令牌:

    SLACK_BOT_TOKEN=xoxb-your-token-here
    

    服务器使用JWT(JSON Web令牌)进行身份验证。你 必须 还可以将RSA密钥对添加为base64编码的PEM字符串:

    RSA_PRIVATE_KEY="<base64-encoded-PEM-private-key>"
    RSA_PUBLIC_KEY="<base64-encoded-PEM-public-key>"
    
    • 如果没有这些值,请运行服务器或 python generate_client_token.py 一次;它将打印出base64编码的密钥以添加到您的 .env 文件。
    • 钥匙 必须 采用base64编码(不是原始PEM)。

获取Slack Bot令牌

  1. 首选 https://api.slack.com/apps
  2. 创建新应用程序(或使用现有应用程序)
  3. 导航到“OAuth和权限”
  4. 将以下范围添加到您的机器人中:
    • channels:read
    • channels:history
    • groups:read
    • groups:history
    • users:read
  5. 将应用程序安装到您的工作区
  6. 复制以开头的“Bot用户OAuth令牌” xoxb-

运行服务器

使用以下命令启动服务器:

python main.py

服务器将在以下时间运行 http://localhost:8000。默认情况下,所有API端点都使用承载令牌身份验证进行保护。

可用的API工具

服务器公开了以下MCP工具:

list_channels

列出工作区中的所有频道。

get_channel_info

获取特定频道的详细信息。

获取消息

从支持分页的频道获取消息。

list_users

列出工作区中的所有用户。

get_user_info

获取特定用户的详细信息。

认证

对MCP服务器的所有请求都需要JWT承载令牌身份验证。启动服务器时,它将显示一个可用于身份验证的JWT令牌。

要验证您的请求,请在服务器提供的令牌中包含以下标头:

Authorization: Bearer eyJhbGciOiJS...your-jwt-token...XwQ

这既适用于HTTP API端点,也适用于服务器端事件(SSE)连接。

卷曲示例

curl -H "Authorization: Bearer eyJhbGciOiJS...your-jwt-token...XwQ" http://localhost:8000/mcp/list

SSE的JavaScript示例

const eventSource = new EventSource('http://localhost:8000/sse', {
  headers: {
    'Authorization': 'Bearer eyJhbGciOiJS...your-jwt-token...XwQ'
  }
});

注: JWT令牌是在服务器启动时生成的。如果重新启动服务器,它将使用相同的密钥对(存储在 jwt_keys.json),但您可能需要从服务器输出中获取新令牌。

与LLM集成

此MCP服务器可以与LLM集成,为它们提供对Slack数据的只读访问。LLM可以查询通道、用户和消息,但不能发送消息或修改任何数据。与LLM集成时,请确保将API令牌安全地传递给建立连接的客户端代码。