Memory Palace MCP 服务器
使用说明内容(Markdown格式)
- 项目简介
- Memory Palace 是一个基于 MCP 的后端服务器实现,核心职责是为对话式 AI 客户端提供持久的上下文和能力扩展:托管和管理资源(Memory/Alias)、注册并执行工具、定义与渲染 Prompt 模板/摘要等。服务器通过 JSON-RPC 风格的 MCP 接口与客户端通信,支持多种传输协议,具备会话管理、能力声明以及健康监控能力。
- 主要功能点
- MCP 工具集(共 9 种工具):读取内存、创建内存、更新内存、删除内存、添加别名、读取/调用检索、及治理相关工具等,外部客户端可按需调用。
- 系统与资源模型:以 URI 形式对内存、路径及别名进行命名与分组,支持跨域别名和版本快照,方便回滚与对比。
- 提供多传输通道:stdio 传输(直接通过标准输入/输出通信,常用于 IDE/本地集成)、SSE 传输(通过 /sse 提供 Server-Sent Events 方式的传输),并且有 HTTP 边界的网关组件(SSE 的鉴权中间件)。
- 会话与快照机制:全局写入管线、会话优先检索缓存、快照/日志与回滚能力,确保跨会话的一致性与审计能力。
- Observability 与 运维:内置运行时状态、作业队列、日志和健康检查,提供仪表盘式监控与 API 回退路径(在某些情况下提供降级/兜底信息)。
- 与数据库后端耦合:基于 SQLite 的异步访问,包含内存、路径、Gist、索引等多表数据结构,支持快照和回滚场景。
- 安装与运行方式
- 本仓库包含 MCP 服务器实现以及辅助 API/前端组件。核心 MCP 入口通过 backend/mcp_server.py 提供;若需要 REST API 服务,请使用 backend/main.py 通过 FastAPI 提供 HTTP REST 路由;以及通过 backend/run_sse.py 提供 SSE 传输的服务器。
- 本地快速启动方式(两种传输):
- stdio 方式(适合 IDE/本地调试客户端): 进入 backend 目录后执行:python mcp_server.py 说明:服务器通过标准输入输出与 MCP 客户端约定的 JSON-RPC 请求进行通信。
- SSE 传输方式(Web 風格客户端/网页端适用): 通过 SSE 传输与客户端通信,需要先启动 MCP 服务端(SSE),命令通常为:HOST=127.0.0.1 PORT=8010 python run_sse.py
- 运行依赖与环境
- Python 3.10 及以上版本
- 后端数据库使用 SQLite(以 sqlite+aiosqlite URL 形式配置)
- 如需使用 REST API 端点,请按文档在 backend 目录中启动 FastAPI 应用(uvicorn main:app --reload --host 0.0.0.0 --port 8000)
- 服务器配置(MCP 客户端连接配置 JSON 示例,说明性文本,不包含生产代码)
- server_name:Memory Palace MCP 服务器
- transports:定义支持的传输通道
- stdio 传输
- type: stdio
- description: 直接通过标准输入输出与 MCP 客户端通信,适合本地开发和 IDE 集成
- command: python
- args: ["mcp_server.py"]
- working_directory: backend
- SSE 传输
- type: sse
- description: 通过 SSE 传输,适合浏览器/云端环境
- command: python
- args: ["run_sse.py"]
- working_directory: backend
- environment: { "HOST": "127.0.0.1", "PORT": "8010" }
- stdio 传输
- 注释说明
- MCP 客户端通过上述任意一个传输与 MCP 服务器建立连接,使用 MCP 提供的 9 种工具接口进行资源管理、检索和治理动作。
- 若使用 HTTP/SSE,请确保正确配置 API Key 机制(如 MCP_API_KEY、MCP_API_KEY_ALLOW_INSECURE_LOCAL 等),以便对前端/云端客户端进行鉴权与保护。
- 配置中的 server_name 与 transports 只作为客户端引导信息,实际运行时需按仓库提供的启动脚本执行。
- 基本使用方法
- 启动后如何连接 MCP 服务器:
- 通过 stdio 启动的服务器,LLM 客户端在运行时直接连接到服务器子进程的标准输入输出。
- 通过 SSE 启动的服务器,LLM 客户端通过网络请求与服务器的 /sse 路径进行通信,需提供 API 密钥进行鉴权(如配置了 MCP_API_KEY)。
- 典型请求路径(高层次描述,供理解使用):
- 读取内存(read_memory):获取指定 URI 的记忆片段及其元信息;支持对内存片段进行分页、切片和祖先节点展开。
- 创建/更新/删除内存(create_memory、update_memory、delete_memory):对核心记忆或子路径进行增删改,支持快照记录、回滚和语义/关键词层面的写保护。
- 添加别名(add_alias):把一个内存映射到额外的 URI,提升可检索性。
- 检索内存(search_memory):基于关键词、语义与混合检索,支持多层筛选和容错回退。
- 系统视图与观测(system 指令、index_status、audit 等工具输出)用于诊断与运维。
- 连接示例(简要描述,不提供具体代码块)
- 使用 stdio 的客户端通常会在本地 IDE 或脚本中直接以 MCP 的规范调用这些工具。
- 使用 SSE 的前端/云端客户端需要通过 HTTP 请求到 /sse 和 /messages(如文档所述的端点)并携带鉴权信息。
- 服务器与客户端的对接要点
- MCP 客户端应在启动时提供 server_name、传输类型、连接参数等信息,服务器按 MCP 协议解析请求并返回 JSON-RPC 响应。
- 保障安全性:HTTP/SSE 模式需要 API Key,stdio 模式为本地集成时通常绕过鉴权(仅限本地使用场景)。
- 其他说明
- Memory Palace 还提供了前端仪表盘、部署脚本与文档,便于快速验证 MCP 流程、调试写入/回滚、以及性能基线的测试。
- 服务器在代码中已经实现了 MCP 的核心能力,并通过大量测试覆盖了多种使用场景,验证了工具接口、会话与快照、以及健康监控等核心能力。
- 注意事项
- MCP 客户端与服务器之间的具体交互细节以实现时的 MCP 库版本为准,实际使用请依据仓库中的文档与示例进行实现与对接。
- 如需在生产环境部署,请结合部署文档、SSE/HTTPS 配置、安全密钥管理和网络访问控制,确保数据与通信的安全性。