mcpField
M
memalyze

memalyze

本地服务
github.com记忆与知识01 天前更新

关于 memalyze

memalyze 是面向 AI Agent 的可自托管记忆 MCP 服务,适用于需要离线运行和访问治理的部署。它会在存储前脱敏,并记录读取操作以供审计。

主要功能

  1. 01写入前脱敏并支持自定义规则
  2. 02记录记忆读取审计
  3. 03本地嵌入与离线运行
  4. 04向量和关键词检索
  5. 05提供四种 MCP 工具
  6. 06SQLite 存储与软删除

适用场景

  1. 01避免敏感值进入 Agent 记忆
  2. 02审查哪些主体读取过记忆
  3. 03在无云端访问时运行记忆服务

MCP 相关

通过 stdio 或 Streamable HTTP 向 MCP 客户端提供记忆添加、搜索、删除和连接检查工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
mcpbmemalyze-0.1.0-darwin-arm64.mcpb
mcpbmemalyze-0.1.0-darwin-amd64.mcpb
mcpbmemalyze-0.1.0-windows-amd64.mcpb
mcpbmemalyze-0.1.0-linux-amd64.mcpb

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

memalyze

原生支持 MCP、可自托管的 AI Agent 记忆方案——具备企业真正会要求的治理能力。

一个静态二进制文件。本地嵌入。无需云服务、图数据库或 Python 技术栈。 写入任何内容之前就会进行脱敏;每次读取都会记录审计日志。

./memalyze          # MCP over stdio, for Claude Code / Cline / any harness

v0.1.0 已发布 — 已提供 linux/darwin/windows 静态 二进制文件,并随附校验和。

memalyze 治理演示


问题

每个 Agent 框架都有自己的记忆:这里一个向量表,那里一个 JSON 文件,别处还有一个 “notes” 文件夹。由此带来三个问题,在生产环境中都很棘手:

  1. 无法审计。“上周二 Agent 读取了哪位客户的数据?”这个问题没有答案,安全审查因此会叫停项目。
  2. **无法离线部署。**大多数方案要么调用云 API,要么在运行时从 HuggingFace 下载模型权重——这两种方式在银行、医院或工厂的环境中都行不通。
  3. **无法保持精简。**23 个工具、一个图数据库,再加上一套 Python 依赖树之后,“记忆功能”就成了需要单独运维的第二个产品。

memalyze 是解决这三个问题的中间件,仅此而已。

有何不同

云端记忆 API框架内置功能个人笔记应用memalyze
数据存放位置供应商云端框架内部本地 Markdown你的服务 / 你的笔记本电脑
连接方式专有 API绑定单一框架MCPMCP,支持任意宿主、stdio 或 HTTP
写入前脱敏❌❌❌✅ 8 类规则,可配置,默认不可逆
读取审计部分支持❌❌✅ 仅追加*,按操作者记录,可导出
离线使用❌部分支持⚠️ 需要下载模型✅ 本地嵌入,无需联网
部署方式SaaS随框架提供173 个 Python 包✅ 一个静态二进制文件 / 一个 compose 文件
工具数量——23 个工具4 个工具

* 数据库触发器会拒绝对 audit_log 执行 UPDATE;不会阻止 DELETE,因此任何拥有数据库文件的人都可以删除记录。它在 SQL 层面是仅追加的,并非 WORM——如果删除操作也属于你的威胁模型,请导出到启用了对象锁定的存储或 syslog 存储 (SECURITY.md)。

这既不是另一个 mem0,也不是 Basic Memory:它们擅长记忆。memalyze 假设记忆正逐渐成为一项普遍能力,并以治理、离线运行和刻意精简的功能表面作为竞争优势。

30 秒演示

无需 Ollama、无需联网、无需 MCP 客户端:

./examples/demo/demo.sh
# or: go run ./cmd/memalyze demo

它会写入一条包含电话号码、电子邮件和居民证件号码的记忆,然后展示:

  • 实际存储的内容([REDACTED:phone],而非 13800138000);
  • 搜索原始号码会返回 0 条结果;
  • 按业务词语搜索仍能命中,并返回脱敏后的文本;
  • 两次写入和两次读取对应的审计记录。

详情和演示记录:docs/s15-redaction-audit.md。

快速开始

1. 二进制文件 + 本地嵌入模型

预构建且已验证校验和(Linux/macOS;Windows 用户请从发布页面下载 .exe):

curl -fsSL https://raw.githubusercontent.com/mahaoboy/memalyze/main/scripts/install.sh | sh
ollama pull qwen3-embedding:0.6b      # ~640 MB, 1024-dim, strong on Chinese
memalyze --version

从源代码构建(Go 1.27+):运行 make build,然后执行 ./memalyze --version。

2. 将其接入宿主

Claude Code(项目级配置):

