MemFlow MCP 服务器
MemFlow MCP 服务器是一套面向 MCP(Model Context Protocol)的后端实现。核心功能包括通过标准化接口向 LLM 客户端提供上下文信息、资源访问、工具执行以及提示模板渲染等能力。该仓库提供两种可运行的 MCP 实现路径:一是基于标准输入输出的 MCP(stdio)实现,适用于 Claude Desktop 等需要通过 JSON-RPC 进行通信的场景;二是基于 FastAPI 的 HTTP API 实现,遵循 MCP 的工具查询与调用语义,便于通过网络进行调用。
主要功能点
- 通过 MCP 接口向客户端提供上下文结果(get_vault_context),包括 contexte 及来源
- 支持工具发现与调用(tools/list、tools/call),实现读取 vault 上下文的能力
- 基于本地 Obsidian vault 的索引与向量检索,结合关系映射(Relationships.md)提升上下文质量
- 本地化、隐私优先的上下文服务,避免云依赖
- 提供多种传输方式:MCP 的 stdio 版本,以及基于 HTTP 的服务器端实现(FastAPI)
安装与运行
- 先建立并索引 Obsidian vault(如首次使用):
-
- 构建索引:运行 python src/index_vault.py
-
- 生成本地向量索引后,确保 Vault 路径 VAULT_PATH 指向你的 Obsidian vault
-
- 运行 MCP 服务器(两种方式任选其一):
- 方式 A(目前更常用的网络访问形式,HTTP API):
- 启动命令示例(在已创建虚拟环境并安装依赖后执行): python src/mcp_server.py
- 服务器监听默认地址 http://0.0.0.0:8080(可通过 --host、--port 调整)
- 方式 B(标准输入输出的 MCP 端,适配 Claude Desktop 等客户端):
- 启动命令示例:python src/mcp_stdio.py
- 该方式通过标准输入输出遵循 MCP JSON-RPC 协议,与客户端进行通信
- 方式 A(目前更常用的网络访问形式,HTTP API):
- 重要依赖与前提
- 需要本地索引完成,请先执行 index_vault.py 生成并持久化向量索引
- 服务器会启动一个后台文件监控(可选,需开启),用于监控 Vault 的变更并自动重新索引
- 服务器配置(供 MCP 客户端读取配置使用,以下以 JSON 形式描述,不含代码块)
{
"server_name": "MemFlow MCP Server",
"command": "src/venv/bin/python",
"args": ["src/mcp_server.py", "--host", "0.0.0.0", "--port", "8080"]
// 说明:这是运行 HTTP API 版本的启动命令及参数,客户端需要知道 server_name 与启动命令来连接
}
注释:
- server_name 表示服务器对客户端的识别名称
- command 为启动需要的解释器或可执行程序路径(如虚拟环境中的 python)
- args 为启动脚本及其参数(如主机、端口等),用于客户端的连接配置 另外,如需使用 stdio 版本,请将命令改为: { "server_name": "MemFlow MCP Stdio Server", "command": "src/venv/bin/python", "args": ["src/mcp_stdio.py"] }
- 基本使用方法
- 基于 HTTP 的 MCP 使用:发送 JSON-RPC 风格请求到工具端点,例如工具列表(GET /tools/list)与工具调用(POST /tools/call),获取返回的上下文文本
- 基于 StdIO 的 MCP 使用:向程序的标准输入发送初始化、工具列表、工具调用等 JSON-RPC 请求,程序将输出正确格式的 JSON-RPC 响应到标准输出
- 需要注意的点:初次使用需要在服务器端完成索引构建;索引更新可通过 index_vault 的 --rebuild 或在 File Watcher 触发时自动进行
- 客户端与服务器之间的协商信息包括:服务器名称、可用工具、输入参数(query、max_tokens)及返回的 context 文本、来源及信心度等