内容
# chatmem
**本地LLM聊天历史记录,通过MCP提供服务。**
`chatmem`是一个单一二进制工具,通过[模型上下文协议](https://modelcontextprotocol.io/)工具捕获LLM对话,任何客户端都可以调用(Claude Code、Cursor、aider、自定义SDK),将所有内容存储在嵌入式Postgres 18数据库中,并带有**pgvector**,并在您的机器上按需将相关过去上下文返回给任何LLM。
只有匿名遥测数据(安装ID、聚合计数器、选择加入崩溃报告)会离开您的机器 — **消息内容永远不会离开**。
---
## 目录
- [状态](#状态)
- [快速入门](#快速入门)
- [MCP工具参考](#mcp工具参考)
- [命令](#命令)
- [数据和配置路径](#数据和配置路径)
- [遥测](#遥测)
- [架构](#架构)
- [存储库布局](#存储库布局)
- [从源代码构建](#从源代码构建)
- [测试](#测试)
- [开发工作流程](#开发工作流程)
- [故障排除](#故障排除)
- [卸载](#卸载)
- [路线图](#路线图)
- [许可证](#许可证)
---
## 状态
预-alpha版本(`v0.0.1-dev`)。完全可用的平台:
| 平台 | pgvector | 分发 | 验证 |
| --- | --- | --- | --- |
| `darwin/arm64` | 0.8.5 | Homebrew tap | 实时使用 |
| `linux/amd64` | 0.8.3 | RPM(zypper/dnf)+ DEB + tarball | Debian 12容器 + openSUSE Leap 15.6容器 |
| `linux/arm64` | 0.8.3 | RPM(zypper/dnf)+ DEB + tarball | Debian 12容器 + openSUSE Leap 15.6容器 |
| `darwin/amd64` | — | — | 需要Intel-Mac pgvector.dylib |
| `windows/amd64` | — | — | 需要pgvector.dll + 服务故事 |
macOS和Linux之间的版本偏差是故意的(Homebrew发布0.8.5,官方Postgres apt发布0.8.3用于PG18)。两者对于我们的使用来说是线兼容的 — 相同的操作,相同的HNSW支持。
当前可用:
| 命令 | 用途 |
| --- | --- |
| `chatmem init` | 配置本地数据库,应用模式,打印MCP客户端配置。 |
| `chatmem mcp` | 自包含stdio MCP服务器(启动和管理嵌入式Postgres)。 |
| `chatmem daemon` | 长期运行的Postgres进程(未来守护进程+ shim架构的基础)。 |
| `chatmem telemetry {enable,disable,status}` | 管理匿名遥测;遵循`CHATMEM_TELEMETRY=0`。 |
## 快速入门
```bash
# --- macOS 或 Linuxbrew(Homebrew tap — 以cask形式发布) ---
brew tap sid077/chatmem
brew install --cask chatmem
# --- openSUSE / SUSE(zypper自托管仓库)---
sudo zypper ar https://sid077.github.io/chatmem/chatmem.repo
sudo zypper --gpg-auto-import-keys refresh
sudo zypper in chatmem
# --- Fedora / RHEL(dnf,相同仓库)---
sudo dnf config-manager --add-repo https://sid077.github.io/chatmem/chatmem.repo
sudo dnf install chatmem
# --- Debian / Ubuntu(直接.deb下载;APT仓库待定)---
# curl -sSLo /tmp/chatmem.deb https://github.com/sid077/chatmem/releases/latest/download/chatmem_<ver>_<arch>.deb
# sudo apt install /tmp/chatmem.deb
# --- 直接下载(任何Linux)---
# curl -sSL https://github.com/sid077/chatmem/releases/latest/download/chatmem_Linux_x86_64.tar.gz \
# | tar -xz && sudo mv chatmem /usr/local/bin/
# 2) 初始化本地数据库 — 打印粘贴到MCP客户端的JSON片段
chatmem init
# 3) 粘贴到 ~/.claude/mcp.json(或 ~/.cursor/mcp.json),重启客户端
# 4) 验证工具出现
# 在Claude Code中,询问: “列出您的MCP工具” — 您应该看到
# record_message, search_history, get_conversation 来自 'chatmem' 服务器。
```
示例MCP客户端配置(`init`打印此配置,并附上实际二进制路径):
```json
{
"mcpServers": {
"chatmem": {
"command": "/opt/homebrew/bin/chatmem",
"args": ["mcp"]
}
}
}
```
## MCP工具参考
所有三个工具都由[`internal/mcp/server.go`](./internal/mcp/server.go)注册。每次写入都明确传达`model`/`provider`/`client_id` — 守护进程从不推断它们 — 因此多个LLM客户端写入同一个数据库时,可以清晰地归因。
### `record_message`
存储单个聊天消息。当`conversation_id`为空时,打开一个新的对话(然后需要`model`/`provider`/`client_id`)。
| 字段 | 类型 | 必需 | 备注 |
| --- | --- | --- | --- |
| `conversation_id` | UUID字符串 | 如果继续对话 | 留空以打开新对话 |
| `role` | `user` \| `assistant` \| `system` \| `tool` | 是 | |
| `content` | 字符串 | 是 | 消息文本 |
| `model` | 字符串 | 新对话时 | 例如 `claude-opus-4-7` |
| `provider` | 字符串 | 新对话时 | 例如 `anthropic`,`openai` |
| `client_id` | 字符串 | 新对话时 | 例如 `claude-code`,`cursor`,`aider` |
| `token_count` | int | 否 | 可选元数据 |
返回:
```json
{ "message_id": "<uuid>", "conversation_id": "<uuid>" }
```
### `search_history`
搜索存储的聊天历史记录。**MVP使用Postgres全文排名**(`to_tsvector` + `plainto_tsquery`);通过ONNX嵌入进行语义重新排序是下一个里程碑。返回每个对话的单个命中(MMR-lite),打包到`token_budget`。
| 字段 | 类型 | 必需 | 备注 |
| --- | --- | --- | --- |
| `query` | 字符串 | 是 | 自由文本查询 |
| `top_k` | int | 否 | 默认10,最大100 |
| `token_budget` | int | 否 | 总快照令牌(默认4000) |
| `model` | 字符串 | 否 | 按模型ID过滤 |
| `client_id` | 字符串 | 否 | 按客户端ID过滤 |
| `since` | RFC3339字符串 | 否 | `created_at`的下限 |
| `until` | RFC3339字符串 | 否 | `created_at`的上限 |
| `conversation_ids` | UUID数组 | 否 | 限制为这些对话 |
返回渲染的文本块(可见给任何MCP客户端)和用于编程使用的结构化有效载荷:
渲染文本(`Content`):
```
2个命中(hits) for "kafka retention"
── 命中 1 ──
role: user
conversation: 8a2f…
message: def6…
created: 2026-07-20T10:15:32Z
score: 0.2341
snippet:
kafka retention is set at 7 days for the ingest topic…
```
结构化(`StructuredContent`):
```json
{
"hits": [
{ "message_id": "<uuid>", "conversation_id": "<uuid>", "role": "user",
"snippet": "...", "score": 0.147, "created_at": "2026-07-20T10:15:32Z" }
]
}
```
(在v0.0.2之前,`Content`是一个单纯的命中计数 — Windsurf/Cascade和任何忽略`StructuredContent`的客户端将显示无快照文本。)
### `get_conversation`
获取对话及其消息,按`created_at`升序排列。通过`after`进行光标分页。
| 字段 | 类型 | 必需 | 备注 |
| --- | --- | --- | --- |
| `conversation_id` | UUID字符串 | 是 | |
| `limit` | int | 否 | 默认100,最大500 |
| `after` | RFC3339字符串 | 否 | 返回严格在此时间戳之后的消息 |
返回渲染的文本块和结构化有效载荷。
渲染文本(`Content`):
```
conversation 8a2f…
model: anthropic / claude-opus-4-7
client: claude-code
started: 2026-07-20T10:15:32Z
updated: 2026-07-20T10:20:15Z
messages: 3
── user @ 2026-07-20T10:15:32Z ──
hello from chatmem
── assistant @ 2026-07-20T10:15:35Z ──
hi back
```
结构化(`StructuredContent`):
```json
{
"conversation": {
"id": "<uuid>", "client_id": "...", "model": "...", "provider": "...",
"title": null, "started_at": "...", "updated_at": "..."
},
"messages": [
{ "id": "<uuid>", "role": "user", "content": "...", "token_count": 0, "created_at": "..." }
],
"next_after": null
}
```
## 命令
每个子命令都有 `--help`。运行不带参数的 `chatmem` 以查看顶级列表。
### `chatmem init`
配置持久数据目录,提取嵌入式Postgres,将pgvector安装到运行时,并应用模式。完成后打印带有实际二进制路径的MCP JSON片段。
可以安全地重新运行 — 所有配置步骤都是幂等的。
### `chatmem mcp [--port <n>]`
为单个客户端运行stdio MCP服务器。在进程生命周期内启动嵌入式Postgres,并在stdin关闭或SIGTERM时干净地停止。
在MVP中,多个MCP客户端不能共享一个嵌入式Postgres — 每个`chatmem mcp`进程都打开自己的PG在提供的端口上。有关守护进程+ shim架构,请参见[路线图](#路线图)。
### `chatmem daemon [--port <n>]`
运行长期运行的Postgres基础,以支持未来的守护进程+ shim架构。不适用于MVP使用。以SIGINT/SIGTERM干净地结束。
### `chatmem telemetry {enable|disable|status}`
管理匿名遥测设置。`status`打印有效状态、来源(`env` | `config` | `default`)和安装ID。
## 数据和配置路径
| 类型 | macOS | Linux | 环境变量覆盖 |
| --- | --- | --- | --- |
| 数据 | `~/.local/share/chatmem/` | `~/.local/share/chatmem/` | `CHATMEM_HOME` |
| 缓存 | `~/Library/Caches/chatmem/` | `~/.cache/chatmem/` | `CHATMEM_CACHE` |
| 安装ID | `<data>/install_id` | `<data>/install_id` | — |
| 遥测配置 | `<data>/telemetry.json` | `<data>/telemetry.json` | — |
| Postgres数据 | `<data>/pgdata/` | `<data>/pgdata/` | — |
| Postgres运行时 | `<cache>/pg-runtime/` | `<cache>/pg-runtime/` | — |
## 遥测
`chatmem`可以发送匿名使用情况数据以帮助跟踪采用情况。**消息内容、查询字符串和文件名永远不会被发送**。启用时,会发送以下内容:
- **安装UUID**(在首次运行时本地生成,位于`<data>/install_id`)
- `chatmem`版本
- **计数器**,用于刷新窗口(默认5分钟):捕获、搜索、获取、错误
- **模型+客户端分布** — 例如 `{"claude-opus-4-7": 12, "gpt-5": 4}`,`{"windsurf": 8, "cursor": 8}`
- **延迟百分位**,每个操作 — p50/p95/p99,单位毫秒
### 模式
客户端根据配置以三种模式运行:
| 模式 | 行为 |
| --- | --- |
| **禁用**(环境变量或配置) | 不累积。`Aggregator.Record*`仍然运行,但`Flush`是一个空操作。 |
| **启用,无收集URL** | 累积 + 定期刷新 → `slog.Info("telemetry flush (local-only, no ingest URL set)", ...)`。仅本地可观察性。 |
| **启用,收集URL设置** | 累积 + 刷新 → 以3次尝试的指数退火向`<URL>/v1/ping`发送POST。失败的发送持续到`<data>/pending/*.json`,并在下一次成功刷新时排空(24小时TTL)。发布二进制文件在此URL上**内置**(指向维护者的Worker);`CHATMEM_TELEMETRY_URL`覆盖它,`chatmem telemetry status`打印有效值。 |
### 优先级(最高优先)
1. `CHATMEM_TELEMETRY=0`(也支持`false`、`off`)— 硬关闭
2. `<data>/telemetry.json`(`{"enabled": true|false}`)— 持久选择
3. `chatmem telemetry {enable|disable}` — 写入上述文件
4. 默认:**启用**
`chatmem init`在首次运行时提示(仅交互式TTY),并写入配置。非TTY初始化打印通知并保留默认值;非交互式退出时,可以使用`chatmem telemetry disable`或环境变量进行选择。
### 命令
```bash
chatmem telemetry status # 当前状态 + 来源 + 收集URL
chatmem telemetry enable # 持久启用 = true
chatmem telemetry disable # 持久禁用 = false
chatmem telemetry dump # 列出 <data>/pending/*.json(未发送的ping)
```
### 建立自己的收集服务
客户端将数据发布到任何支持`POST /v1/ping`且具有以下有效载荷的端点。 一个可以直接部署的Cloudflare Worker + D1位于[`server/telemetry-worker/`](./server/telemetry-worker/) — 只需一次`wrangler deploy`,即可拥有一个端点。有关5个命令的设置,请参见[该README](./server/telemetry-worker/README.md)。
## 架构
```
LLM客户端(Claude Code、Cursor、aider、自定义)
│
▼ 通过stdio的MCP
chatmem mcp
│
▼
嵌入式Postgres 18 + pgvector 0.8.5
│
▼
块(带有向量(384)列,HNSW余弦索引)
消息(基于conv_id + created_at的B树)
对话(待未来同步的追加事件日志)
```
- **语言**:Go 1.26,单个静态二进制文件(关闭CGO)。
- **存储**:`fergusstrange/embedded-postgres` v1.34 驱动 Postgres 18.3 在每个用户的数据目录中。冷启动 ~600 毫秒(M 系列 ~7 秒,因为需要 `initdb`)。
- **向量列**:`vector(384)` 在 `chunks` 表上,带有 HNSW 余弦索引 (`m=16, ef_construction=64`),为语义搜索做好准备。值在 ONNX 嵌入程序就绪之前为零向量。
- **搜索(MVP)**:Postgres 全文 — `to_tsvector('english', content)` + `plainto_tsquery`,GIN 索引 (`chunks_tsv_idx`)。排名使用 `ts_rank_cd`。
- **MCP**:官方 [`modelcontextprotocol/go-sdk`](https://github.com/modelcontextprotocol/go-sdk) v1.6.1。stdio 传输。
- **CLI**:`spf13/cobra` v1.10。
pgvector `.dylib` 文件用于 `darwin_arm64`,已提交到 `internal/pg/assets/darwin_arm64/`,并通过 `//go:embed` 嵌入到 Go 二进制文件中。在第一次 `Start()` 调用时,`internal/pg` 会将 dylib 复制到 `<runtimeDir>/lib/postgresql/`,并将控制/SQL 文件复制到 `<runtimeDir>/share/postgresql/extension/` — 然后 `CREATE EXTENSION vector` 即可正常工作。
## 存储库布局
```
chatmem/
├── cmd/chatmem/ # cobra CLI 入口点 + 子命令
│ ├── main.go
│ ├── init.go # chatmem init
│ ├── daemon.go # chatmem daemon (+ dataHome / cacheHome 帮助函数)
│ ├── mcp.go # chatmem mcp (stdio MCP 服务器)
│ ├── telemetry.go # chatmem telemetry {enable,disable,status}
│ └── mcp_e2e_test.go # 启动构建的二进制文件,通过stdio MCP驱动为真正的客户端
├── internal/
│ ├── pg/ # 嵌入式Postgres包装器 + pgvector安装
│ │ ├── embedded.go
│ │ └── assets/
│ │ ├── darwin_arm64/vector.dylib + extension/{vector.control,vector--0.8.5.sql}
│ │ ├── linux_amd64/vector.so + extension/{vector.control,vector--0.8.3.sql}
│ │ └── linux_arm64/vector.so + extension/{vector.control,vector--0.8.3.sql}
│ ├── telemetry/
│ │ ├── telemetry.go # 状态/配置,安装ID,选择退出优先级
│ │ ├── aggregator.go # 线程安全的计数器 + 延迟水库 + 百分位数
│ │ └── client.go # 刷新循环,HTTP POST 重试,本地待处理目录
│ ├── store/ # 模式 + pgx 支持的数据访问
│ │ ├── schema.sql
│ │ ├── store.go # EnsureSchema, RecordMessage, SearchHistory, GetConversation
│ │ └── store_test.go
│ ├── mcp/ # MCP 工具注册
│ │ ├── server.go # NewServer, register{RecordMessage,SearchHistory,GetConversation}
│ │ └── server_test.go # 进程内MCP往返
│ └── telemetry/ # 安装ID + 选择退出门控
│ └── telemetry.go
├── server/telemetry-worker/ # Cloudflare Worker + D1,用于遥测数据收集
├── .goreleaser.yaml # 跨平台构建 + Homebrew tap + 通过nfpm的rpm/deb
├── .github/workflows/release.yml # tag push → goreleaser + gh-pages RPM仓库发布
├── scripts/build-rpm-repo.sh # 组装zypper/dnf仓库树(使用docker的createrepo_c)
├── README.md
├── CLAUDE.md # 仓库开发文档,由Claude Code自动加载
└── LICENSE # Apache-2.0
```
## 从源代码构建
需要 **Go 1.26+**,目前还需要Homebrew的pgvector 0.8.5(如果您想刷新供应商的dylib — 提交的副本已经足够构建)。
```bash
git clone https://github.com/sid077/chatmem
cd chatmem
go build ./...
```
刷新供应商的pgvector工件:
```bash
# darwin (来自Homebrew) — 刷新 internal/pg/assets/darwin_arm64/
brew install pgvector
cp /opt/homebrew/Cellar/pgvector/0.8.5/lib/postgresql@18/vector.dylib \
internal/pg/assets/darwin_arm64/vector.dylib
cp /opt/homebrew/Cellar/pgvector/0.8.5/share/postgresql@18/extension/{vector.control,vector--0.8.5.sql} \
internal/pg/assets/darwin_arm64/extension/
# linux amd64/arm64 (来自官方PostgreSQL apt, pgdg11+1 for glibc 2.31 基线)
for arch in amd64 arm64; do
curl -sSLo /tmp/pgv-$arch.deb \
"https://apt.postgresql.org/pub/repos/apt/pool/main/p/pgvector/postgresql-18-pgvector_0.8.3-1.pgdg11+1_${arch}.deb"
tmp=$(mktemp -d); cd "$tmp"; ar x /tmp/pgv-$arch.deb; tar -xf data.tar.xz
cp "$tmp/usr/lib/postgresql/18/lib/vector.so" internal/pg/assets/linux_${arch}/vector.so
cp "$tmp/usr/share/postgresql/18/extension/"{vector.control,vector--0.8.3.sql} \
internal/pg/assets/linux_${arch}/extension/
done
```
Linux `.so` 是针对 Debian 11 的 glibc 2.31 构建的,以确保最大程度的运行时兼容性 — 任何 glibc ≥ 2.31 的版本都可以使用(Debian 11+,Ubuntu 22.04+,RHEL 9+,带有 `libc6-compat` 的 Alpine 等)。
## 测试
每个涉及存储的测试都会启动一个真正的嵌入式Postgres — 预计在冷缓存上每个测试包大约需要 7-10 秒。
```bash
# 单元测试 + 集成测试
go test ./... -count=1 -timeout=240s
# 仅存储层往返
go test ./internal/store -count=1 -v
# 仅进程内MCP往返
go test ./internal/mcp -count=1 -v
```
# 端到端:启动构建的二进制文件作为子进程,驱动标准输入输出MCP
```bash
go test ./cmd/chatmem -run TestBinaryStdioMCP -count=1 -v
```
测试使用不同的固定端口(`54334`,`54335`,`54336`)——如果您有一个真正的chatmem守护进程运行在`54329`上,请一次运行一个测试包。
## 开发工作流
1. **编辑** — 代码位于`cmd/chatmem`和`internal/`下。
2. **测试** — 每次更改后运行`go test ./...`;为任何新的存储/MCP行为添加测试。
3. **更新文档**:
- 对于面向用户的更改(新工具,新命令,更改默认值),更新`README.md`。
- 对于面向开发者的更改(新包,新不变式,新陷阱),更新`CLAUDE.md`。
- 对于跨会话上下文(自动保持同步),更新`~/.claude/skills/chatmem/SKILL.md`。
4. **提交** — 每个提交都有一个专注的更改,命令式主题行。
5. **如果依赖项更改,则运行`go mod tidy`**。
## 故障排除
**在`brew install --cask chatmem`后,macOS上的二进制文件被`zsh: killed chatmem`终止** — Gatekeeper隔离了未签名的cask二进制文件。删除属性:
```bash
xattr -d com.apple.quarantine "$(brew --prefix)/bin/chatmem"
```
真正的解决方案是使用Apple Developer ID(计划在v0.0.2中)对darwin二进制文件进行签名和公证。
**`chatmem无法作为root用户运行`** — 在Linux上,Postgres拒绝以uid 0运行,chatmem现在也拒绝以root用户身份运行。使用非特权用户重新运行:`su - <username> -c 'chatmem init'`(或`sudo -u <username> chatmem init`)。
**`chatmem mcp`客户端看到"invalid character 'T' looking for beginning of value"** — MCP协议在标准输出上运行;某些内容正在写入非JSON数据。最可能是`embedded-postgres`配置为`logger: os.Stdout`而不是`os.Stderr`(此处默认为`os.Stderr`;请检查`internal/pg/embedded.go`如果您自定义了)。
**`没有<goos>/<goarch>的嵌入式pgvector资产`** — 您正在运行一个不受支持的平台。将匹配的预构建pgvector复制到`internal/pg/assets/<goos>_<goarch>/`(参见[从源代码构建](#building-from-source)以获取文件布局)并重新构建。
**第一次`chatmem init`需要~15–20秒** — 这是全新数据目录的`initdb`加上Postgres二进制文件提取。后续运行(热缓存)约为~1秒。
**端口`54329`已被占用** — 另一个`chatmem daemon`/`mcp`进程正在运行(杀死它)或某些其他进程占用了该端口。使用`--port`覆盖它。
**`CREATE EXTENSION vector`失败,提示`could not access file "$libdir/vector"`** — pgvector `.dylib`未复制到`<runtimeDir>/lib/postgresql/`。检查`internal/pg/embedded.go`的`installPgvector`输出;通常是在运行过程中清空了运行时目录。
## 卸载
```bash
brew uninstall chatmem # 或删除您构建的二进制文件
rm -rf ~/.local/share/chatmem # 数据(仅在确定时删除)
rm -rf ~/Library/Caches/chatmem # 缓存(macOS)- 随时安全删除
rm -rf ~/.cache/chatmem # 缓存(Linux)- 随时安全删除
rm -f ~/.claude/mcp.json # 或手动删除chatmem条目
```
## 路线图
**接下来(仍在MVP范围内):**
- ONNX MiniLM int8嵌入器→将`search_history`从关键词升级为语义。
- 剩余平台:`darwin/amd64`(Intel Mac)和`windows/amd64`。
- Cloudflare Worker摄入端点,用于实时遥测数据。
- `chatmem daemon` HTTP MCP + `chatmem mcp`标准输入输出到HTTP转换器,以便多个MCP客户端可以共享一个Postgres。
**发布后MVP(v1.0):**
- 可选的E2E加密同步(托管,开源)。
- macOS公证 + 签名`.pkg`。
- Windows服务,launchd/systemd自动启动。
- Python + TypeScript SDK包装器,围绕MCP工具。
- 分发到apt,dnf/COPR,zypper/OBS,AUR,winget,scoop。
- 文档站点。
## 发布版本
标签触发 - `release` GitHub Actions工作流执行所有操作。
```bash
git tag -a v0.0.1 -m "v0.0.1"
git push origin v0.0.1
```
在标签推送时,工作流:
1. 运行`goreleaser release --clean` — 跨编译darwin/arm64 + linux/amd64 + linux/arm64,包装`.tar.gz` + `.rpm` + `.deb`,将存档上传到GitHub Release,并将更新的Homebrew公式推送到`sid077/homebrew-chatmem`。
2. 在`.rpm`上运行`createrepo_c`以构建zypper/dnf兼容的repo树。
3. 将repo树推送到此仓库的`gh-pages`分支。
用户随后可以通过`zypper refresh` / `brew upgrade` / `dnf update`获取更新,无需您进一步操作。
在标记之前在本地进行干运行:
```bash
goreleaser release --snapshot --clean --skip=publish # 生成dist/*
scripts/build-rpm-repo.sh # 生成dist/rpm-repo/(需要Docker的createrepo_c)
```
使用openSUSE容器验证:
```bash
cd dist/rpm-repo && python3 -m http.server 8765 &
docker run --rm --platform linux/arm64 --add-host=host.docker.internal:host-gateway \
opensuse/leap:15.6 bash -c '
echo -e "[chatmem]\nbaseurl=http://host.docker.internal:8765/\$basearch/\nenabled=1\ngpgcheck=0" > /etc/zypp/repos.d/chatmem.repo
zypper --non-interactive refresh chatmem
zypper --non-interactive install chatmem
chatmem --version'
```
### GPG签名(推荐用于生产)
MVP发布时未签名(`.repo`文件中的`gpgcheck=0`)。要签名:
1. 生成GPG密钥:`gpg --gen-key`。
2. 导出公钥:`gpg --armor --export you@example.com > chatmem.gpg`。
3. 在`.goreleaser.yaml`中,为您的密钥ID添加`signs:`。
4. 将`chatmem.gpg`复制到`dist/rpm-repo/`旁边,并更改`gpgcheck=1` + `gpgkey=<URL>/chatmem.gpg`。
## 许可证
Apache-2.0。参见[LICENSE](./LICENSE)。
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器