claude mcp add --scope project memalyze -- "$(pwd)/memalyze"
cp examples/claude-code/CLAUDE.md ./CLAUDE.md   # makes Claude search before answering

Cline:复制 examples/cline/cline_mcp_settings.json 和 .clinerules。 通用宿主:examples/custom-harness/ — 包含一份提示词约定 和伪代码。所有选项见:examples/README.md。

3. 或在 Claude Desktop 中一键安装(MCPB)

从 v0.1.0 发布页下载适用于你平台的安装包并打开。 Claude Desktop 会显示安装界面,并询问将 memalyze.db 保存在哪里。

平台文件
macOS Apple Siliconmemalyze-0.1.0-darwin-arm64.mcpb
macOS Intelmemalyze-0.1.0-darwin-amd64.mcpb
Windows x64memalyze-0.1.0-windows-amd64.mcpb
Linux x64memalyze-0.1.0-linux-amd64.mcpb

其中的二进制文件与上文的 v0.1.0 版本相同。这些安装包是新推出的,尚未在真实的 macOS/Windows 桌面上打开过——如果没有出现安装界面,请使用普通二进制文件。该服务也已列入 MCP Registry。

4. 或在 Docker 中运行(memalyze + Ollama + 模型拉取)
printf 'MEMALYZE_HTTP_TOKEN=%s\n' "$(openssl rand -hex 24)" > .env
docker compose up -d --build
curl -s http://127.0.0.1:8080/healthz     # {"status":"ok","version":"dev"}

将支持 Streamable-HTTP 的 MCP 客户端指向 http://127.0.0.1:8080/mcp,并设置 Authorization: Bearer $MEMALYZE_HTTP_TOKEN。参见 docs/s16-docker.md。

工具

有意只提供四个。每增加一个工具,都意味着模型必须多做一个选择。

工具功能值得注意的语义
memory_add存储记忆重复内容会返回已有 ID;嵌入失败时仍会保留记忆(embedding_failed=true);返回 redacted 和规则名称
memory_search检索优先使用向量,再用关键词补充;向量路径不可用时返回 degraded 和 degrade_reason;查询为空时列出最近的记忆
memory_delete软删除对已删除的 ID 幂等;未知 ID 会返回工具错误
echo检查连接验证 MCP 链接是否正常;不包含业务逻辑

没有 memory_context 工具:memory_search 已会返回可粘贴到提示词中的文本,而两个功能重叠的工具会让模型更难选择(D-017)。

治理

脱敏(写入路径)。 规则会在 memory.Service.Add 中运行,早于去重、FTS 和嵌入处理——因此明文不会进入主表、全文索引或向量。

规则输入示例存储为
private_key_block-----BEGIN RSA PRIVATE KEY-----…[REDACTED:private_key]
id_card_cn110101199003071234[REDACTED:id_card]
bank_card6222021234567890123[REDACTED:bank_card]
jwteyJhbGciOi…[REDACTED:jwt]
api_key_known_prefixsk-…、ghp_…、AKIA…[REDACTED:api_key]
credential_assignmentapi_key=abcdef123456api_key=[REDACTED:credential]
email[email protected][REDACTED:email]
phone_cn+86 13800138000[REDACTED:phone]

模式:enforce(默认)、dry-run(仅计数,用于调整)、off(调试)。 自定义规则包为 JSON 格式:examples/redaction-rules.json。

审计(读取路径)。 只追加的 audit_log(数据库触发器会拒绝 UPDATE):记录操作者、租户、范围、操作、记忆 ID、时间戳、结果数、degraded 和脱敏次数。除非显式设置 MEMALYZE_AUDIT_QUERY_PLAIN=1,否则搜索文本只会以 SHA-256 + 长度 的形式存储。

memalyze audit export --from 2026-10-01 --to 2026-10-31 --format csv --out audit.csv
memalyze audit export --tenant acme --format json

目前尚未实现: 按用户进行身份验证(每个进程一个令牌,actor 来自环境变量)、审计保留/清除、可逆脱敏、审计界面。

检索表现,实测数据

S8 在包含 60 条记忆的中文语料库上,对 16 个查询进行的实测数据,而非推测 (docs/s8-retrieval-report.md):

方法recall@3MRR
qwen3-embedding:0.6b(默认)0.940.92
CJK 二元组 FTS5(关键词回填)0.88—
nomic-embed-text0.47—

两个有悖直觉的发现影响了设计:SQLite FTS5 的默认分词器完全无法检索中文(存储二元组文本前,召回率仅为 0.19);RRF 融合的得分反而低于仅用向量,因此 v0.1 不进行融合。详见 D-012。

延迟(S14,固定冷启动):后台预热耗时 37.8 秒,随后搜索耗时 1.14 秒,且 degraded=false;空闲五分钟后,新进程可在 1.52 秒内响应。如果向量路径不可用,搜索会在 ≤3 秒内降级为关键词检索,而不是卡住(D-015/D-018)。

