内容
# msgbrowse
[](https://github.com/joestump/msgbrowse/actions/workflows/ci.yml)
[](https://joestump.github.io/msgbrowse/)
[](LICENSE)
> 自托管、**仅限本地**浏览器、搜索引擎和AI编辑精选的个人消息存档日志 —— **Signal、Apple iMessage 和 WhatsApp** —— 基于上游导出工具 [`signal-export`](https://github.com/carderne/signal-export)、[`imessage-exporter`](https://github.com/ReagentX/imessage-exporter) 和 [`WhatsApp-Chat-Exporter`](https://github.com/KnugiHK/WhatsApp-Chat-Exporter)。 一个安静、私密的阅读室,涵盖您曾经发送的全部内容。
[](https://joestump.github.io/msgbrowse/)
msgbrowse 在磁盘导出上渲染快速的本地UI,添加关键词 + 语义搜索,并暴露一个 **MCP服务器**,以便 Claude 可以回答关于您消息历史的自然语言问题 —— 每条答案都可追溯到源消息。完整的文档位于 **[joestump.github.io/msgbrowse](https://joestump.github.io/msgbrowse)**。
> [!IMPORTANT]
> **不会离开您的机器**。 Web UI 默认仅绑定回环,存档严格只读,msgbrowse 做的**唯一**一次外部网络调用是到您配置的 OpenAI 兼容 LLM 端点(默认为本地 LiteLLM → Ollama 路线)。加密的 `.snapshots/*.tar` 备份被清点但从不打开。有关完整威胁模型,请参见 [`SECURITY.md`](SECURITY.md)。
> [!NOTE]
> **状态:** 今天有效 —— 所有三个来源(导入/浏览/转录带反应徽章)、全文搜索 + 语义搜索、媒体和链接画廊、AI 联系人事实、MCP 服务器和一个在 ~20 毫秒内回答增强导航的 Web UI,适用于 400k 消息存档。开发中:编辑精选的日志、具有菜单栏驻留的 Wails 桌面应用程序 ([#97](https://github.com/joestump/msgbrowse/issues/97))、二维码设备配对 + 存档同步 ([#98](https://github.com/joestump/msgbrowse/issues/98)) 和 Gitea 主线发布 ([#99](https://github.com/joestump/msgbrowse/issues/99))。
## 目录
- [快速开始(`go install`)](#快速开始go-install)
- [替代:Docker](#替代docker)
- [桌面应用程序](#桌面应用程序)
- [它读取的数据布局](#它读取的数据布局)
- [命令](#命令)
- [连接 Claude (MCP)](#连接-claude-mcp)
- [配置参考](#配置参考)
- [安全性](#安全性)
- [在 Claude Cowork 中设置备份管道](#在-claude-cowork-中设置备份管道)
- [开发](#开发)
## 快速开始(`go install`)
需要 **Go 1.25+** —— 并且不需要其他任何东西。SQLite 驱动程序是纯 Go(内置 FTS5),因此 **没有 C 工具链,也没有构建标签** 需要处理。
```sh
go install github.com/joestump/msgbrowse/cmd/msgbrowse@latest
# msgbrowse 位于 $(go env GOBIN)(或 $(go env GOPATH)/bin)—— 将其放在 $PATH 中
# 指向您拥有的任意存档(任何子集都有效):
msgbrowse --data-dir ./data \
--archive-root ~/Managed\ Files/Signal-Archive \
--imessage-archive-root ~/Managed\ Files/iMessage-Archive \
--whatsapp-archive-root ~/Managed\ Files/WhatsApp-Archive \
import
msgbrowse --data-dir ./data doctor # 设置诊断:根目录、媒体健康状况、导出工具
msgbrowse --data-dir ./data embed # 可选;需要 LLM 端点
msgbrowse --data-dir ./data serve # 自动打开 http://127.0.0.1:8787
```
存档根目录也可以位于配置文件/环境变量中(参见 [配置](#配置参考))。导入操作共享一个数据库,并且是**增量和幂等的** —— 在每次新导出后重新运行。`embed` 计算语义搜索的向量;浏览和关键词搜索无需任何 LLM。
> [!TIP]
> 在每次设置更改后运行 `msgbrowse doctor`。它验证数据目录、模式、存档根目录、附件健康状况、图像转换器、嵌入和导出工具可用性 —— 并且其提示提供了确切的标志或命令来修复每个问题。 `--check-llm` 添加一个端点可达性探测。
> [!WARNING]
> **iMessage 导出必须复制附件**。运行 `imessage-exporter` 时使用 `-c clone`(并授予您的终端完全磁盘访问权限),否则导出包含绝对 `~/Library/...` 引用,并且每个图像都呈现为损坏的。同样适用于 WhatsApp:Mac 配套应用程序同步一个浅媒体集,因此在您从完整的 iPhone 备份导出之前,请期待占位符。`doctor` 检测这两种情况并打印修复方法。
> [!TIP]
> **LLM 端点**。msgbrowse 只与您自己的 **OpenAI 兼容端点** 通信 —— 设置 `MSGBROWSE_LLM_BASE_URL`(`.../v1`)和 `MSGBROWSE_LLM_API_KEY`。直到一个可连接,`embed`、`facts` 和日志失败;其他所有功能都有效。没有代理?下面的 Docker 路径可以为您运行一个捆绑的本地 LiteLLM → Ollama。
### 从 Claude (MCP) 使用它
`msgbrowse mcp` 使用标准输入/输出,因此任何 MCP 客户端(Claude Desktop、Claude Code 等)都可以直接启动已安装的二进制文件。 首先运行 `msgbrowse embed` 以便语义搜索有向量,然后添加:
```json
{
"mcpServers": {
"msgbrowse": {
"command": "msgbrowse",
"args": ["--data-dir", "/绝对路径/to/data", "mcp"]
}
}
}
```
使用绝对二进制路径(例如 `/home/you/go/bin/msgbrowse`),如果它不在客户端的 `PATH` 中。参见 [连接 Claude (MCP)](#连接-claude-mcp)。
## 替代:Docker
喜欢容器吗?msgbrowse 提供了一个 Dockerfile 和一个 compose 栈 —— 镜像是一个完全静态的二进制文件,基于一个无分层的基镜像。
```sh
cp .env.example .env
# 编辑 .env:
# MSGBROWSE_ARCHIVE_HOST → 您的存档的绝对路径
# MSGBROWSE_LLM_BASE_URL → 您的 LiteLLM 代理(.../v1),MSGBROWSE_LLM_API_KEY → 其密钥
make up # 构建 + 启动 msgbrowse(指向您的外部 LiteLLM)
make signal-import # 将 signal-export 存档导入本地 DB
make embed # 计算语义搜索的嵌入(可选)
# 打开 http://127.0.0.1:8787
```
`make logs` 尾随服务器日志;`make down` 停止栈。存档被只读挂载,应用程序数据存在于一个命名卷中,UI 被发布到主机回环。
> [!TIP]
> 没有 LiteLLM 代理?使用 `make up-bundled` 和 `MSGBROWSE_LLM_BASE_URL=http://litellm:4000/v1` 运行捆绑的本地代理(LiteLLM → Ollama),然后在 `docker-compose.yml` 中取消 `ollama` 服务的注释并拉取模型:`docker compose exec ollama ollama pull nomic-embed-text` / `... pull llama3.1`。如果 LiteLLM 在 Docker 主机上运行,请使用 `http://host.docker.internal:4000/v1`。
## 桌面应用程序
msgbrowse 还作为一个原生桌面应用程序提供(`msgbrowse` 应用程序 —— 相同的产品,原生窗口):一个 **Wails v2** 窗口覆盖在相同的嵌入式 Web 服务器上 —— 相同的页面,相同的处理程序,与 `msgbrowse serve` 没有任何差异。Webview 外壳不能跨编译,因此每个 OS 的工件由 CI 矩阵(`.github/workflows/desktop.yml`)构建,并在 `v*` 标签的工作流运行中下载。
**捆绑的导出工具链(macOS)**。macOS `.app` 嵌入了三个上游导出工具,位于 `Contents/Resources/tools` 下 —— 一个可重定位的 Python 运行时(python-build-standalone)以及一个具有 [`signal-export`](https://github.com/carderne/signal-export)、[`whatsapp-chat-exporter`](https://github.com/KnugiHK/WhatsApp-Chat-Exporter) 和 [`imessage-exporter`](https://github.com/ReagentX/imessage-exporter) 的 venv —— 所以一个带有 Homebrew 和 Python 的全新 Mac 可以离线导出和导入,无需手动工具安装。应用程序直接解析这些捆绑路径,从不咨询 `$PATH`([ADR-0020](docs/adr/0020-bundled-exporters-guided-setup.md),[SPEC-0013](docs/openspec/specs/desktop-onboarding/spec.md))。CLI(`msgbrowse export`)保留其自带导出程序路径 —— 它仍然从 `$PATH` 或 `--*-bin` 重载中解析 `sigexport` / `imessage-exporter` / `wtsexporter` —— 因此高级用户不会失去任何功能;只有 `.app` 捆绑。
**签名状态 - 目前为临时**,未来将使用开发者 ID notarization。已发布的 `.app` 和每个嵌入式二进制文件在 CI 中都是 **临时代码签名**(`codesign -s -`),尚未使用 Apple 开发者 ID notarization(这是一个所有者门控的后续操作 —— 真实的开发者 ID 签名 + notarization 步骤已经在 CI 机密后面启用,并且在提供身份时激活)。在那之前,Gatekeeper 阻止第一次启动,您必须剥离隔离属性,以便应用程序 **及其捆绑的导出程序** 运行:
**macOS** - 下载并解压 `msgbrowse-desktop_darwin_universal`,然后:
- **终端(直到 notarization 落地):** `xattr -dr com.apple.quarantine msgbrowse.app`,然后正常打开它。 此剥离操作使临时签名的嵌入式 Python 和导出程序二进制文件能够作为子进程运行;如果没有,Gatekeeper 会杀死它们。 或
- **GUI:** 双击(它被阻止),然后系统设置 → **隐私和安全** → 向下滚动到安全 → **打开任意** 在 msgbrowse 通知旁边 → 认证。 (`xattr` 剥离仍然是 macOS 15+ 上嵌入式二进制文件的可靠路径。)
任一授予都是一次性的;之后,它会正常启动,只需双击即可。 一旦提供开发者 ID 并对发布进行 notarization,就不需要 `xattr` 剥离。
**Linux** - 下载 `msgbrowse-desktop_linux_amd64` 并 `chmod +x msgbrowse`(工件 zip 不保留执行位)。二进制文件链接到系统 webview,因此必须安装 WebKit2GTK 运行时(Ubuntu 24.04+/Debian 13:`sudo apt-get install libgtk-3-0 libwebkit2gtk-4.1-0`;大多数 GNOME 桌面环境已经安装)。从源代码构建需要开发头文件:`sudo apt-get install libgtk-3-dev libwebkit2gtk-4.1-dev pkg-config`,然后 `make desktop-linux`(在仍然提供 webkit2gtk-4.0 的发行版上:`make desktop-linux DESKTOP_TAGS=desktop,production`)。没有 WebKit2GTK?使用浏览器模式。
**Windows** - 尚未构建;矩阵腿被跟踪在 [#119](https://github.com/joestump/msgbrowse/issues/119) 中。使用浏览器模式。
## 它读取的数据布局
msgbrowse 将每个存档视为 **严格只读**。signal-export 布局:
```
Signal-Archive/
├── export/ # 可浏览的、解密的语料库
│ └── <ChatName>/
│ ├── chat.md # 对话,纯文本 markdown
│ └── media/ # 此对话的附件
├── journal/ # 日历 Markdown 日志(msgbrowse 拥有此目录)
│ └── <YYYY>/<YYYY-MM-DD>.md
└── .snapshots/ # 时间戳原始加密 DB 备份
└── db-YYYYMMDD-HHMMSS.tar # SQLCipher 加密;列出,从不解密
```
iMessage 是一个 `<ChatName>.txt` 文件的平面目录,加上一个 `attachments/` 树(`imessage-exporter -f txt -c clone`)。WhatsApp 是 `WhatsApp-Chat-Exporter` 输出 - `result.json` 加上工具复制的媒体文件夹。[导出指南](https://joestump.github.io/msgbrowse/docs/getting-started/exporting-your-archives/) 涵盖了这三个端到端的操作,包括 macOS WhatsApp 应用程序路由(`ChatStorage.sqlite` 无需手机备份)。
## 命令
| 命令 | 它做什么 |
| --- | --- |
| `msgbrowse export` | 将上游导出程序运行到配置的根目录:`sigexport`(Signal)、`imessage-exporter -f txt -c clone`(iMessage)和 `wtsexporter`(WhatsApp)。工具必须在 PATH 上或通过 `--signal-export-bin` / `--imessage-exporter-bin` / `--whatsapp-exporter-bin` 设置;`--skip-on-error` 继续传递失败的源;每个工具的额外参数和 `-- ...` 传递。msgbrowse 不存储任何秘密。 |
| `msgbrowse import` | **一次性**:将所有配置的存档(Signal + iMessage + WhatsApp)导入一个数据库。未设置的源将被跳过。 |
| `msgbrowse signal-import` | 导入/刷新 signal-export 存档(增量,幂等)。 |
| `msgbrowse imessage-import` | 导入/刷新 imessage-exporter 存档(`-f txt`,4.2.0)。 |
| `msgbrowse whatsapp-import` | 导入/刷新 WhatsApp-Chat-Exporter JSON 存档。 |
| `msgbrowse doctor` | 读取所有来源的只读设置诊断 - 捕获非复制模式导出、绝对媒体路径、缺少转换器、模式漂移。 `--check-llm` 探测端点。仅在 ✗ 时退出非零。 |
| `msgbrowse embed` | 为新消息计算嵌入(语义搜索)。 `--prune` 回收孤立的。 |
| `msgbrowse facts` | 提取每个联系人的 AI 事实(增量,引用;显示在对话页面)。 `--reset` 重新构建。 |
| `msgbrowse media` | 将非 web 图像(HEIC/TIFF)转换为缓存的 JPEG 以用于画廊。增量;`import` 自动运行它。 |
| `msgbrowse serve` | 运行本地 HTMX Web UI。 `--port`/`--host`(或 `--listen-addr`); `--open=false` 用于无头。 默认 `127.0.0.1:8787`。 |
| `msgbrowse mcp` | 运行 MCP 服务器(默认标准输入/输出; `--http` 用于可流式 HTTP)。 |
| `msgbrowse journal` | 重新构建日志 + LLM 摘要 *(开发中)*。 |
| `msgbrowse version` | 打印版本。 |
## 连接 Claude (MCP)
msgbrowse 暴露引用-忠实的检索工具(`search_messages` [混合关键词+向量],`semantic_search`,`get_conversation`,`list_conversations`,`get_context`,`list_media`,`list_links`)。 首先运行 `msgbrowse embed` 以便语义搜索有向量。
**Claude Desktop / Claude Code** - 将以下内容添加到您的 MCP 配置文件(`claude_desktop_config.json` 或 Claude Code MCP 设置):
本地二进制文件(标准输入/输出)- `go install` 路径:
```json
{
"mcpServers": {
"msgbrowse": {
"command": "msgbrowse",
"args": ["--data-dir", "/绝对路径/to/data", "mcp"]
}
}
```
通过 Docker(标准输入/输出;重用 compose 数据卷):
```json
{
"mcpServers": {
"msgbrowse": {
"command": "docker",
"args": ["compose", "-f", "/绝对路径/to/msgbrowse/docker-compose.yml",
"run", "--rm", "-T", "msgbrowse", "mcp"]
}
}
}
```
然后问 Claude 问题,如 *"MJ 说了什么关于租赁的事?"* 或 *"总结我和 Harper 关于旅行的对话。"* 每个答案都可以追溯到源消息(对话,发送者,时间戳,消息 ID)。
## 配置参考
按从低到高的顺序解析:内置默认值 < `config.yaml` < `MSGBROWSE_*` 环境变量 < 标志。参见 [`config.example.yaml`](config.example.yaml) 和 [完整参考](https://joestump.github.io/msgbrowse/docs/reference/configuration/)。
| 键 | 环境变量 | 默认值 | 注释 |
| --- | --- | --- | --- |
| `archive_root` | `MSGBROWSE_ARCHIVE_ROOT` | — | 只读 signal-export 存档 |
| `imessage_archive_root` | `MSGBROWSE_IMESSAGE_ARCHIVE_ROOT` | — | 只读 imessage-exporter 存档 |
| `whatsapp_archive_root` | `MSGBROWSE_WHATSAPP_ARCHIVE_ROOT` | — | 只读 WhatsApp-Chat-Exporter 输出 |
| `signal_export_bin` | `MSGBROWSE_SIGNAL_EXPORT_BIN` | — | 覆盖 `sigexport` 的导出路径(否则 PATH) |
| `imessage_exporter_bin` | `MSGBROWSE_IMESSAGE_EXPORTER_BIN` | — | 覆盖 `imessage-exporter` 的导出路径(否则 PATH) |
| `whatsapp_exporter_bin` | `MSGBROWSE_WHATSAPP_EXPORTER_BIN` | — | 覆盖 `wtsexporter` 的导出路径(否则 PATH) |
| `data_dir` | `MSGBROWSE_DATA_DIR` | `./data` | 可写数据库/嵌入目录 |
| `listen_addr` | `MSGBROWSE_LISTEN_ADDR` | `127.0.0.1:8787` | 默认仅限回环 |
| `llm.base_url` | `MSGBROWSE_LLM_BASE_URL` | `http://127.0.0.1:4000/v1` | 唯一的出口 |
| `llm.api_key` | `MSGBROWSE_LLM_API_KEY` | — | 环境/秘密;永远不要提交 |
| `llm.chat_model` | `MSGBROWSE_LLM_CHAT_MODEL` | `local-chat` | RAG + 摘要 |
| `llm.embed_model` | `MSGBROWSE_LLM_EMBED_MODEL` | `local-embed` | 嵌入 |
| `vector_backend` | `MSGBROWSE_VECTOR_BACKEND` | `sqlite-vec` | 目前为强力方式(ADR-0002) |
| `journal.exclude_conversations` | — | `[]` | 永远不会发送给 LLM |
| `log_level` | `MSGBROWSE_LOG_LEVEL` | `info` | debug/info/warn/error |
## 安全性
默认仅限回环,存档只读挂载,容器以非 root 用户运行,具有只读根文件系统,并丢弃所有功能,加密 `.snapshots` 从不打开,**唯一**的外部网络调用是到您的配置 `llm.base_url`。
> [!CAUTION]
> 将 `llm.base_url` 指向**托管**模型意味着消息文本(和,如果您启用字幕/转录,媒体)离开您的机器到该提供商。 如果这对您有影响,请保持本地 — 默认如此。 阅读 [`SECURITY.md`](SECURITY.md) 以获取确切的数据发送到 LLM 的边界。
## 在 Claude Cowork 中设置备份管道
## 开发
## 在 Claude Cowork 中设置备份管道
msgbrowse 读取上游导出程序生成的存档。要在 Mac 上创建这些存档,请将以下提示粘贴到 Claude Cowork 中。(WhatsApp 不需要预定的作业来启动 — [导出指南](https://joestump.github.io/msgbrowse/docs/getting-started/exporting-your-archives/)涵盖了针对 Mac 应用程序本地数据库运行的单命令 `wtsexporter`。)
**信号:**
```bash
在我的 Mac 上设置一个每日 recurring 作业,运行 `signal-export` 以将我的 Signal Desktop 历史记录转储到 ~/Managed Files/Signal-Archive 中,构建一个可搜索的、不断增长的存档。
谨慎设置 - 提出计划并在我安装或更改系统状态之前等待我的批准。要求:
1. 发现(只读):确认 Signal Desktop 已安装/链接,定位 ~/Library/Application Support/Signal(sql/db.sqlite + config.json),并检查配置中是否有 `encryptedKey`(v10 / Electron 安全存储,macOS 钥匙串封装)。确认 Python 3.11+ 已可用(Homebrew)。标记已知的故障点:最近的 Signal Desktop 通过 macOS 钥匙串加密 SQLCipher 密钥(“Signal 安全存储”),因此导出需要一次性“始终允许”钥匙串提示;之后,无人值守运行是静默的。
2. 在隔离的 venv 中安装 `signal-export`(不是系统 pip):专用 ~/Managed Files/Signal-Archive/.venv。仅 Markdown 输出(--no-html --no-json),保留附件。
3. 编写一个包装脚本,每个运行:
- 复制 config.json + sql/db.sqlite{,-wal,-shm} 到私有同卷工作目录(避免实时 DB 锁定 / “I/O 磁盘错误”而不退出 Signal),并 SYMLINKS 大型不可变媒体目录(attachments.noindex,avatars.noindex,stickers.noindex,badges.noindex),以便附件导出而不复制几十 GB;
- 保留时间戳的 RAW DB 快照作为未压缩的 .tar 存放在 .snapshots/ 下 — 注意 SQLCipher DB 已加密,因此不可压缩,因此通过 GFS 保留控制占用空间;
- 运行 `sigexport --source <copy> --old <archive> --no-html --no-json <staging>`,以便将过去 Signal ~45 天链接设备窗口的消息合并并永远不会丢失;
- 原子交换新的导出到位;
- 使用 GFS 压缩保留快照:保留所有 ≤14 天的每日快照,然后 1 个/月(≤~13 个月),1 个/季度(≤~3 年),1 个/年 — 每个时段的最旧快照是其锚点(~37 个快照 / ~12 GB 稳定状态,~350 MB DB)。
4. 使用 macOS launchd LaunchAgent(~/Library/LaunchAgents/)在我的用户会话中每天 09:00 运行,无需 Cowork 打开。
5. 进行一次性交互测试运行,以便我可以单击钥匙串提示上的“始终允许”,确认降级导出 + 快照已着陆,然后启动 LaunchAgent 并通过 `launchctl list` 验证;锁定权限(存档目录 700,快照 600);我的磁盘已经是 FileVault 加密的,这涵盖了静态纯文本导出。
```
**iMessage:**
```bash
在我的 Mac 上设置一个每日 recurring 作业,运行 `imessage-exporter` 以将我的 iMessage 历史记录转储到 ~/Managed Files/iMessage-Archive 中,以 Markdown 格式构建一个可搜索的存档,msgbrowse 可以将其与 Signal 导出一起导入。
谨慎设置 - 提出计划并在我安装或更改系统状态之前等待我的批准。要求:
1. 发现(只读):确认 ~/Library/Messages/chat.db 存在且可读。注意,读取它需要终端/作业在系统设置 > 隐私和安全中具有完全磁盘访问权限;将其标记为一次性手动授予,我必须批准。
2. 通过 Homebrew(或 cargo)安装 `imessage-exporter`。固定版本。
3. 编写一个包装脚本,每个运行导出到临时目录,输出 Markdown(`imessage-exporter -f txt -c clone -o <staging>`),保留附件/媒体,然后原子交换结果到 ~/Managed Files/iMessage-Archive。不修改 chat.db。
4. 使用 macOS launchd LaunchAgent 在我的用户会话中每天 09:15 运行。
5. 进行一次性交互测试运行,以便我可以授予完全磁盘访问权限,确认 Markdown 导出 + 附件已着陆,然后启动 LaunchAgent 并通过 `launchctl list` 验证;锁定权限(存档目录 700);FileVault 涵盖静态纯文本导出。
```
## 开发
```bash
make build # 构建 ./bin/msgbrowse(纯 Go,无 cgo,无构建标签)
make install # 安装到 $GOBIN / $GOPATH/bin
make test # 运行测试套件
make check # gofmt + go vet + 测试(CI 网关)
make cover # 覆盖率摘要
make css # 重建 internal/web/static/app.css(Tailwind + daisyUI)
make desktop-linux # 构建 cmd/msgbrowse-desktop/build/bin/msgbrowse(cgo;需要 GTK3/WebKit2GTK 开发包)
make desktop-test # desktop 模块的无头测试(纯 Go,CGO_ENABLED=0)
```
**UI 样式。** Web UI 使用 Tailwind CSS + daisyUI,具有自定义 **slate** 主题(深色)和 **slate-light**,以及分发的 Hero Icons。构建的 `app.css` 已提交并通过 `go:embed` 提供服务,因此 **运行时不需要工具链**(不需要 Node,不需要 CDN — 保持严格的 CSP 完整)。当您更改模板类时,运行 `make css` 以重新生成:它获取 Tailwind 独立 CLI + daisyUI 到 gitignored `.tools/`(不需要 npm)并重建。CI 如果 `app.css` 过时则失败。
架构决策位于 [`docs/adr/`](docs/adr/) 和规格位于 [`docs/openspec/specs/`](docs/openspec/specs/) — 均在 [文档站点](https://joestump.github.io/msgbrowse/architecture)上渲染。贡献应保持 `make check` 为绿色,并为新的摄取/搜索/MCP 行为添加测试。
## License
[MIT](LICENSE) © Joe Stump
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器