Zulip聊天摘要服务

一个MCP服务器,允许Claude访问您的Zulip频道,以便获取最近活动的摘要。

  • by adamhajari
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 adamhajari/zulip-mcp

使用说明

祖利普·麦克普

一个MCP服务器,允许克劳德访问您的Zulip频道,这样您就可以要求提供最近活动的摘要。

设置

1.获取Zulip API密钥

  1. 在Zulip,前往 设置→ 帐户和隐私→ API密钥
  2. 点击 生成API密钥 并复制它

2.创建一个 .zuliprc 文件

复制示例文件并填写您的凭据:

cp .zuliprc.example .zuliprc

然后编辑 .zuliprc 使用您的电子邮件和API密钥:

[api]
key=your_api_key_here
email=your_email@recurse.com
site=https://recurse.zulipchat.com

或者,Zulip可以生成预填充 .zuliprc 为你: 设置→ 帐户和隐私→ API密钥→ 显示/更改API密钥→ 下载.zulipc。将下载的文件放在项目目录中。

3.配置您的频道

编辑 config.yaml 设置默认摘要中所需的频道以及回溯时间:

zuliprc: .zuliprc

defaults:
  hours_back: 24
  channels:
    - general
    - announcements
    - your-interests

使用Zulip中显示的确切流名称。

🛡️ 架构和数据隐私

这是一个标准的MCP服务器。它与LLM无关,可以与任何兼容MCP的客户端一起使用。Zulip数据的隐私完全取决于您选择的客户端:

  • 云客户端(例如Claude Desktop):数据将被发送到提供商的服务器进行处理。
  • 本地客户端(例如Ollama+本地MCP主机):数据保留在您的计算机上。 如果您在一个对隐私有很高期望的社区中使用此功能,请考虑使用仅限本地的工作流程。

4.克劳德安装

如果你使用的是Claude Code,你可以让Claude为你处理步骤4和5。在项目目录中打开Claude Code并粘贴以下提示:

“安装此项目的依赖项,并在我的克劳德代码设置中将其注册为MCP服务器。”

5.安装依赖项(手动)

uv sync

6.添加到克劳德代码(或克劳德桌面)(手动)

克劳德代码 --从项目目录运行:

claude mcp add zulip-mcp -- uv run --project /absolute/path/to/zulip zulip-mcp

这会将服务器写入 ~/.claude/settings.json。若要将其仅限于此项目,请手动将其添加到 .claude/settings.json (已承诺)或 .claude/settings.local.json (仅限本地)在项目根目录中:

{
  "mcpServers": {
    "zulip-mcp": {
      "command": "uv",
      "args": ["run", "--project", "/absolute/path/to/zulip", "zulip-mcp"]
    }
  }
}

克劳德桌面版 --添加到 ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "zulip-mcp": {
      "command": "uv",
      "args": ["run", "--project", "/absolute/path/to/zulip", "zulip-mcp"]
    }
  }
}

注: 服务器读取 config.yaml 默认情况下,从项目目录中。你可以用以下命令覆盖它 ZULIP_MCP_CONFIG 环境变量:

{
  "mcpServers": {
    "zulip-mcp": {
      "command": "uv",
      "args": ["run", "--project", "/absolute/path/to/zulip", "zulip-mcp"],
      "env": {
        "ZULIP_MCP_CONFIG": "/absolute/path/to/config.yaml"
      }
    }
  }
}

用法

连接MCP后,您可以问以下问题:

  • “总结今天讨论的内容”
  • “给我一份所有已配置频道的摘要”
  • “在过去的48小时里,#公告中出现了哪些主题?”
  • “列出我订阅的频道”

