butler-memory-mcp

August 17, 2026 · View on GitHub

License Python MCP

给你的 AI agent 一份真正属于你的长期记忆。 一个 MCP 服务器,把你明确要求 记住的事实、偏好和项目上下文写入你自己的 PostgreSQL——每次写入带修订历史 与审计证据,检索自动按敏感度过滤。模型不能静默写入;推断出的东西只会变成 等你决定的候选。接任何 MCP 客户端即用。

仓库简介

Layered long-term memory for AI agents as an MCP server — PostgreSQL-backed, versioned, audited. Agents remember only what you explicitly asked.

Butler 分层记忆的 MCP 桥:把 ai-butler-framework 的 MemoryService / LayeredMemoryService 以标准 MCP 工具暴露给任何 MCP 客户端 (DSH、Claude Code、Codex 等),同时提供一个仅限 loopback 的 HTTP API 供 DSH Web 面板(dsh-butler-memory)读取。

DSH agent ──(MCP stdio)──► ai-butler-memory-mcp ──► MemoryService ──► PostgreSQL
DSH web 面板 ──(插件托管 stdio)──► 同一进程、同一 principal

自包含分发(vendored)

本包运行时零依赖 ai-butler-framework:所需的记忆领域代码 (MemoryService/LayeredMemoryService/ORM 模型/数据库与配置辅助)以 vendoring 方式内置于 ai_butler_memory_mcp/vendored/,归属校验、敏感度上限、 revision 乐观锁、审计与证据同事务等语义与上游逐字一致。上游文件清单、 行号区间与漂移检查见 VENDORED.mdscripts/check-vendored.py)。

Schema 迁移仍由 ai-butler-framework 的部署负责(ai-butler-db upgrade); 本包只连接已有数据库,不创建、不修改 schema。

安装

从 PyPI(发布后推荐)

pip install butler-memory-mcp

本地开发(源码 checkout)

cd butler-memory-mcp && python3 -m venv .venv
.venv/bin/pip install -e '.[dev]'

首次初始化(自举,无需 ai-butler-framework)

方式一:一键起库(推荐,Docker 用户)

前提:已安装并启动 Docker(Windows/macOS 为 Docker Desktop)。

ai-butler-memory-mcp setup-docker

这一条命令完成全部部署:创建/复用 PostgreSQL 容器 → 等待就绪 → 写入 ~/.config/butler-memory-mcp/.env(自动生成密码,权限 600)→ 建 schema → 创建属主用户与桥设备并打印一次性 token。可重复执行(幂等:容器已运行则 复用,身份已配置则跳过)。

常用参数:--container-name(默认 ai-butler-pg)、--port(默认 5432)、 --password(新容器密码,缺省自动生成)、--user-name/--device-name/ --scope

方式二:已有 PostgreSQL(三步手动)

# 1. 建表(对已迁移的库是安全 no-op,只建缺失表)
ai-butler-memory-mcp initdb

# 2. 创建属主用户与桥设备(token 只显示一次)
ai-butler-memory-mcp admin bootstrap \
  --user-name 博士 --device-name dsh-agent --device-kind agent \
  --scope memory:read --scope memory:write
# 输出 user_id / device_id / device_token

# 3. 把 user_id / device_id 填进配置

配置

把环境配置放进 ~/.config/butler-memory-mcp/.env(DSH 的 stdio 桥会清洗 疑似凭据的环境变量,env 文件是可靠通道;setup-docker 会自动生成它):

AI_BUTLER_DATABASE_URL=postgresql+asyncpg://ai_butler:密码@127.0.0.1:5432/ai_butler
AI_BUTLER_MCP_USER_ID=<bootstrap 输出的 user_id>
AI_BUTLER_MCP_DEVICE_ID=<bootstrap 输出的 device_id>

与 ai-butler-framework 共用同一数据库的部署无需 initdb/bootstrap: 沿用框架的 ai-butler-db upgrade 迁移和 ai-butler-admin add-device 注册, 把打印的 user_id/device_id 填进上面两个变量即可。

写操作只有在这台设备真实属于该用户时才会被接受——身份与审计不因 MCP 而放松。

运行

ai-butler-memory-mcp                       # stdio MCP(给 agent 用,DSH 会自动 spawn)
ai-butler-memory-mcp --transport http --port 8771   # 面板 API(0.1.2+ 的 DSH 插件已不需要)

暴露的工具(DSH 中为 mcp__butler__memory_*)

工具语义敏感度
memory_list / memory_search列出/检索记忆(search 自动排除 private/secret)internal 封顶
memory_revisions不可变修订历史
memory_create / memory_revise / memory_archive显式写入,revision 绑定public/internal 封顶
memory_candidates / memory_candidate_accept / memory_candidate_reject推断候选,绝不静默入库

当前边界(v0.2 刻意取舍)

  • 无浏览器式强确认:MCP 写入依赖工具描述约束("仅当用户明确要求")+ 敏感度 封顶,不等于框架 Web 端的 L2 确认卡片。后续可接 DSH ask-user
  • 仅 loopback:HTTP 面板 API 拒绝非 loopback 绑定;stdio 模式不监听端口。
  • 单用户单设备 principal:多用户映射属后续设计(见 PLAN.md)。
  • 数据 durable 但备份/恢复尚未实现(框架 P9 未完成),发布说明中需如实标注。

测试

.venv/bin/pytest     # 离线协议测试;vendored 领域代码与上游逐字一致
.venv/bin/python scripts/check-vendored.py --upstream ../ai-butler-framework   # 漂移检查

License

Apache License 2.0,与上游 ai-butler-framework 一致。本项目不包含 任何专有模型或素材;发布衍生作品时请保留许可与署名要求。

相关项目

  • ai-butler-framework — 记忆领域服务的上游实现方(owner/revision/audit 语义的权威来源;本包 vendoring 其记忆领域代码并做漂移检查);
  • dsh-butler-memory — DeepSeek Harness 接入组合包:agent 工具 + Web 记忆面板。