paper-burner/js/chatbot/mcp/README.md

73 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# MCP (Model Context Protocol) 集成 TODO 与设计笔记
本文档概述了在 Paper Burner Chatbot 中集成 MCP 功能的计划,重点关注客户端能力以及未来对本地后端助手的考量。
## 1. 阶段一:纯前端 MCP 客户端 (基于浏览器)
**目标:** 使聊天机器人能够充当 MCP 客户端,发现并调用那些通过 Web 友好协议暴露的 MCP 服务器工具。
**主要功能点与 TODO**
- **[ ] `mcp-client.js` (新文件,位于 `js/chatbot/mcp/`):
- **[ ] 连接管理:**
- 实现 `McpClient.connect(serverUrl)`:建立和管理与 MCP 服务器的连接。初期主要针对暴露 HTTP/SSE 端点的服务器。
- 允许用户在设置中配置 MCP 服务器 URL。
- **[ ] 工具发现 (`listTools`):
- 实现 `McpClient.listTools()`:根据 MCP 规范向连接的 MCP 服务器发送 `listTools` 请求。
- 解析响应,获取可用工具列表、描述和输入模式 (input schema)。
- 存储/缓存当前服务器的可用工具。
- **[ ] 工具调用 (`callTool`):
- 实现 `McpClient.callTool(toolName, toolArgs)`:构造并向 MCP 服务器发送 `callTool` 请求。
- 处理同步的HTTP 请求/响应模式)工具调用。
- 解析工具的响应并返回结果 (例如 `result.content`)。
- **[ ] 针对流式工具的 SSE 支持 (如果适用):
- 调研并实现对通过服务器发送事件 (SSE) 提供流式输出的工具的支持。
- 使用 `EventSource` API 连接到 MCP 工具提供的 SSE 端点。
- 处理传入事件并逐步流式传输工具输出,类似于当前处理 LLM 流式响应的方式。
- **[ ] 错误处理与健壮性:**
- 实现针对连接失败、无效服务器响应、工具调用错误等的健壮错误处理机制。
- **[ ] 与 Agents 集成 (`js/chatbot/agents/`):
- **[ ] `LongTextAgent``RetrievalAgent` 利用 `McpClient`:
- Agents 可以发现并调用相关的 MCP 工具(例如,专门的文档分块工具、通过 MCP 暴露的向量搜索工具)来增强其处理能力。
- **[ ] UI 注意事项 (更新 `js/chatbot/ui/` 模块):
- **[ ] 允许用户在设置中添加/管理 MCP 服务器端点。
- **[ ] 考虑在界面上展示可用的 MCP 工具,或允许用户根据上下文触发它们。
**认证机制:**
- **[ ] 初期重点关注无需认证或基于 API 密钥的 MCP 服务器(前提是密钥可以被安全管理或由用户为特定服务器提供)。
- **[ ] TODO (未来):**调研并实现对 OAuth 2.0 授权码模式(如果合适,也可以是客户端凭证模式)的支持,以应对需要此类认证的 MCP 服务器。这可能涉及到将用户重定向到认证服务器并处理回调。
## 2. 阶段二:本地后端助手/服务器 (未来增强)
**目标:** 引入一个轻量级的本地后端应用程序,以克服浏览器限制并解锁高级功能。这将保持核心聊天机器人在浏览器中的纯粹可用性,本地服务器作为一个可选的增强功能。
**主要功能点与 TODO (由本地后端服务器处理)**
- **[ ] 高级数据持久化与恢复:
- **[ ] 提供 API 端点,供前端将关键数据(聊天记录、思维导图、设置)保存到本地文件系统(例如 JSON 文件、SQLite
- **[ ] 提供 API 端点,供前端在 `localStorage` 被清除或不可用时请求数据恢复。
- **[ ] (可选) 与用户选择的云存储同步(需要仔细的安全和认证设计)。
- **[ ] 本地 OCR 与后端转发的 OCR:
- **[ ] 提供 API 端点以接收前端的图像数据。
- **[ ] 集成本地 OCR 引擎(例如,如果后端是 Python则通过 Python 环境集成 PP-OCR
- **[ ] 安全存储在线 OCR 服务(例如 Doc2X的 API 密钥,并充当前端对这些服务请求的代理。
- **[ ] 增强的 MCP 功能:
- **[ ] MCP 服务器的 Stdio 桥接:
- 充当桥梁,运行使用 stdio 传输的本地 MCP 服务器(例如 Python 脚本)并与之通信。
- 通过本地后端,将这些基于 stdio 的 MCP 服务器通过 HTTP/SSE 暴露给前端。
- **[ ] 前端作为 MCP 服务器 (通过本地后端代理):
- 本地后端在特定端口监听来自外部客户端(包括其他浏览器扩展)的 MCP 请求。
- 将这些 MCP 请求转发给 Paper Burner 前端(例如,通过前端和本地后端之间建立的 WebSockets 或其他持久连接)。
- 前端(例如,一个新的 `js/chatbot/mcp/frontend-mcp-server-logic.js`)通过调用其内部模块 (`LongTextAgent`, `ChatbotCore`, `toc_logic.js`) 来处理请求。
- 通过本地后端将响应返回给外部 MCP 客户端。
- 这使得浏览器扩展可以通过本地后端进行通信,利用其 MCP 代理能力。
**本地后端技术栈 (考量)**
- Python (Flask/FastAPI) - 适合 AI/ML 任务,生态成熟。
- Node.js (Express) - JavaScript 生态系统一致性。
- Go / Rust - 高性能,单二进制文件部署。
**关于阶段划分的说明:**
阶段一允许聊天机器人立即消费任何可通过 Web 访问的 MCP 服务器提供的工具。阶段二通过利用本地处理能力并充当更通用的 MCP 中心,显著扩展了功能,但这需要用户运行一个独立的本地应用程序。