适用于任何兼容MCP的AI的本地持久内存 这是一个轻量级的、零云服务、令牌高效的模型上下文协议(MCP)服务器,它为您的AI提供持久、可搜索且具有上下文感知的记忆——完全在您的控制之下。
使用TypeScript、SQLite + FTS5和最少的运行时依赖项(MCP SDK + better-sqlite3)构建,它在本地运行并将所有内容存储在一个便携的.db文件中。
与Claude Desktop、Cursor、Windsurf或任何MCP客户端兼容。
📦 现在可在npm上获取:通过npx @whenmoon-afk/memory-mcp安装
| 您控制 | 云服务 |
|---|---|
| 数据永远不会离开您的机器 | 发送到远程服务器 |
便携的.db文件 | 锁定在专有存储中 |
| 完整审计及备份 | 不透明的保留策略 |
| 零持续成本 | 需要订阅 |
| 功能 | 优点 |
|---|---|
| 双响应模式 | 返回所有匹配项(紧凑索引)+ 在令牌预算内的完整详情 |
| 令牌预算 | 自动尊重max_tokens(约30%索引,约70%详情) |
| 混合相关性评分 | 40%相关性,30%重要性,20%时效性,10%频率 |
| 自动总结 | 生成≤20字的自然语言摘要 |
| 实体提取 | 检测人物、工具、概念、偏好 |
| FTS5全文搜索 | 子10毫秒查询,Unicode,词干化——无需嵌入 |
| 来源追踪 | 完整审计跟踪:来源、时间戳、更新 |
| 软删除 | 保留记忆以供调试/回滚 |
| 单文件数据库 | memory.db ——自由复制、备份、移动 |
自动安装(为您配置Claude Desktop):
npx @whenmoon-afk/memory-mcp
这将自动:
安装后,请完全重启Claude Desktop(退出并重新打开)。
或者全局安装:
npm install -g @whenmoon-afk/memory-mcp
memory-mcp
用于开发或定制:
git clone https://github.com/WhenMoon-afk/claude-memory-mcp.git
cd claude-memory-mcp
npm install
npm run build
输出:
dist/index.js——您的内存服务器。
添加到您的客户端MCP配置文件中:
Claude Desktop:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json~/.config/Claude/claude_desktop_config.jsonCursor/Windsurf:检查您编辑器的MCP设置
💡 推荐:使用自动安装程序(
npx @whenmoon-afk/memory-mcp),它会自动处理平台差异。
{
"mcpServers": {
"memory": {
"command": "npx",
"args": ["-y", "@whenmoon-afk/memory-mcp"],
"env": {
"MEMORY_DB_PATH": "./memory.db"
}
}
}
}
Windows需要cmd /c包装器来正确执行npx:
{
"mcpServers": {
"memory": {
"command": "cmd",
"args": ["/c", "npx", "-y", "@whenmoon-afk/memory-mcp"],
"env": {
- "MEMORY_DB_PATH": "./memory.db"
}
}
}
}
{
"mcpServers": {
"memory": {
"command": "memory-mcp",
"env": {
"MEMORY_DB_PATH": "./memory.db"
}
}
}
}
{
"mcpServers": {
"memory": {
"command": "node",
"args": ["/绝对路径/to/claude-memory-mcp/dist/index.js"],
"env": {
"MEMORY_DB_PATH": "./memory.db"
}
}
}
}
重启或重新加载MCP服务器。
| 工具 | 输入 | 描述 |
|---|---|---|
memory_store | { content, type, importance?, entities?, ttl_days?, provenance? } | 存储或更新记忆,带有自动摘要 |
memory_recall | { query, type?, entities?, limit?, max_tokens? } | 搜索记忆,带有令牌感知加载 |
memory_forget | { id, reason? } | 软删除记忆(保留来源信息) |
{
"tool": "memory_store",
"input": {
"content": "用户在专注的90分钟工作块和15分钟休息时表现最佳。",
"type": "事实",
"importance": 8
}
}
→ 自动创建:
"用户遵循90/15专注工作周期。"专注工作,90分钟工作块{
"tool": "memory_recall",
"input": {
"query": "工作习惯",
"max_tokens": 1200
}
}
响应:
{
"index": [
{ "id": "mem_8b1", "summary": "用户遵循90/15专注工作周期。", "score": 96 },
{ "id": "mem_2c9", "summary": "用户避免上午10点前的会议。", "score": 88 }
],
"details": [
{
"id": "mem_8b1",
"content": "用户在专注的90分钟工作块和15分钟休息时表现最佳。",
"entities": ["专注工作", "90分钟工作块"],
"provenance": { "source": "chat_2025-11-03", "created_at": "2025-11-03T14:10Z" }
}
],
"meta": {
"tokens_used": 698,
"total_matches": 2,
"truncated": false
}
}
您的AI知道它所知道的——并且可以请求更多。
{
"tool": "memory_forget",
"input": {
"id": "mem_8b1",
"reason": "信息不再相关"
}
}
响应:
{
"success": true,
"memory_id": "mem_8b1",
"message": "记忆已成功软删除。原因:信息不再相关"
}
被软删除的记忆在数据库中保留完整的来源信息。它们不会出现在搜索结果中,但仍然可以恢复。
[index] → 所有匹配摘要(每个约20个令牌)
[details] → 最高记忆的完整内容(预算限制)
[meta] → 使用的令牌数,总匹配数,是否截断
ids: [...]扩展memory.db(SQLite)——路径通过MEMORY_DB_PATHmemory.db存储在VeraCrypt加密USB驱动器上(增加摩擦,但最大控制)。此项目使用最少的运行时依赖项以保持包的轻量级:
| 依赖项 | 版本 | 目的 |
|---|---|---|
@modelcontextprotocol/sdk | ^1.0.4 | 官方MCP协议实现 |
better-sqlite3 | ^11.0.0 | 快速的原生SQLite3绑定,支持FTS5 |
为什么这些依赖项?
所有其他依赖项仅用于开发(TypeScript、测试、代码检查)。
| 变量 | 默认值 | 描述 |
|---|---|---|
MEMORY_DB_PATH | ./memory.db | 数据库文件位置 |
DEFAULT_TTL_DAYS | 90 | 记忆默认生存期(天) |
这是一个仅限本地的MCP服务器。
数据存储在一个普通的SQLite文件(memory.db)中。
对于敏感数据,使用操作系统级别的加密(FileVault,BitLocker)。
max_tokens: 1000开始 — 根据模型和任务调整。type过滤以减少噪音并提高相关性。memory.db — 它只是一个文件!欢迎贡献!您可以:
MIT 许可证 - 详情见LICENSE文件。
版权所有 (c) 2025 WhenMoon-afk
为MCP社区打造 ❤️