记忆搜索服务器

amem是一个本地MCP服务器,为Claude Code的内存系统添加BM25搜索、内存间链接和丰富元数据功能,无需嵌入、API密钥或重型依赖。

  • by alejandroSuch
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 alejandroSuch/amem

使用说明

amem——代理内存MCP服务器

本地MCP服务器,将BM25搜索、内存间链接和丰富的元数据添加到Claude Code的内存系统中。没有嵌入,没有API键,没有严重的依赖关系。

灵感来自 A-mem纸.

安装

git clone https://github.com/alejandroSuch/amem.git
cd amem
bun install
bun run build

这将在以下位置生成一个独立的二进制文件 dist/amem --不需要运行时依赖关系。

配置

克劳德代码

添加 ~/.claude/settings.json 供全球使用:

{
  "mcpServers": {
    "amem": {
      "command": "/absolute/path/to/amem/dist/amem"
    }
  }
}

或者添加一个 .mcp.json 在项目根目录中为每个项目使用:

{
  "mcpServers": {
    "amem": {
      "command": "/absolute/path/to/amem/dist/amem"
    }
  }
}

其他MCP主机(Cursor、Windsurf等)

amem是stdio上的标准MCP服务器。使用主机所需的任何配置,指向编译的二进制文件:

{
  "command": "/absolute/path/to/amem/dist/amem",
  "transport": "stdio"
}

环境变量

变量 默认值 描述
AMEM_BASE_DIR ~/.claude 所有内存存储的基本目录
AMEM_VERBOSE (未设置) 设置为 1 将所有工具调用记录到 $AMEM_BASE_DIR/amem.log

全球记忆去 $AMEM_BASE_DIR/memory/,将记忆投射到 $AMEM_BASE_DIR/projects/<id>/memory/。不需要环境变量——默认值符合Claude Code的约定。

内存格式

---
name: "memory name"
description: "short description"
type: user|feedback|project|reference
keywords: [term1, term2]
tags: [tag1, tag2]
context: "one-line summary"
links: [other-memory-id]
created: 2026-03-16
updated: 2026-03-16
---
Markdown content...

与Claude Code的内置内存向后兼容——扩展字段是可选的。

工具

记忆搜索

BM25对记忆搜索进行了排名。

参数 类型 必填 描述
query string yes 搜索查询
scope "global" "project" 无
type "user" "feedback" "project"
tags string[] no 按标签筛选(或匹配)
limit number no 最大结果数(默认值:10)

memory_add

创造新的记忆。

参数 类型 必填 描述
content string yes 内存内容(标记)
name string yes 内存名称
description string yes 搜索相关性的简短描述
type "user" "feedback" "project"
scope "global" "project" 是
keywords string[] 否 搜索关键字
tags string[] no 分类标签
context string no 单行上下文摘要
links string[] no 相关内存的ID

内存更新

更新现有内存的元数据或内容。

参数 类型 必填 描述
id string yes 内存ID
scope "global" "project" yes
name string no 新名称
description string 否 新描述
type "user" "feedback" "project"
keywords string[] 否 新关键字
tags string[] no 新标签
context string no 新上下文
links string[] 否 新链接
content string 否 新内容

记住_删除

按ID删除内存。

参数 类型 必填 描述
id string yes 内存ID
scope "global" "project" yes

memory_links

获取一个内存及其关联的邻居。

参数 类型 必填 描述
id string yes 内存ID
scope "global" "project" yes

memory_list

列出所有内存(仅元数据,无内容)。

参数 类型 必填 描述
scope "global" "project" 无
type "user" "feedback" "project"

作用域解析

Zero config--项目ID是自动导出的:

  1. 尝试 git rev-parse --show-toplevel 获取repo根目录(解析工作树)
  2. 如果不是git repo,则返回cwd
  3. 将路径转换为slug: /Users/me/projects/foo → -Users-me-projects-foo

存储路径:

  • 全球: ~/.claude/memory/
  • 项目: ~/.claude/projects/<project-id>/memory/

搜索详细信息

  • 发动机:wink-bm25-text-search
  • 索引字段 具有权重:名称(3)、描述(2)、关键字(2),标签(1)、上下文(1),内容(1)
  • 分词:wink nlp-utils(标记化+词干+停用词删除)
  • 突变的全索引重建——小于1000个记忆在10ms内
  • BM25排名后按范围、类型、标签进行帖子过滤

脚本

bun run dev        # Run directly (Bun handles TypeScript natively)
bun run build      # Compile standalone binary → dist/amem

需求