OpenNote MCP 后端服务器
- 项目简介
- 该仓库实现了一个基于 MCP 的服务端,用于向 LLM 客户端提供上下文信息和功能。后端整合了文档管理、语义检索、元数据管理、以及对嵌入向量服务的调用等能力,支持多用户场景和后台任务调度。
- 主要功能点
- MCP 服务端实现:实现 MCP 服务的核心能力,包括信息查询、任务初始化和工具/能力描述等,通过 RMCP/Actix-Web 提供流式 HTTP 的 MCP 接入点。
- 资源与元数据管理:通过后端存储管理文档集合、文档元数据、以及文档 chunks,支持增删改查等操作。
- 语义检索与向量化集成:通过向量化服务(本地 embedder/OpenAI 等提供商)对文档进行向量化,并基于向量对文档进行语义检索。
- 任务调度与异步处理:对长时间操作(如导入文档、重新索引、备份/还原)使用异步任务和任务状态查询接口。
- 安全与多用户:基本用户认证信息(Bearer token)在 MCP 初始化阶段获取并维护,结合资源访问控制实现多用户场景的隔离。
- 容器化/热启动能力:后端使用 Actix-Web 与 RMCP 的组合,支持 SSE 保活、流式传输等 MCP 场景。
- 安装步骤
- 确保开发环境具备 Rust(cargo)以及相关依赖库的编译环境。
- 在仓库根目录下构建后端服务(通常执行 cargo build 或 cargo run 进入后端目录后启动服务)。
- 配置嵌入向量向外部服务的参数(如本地 embedder、Qdrant 向量数据库、以及 OpenAI/其他提供商的向量服务)。
- 启动后端服务,监听端口(仓库实现中默认对外暴露 HTTP/... 端口,具体端口由配置决定)。
- 服务器配置(MCP 客户端需要的配置信息)
- 说明:MCP 客户端连接该 MCP 服务器以获取上下文、执行工具等。在本实现中,MCP 服务的地址通过 baseUrl 指定,其他连接参数如命令/参数用于描述服务的启动方式;实际客户端通常不需要执行服务器启动命令,但可以通过以下示例配置了解如何声明连接。
- 配置示例(JSON 结构,描述 MCP 服务器连接信息;注释用于说明字段含义,不作为代码片段展示): { "mcpServers": { "server-uuid-placeholder": { "name": "opennote", "description": "", "baseUrl": "http://localhost:8086/mcp", "command": "", "args": [], "env": {}, "isActive": true, "type": "streamableHttp", "headers": { "Authorization": "Bearer <your-username>" } } } }
- 字段说明
- server-uuid-placeholder:唯一标识该 MCP 服务器的键名称(客户端在连接时以此识别服务器)。
- name:服务器名称,便于区分不同 MCP 服务端。
- description:服务器描述信息,供客户端展示。
- baseUrl:MCP 服务器的访问地址,需以 /mcp 结尾的服务入口。
- command/args:用于描述服务器启动命令及参数的字段。对于本 MCP 服务器实现,实际启动通常由后端容器/进程执行,因此可留空。若需要客户端知道启动方式,可填写相应的启动命令及参数注释。
- env:启动环境变量,若有需要可配置。
- isActive:是否当前可用,启用后客户端可以连接。
- type:传输类型,示例为 streamableHttp,表示通过可流式的 HTTP 通道进行 MCP 通信。
- headers:连接所需的附加头部信息(如认证 Bearer token),客户端在请求 MCP 服务时可附带该头部。
- 基本使用方法
- 启动服务
- 运行后端服务,确保后端所需的依赖(向量数据库、嵌入向量服务、模型服务等)已正确启动并可访问。
- MCP 服务监听在配置中指定的 baseUrl(如 http://localhost:8086/mcp)。
- 与 MCP 客户端对接
- 在 MCP 客户端配置中填入上述 JSON,以声明该 MCP 服务器的连接信息、传输类型和认证头等。
- 客户端通过 JSON-RPC 调用 MCP 提供的语义检索、元数据查询、文档内容获取等能力。
- 运行后的常见流程
- 客户端初始化时通过 initialize 请求获取服务器信息与能力描述。
- 通过预定义的工具路由(如语义搜索、获取集合元数据、获取文档内容等)请求服务端的功能。
- 服务端返回 JSON-RPC 风格的响应,或通过事件/任务机制返回异步结果。
- 启动服务
- 额外说明
- 本实现的 MCP 服务端侧具备多用户会话管理、权限校验、以及对嵌入向量服务的整合能力,能够在多用户场景下提供文档上下文和检索能力。
- MCP 服务端使用的基础栈包括 Rust、Actix-Web、RMCP(Model Context Protocol)以及向量数据库/嵌入服务的对接组件,适合在企业或研究场景中作为 LLM 的上下文提供端。