聊天消息搜索与摘要服务

RocketChat MCP for LibreChat 是一个允许用户在Rocket.Chat工作区中搜索、检索和摘要消息的服务,同时支持标记房间为已读。

  • by SufiSR
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 SufiSR/rocketchat-reader-mcp

使用说明

RocketChat MCP for LibreChat

一 主控程序 服务器允许 Librechat 用户从他们的Rocket搜索、检索和总结消息。聊天工作区——并将房间标记为已读。

用户可以做什么:

  • 总结一段时间内的渠道或DM(“从上周开始了解#账户管理”)
  • 在所有房间中搜索对某个主题的提及(“唐纳德·特朗普在哪里被提及?”)
  • 阅读与同事的DM对话
  • 检查并阅读所有房间的未读消息
  • 将房间标记为已读(单人房或一次全部)
  • 查找用户信息和房间列表
  • 对任何日期(“上周一”、“昨天”、“2天前”)使用自然语言——不需要ISO 8601

什么是故意禁用: 发送消息和创建频道。


建筑

LibreChat user
    │  POST /mcp
    │  Headers: X-RocketChat-User-Id, X-RocketChat-Auth-Token
    ▼
rocketchat-mcp  (Docker, port 3011)
    │  ROCKETCHAT_SERVER_URL from env (fixed by admin)
    │  auth token from request header (per user)
    ▼
Rocket.Chat server

凭证分为两层:

层级 内容 地点
管理员 服务器URL ROCKETCHAT_SERVER_URL env变量 docker-compose.yaml --设置一次,适用于所有用户
用户 用户ID+身份验证令牌 librechat customUserVars → 每次调用时作为请求标头发送

每个用户都使用自己的个人访问令牌进行身份验证。服务器URL永远不是用户可配置的(防止重定向到任意服务器)。


设置

1.部署MCP服务器

编辑 docker-compose.yaml 并设置你的火箭。聊天服务器URL:

environment:
  MCP_TRANSPORT: "streamable-http"
  MCP_PORT: "3011"
  MCP_HOST: "0.0.0.0"
  ROCKETCHAT_SERVER_URL: "https://chat.yourcompany.com"   # <-- set this

然后启动容器:

docker compose up -d

服务器监听 http://<host>:3011/mcp.

2.配置库

将以下代码块添加到LibreChat配置文件中 mcpServers:。复制自 librechat.example.yaml 或直接粘贴:

mcpServers:
  rocketchat:
    title: "Rocket.Chat"
    description: "Search and summarize your Rocket.Chat channels and DMs"
    type: streamable-http
    # Adjust to match your deployment (host.docker.internal if LibreChat is also in Docker)
    url: "http://host.docker.internal:3011/mcp"
    headers:
      X-RocketChat-User-Id: "{{ROCKETCHAT_USER_ID}}"
      X-RocketChat-Auth-Token: "{{ROCKETCHAT_AUTH_TOKEN}}"
    customUserVars:
      ROCKETCHAT_USER_ID:
        title: "Rocket.Chat User ID"
        description: >
          Your personal Rocket.Chat User ID.
          Find it under My Account → Profile, or ask your admin.
      ROCKETCHAT_AUTH_TOKEN:
        title: "Rocket.Chat Auth Token"
        description: >
          Your personal Rocket.Chat authentication token.
          Create one under My Account → Personal Access Tokens → Add New Token.

3.用户在LibreChat中设置凭据

当用户首次使用Rocket时。LibreChat中的聊天工具,会提示他们输入个人信息 用户ID 和 身份验证令牌。这些存储在他们的LibreChat个人资料中,并在每个MCP请求中作为标头发送。

如何在Rocket中查找您的凭据。聊天:

  • 用户ID: My Account → Profile (显示在页面URL中,或在下面询问您的管理员 Admin > Users)
  • 身份验证令牌: My Account → Personal Access Tokens → Add New Token

工具

阅读工具

工具 说明
list_users 列出工作区中的所有用户(用户名、姓名、电子邮件)
list_all_rooms 列出用户可以访问的所有房间(频道、DM、私人)
find_channel 按名称查找房间(部分匹配或完全匹配)。返回房间ID以用于其他工具
get_user_info 按用户名获取特定用户的个人资料详细信息
get_channel_messages 获取房间中最近的N条消息(最新消息优先)
get_room_messages_since 获取约会后房间中的所有消息——非常适合摘要
get_unread_messages 按房间分组,获取已验证用户的所有未读消息
get_subscriptions_delta 获取自约会以来每个房间的未读计数和提及计数
search_messages 在所有房间或特定房间进行全文搜索,并可选择日期和用户过滤器
normalize_date 将任何日期表达式解析为ISO 8601 UTC(用于确认自然语言日期)

编写工具

工具 说明
mark_room_as_read 将单个房间中的所有邮件标记为已读
mark_multiple_rooms_as_read 在一次通话中将多个房间标记为已读

search_messages --消歧义

当 room_name 提供但匹配多个房间,该工具返回 AMBIGUOUS: 列出所有候选人及其ID的响应。人工智能将这些信息转发给用户(“你是说……吗?”),然后重试 room_id 一旦用户澄清。

“在Alex频道中搜索”的示例流程:

Tool returns:
  AMBIGUOUS: Found 2 rooms matching 'alex':
    - [DM] Alex Schuessler (room_id="abc123")
    - [Channel] alex-general (room_id="def456")
  Retry with: search_messages(query="...", room_id="<ID>")

AI asks user: "Did you mean Alex Schuessler (DM) or alex-general (channel)?"
User clarifies → AI retries with room_id="abc123"

要完全跳过消歧,请传递 room_id 直接代替 room_name.


常见用法示例

总结过去一周的频道:

"Give me a summary of what happened in #account-management this week"

AI呼叫 find_channel("account-management")那么 get_room_messages_since(room_id, since_ts="last monday").

在所有渠道中搜索主题:

"In which channels was Donald Trump mentioned and what was said?"

AI呼叫 search_messages(query="Donald Trump").

用自然语言搜索日期范围:

"Show me all messages about the budget from last week"

AI呼叫 search_messages(query="budget", date_from="last monday", date_to="last friday").

赶上DM:

"What did Alex Schuessler write to me while I was out?"

AI呼叫 find_channel("Alex Schuessler") 要获取DM房间ID,则 get_channel_messages(room_id, count=50).

检查您离开时活动的内容:

"Which channels had the most activity last week?"

AI呼叫 get_subscriptions_delta(updated_since="last monday") 查看每个房间的未读计数。

阅读并标记未读邮件:

"Show me what I missed and mark everything as read"

AI呼叫 get_unread_messages(),显示摘要,然后调用 mark_multiple_rooms_as_read(room_ids=[...]) 在用户确认之后。


本地开发(无Docker)

uv venv
.venv\Scripts\activate      # Windows
# source .venv/bin/activate  # macOS/Linux
uv sync

在您的环境中设置凭据:

# Windows
set ROCKETCHAT_SERVER_URL=https://chat.yourcompany.com
set ROCKETCHAT_USER_ID=your-user-id
set ROCKETCHAT_AUTH_TOKEN=your-auth-token

# macOS/Linux
export ROCKETCHAT_SERVER_URL=https://chat.yourcompany.com
export ROCKETCHAT_USER_ID=your-user-id
export ROCKETCHAT_AUTH_TOKEN=your-auth-token

在stdio模式下运行(适用于Cursor/Claude Desktop):

python rocketchat.py

在HTTP模式下运行(在本地测试LibreChat路径):

python rocketchat.py --transport streamable-http --port 3011

光标/克劳德桌面(stdio)

{
  "mcpServers": {
    "rocketchat": {
      "command": "python",
      "args": ["C:/path/to/rocketchat.py"]
    }
  }
}

配置中有凭据(不太推荐——在共享环境中避免):

{
  "mcpServers": {
    "rocketchat": {
      "command": "python",
      "args": [
        "C:/path/to/rocketchat.py",
        "--server-url", "https://chat.yourcompany.com"
      ],
      "env": {
        "ROCKETCHAT_USER_ID": "your-user-id",
        "ROCKETCHAT_AUTH_TOKEN": "your-auth-token"
      }
    }
  }
}

凭证参考

源 用户ID 身份验证令牌
请求头 (歌词) X-RocketChat-User-Id X-RocketChat-Auth-Token
Env 是 (本地/stdio) ROCKETCHAT_USER_ID ROCKETCHAT_AUTH_TOKEN
Env就是一切。 (用户名/密码) ROCKETCHAT_USERNAME ROCKETCHAT_PASSWORD

服务器URL为 总是 从阅读 ROCKETCHAT_SERVER_URL 环境变量。它不能通过标头覆盖。


参考文献