工作原理

harness (Claude Code / Cline / your agent)
   │  MCP: stdio or Streamable HTTP
   ▼
internal/mcp     4 tools, argument conversion only
   ▼
internal/memory  redact → dedup → store → embed; search: vector → keyword → degraded
   ├── internal/govern     rule engine (8 families, JSON configurable)
   ├── internal/store      interface; sqlite impl (memories, embeddings, audit_log)
   ├── internal/embed      float32 BLOB codec, cosine; Ollama client
   └── internal/search     CJK bigram tokenizer + FTS5 MATCH builder
  • 使用 SQLite(WAL),采用 ULID ID、用于去重的部分唯一索引、软删除和 TTL。
  • 向量是 float32 小端序 BLOB;搜索采用暴力余弦计算(在约 10k 条记忆以内表现良好,也是单二进制文件设计的实际限制)。
  • 架构迁移通过 PRAGMA user_version 进行版本管理(v1 → v2 会添加审计表)。

运维

memalyze audit export --from 2026-10-01 --format csv --out audit.csv   # who read what
memalyze backup --out /var/backups/memalyze-$(date +%F).db             # consistent snapshot
memalyze health --url http://127.0.0.1:8080/healthz                    # probe

配置

所有配置均通过环境变量完成;默认值开箱即用。

变量默认值含义
MEMALYZE_DB./memalyze.dbSQLite 路径
MEMALYZE_TENANTdefault工具调用的默认租户
MEMALYZE_OLLAMA_URLhttp://127.0.0.1:11434本地嵌入端点
MEMALYZE_EMBED_MODELqwen3-embedding:0.6b嵌入模型
MEMALYZE_QUERY_TIMEOUT3s降级前的向量路径时间预算
MEMALYZE_KEEP_ALIVE30mOllama 模型驻留时间
MEMALYZE_REDACT_MODEenforceenforce / dry-run / off
MEMALYZE_REDACT_RULES(内置)JSON 规则包的路径
MEMALYZE_AUDITon追加审计记录
MEMALYZE_ACTORlocal审计中记录的操作者
MEMALYZE_AUDIT_QUERY_PLAINoff存储查询文本(默认仅存哈希)
MEMALYZE_HTTP_ADDR(空 = stdio)例如,:8080 用于 Streamable HTTP
MEMALYZE_HTTP_TOKEN(空)Bearer 令牌;绑定到 loopback 地址以外时必须设置

状态

如实记录当前进展——这是一个早期阶段的项目,并非 1.0。

里程碑状态
M0 立项与定位 (S1–S4)✅
M1 备料与技术验证 (S5–S8)✅
M2 核心链路 (S9–S14)✅
M3 打磨与文档 (S15–S19)✅ S15 治理,S16 Docker,S17 文档,S18 测试+CI,S19 示例
M4 发布 (S20–S23)🟡 S20 ✅,S21 ✅(v0.1.0 已公开发布),S22 GitHub ✅ / HN·Reddit·V2EX 待完成,S23 ⬜
M5 复盘 (S24)⬜ 需要真实用户
M5 复盘 (S24)⬜

已知不足:没有按用户进行身份验证,没有审计数据保留机制,Docker 镜像尚未在 CI 中构建(开发环境没有守护进程),向量检索采用暴力扫描,默认配置以中文为先(英文可用,但分词器针对 CJK 调优)。

文档

文档内容
docs/s15-redaction-audit.md规则、模式、审计架构、演示记录
docs/s16-docker.mdcompose 堆栈、令牌策略、验证状态
docs/s16-systemd.md加固的 systemd 单元、环境文件、备份与恢复
docs/s8-retrieval-report.md11 种检索方法,以及为何选择了这一种
docs/s13-context-injection.md促使模型进行搜索的提示词约定
docs/s14-end-to-end.md真实测试框架、两个会话、冷启动数据
docs/s21-distribution.md发布工件、渠道、发布后检查清单
docs/s21-submissions.md面向 MCP 目录和 ClawHub 的可复制粘贴条目
docs/s23-feedback-log.md实时反馈日志(目前确实为空)
docs/s24-review.md里程碑评审模板(尚未填写)
SECURITY.md威胁模型:防护范围与范围之外的内容

非目标

  • 不是 SaaS:由你自行托管,我们不会持有你的数据。
  • 不是 Agent 框架:它绝不会接管测试框架。
  • 不是知识图谱:没有实体提取流程,也没有图数据库。
  • 不追求功能至上:只有四个工具、一个二进制文件,并且坚决拒绝任何需要操作人员介入的功能。

许可证

AGPL-3.0-or-later(LICENSE)。如需将其嵌入闭源产品并获取商业许可: 请提交标题为 commercial license 的 issue。

贡献方式:参见 CONTRIBUTING.md。安全问题报告:参见 SECURITY.md。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。