使用说明
通用存储器mcp
用于单代理和多代理LLM系统的持久内存MCP服务器。通过混合关键字+语义搜索,为AI代理提供SQLite支持的长期内存。
特征
- 内存类型:偶发性(事件/日志)、语义性(事实/知识)、程序性(操作方法/工作流程)
- 混合搜索:FTS5关键字搜索+嵌入上的余弦相似性,具有可配置的权重
- 知识图谱:内存之间的有向链接(caused_by、related_to、conflict、supports、follows)与BFS遍历
- 会话检查点:跨对话保存/还原代理状态
- 多代理支持:按agent_id、session_id或全局共享范围内存
- 乐观锁定:具有版本冲突检测的安全并发更新
- 可插拔嵌入件:HuggingFace变压器(进程内)或llama服务器(外部HTTP)
安装
uv sync
用法
作为MCP服务器运行(stdio传输):
uv run python server.py
或者通过包装器脚本:
./run.sh
命令行界面
此软件包还安装了 memory CLI:
uv run memory doctor
摄入克劳德/Codex原木
日志摄取器读取本地Claude/Codex JSONL/文本日志,编辑常见日志 秘密,提取持久记忆,并仅存储提取的记忆 带有日志来源元数据。未存储原始日志。
先进行试运行:
uv run memory ingest-logs codex --dry-run --root ~/.codex/sessions --extractor heuristic
uv run memory ingest-logs claude --dry-run --root ~/.claude/projects --extractor heuristic
使用本地 llama-server 用于提取的OpenAI兼容聊天端点:
llama-server --model /path/to/chat-model.gguf --port 8080
uv run memory ingest-logs all --llm-url http://localhost:8080 --llm-model local
默认情况下,CLI不发送 max_tokens 到聊天端点,这避免了
截断思维模型的提取反应。仅设置明确的上限
当你需要一个:
uv run memory ingest-logs codex --llm-max-tokens 4096
还要通过本地嵌入服务器计算嵌入:
llama-server --model embeddinggemma-300m-Q4_0.gguf --port 8787 --embedding --ctx-size 512
MEMORY_ENABLE_EMBEDDINGS=true \
MEMORY_EMBEDDING_BACKEND=llama-server \
MEMORY_EMBEDDING_DIMENSION=768 \
MEMORY_LLAMA_SERVER_URL=http://localhost:8787 \
uv run memory ingest-logs codex --llm-url http://localhost:8080
增量检查点存储在SQLite中,因此以后的运行只消耗新的 事件。投票:
uv run memory watch-logs all --interval 30 --llm-url http://localhost:8080
Claude代码配置
添加到MCP设置(~/.claude/settings.json 或项目 .mcp.json):
{
"mcpServers": {
"memory": {
"command": "uv",
"args": ["run", "--directory", "/path/to/universal-memory-mcp", "python", "server.py"]
}
}
}
配置
通过环境变量(前缀)进行所有设置 MEMORY_):
| 变量 | 默认值 | 描述 |
|---|---|---|
MEMORY_DATABASE_PATH |
./memory.db |
SQLite数据库路径 |
MEMORY_EMBEDDING_BACKEND |
transformers |
transformers 或 llama-server |
MEMORY_EMBEDDING_MODEL |
sentence-transformers/all-MiniLM-L6-v2 |
拥抱脸部模型名称 |
MEMORY_EMBEDDING_DIMENSION |
384 |
嵌入向量大小 |
MEMORY_LLAMA_SERVER_URL |
http://localhost:8787 |
llama服务器端点 |
MEMORY_ENABLE_EMBEDDINGS |
true |
设置 false 仅用于关键字搜索 |
MEMORY_KEYWORD_WEIGHT |
0.4 |
混合搜索关键字权重 |
MEMORY_SEMANTIC_WEIGHT |
0.6 |
混合搜索语义权重 |
MEMORY_RECALL_MIN_RELEVANCE |
0.25 |
语义通道召回结果的最小余弦相似度(0=禁用)。关键字匹配始终有效。 |
MEMORY_RECALL_SNIPPET_CHARS |
600 |
将召回的内容截断为这么多字符(0=禁用)。全文通过精确提取或 full_content=true. |
使用llama服务器后端
对于GGUF型号的较低内存使用率:
llama-server --model embeddinggemma-300m-Q4_0.gguf --port 8787 --embedding --ctx-size 512
MEMORY_EMBEDDING_BACKEND=llama-server MEMORY_EMBEDDING_DIMENSION=768 uv run python server.py
MCP工具
表面故意很小——五个工具,按调用频率分层:
| 工具 | 说明 |
|---|---|
recall_memories |
一个检索工具,三个选择器: query (混合/关键字/语义搜索), memory_id (精确获取,完整内容),或 entity (回忆提到 src/foo.py、标识符等)。 expand_links=N 为每个结果附加图邻居。除非满足以下条件,否则长内容将作为片段返回 full_content=true. |
store_memory |
存储具有类型、代理/会话范围、重要性的内存;optional links 在同一调用中为现有内存创建图形边 |
update_memory |
使用乐观锁定进行更新(expected_version) |
manage_session |
action: create | checkpoint | restore --跨对话保存/恢复代理状态 |
memory_admin |
action: stats | dream_status | run_dream_jobs | extract_entities | check_contradictions | link | delete --统计、后台作业维护、手动图形链接和删除(在一个工具后面进行破坏性操作,用于每个工具的权限分配) |
错误被引发为MCP工具错误(isError: true),从未作为数据返回。
0.2.0中的突破性变化
get_memory, delete_memory, link_memories, get_linked_memories, create_session, checkpoint_session, restore_session, get_stats, extract_entities, get_entity_neighbors, check_contradictions, dream_status,以及 run_dream_jobs 被折叠成上面的五个工具。 recall_memories 现在回来了 {mode, count, memories} 默认情况下,截断长内容,并应用语义相关性截断,而不是直接列表(MEMORY_RECALL_MIN_RELEVANCE).
测试
uv run pytest