Memory Defrost — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Memory Defrost (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
一个通用的 MCP (Model Context Protocol) 记忆服务,为任何支持 MCP 协议的 AI 客户端提供长期记忆能力。支持语义搜索、记忆分类和优先级管理。
| 工具 | 说明 | 触发场景 |
|---|---|---|
save_memory | 保存重要的用户信息 | 用户提到重要个人信息、偏好、习惯 |
recall_memory | 按关键词/语义检索相关记忆 | 用户问「之前聊过什么」「你还记得吗」 |
update_memory | 更新已保存的记忆 | 需要修改之前保存的信息 |
list_all_memories | 查看所有已保存的记忆 | 用户要求列出所有记忆 |
delete_memory | 删除指定记忆 | 用户要求忘记某些信息 |
memory_stats | 显示记忆统计信息 | 查看记忆概览和分布 |
regenerate_embeddings | 重新生成所有记忆的 embedding | 切换 embedding 模型后使用 |
每条记忆可以设置优先级(1-5),搜索时高优先级记忆会获得加成:
| 级别 | 说明 | 显示 |
|---|---|---|
| 1 | 最高 - 核心个人信息 | ★★★ |
| 2 | 高 - 重要偏好或习惯 | ★★☆ |
| 3 | 中 - 一般信息(默认) | ★☆☆ |
| 4 | 低 - 临时或次要信息 | ☆☆☆ |
| 5 | 最低 - 可能过时的信息 | · |
每条记忆可以归类到以下分类:
general - 通用(默认)preference - 偏好设置work - 工作相关personal - 个人信息habit - 习惯skill - 技能goal - 目标recall_memory 会根据会话中的调用次数,智能调整返回的记忆数量和类型:
| 调用次数 | 返回内容 | 目的 |
|---|---|---|
| 第 1 次 | 最多 3 条核心记忆(优先级 1-2 或 personal 分类) | 身份确认、关系确认、语言风格 |
| 第 2 次 | 1 条最相关记忆 + 提示剩余数量 | 聚焦当前话题,提示可查看更多 |
| 第 3+ 次 | MAX_RESULTS 条(默认 3) | 正常搜索,完整返回 |
会话重置:超过 5 分钟未调用 recall_memory,计数器自动归零这个设计确保:
适合本地运行的 MCP 客户端,使用 stdio 传输协议。
memories.json 文件运行方式:
python memory_server.pyMCP 客户端配置示例:
{
"mcpServers": {
"memory": {
"command": "python",
"args": ["/path/to/memory_server.py"]
}
}
}适合远程访问的 MCP 客户端,使用 HTTP/SSE 传输协议。
什么时候需要云端版本? - 使用 Claude.ai 网页版 连接 MCP 服务时(需要公网可访问的 URL) - 需要从多台设备访问同一份记忆时 - 本地版本使用 stdio 协议,仅支持 Claude Desktop 等本地客户端
运行方式:
# 设置环境变量
export DATABASE_URL="postgresql://user:pass@host:5432/dbname"
export GEMINI_API_KEY="your-gemini-api-key" # 可选,用于语义搜索
export PORT=8000
# 可选:设置工具前缀(用于运行多个实例时避免工具名冲突)
export TOOL_PREFIX="work_" # 工具名将变为 work_save_memory, work_recall_memory 等
export SERVER_NAME="work-memory" # 服务器名称
python memory_server_http.py如果需要同时运行多个 Memory MCP 实例(例如工作记忆和个人记忆分开存储),需要设置不同的 TOOL_PREFIX 避免工具名冲突:
实例 1 - 工作记忆:
export TOOL_PREFIX="work_"
export SERVER_NAME="work-memory"
export DATABASE_URL="postgresql://..." # 工作数据库实例 2 - 个人记忆:
export TOOL_PREFIX="personal_"
export SERVER_NAME="personal-memory"
export DATABASE_URL="postgresql://..." # 个人数据库这样工具名会变成:
work_save_memory, work_recall_memory, ...personal_save_memory, personal_recall_memory, ...MCP 客户端连接:
http://your-server:8000/ssehttp://your-server:8000/healthpip install -r requirements.txt依赖说明:
mcp - MCP 协议库starlette, uvicorn - HTTP 服务器(云端版本)psycopg2-binary - PostgreSQL 驱动(云端版本)numpy - 向量计算requests - HTTP 客户端DATABASE_URL - 自动由 Railway 设置GEMINI_API_KEY - 你的 Gemini API 密钥(可选)项目包含 Procfile,兼容 Heroku、Render 等平台:
web: python memory_server_http.py"记住我喜欢用 TypeScript 写代码"
"我的项目用的是 React + Vite,这是工作相关的"
"记住我不喜欢在代码里加太多注释,优先级设为高""我之前告诉过你什么编程偏好?"
"你还记得我的项目用什么技术栈吗?"
"只在工作分类里找一下相关记忆""把记忆 3 的优先级改成最高"
"更新记忆 5,把分类改成 work""显示记忆统计"
"列出所有 work 分类的记忆"[
{
"id": 1,
"content": "用户喜欢喝咖啡",
"tags": ["偏好", "饮食"],
"priority": 2,
"category": "preference",
"created_at": "2024-01-01T12:00:00",
"updated_at": "2024-01-01T12:00:00"
}
]CREATE TABLE memories (
id SERIAL PRIMARY KEY,
content TEXT NOT NULL,
tags TEXT[] DEFAULT '{}',
embedding FLOAT8[],
priority INTEGER DEFAULT 3,
category VARCHAR(50) DEFAULT 'general',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)| 端点 | 方法 | 说明 |
|---|---|---|
/sse | GET | MCP SSE 连接端点 |
/messages/ | POST | MCP 消息处理 |
/health | GET | 健康检查 |
健康检查响应示例:
{
"status": "ok",
"service": "memory-mcp",
"storage": "postgresql",
"semantic_search": "enabled"
}┌──────────────────────────────────────────────────────────┐
│ MCP Client (任意) │
│ (Claude Desktop, API Client, Custom App) │
└─────────────────────────┬────────────────────────────────┘
│ MCP Protocol
┌───────────────┴───────────────┐
▼ ▼
┌─────────────────────┐ ┌─────────────────────────────┐
│ 本地版本 (stdio) │ │ 云端版本 (HTTP/SSE) │
│ memory_server.py │ │ memory_server_http.py │
├─────────────────────┤ ├─────────────────────────────┤
│ - JSON 文件存储 │ │ - PostgreSQL 数据库 │
│ - 关键词搜索 │ │ - Gemini Embedding 语义搜索 │
│ - 优先级/分类管理 │ │ - 优先级/分类管理 │
└─────────────────────┘ └─────────────────────────────┘本服务兼容任何支持 MCP 协议的客户端,包括但不限于:
关于客户端内置记忆功能
>
部分 MCP 客户端(如 Claude Desktop)自带记忆功能,其内置记忆的权重通常比外部 MCP 服务更高。
>
- 建议:根据自身需求决定是否关闭客户端的内置记忆功能 - 注意:如果关闭客户端内置记忆,所有记忆检索都会走本服务的 recall_memory,响应时间可能会稍长(需要进行语义搜索和数据库查询)>
请根据实际使用场景自行权衡。
GEMINI_API_KEY 环境变量是否设置[EMBEDDING] 相关信息DATABASE_URL 格式是否正确本项目默认使用 Google Gemini Embedding API(免费),但你可以替换为其他 embedding 服务。
gemini-embedding-001 模型进行语义搜索如果你想使用 OpenAI、Cohere、本地模型等其他 embedding 服务,需要修改 memory_server_http.py 中的 get_embedding() 函数:
def get_embedding(text: str) -> list[float] | None:
"""获取文本的 embedding 向量"""
# 替换为你的 embedding API 调用
# 返回值应为 float 列表,如 [0.1, 0.2, ...]
# 返回 None 表示失败,会降级为关键词搜索
pass常见替代方案:
text-embedding-3-smallembed-multilingual-v3.0MIT
<p align="center"> <a href="https://buymeacoffee.com/neige_neige"> <img src="https://img.shields.io/badge/Buy%20Me%20A%20Coffee-yellow?style=flat-square&logo=buy-me-a-coffee"> </a> </p>
<p align="center"> <sub>Built with 🌀 <a href="https://github.com/anthropics/claude-code">Claude Code</a></sub> </p>
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.