内存MCP
日语专用的永久记忆MCP服务器—SQLite+Qdrant+Ebbinghaus遗忘曲线
  
特徴
- 混合搜索 -Semantic/Keyword/Hybrid(RRF集成)/Sart 4种模式
- Ebbinghaus忘却曲线 —
R(t) = e^(-t/S)基于自动重要性衰减和召回增强 - 核心内存块 —始终
get_context()将条目添加到文档注册表 - 实体图表 —通过知识图表管理人物、场所、概念的关系
- Bi-temporal 状態管理 —完整保留用户信息更改历史记录
- 矛盾検出 -基于向量相似度自动检测与现有存储的冲突
- Persona分离 —支持多租户。每个人员的独立数据库向量集合
- 网页仪表板 —
http://localhost:26262在浏览器中查看存储图表统计信息 - 🔮 反射:LLM驱动的来自最近记忆的高级见解(生成代理风格)。由重要性累积自动触发。可配置的阈值和间隔。
- 🧠 心理模型:从累积的类型标记存储器中提取模式。检测重复模式(例如“用户每天早上喝咖啡”)并创建抽象模型。由每种类型的内存计数自动触发。
- ⚡ 沙盒代码执行:在隔离的Docker容器中执行Python/Bash代码(兄弟容器模式)。支持文件操作、软件包安装。需要Docker套接字挂载。
- 🔍 记忆丰富:创建记忆时,通过LLM自动评估重要性得分并提取实体关系。可配置的提供者/模型。
- 🧩 备忘录:内存上下文快照+线索生成,用于增强检索(从全局上下文扩展查询)。
快速启动
Docker(推奨)
docker-compose up -ddocker-compose.yml 中描述的场景,使用下列步骤创建明细表,以便在概念设计中分析体量的周长。数据是 ./data 中描述的相应参数的值。
本地开发
# Qdrant 起動
docker run -d -p 6333:6333 -v "$(pwd)/data/qdrant:/qdrant/storage" qdrant/qdrant
# 依存関係(CPU 版 torch)
pip install torch --index-url https://download.pytorch.org/whl/cpu
pip install -r requirements.txt
# サーバー起動
python -m memory_mcp.main服务器是 http://localhost:26262 中所述修改相应参数的值。
沙盒文件持久化
在Docker中以兄弟容器沙盒模式运行时,在沙盒内创建的文件 在 /sandbox 需要一个主机端路径才能持久。如果文件在主机上不可见:
- 集
MEMORY_MCP_SANDBOX__HOST_DATA_ROOT到主机侧数据路径:
# docker-compose.yml
environment:
MEMORY_MCP_SANDBOX__HOST_DATA_ROOT: /volume1/docker/MemoryMCP/data- 确保
docker开发包 已安装(pip install docker>=7.0.0)
- 验证Docker套接字 已安装:
/var/run/docker.sock:/var/run/docker.sock
自动检测主机路径在标准Docker设置中有效,但可能会失败 定制部署(Synology、Podman等)。
MCP工具(6个)
MCP服务器(/mcp 端点)露出LLM的工具组。
get_context()
将当前的佩尔索纳状态、记忆摘要、装备、感情、Block、约定、目标一并返还。会话开始时首先呼叫。
result = get_context()
# → persona, emotion, physical_state, equipment, blocks, recent_memories, promises, goals, stats ...memory(operation, ...)
存储冲突检测备用核心内存块实体图形操作。
| operation | 说明 |
|---|---|
create |创建记忆(带感情、重要度、标记)| | |
read |获取指定key的存储| | |
update 更新现有存储(有版本历史记录) | |
delete 删除记忆 | |
check_contradictions |发现与现有存储的矛盾| | |
history 获取存储编辑历史记录 | |
stats 获取内存统计信息 | |
block_write 写入核心内存块 | |
block_read 读取Block | |
block_list 获取Block一览表 | |
block_delete 删除Block | |
entity_search |查找实体(人物、位置、概念)| | |
entity_graph 获取实体相关性图表 | |
entity_add_relation |添加实体之间的关系| | |
enrich 重新执行现有存储的LLM补全(重要性重估+实体关系提取) | |
run_mental_model 手动触发心理模型抽象化 | |
refresh_context_snapshot |重建全局上下文快照| |
# 記憶を作成
memory(operation="create", content="ユーザーは苺が好き", importance=0.8, emotion_type="joy")
# Block に書き込み
memory(operation="block_write", block_name="user_model", content="Pythonエンジニア、簡潔な説明を好む")
# エンティティグラフ
memory(operation="entity_graph", entity_id="user_tanaka", depth=2)search_memory(query, top_k=5, ...)
混合搜索引擎(总是keyword+semantic的RRF集成)。
# ハイブリッド検索(デフォルト)
search_memory(query="最近の出来事", top_k=10)
# 日付フィルタ付き(自然言語)
search_memory(query="成果", date_range="先週")
# 重要度ブースト
search_memory(query="ユーザー情報", importance_weight=0.3, min_importance=0.6)date_range 表现例: 今日 昨日 先週 先月 3日前 7d 2025-01-01~2025-06-01
update_context(...)
实时更新感情、状态、用户信息。user_info 的变更在Bi-temporal中保持历史记录。
update_context(emotion="joy", emotion_intensity=0.8)
update_context(physical_state="tired", mental_state="focused", environment="home office")
update_context(user_info={"name": "太郎", "preferred_address": "太郎さん"})参数|说明| |---|---| | emotion / emotion_intensity 感情类型和强度(0.0-1.0) | physical_state / mental_state | 身体的・精神的状態 | | environment 当前环境(例如: "home office") | | user_info | name / nickname / preferred_address 的词典 | persona_info |佩尔索纳自己的信息(nickname, active_promises 等) | | fatigue / warmth / arousal | 身体感覚(0.0–1.0)| | speech_style |说话风格(例如: "甘えた口調") |
item(operation, ...)
物品装备的管理。仅物理项目対象。
| operation | 说明 |
|---|---|
add 添加项目 | |
remove 删除项目 | |
equip 设置装备插槽(top/bottom/shoes/outer/accessories/head) | |
unequip |解除指定插槽| | |
update 更新项目信息(wet/dirty等) | |
search 查找项目(query 或 category) | |
history 取得装备变更履历 |
item(operation="equip", equipment={"top": "白いドレス", "accessories": "花の髪飾り"})
item(operation="search", category="clothing")sandbox(code, language="python")
在隔离的Docker沙箱中执行代码(兄弟容器模式)。需要Docker套接字挂载。
参数|说明| |---|---| | code 执行的代码字符串(Python/Bash) | language |言语: "python"(默认)或 "bash" |
# Python コード実行
sandbox("import pandas as pd; print(pd.DataFrame({'a': [1,2,3]}))")
# Bash コマンド実行
sandbox("ls -la /sandbox/", language="bash")
# パッケージインストール
sandbox("import subprocess; subprocess.run(['pip', 'install', 'requests'], capture_output=True)")
# ファイル作成(/sandbox 以下は永続化可能)
sandbox("open('/sandbox/output/result.txt', 'w').write('hello')")嵌入WebUI聊天工具(15个)
WebUI聊天(/chat/{persona})将条目添加到文档注册表。由MCP工具的简易包装+砂箱专用工具构成。
内存操作(12条)
|工具名称|说明|对应MCP| |---|---|---| | memory_create |记忆を作成(content,importance,tags,emotion_type)| memory(operation="create") | | memory_search 搜索存储(query,top_k=1-200) search_memory() | | memory_update |既存记忆を更新(query→検索→上书き)| memory(operation="update") | | context_update | 感情・状態を更新(emotion, mental_state) | update_context() | | context_recall 通过标记指定获取存储(tags,top_k) search_memory(tags=...) | | goal_create |目标を作成(content,importance=0.75)| memory(tags=["goal","active"]) | | goal_achieve |目标を达成(content部分一致)| memory(operation="update", tags=["goal","achieved"]) | | goal_cancel 取消目标 memory(operation="update", tags=["goal","cancelled"]) | | promise_create |约束を记録(content,importance=0.8)| memory(tags=["promise","active"]) | | promise_fulfill 履行约定 memory(operation="update", tags=["promise","fulfilled"]) | | promise_cancel 取消约会 memory(operation="update", tags=["promise","cancelled"]) | | invoke_skill 在独立上下文中运行技能(仅用于构建)
砂箱操作(2个)
|工具名称|说明|对应MCP| |---|---|---| | execute_code 代码执行(Python/Bash、matplotlib图像自动显示) sandbox() | | sandbox_files 文件操作(list/read/write/delete,图像为自动base64)
MCP ↔ Builtin 対応表
功能|MCP工具|构建工具|备注| |---|---|---|---| |记忆CRUD | memory(operation=...) | memory_create/update Builtin是简易包装 | 検索 | search_memory() | memory_search/context_recall 建设者上限为200件 | 状態更新 | update_context() | context_update Builtin仅限感情、状态 | Goal 管理 | memory(tags=["goal"]) | goal_create/achieve/cancel |自动标记Builtin| | Promise 管理 | memory(tags=["promise"]) | promise_create/fulfill/cancel |自动标记Builtin| 执行代码 sandbox() | execute_code/sandbox_files |sandbox_files还集成了图像读取| 实体图表 memory(entity_*) | — | MCP 専用 | | 矛盾検出 | memory(check_contradictions) | — | MCP 専用 | 精神模型 memory(run_mental_model) | — | MCP 専用 | 会话导入 memory(import_conversation) | — | MCP 専用 | 项目管理 item() | — | MCP 専用 | 技能执行 invoke_skill | Builtin 専用 |
设定
所有设置均为环境变量(MEMORY_MCP_ 前缀)控制。嵌套设置 __ 用分隔符指定。
|环境变量|默认|说明| |---|---|---| | MEMORY_MCP_DATA_ROOT | ./data |数据保存位置(自动导出所有子路径)| | MEMORY_MCP_SERVER__PORT | 26262 |HTTP端口| | MEMORY_MCP_SERVER__HOST | 0.0.0.0 绑定地址 | MEMORY_MCP_QDRANT__URL | http://localhost:6333 | Qdrant 接続先 | | MEMORY_MCP_EMBEDDING__MODEL | cl-nagoya/ruri-v3-30m |嵌入模型| | MEMORY_MCP_RERANKER__MODEL | hotchpotch/japanese-reranker-xsmall-v2 Reranker模型 | MEMORY_MCP_TIMEZONE | Asia/Tokyo |时区| | MEMORY_MCP_LOG_LEVEL | INFO 日志级别 | MEMORY_MCP_DEFAULT_PERSONA | default 默认人员名称 | PERSONA | *(无)* 默认人员名称(MEMORY_MCP_DEFAULT_PERSONA 优先)| | MEMORY_MCP_SANDBOX__ENABLED | true 启用Sandbox代码执行 | MEMORY_MCP_SANDBOX__PROVIDER | llm_sandbox Sandbox供应商 | MEMORY_MCP_SANDBOX__DOCKER_HOST | *(自动)* Docker主机URL(空=自动检测套接字) | MEMORY_MCP_SANDBOX__HOST_DATA_ROOT | *(自动)* 主机端数据目录绝对路径(用于sibling-container持久化) | MEMORY_MCP_SANDBOX__TIMEOUT | 30 |代码执行超时(秒)| | MEMORY_MCP_MEMORY_ENRICHMENT__ENABLED | true |记忆作成时のLLM补完(重要度・关系抽出)を有效化| | MEMORY_MCP_MEMORY_ENRICHMENT__PROVIDER | openrouter LLM供应商 | MEMORY_MCP_MEMORY_ENRICHMENT__API_KEY | *(无)* LLM API密钥 | MEMORY_MCP_MEMORY_ENRICHMENT__MODEL | openai/gpt-4o-mini LLM模型 | MEMORY_MCP_MEMORY_ENRICHMENT__BASE_URL | https://openrouter.ai/api/v1 基于LLM API的URL | MEMORY_MCP_MEMORY_ENRICHMENT__MIN_CHARS | 10 |跳过完成的最小字符数| | MEMORY_MCP_MEMORAG__ENABLED | true 启用MemoRAG上下文快照 | MEMORY_MCP_MEMORAG__CLUE_GENERATION_ENABLED | false 启用基于LLM的查询线索生成 | MEMORY_MCP_FORGETTING__ENABLED | true | Ebbinghaus忘却曲线を有效化| | MEMORY_MCP_FORGETTING__DECAY_INTERVAL_SECONDS | 3600 |衰减工作人员执行间隔(秒)| | MEMORY_MCP_FORGETTING__MIN_STRENGTH | 0.01 |最小记忆强度|
人员标识优先级
| 优先顺位 | 方法 | 例 |
|---|---|---|
1|Bearer令牌| Authorization: Bearer herta | ||
|2|X-Persona页眉| X-Persona: herta | ||
| 3 | 环境变数 | PERSONA=herta / MEMORY_MCP_DEFAULT_PERSONA=herta |
|4|默认| "default" |
Claude Desktop设定
{
"mcpServers": {
"memory": {
"url": "http://localhost:26262/mcp",
"headers": {
"X-Persona": "your_name"
}
}
}
}体系结构
基于Clean Architecture+DDD的图层配置:
┌───────────────────────────────────────────────────────────┐
│ API Layer │
│ api/mcp/ ── 6 つの MCP ツール │
│ api/http/ ── Web ダッシュボード + REST API + 15 ビルトインツール │
├───────────────────────────────────────────────────────────┤
│ Application Layer │
│ application/ ── UseCases(ビジネスフロー制御) │
├───────────────────────────────────────────────────────────┤
│ Domain Layer │
│ domain/memory/ ── Memory, MemoryStrength, Search │
│ domain/persona/ ── PersonaState 管理 │
│ domain/equipment/ ── アイテム・装備 │
│ domain/search/ ── SearchEngine, Ranker, Strategies │
├───────────────────────────────────────────────────────────┤
│ Infrastructure Layer │
│ infrastructure/sqlite/ ── SQLite Repository 実装 │
│ infrastructure/qdrant/ ── ベクトルストア │
│ infrastructure/embedding/ ── 埋め込みモデル │
└───────────────────────────────────────────────────────────┘目录配置
memory_mcp/
├── main.py # エントリポイント(FastMCP + HTTP)
├── config/settings.py # Pydantic BaseSettings
├── domain/ # ビジネスロジック
│ ├── skill.py # Skills system
│ └── shared/
│ └── time_utils.py # 日付範囲パース、時刻ユーティリティ
├── infrastructure/ # SQLite / Qdrant / Embedding
├── application/ # UseCases
│ ├── chat/ # チャットサブパッケージ
│ │ ├── service.py # ChatService(SSEストリーミング)
│ │ ├── session_store.py # セッション管理(SQLite永続化)
│ │ ├── memory_llm.py # MemoryLLM(自動記憶抽出)
│ │ ├── pattern_detector.py # メンタルモデル抽象化
│ │ ├── summarizer.py # セッション要約(LLM)
│ │ └── tools/ # 組み込みツール定義・実行
│ │ ├── definitions.py # 15 ツールのスキーマ定義
│ │ └── builtin.py # ツール実装
│ ├── sandbox/ # Sandbox コード実行(Docker sibling-container)
│ └── chat_service.py # 後方互換 re-export
├── api/mcp/ # MCP ツール 6 本
├── api/http/ # Web ダッシュボード + REST API
└── migration/ # スキーママイグレーション数据目录
$MEMORY_MCP_DATA_ROOT/ # デフォルト: ./data(Docker: /data)
├── memory/{persona}/ # Persona 別 DB(memory.sqlite 等)
├── import/ # Auto-import 用 ZIP 配置ディレクトリ
│ └── done/ # 処理済み ZIP 移動先
├── cache/ # モデルキャッシュ(HF_HOME 等を自動設定)
└── config/ # 設定ファイル聊天功能
WebUI(http://localhost:26262/chat/{persona})或REST API,可与佩尔索纳实时聊天。
上交所API
POST /api/chat/{persona}
Content-Type: application/json
{"message": "こんにちは", "session_id": "my-session"}响应是SSE流。以下事件将继续:
|事件|说明| |---|---| | text_delta 递增LLM文本 | tool_call 工具调用 | tool_result 工具执行结果 | debug_info 会话、存储、内存结果等调试信息 | done | 完了 |
聊天设置
GET/POST /api/chat/{persona}/config 中找到最佳实践。
|字段|默认|说明| |---|---|---| | provider | anthropic LLM供应商(anthropic / openai / gemini) | | model | claude-opus-4-5 使用模型 | api_key | *(无)* API密钥(保存后显示掩码) | system_prompt | *(无)* |佩尔索纳系统提示| | auto_extract | true 通过MemoryLLM自动存储提取 | extract_model | *(与model相同)* |MemoryLLM专用模型| | extract_max_tokens | 512 最大MemoryLLM令牌数 | max_window_turns | 3 会话窗口的转数 | max_tool_calls | 5 1回合的最大工具调用数 | enable_memory_tools | true 是否注入内置memory工具 | mcp_servers | [] |追加MCP服务器的设置列表| | enabled_skills | [] |要启用的技能名称列表| | reflection_enabled | true | Reflection(高次洞察)を有効化 | | reflection_threshold | 1.0 反射触发重要度累积阈值 | reflection_min_interval_hours | 1.0 | Reflection最小実行间隔(时间)| | mental_model_enabled | true |启用心理模型抽象化| | mental_model_min_samples | 3 精神模型生成所需的最小样本数 | sandbox_enabled | true 允许执行代码(Docker Sandbox) | debug_mode | false 启用调试日志输出 | retrieval_recency_weight | 0.3 搜索得分的最近性权重 | retrieval_importance_weight | 0.3 |检索得分的重要度权重| | retrieval_relevance_weight | 0.4 |搜索得分的关联性权重|
聊天记录持久化
对话历史记录为SQLite(chat_sessions ),模板名称将采用不同的格式。即使重新启动服务器 session_id 如果相同的话,可以继续对话。超过TTL(默认值7天)的会话被自动删除。
MemoryLLM(自动记忆抽出)
auto_extract: true 在这种情况下,在每个回合结束后,MemoryLLM异步启动,并从对话中自动提取以下内容:
- 事实:用户的喜好、个人信息、约定、重要事件
- 上下文更新:佩尔索纳的感情、状态变化
- 库存更新:衣服、随身物品的变化
测试
# 全テスト実行
python -m pytest tests/ -q
# ユニットテストのみ
python -m pytest tests/unit/ -q
# カバレッジレポート付き
python -m pytest tests/ --cov=memory_mcp --cov-report=htmlCLI工具
# インポート
python -m memory_mcp.cli import --persona herta --input data/herta.zip
# エクスポート
python -m memory_mcp.cli export --persona herta --output backup.jsonl
# スキーママイグレーション
python -m memory_mcp.cli migrate --target latest
# Persona 統計
python -m memory_mcp.cli stats --persona hertaCI/CD
工作流|触发|内容| |---|---|---| | ci.yml 测试+Lint(ruff) | docker.yml 标签push→Docker映像构建→GHCR
技术栈
|类别|技术| |---|---| |言语| Python 3.12+ | |MCP框架|快速MCP| |数据库|SQLite(WAL模式)| 矢量存储 设置/验证(BaseSettings) |嵌入模型|cl-nagoya/ruri-v3-30m(日语特化)| |重新排序|混合点/日本-重新排序-xsmall-v2| 日志记录 |过梁/格式化器|褶皱|
许可证
IT许可证-了解更多信息 许可证 来修改标记元素的显示属性。
谢辞
______________________________________________________________________
内存MCP --建造于 固体石灰 随着❤️