为了保护用户隐私,请通过 anonymize=true 任何返回消息内容的工具。实名将被替换为稳定的别名({User1}, {User2}在向克劳德发送任何内容之前:

  • “总结过去24小时的签到渠道。对所有工具调用使用anonymize=true。”

别名映射保存在本地 ~/.config/zulip_mcp/anonymizer_map.json 事后去匿名化。

隐私优先CLI: prompt_with_privacy.py

对于在发送到LLM之前对消息进行匿名化并对响应进行去匿名化的工作流,请使用附带的脚本。它将您的查询发送到强制匿名的LLM,然后在将结果写入文件之前,使用本地别名映射自动对响应进行去匿名处理。

python prompt_with_privacy.py "your query here"

⚠️ 隐私和安全披露

在社区环境(如休息室)中使用它之前,请注意以下几点:

  • 数据处理: 默认情况下,prompt_with_privacy.py脚本将Zulip消息内容发送到Anthropic的服务器进行处理。即使在使用 anonymize=true 标志,用户仍然可以通过书写模式、特定兴趣或上下文(笔迹)来识别。
  • 同意: 在使用此工具总结任何非公开的Zulip频道之前,请考虑获得所有参与者的同意。
  • 当地替代方案: 如果您需要100%的数据隐私,建议修改客户端以指向本地LLM(例如,通过Ollama或RC的Heap等内部集群),而不是使用基于云的提供商。

选项:

标志 默认值 描述
--output, -o output.md 写去匿名化响应的路径

例子:

python prompt_with_privacy.py "summarize checkins from the last 24 hours. return a one sentence summary for every person." --output checkins.md

脚本:

  1. 附加 “对所有工具调用使用anonymize=true。” 根据您的提示
  2. 援引 claude -p 使用Zulip MCP,没有其他工具
  3. 全部替换 {UserN} 响应中带有真实姓名的别名
  4. 将结果写入输出文件

注: 需要 claude 在您的 PATH 和那个 zulip-mcp 服务器已注册 ~/.claude.json 对于此项目目录(请参阅上面的设置步骤)。

本地LLM CLI: zulip_local.py

对于将所有Zulip数据保存在计算机上的完全本地工作流,请使用附带的脚本。它直接连接到本地Ollama实例(或任何与OpenAI兼容的端点),并运行完整的代理循环——获取消息并对其进行汇总——而无需向云提供商发送任何内容。

1.安装Olama

从下载并安装 ollama.com,或在macOS上:

brew install ollama

2.下载模型

ollama pull gemma4:e4b

任何支持工具调用的模型都可以工作。 gemma4:e4b 是默认值。

3.启动Ollama服务器

ollama serve

或者通过Homebrew将其作为后台服务运行(登录时自动启动):

brew services start ollama

无论哪种方式,服务器都会监听 http://localhost:11434.

4.运行脚本

uv run python zulip_local.py "summarize the checkins channel from the last 24 hours"

配置

环境变量 默认值 描述
ZULIP_MCP_MODEL gemma4:e4b 要使用的模型
ZULIP_MCP_DIR 脚本目录 zulip-mcp项目的路径
OPEN_WEBUI_API_KEY -- 设置为使用Open WebUI而不是本地Ollama
OPEN_WEBUI_BASE_URL -- Open WebUI的基本URL(需要 OPEN_WEBUI_API_KEY)

两者 OPEN_WEBUI_API_KEY 和 OPEN_WEBUI_BASE_URL 必须设置为远离当地的Ollama。

命令行标志

标志 描述
--model <name> 覆盖模型(优先于 ZULIP_MCP_MODEL)
--verbose 打印工具调用和原始工具结果

例子:

uv run python zulip_local.py "summarize the checkins channel from the last 24 hours. give a one to two sentence summary for every person." --model llama3.2

可用工具

工具 说明
list_channels 列出您订阅的所有频道
get_channel_messages 从一个频道获取最近的消息
get_checkins 一次获取一个主题的检入(避免上下文过载)
get_digest 一次从所有配置的通道获取消息
get_full_message 按ID获取单个消息的完整内容
set_interests 将您的兴趣保存到config.yaml以过滤摘要

所有返回消息内容的工具都接受可选 anonymize 参数(默认值: false).

您可以内联覆盖默认值,例如“总结过去3天的签到次数”将通过 hours_back: 72 到工具。

备注

  • 在摘要/频道视图中,长度超过500个字符的消息会被截断。截断的消息包括他们的ID和注释,以便克劳德可以呼叫 get_full_message 在内容看起来相关时检索完整内容。
  • 服务器每次请求每个通道最多可获取1000条消息。
  • .zuliprc 包含您的API密钥-不要提交它。它位于 .gitignore 默认情况下。