Skip to content

feat(mcp): 书签和扩展适配 Pi 的 MCP 配置 - #5

Open
1oid wants to merge 1 commit into
mainfrom
agent/mika/ef70c70d04d0
Open

1oid wants to merge 1 commit into
mainfrom
agent/mika/ef70c70d04d0

Conversation

@1oid

@1oid 1oid commented Nov 5, 2026

Copy link
Copy Markdown
Contributor

概述

让书签和 Chrome 扩展适配 Pi 的 MCP 配置:读取 Pi 的 mcpServers 配置,连接远程 streamable HTTP MCP 服务器,并把服务器工具以 mcp__<服务器>__<工具> 交给模型直接调用。

「Pi 设置」新增 MCP 页,可粘贴 mcp.json 或导入文件;保存后按配置连接,同页显示每个服务器的连接状态、工具数量和错误,并可「重新连接」。

改动

  • src/mcp.js(新增):配置解析与校验(名称、url、headers、timeout、enabled、description、exposure、toolExposure)、${NAME} 变量插值(值写在配置顶层 env)、Pi 风格工具命名与重名后缀、系统提示词中的 mcp_servers 段落。
  • src/mcp-client.js(新增):浏览器端 streamable HTTP JSON-RPC 客户端,支持 SSE 响应、Mcp-Session-Id、MCP-Protocol-Version、分页 tools/list、tools/call,以及文本/图片/结构化结果转换。
  • src/plugin.js:接入 MCP(setMcpConfig / mcpConfig / refreshMcp / importMcpConfig),连接与断开、工具注册/注销、dispose 时关闭连接、提示词段落渲染。
  • 书签(src/bookmarklet.js):配置随保存的书签携带,在目标站点按需合并(已有同名服务器的站点保留自己的配置)。
  • 扩展(src/extension-*.js):配置写入 chrome.storage.local 的 shared-config,各站点 engine 共用,跨网站一致。
  • 界面(src/install-template.html + src/locales/en.json):设置页新增 MCP 标签,粘贴/导入配置、状态列表、重新连接。
  • 文档:README.md、README.en.md、docs/usage.md、docs/usage.en.md,以及 docs/issues/2026-11-04-mcp.json 记录。

已知限制

  • 只支持远程 HTTP 服务器:command/args 的 stdio 服务器需要本地进程,书签和扩展都在浏览器里无法启动,列表里明确显示「不支持」而不会静默忽略。
  • 需要 OAuth 登录的 MCP 服务器暂不支持,请改用 Authorization 等请求头;旧版 type: "sse" 和 Pi 一样被拒绝。
  • 书签模式的 MCP 请求从网页发出,服务器需允许跨域(CORS);扩展从扩展后台请求,没有该限制。

验证

  • npm test 97/97 通过,其中新增 MCP 配置 8 项、MCP 客户端 5 项(真实本地 HTTP 服务器、SSE 响应、401、不可达服务器)。
  • npm run build、node scripts/release.mjs verify 通过;聊天书签 1,945,497 字符,仍在 2 MB 限制内。
  • 用 Playwright 驱动真实构建产物做了两轮端到端验证:
    • 书签:保存配置 → 显示「已连接(1 个工具)」→ 模型调用 mcp__docs__search 并拿到服务器结果 → 生成的聊天书签携带 importMcpConfig → 在另一个站点打开书签后自动连接并注册该工具 → 改成 stdio 配置后显示不支持且旧工具被移除。
    • 扩展:配置写入 shared storage → engine 连接后模型成功调用 MCP 工具 → 第二个站点复用同一份配置并显示已连接。
  • 新增浏览器回归 npm run test:mcp(scripts/test-mcp-ui.mjs)并加入 CI matrix(suite=mcp)。

PR 打开后 CI 会跑 build + 单测 + 全部浏览器回归。

读取 Pi 的 mcpServers 配置,连接远程 streamable HTTP MCP 服务器,并把
服务器工具以 mcp__<服务器>__<工具> 交给模型调用。

- 新增 src/mcp.js:配置解析与校验、env 变量插值、工具命名与提示词片段
- 新增 src/mcp-client.js:JSON-RPC / SSE 客户端,支持会话头与分页
- 插件接入:连接状态、工具注册、系统提示词、setMcpConfig/refreshMcp/importMcpConfig
- 书签携带 MCP 配置并在目标站点合并;扩展通过 shared-config 跨网站共享
- 「Pi 设置」新增 MCP 页:粘贴 mcp.json、导入文件、查看状态、重新连接
- stdio(command)配置在浏览器中无法启动,明确标记为不支持
- 新增单元测试、扩展 engine 传递测试与浏览器回归 test:mcp

Co-authored-by: multica-agent <github@multica.ai>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant