Skip to main content
Glama

cf-agent-memory

Personal agent memory that lives on Cloudflare's free tier. 一个跑在 Cloudflare 免费额度上的个人 Agent 长期记忆服务:MCP 协议接入,语义 + 关键词混合召回,零服务器、零数据库运维。

Deploy to Cloudflare

Claude Code / Cursor / CodeBuddy / 任何 MCP 客户端
                 │  MCP over HTTP
                 ▼
        ┌────────────────────┐
        │  Worker (Hono)     │  鉴权 · 限流 · 路由
        └───┬────────┬───────┘
            │        │
     ┌──────▼──┐  ┌──▼─────────┐
     │   D1    │  │ Vectorize  │   ← 原文 / 全文索引 / 语义索引
     │  SQLite │  │  1024 维    │
     └────┬────┘  └──┬─────────┘
          └────┬─────┘
               ▼
        RRF 融合 + 时间加权  →  top-k 记忆

为什么做这个

市面上的 Agent 记忆方案大多要求你跑一个 Python 服务、维护一个向量库,或者接受 SaaS 的数据托管。个人用其实只需要三件事:

  1. 记住值得长期保留的事实、偏好、决策;

  2. 召回时不靠模型自觉,而是给一个稳定的检索接口;

  3. 不花钱、不运维。

这个项目把这三件事压进一个 Worker:D1 存原文与全文索引,Vectorize 存语义向量,Workers AI 提供 embedding,全部在 Cloudflare 免费额度内。

Related MCP server: MCP Memory

特性

  • MCP 原生:12 个工具(记忆 6 + 技能 6),Claude Code、Cursor、CodeBuddy 等直接接入

  • 代理注入:把 ANTHROPIC_BASE_URL 指向本服务,自动把召回的记忆与技能列表插进当前轮次,不依赖模型自觉

  • 混合召回:语义(Vectorize)+ 关键词(FTS5 + 中文 bigram)+ RRF 融合 + 时间加权,任一路失败自动降级

  • 同键覆盖:key='project.database' 写入新值自动 supersede 旧值,不会积累互相矛盾的记忆

  • 技能库:SKILL.md 托管 + 版本快照 + R2 资源文件 + 按 agent 分配,同名再导入自动升版本

  • 分层字段:l0/l1/l2/l3 + fact/event/instruction/task,为后续的自动提炼留好结构

  • REST API:与 MCP 工具一一对应,方便脚本、Web UI、自定义客户端

  • 自带面板:单页 Web UI,记忆与技能两个标签页

  • 限流:每个用户一个 Durable Object 做固定窗口限流,跨边缘强一致

  • 一键部署:npm run setup && npm run deploy,自动创建 D1 / Vectorize / R2 / secret

快速开始

方式一:一键部署(推荐)

点击顶部 Deploy to Cloudflare 按钮。Cloudflare 会克隆仓库到你自己的账号,自动创建 D1、Vectorize 索引和 Durable Object,回填 database_id,并在部署时执行 schema.sql 建表。唯一需要你填的是 ADMIN_TOKEN:

openssl rand -hex 32     # 生成一个,粘到部署页面

也可以在本地部署:

git clone https://github.com/xxynly/cf-agent-memory.git
cd cf-agent-memory
npm install
npx wrangler login     # 只需一次
npm run setup          # 创建 D1 + Vectorize + 表结构 + ADMIN_TOKEN
npm run deploy         # 建表(幂等)后发布 Worker

npm run setup 会打印 ADMIN_TOKEN,并写入 .dev.vars(已 gitignore);它也可重复执行,已存在的资源会跳过。

方式二:本地调试

npm run setup
npm run dev     # http://localhost:8787

本地调试同样需要远程 D1/Vectorize(--experimental-vectorize-bind-to-prod 已在 dev 脚本外说明,见 docs/deploy.md)。

接入 MCP 客户端

把 <WORKER_URL> 和 <TOKEN> 换成部署输出与 npm run setup 打印的值。

Claude Code(~/.claude.json 或项目 .mcp.json):

{
  "mcpServers": {
    "memory": {
      "type": "http",
      "url": "https://<WORKER_URL>/mcp",
      "headers": {
        "Authorization": "Bearer <TOKEN>",
        "X-User-Id": "personal"
      }
    }
  }
}

Cursor / CodeBuddy / 其他 MCP 客户端:同样填 HTTP 类型的 URL 与两个 header。

接好之后,让 Agent「记住这个」,它会调用 memory_remember;下次新会话问「我们之前定的数据库是什么」,会走 memory_recall。

代理注入(自动记忆,不依赖模型自觉)

如果你不想依赖模型主动调工具,把客户端指到本服务即可。请求经过时,Worker 会拿最后一条用户消息当 query 召回记忆、列出可用技能,插到那一轮之前,再转发给上游。

# Claude Code
export ANTHROPIC_BASE_URL="https://<WORKER_URL>"
export ANTHROPIC_AUTH_TOKEN="<PROXY_TOKEN>"

# 上游 API key 二选一:
#   1. 存进 Worker:npx wrangler secret put ANTHROPIC_API_KEY
#   2. 或客户端自己带 x-api-key(用谁的就扣谁的额度)

三个可观测响应头,调试时很好用:

头

值

x-cfam-injected

1 本轮注入了,0 没有

x-cfam-reason

injected / no_content / body_too_large / not_injectable / injection_failed

x-cfam-upstream-ms

上游耗时

body_too_large 是有意的保护:免费层每请求只有 10ms CPU,一个带完整历史的 Claude Code 请求体解析+重新序列化就可能超预算。超过 MAX_PROXY_BODY_BYTES(默认 512KB)就原样转发,最坏情况就是这轮没有记忆——绝不会因为注入把请求搞失败。

代理路由用独立的 PROXY_TOKEN,与 ADMIN_TOKEN 分开:它花的是真实 LLM 额度。没配 PROXY_TOKEN 时该路由返回 503,其他接口不受影响。

详细设计与代价分析见 docs/proxy-injection.md。

工具一览

记忆

工具

作用

关键参数

memory_remember

写入一条记忆

content、key?、kind?、layer?、tags?、importance?

memory_recall

混合召回

query、limit?

memory_list

按时间倒序列出

limit?、offset?、layer?、kind?、tag?

memory_update

原地修正

id、content?、tags?、importance?

memory_forget

删除

id

memory_stats

按层/类型统计

—

技能

工具

作用

关键参数

skill_import

导入/更新 SKILL.md(同名升版本)

name、content、description?、tags?

skill_list

列出技能库

limit?、offset?、tag?、agent_id?

skill_get

取全文,可钉住版本

name、version?

skill_search

关键词检索技能

query、limit?

skill_allocate

分配给某个 agent

name、agent_id

skill_delete

删除技能及其文件

name

REST 接口与之一一对应,见 docs/api.md。

召回是怎么工作的

query ──┬─► Workers AI embedding ──► Vectorize top-20 ─┐
        │                                              ├─► RRF(k=60) ─► 时间加权 ─► top-k
        └─► 分词(latin 词 + 中文 bigram)──► FTS5 top-20 ┘
  • 写入和查询用同一个分词函数,避免两边 token 不一致导致召回静默失效

  • RRF 不需要两路分数可比,天然适合语义 + 关键词融合

  • 时间加权只在相关度接近时起作用(半衰期 30 天,权重 0.15)

  • Vectorize 或 embedding 挂掉时自动降级为纯关键词,接口不报错

免费额度够用吗

资源

免费额度

个人用量

结论

Workers

10 万请求/天

每天几百次

富余

D1

5GB / 10 万行写/天

每年几万条记忆

富余

Vectorize

500 万存储维度 ≈ 4900 条(1024 维)

个人 1~3 年

够用,超了见下

Workers AI

1 万 Neurons/天

embedding 消耗很低

富余

R2

10GB / A 类 100 万次写/月

技能资源文件

富余

Durable Objects

10 万请求/天

只做限流

富余

Vectorize 装不下之后(约 4900 条):把 embedding 换成 384 维模型(免费额度约 1.3 万条),或只对 l2/l3 建向量、l1 只走关键词。取舍见 docs/architecture.md。

已知限制

  • Vectorize 写入有最终一致性:新记忆通常几秒到 1 分钟内可被语义召回命中,关键词召回立即可用

  • MCP 是无状态的:每次请求独立,不维护会话;记忆状态都在 D1 里

  • 单用户模型:用 X-User-Id 区分,但没有多租户 ACL。多人共用请自行加一层网关

  • 中文分词用 bigram:对短句足够,长文档的召回质量不如专业分词器

  • 代理只支持 Anthropic 兼容协议:Claude Code / CodeBuddy / WorkBuddy 可直接用;Codex、Cursor 等 OpenAI 协议客户端需要后续适配

  • 代理不做响应侧提取:对话不会自动写回记忆,仍需模型调 memory_remember 或调 /v1/ingest

  • 代理能看到 LLM Key:客户端自带 x-api-key 时会经过 Worker;介意的话用 Worker 上存的 ANTHROPIC_API_KEY

开发

npm run typecheck
npm test
npm run dev
npm run tail      # 线上日志

目录结构:

src/
├── index.ts          # Hono 路由 + MCP 挂载
├── mcp.ts            # 6 个 MCP 工具
├── auth.ts           # Bearer 鉴权 + DO 限流
├── memory/
│   ├── store.ts      # D1 读写 + FTS5
│   ├── vector.ts     # Workers AI embedding + Vectorize
│   ├── recall.ts     # 混合召回
│   └── ingest.ts     # 批量写入
├── do/user-memory.ts # 每用户限流
└── lib/              # 分词 / RRF / id

路线图

  • 对话批量摄入 + 可选 LLM 提炼(L0 → L1)

  • 自动去重与冲突检测(除了 key 覆盖之外的语义重复)

  • 记忆导出 / 导入(JSON)

  • 定时归档:冷数据转 R2,只保留摘要向量

  • 多用户 ACL 与共享空间

与同类项目的区别

本项目

mcp-memory

TencentDB Agent Memory

部署

一键,CF 免费层

一键,CF 免费层

Docker 三件套

记忆结构

分层字段 + 同键覆盖

平铺文本

L0–L3 完整提炼

召回

语义 + 关键词 + RRF

纯语义

BM25 + 向量 + RRF

Skill / Wiki / CodeGraph

无

无

有

面板

简单列表页

简单列表页

完整 Hub

本项目的定位是「个人用、够用、可维护」:不做团队资产化,但把记忆的写入、覆盖、召回做扎实。

License

MIT

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      Not graded
      maintenance
      Enables MCP clients to remember user information, preferences, and behaviors across conversations using vector search technology. Built on Cloudflare infrastructure with AI-powered semantic search to find relevant memories based on meaning rather than keywords.
      11 npm
      MIT
    • A
      license
      Not graded
      quality
      Not graded
      maintenance
      Enables MCP clients to remember user information, preferences, and behaviors across conversations using vector search technology. Built on Cloudflare infrastructure with persistent storage and semantic similarity matching.
      11 npm
      MIT
    • F
      license
      Not graded
      quality
      D
      maintenance
      Provides cross-device access to a persistent knowledge graph via Cloudflare Workers, enabling memory storage and retrieval through both MCP protocol and REST API with full-text search capabilities.
      -
    • A
      license
      Not graded
      quality
      Not graded
      maintenance
      Provides persistent memory for MCP clients, enabling them to remember user preferences and behaviors across conversations using vector search and Cloudflare's infrastructure.
      11 npm
      MIT