使用说明
祖利普·麦克普
一个MCP服务器,允许克劳德访问您的Zulip频道,这样您就可以要求提供最近活动的摘要。
设置
1.获取Zulip API密钥
- 在Zulip,前往 设置→ 帐户和隐私→ API密钥
- 点击 生成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
脚本:
- 附加 “对所有工具调用使用anonymize=true。” 根据您的提示
- 援引
claude -p使用Zulip MCP,没有其他工具 - 全部替换
{UserN}响应中带有真实姓名的别名 - 将结果写入输出文件
注: 需要
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默认情况下。