# MCP-WebLLM
**Repository Path**: ooomyself/MCP-WebLLM
## Basic Information
- **Project Name**: MCP-WebLLM
- **Description**: github的镜像
- **Primary Language**: JavaScript
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-03-20
- **Last Updated**: 2026-03-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# MCP Multi Bridge
---
## 目录
- [项目简介](#项目简介)
- [核心特性](#核心特性)
- [支持的平台](#支持的平台)
- [项目结构](#项目结构)
- [安装指南](#安装指南)
- [基础安装](#安装步骤)
- [Stdio 传输安装(Native Messaging)](#stdio-传输安装native-messaging)
- [快速开始](#快速开始)
- [方式一:SSE / Streamable HTTP](#方式一sse--streamable-http-传输)
- [方式二:Stdio 直连本地服务器](#方式二stdio-直连本地服务器推荐)
- [详细使用说明](#详细使用说明)
- [管理 MCP 服务器](#管理-mcp-服务器)
- [侧边栏功能详解](#侧边栏功能详解)
- [工具调用流程](#工具调用流程)
- [提示词系统](#提示词系统)
- [Agent 模式](#agent-模式)
- [高级功能](#高级功能)
- [自动执行与自动发送](#自动执行与自动发送)
- [多服务器并发](#多服务器并发)
- [粘贴拦截](#粘贴拦截)
- [深色模式](#深色模式)
- [服务器配置在线编辑](#服务器配置在线编辑)
- [MCP 协议传输方式](#mcp-协议传输方式)
- [技术架构](#技术架构)
- [使用场景示例](#使用场景示例)
- [常见问题](#常见问题)
- [灵感来源与版权说明](#灵感来源与版权说明)
- [许可证](#许可证)
---
## 项目简介
**MCP Multi Bridge** 是一个基于纯原生 JavaScript(Vanilla JS)开发的 Chrome/Edge 浏览器扩展(Manifest V3)。它的核心使命是:**打破网页端 AI 与本地计算机之间的壁垒**。
通过本扩展,你可以直接在 ChatGPT、Gemini、DeepSeek、Kimi 等十余个网页版 AI 助手的对话界面中,无缝调用本地运行的 MCP(Model Context Protocol)工具——例如读取本地文件、查询本地数据库、执行本地脚本、联网搜索等,而不需要使用任何原生客户端。
与社区中流行的基于 React/TypeScript 的前端工程方案不同,本项目主打**极简、透明、无负担**——没有框架、没有打包工具、没有编译步骤,代码所见即所得,克隆即可加载使用。
---
## 核心特性
| 特性 | 说明 |
|------|------|
| **零依赖** | 100% 纯 Vanilla JavaScript + 原生 CSS,无框架、无打包工具 |
| **多平台支持** | 自动识别并注入到 14+ 个主流 AI 网页平台 |
| **多服务器并发** | 同时连接多个 MCP 服务器,工具跨服务器自动调度 |
| **三协议支持** | 原生实现 SSE、Streamable HTTP 和 **Stdio(Native Messaging)** 三种 MCP 传输协议 |
| **Stdio 直连** | 🆕 通过 Chrome Native Messaging 直接启动和管理本地 MCP 进程,无需额外代理 |
| **在线编辑配置** | 🆕 服务器卡片中的 URL / Command / Args 字段支持直接编辑,快速切换目录或参数 |
| **Agent 模式** | 内置完整的 Agent 模式提示词系统,支持 AI 自主迭代调用工具 |
| **自动执行** | 检测到 AI 输出的工具调用后可自动执行并回填结果 |
| **批量处理** | 多个并行工具调用完成后统一注入,防止重复发送 |
| **文件注入** | 将 MCP 结果以 `.md` 文件形式附加,适合大体量输出 |
| **隐私优先** | 数据仅流转于浏览器与本地服务器之间,不经过任何第三方 |
| **设置持久化** | 所有用户偏好(深色模式、自动执行等)持久存储于 `chrome.storage` |
---
## 支持的平台
扩展会自动检测当前访问的网站,并在以下平台中注入 MCP 工具侧边栏:
### 国际主流平台
| 平台 | 域名 |
|------|------|
| **ChatGPT** | `chatgpt.com` / `chat.openai.com` |
| **Google Gemini** | `gemini.google.com` |
| **Google AI Studio** | `aistudio.google.com` |
| **Grok (xAI)** | `grok.com` |
| **Perplexity** | `perplexity.ai` |
| **GitHub Copilot** | `github.com/copilot` |
### 开源 / 聚合模型平台
| 平台 | 域名 |
|------|------|
| **DeepSeek** | `chat.deepseek.com` |
| **OpenRouter** | `openrouter.ai` |
| **Mistral** | `chat.mistral.ai` |
| **T3 Chat** | `t3.chat` |
### 国产大模型平台
| 平台 | 域名 |
|------|------|
| **Kimi(月之暗面)** | `kimi.com` / `kimi.moonshot.cn` |
| **通义千问(Qwen)** | `chat.qwen.ai` / `qianwen.com` |
| **智谱清言(ChatGLM)** | `chatglm.cn` / `chat.z.ai` |
| **豆包(Doubao)** | `doubao.com` |
> 每个平台均有针对性的输入框定位、拖放区域识别和发送按钮适配逻辑,确保文件注入和消息发送在各平台均可正常工作。
---
## 项目结构
```
mcp-multi-bridge/
├── manifest.json # 扩展清单(Manifest V3)
├── background.js # Service Worker:管理 MCP 服务器连接与消息路由
├── content.js # 内容脚本:注入 AI 页面,提供侧边栏 UI 与工具调用检测
├── popup.html # 弹窗 HTML:服务器管理界面
├── popup.js # 弹窗逻辑:增删改查 MCP 服务器,支持在线编辑配置
├── popup.css # 弹窗样式
├── sidebar.css # 侧边栏样式(通过 Shadow DOM 隔离)
├── content.css # 内容脚本全局样式(切换按钮等)
├── dragDropListener.js # Gemini 专用拖放监听器(注入到页面主世界)
├── native-host.js # 🆕 Native Messaging Host:桥接 Chrome 与本地 stdio MCP 进程
├── install-host.bat # 🆕 Windows 一键安装脚本:注册 Native Messaging Host
└── icons/
├── icon16.png
├── icon48.png
└── icon128.png
```
**架构说明**:
- **`background.js`**(Service Worker):负责维护到各 MCP 服务器的长连接,实现 `SSEParser`、`MCPConnection`、`ServerManager` 三层架构,处理 JSON-RPC 请求/响应的转发。**新增 Stdio 传输支持**,通过 `chrome.runtime.connectNative()` 与本地 Native Messaging Host 通信。
- **`content.js`**(内容脚本):注入每个受支持的 AI 页面,创建侧边栏 UI(基于 Shadow DOM 隔离样式),监听页面 DOM 变化以检测 AI 输出的工具调用格式,并将结果注入回页面。
- **`native-host.js`**(Native Messaging Host):🆕 Node.js 程序,作为 Chrome 与本地 MCP 服务器进程之间的桥梁。接收来自扩展的指令,启动/管理 MCP 服务器子进程,双向转发 JSON-RPC 消息。
- **`dragDropListener.js`**:针对 Google Gemini 框架的特殊处理,运行在页面主世界(非扩展沙盒),通过 `postMessage` 通道接收文件,并以精准构造的拖放事件模拟文件上传。
---
## 安装指南
> 由于本项目无需任何构建步骤,可直接将源码加载为"未打包扩展"。
### 支持的浏览器
- **Google Chrome**(推荐,版本 ≥ 109)
- **Microsoft Edge**(版本 ≥ 109,基于 Chromium)
- 其他基于 Chromium 的浏览器(Brave、Arc 等)
### 安装步骤
1. **获取代码**
```bash
git clone https://github.com/你的用户名/mcp-multi-bridge.git
```
或直接下载 ZIP 压缩包并解压到本地文件夹。
2. **打开扩展管理页面**
在浏览器地址栏输入并回车:
```
chrome://extensions/
```
3. **开启开发者模式**
点击页面右上角的 **"开发者模式(Developer mode)"** 开关,将其打开。
4. **加载扩展**
点击左上角的 **"加载已解压的扩展程序(Load unpacked)"**,在弹出的文件选择器中选择项目根目录(即包含 `manifest.json` 的文件夹)。
5. **固定到工具栏(推荐)**
点击浏览器右上角的拼图图标(扩展管理),找到 **MCP Multi Bridge**,点击图钉图标将其固定到工具栏,方便快速访问。
安装完成后,扩展图标会出现在浏览器右上角。访问任意受支持的 AI 平台时,页面右侧会自动出现 **MCP** 悬浮切换按钮。
### Stdio 传输安装(Native Messaging)
如果你希望使用 **Stdio (Local)** 传输方式直接连接本地 MCP 服务器(如 Filesystem MCP Server),还需要完成以下一次性安装:
> **前置要求**:已安装 [Node.js](https://nodejs.org/)(版本 ≥ 16)
1. **获取扩展 ID**
打开 `chrome://extensions/`,确保开发者模式已开启,找到 **MCP Multi Bridge** 扩展,复制其 **ID**(一串字母数字)。
2. **运行安装脚本**
在项目根目录下,双击运行 `install-host.bat`,或在终端中执行:
```bash
install-host.bat YOUR_EXTENSION_ID
```
将 `YOUR_EXTENSION_ID` 替换为上一步复制的扩展 ID。
3. **重启浏览器**
脚本会自动完成以下操作:
- 生成 Native Messaging Host 清单文件(`com.mcp.bridge.json`)
- 创建 Node.js 启动包装脚本(`native-host-wrapper.bat`)
- 注册到 Chrome 和 Edge 的注册表中
**重启浏览器后,Stdio 传输即可使用。**
> ⚠️ 安装脚本仅需运行一次。之后每次使用 Stdio 传输时,扩展会自动通过 Native Messaging 启动和管理本地 MCP 进程。
---
## 快速开始
### 方式一:SSE / Streamable HTTP 传输
以下是使用 HTTP 传输方式连接 MCP 服务器的流程(以本地文件系统 MCP 服务器 + DeepSeek 为例):
#### 第一步:启动本地 MCP 服务器
本扩展需要一个在本地运行、支持 SSE 或 Streamable HTTP 传输的 MCP Server。你可以使用任意支持 MCP 协议的服务器,例如:
```bash
# 示例:使用 supergateway 将 stdio 服务器桥接为 SSE
npx -y supergateway --stdio "npx -y @modelcontextprotocol/server-filesystem /你的/工作目录" --port 3006
# 服务器默认在 http://localhost:3006/sse 上监听
```
#### 第二步:在扩展弹窗中添加服务器
1. 点击浏览器工具栏中的 **MCP Multi Bridge** 图标,打开弹窗。
2. 填写服务器信息:
- **Name(名称)**:`My Filesystem`(任意名称)
- **URL**:`http://localhost:3006/sse`
- **Transport(传输协议)**:`SSE`(或 `Streamable HTTP`,取决于服务器)
3. 点击 **Add Server**,扩展会自动尝试连接。
4. 连接成功后,服务器卡片左侧的状态点会变为**绿色**,并显示该服务器提供的工具数量。
### 方式二:Stdio 直连本地服务器(推荐)
🆕 **无需手动启动代理**,扩展通过 Native Messaging 自动管理本地 MCP 进程。
> 前提:已完成 [Stdio 传输安装](#stdio-传输安装native-messaging)。
#### 第一步:在扩展弹窗中添加 Stdio 服务器
1. 点击浏览器工具栏中的 **MCP Multi Bridge** 图标,打开弹窗。
2. 填写服务器信息:
- **Name(名称)**:`Filesystem`(任意名称)
- **Transport(传输协议)**:选择 `Stdio (Local)`
- **Command(命令)**:`npx`
- **Args(参数)**:`-y @modelcontextprotocol/server-filesystem C:\Users\你的用户名\Desktop`
3. 点击 **Add Server**,扩展会自动启动本地进程并连接。
4. 连接成功后,状态点变为**绿色**,工具列表会自动加载。
> ⚠️ **Args 字段不需要包含命令本身**。例如 Command 填 `npx`,则 Args 应填 `-y @modelcontextprotocol/server-filesystem C:\path`,而**不是** `npx -y ...`。
#### 快速切换目录
添加 Stdio 服务器后,可以直接在服务器卡片中**编辑 Args 字段**来修改目标目录路径,修改后点击 **Save** 按钮,扩展会自动断开当前连接并以新参数重新启动服务器。
### 继续使用
无论使用哪种传输方式,后续步骤相同:
1. 打开 `https://chat.deepseek.com`(或其他受支持的 AI 平台)。
2. 点击页面右侧的 **MCP** 悬浮按钮,展开侧边栏。
3. 在 **工具** 标签页中,点击 **附加 .md** 按钮,将包含所有可用工具定义的系统提示词以 `.md` 文件形式附加到输入框。
4. 发送该文件给 AI,AI 会读取工具列表并了解如何调用它们。
5. 现在你可以直接向 AI 提问,AI 会按照特定格式输出工具调用指令,扩展会自动检测并执行。
---
## 详细使用说明
### 管理 MCP 服务器
点击浏览器工具栏的扩展图标,弹窗提供完整的服务器管理功能:
| 操作 | 说明 |
|------|------|
| **添加服务器** | 填写名称、URL / Command+Args、传输协议后点击 Add Server |
| **在线编辑** | 🆕 直接在服务器卡片中修改 URL(SSE/HTTP)或 Command/Args(Stdio),修改后点击 Save 保存并自动重连 |
| **启用/禁用** | 通过每个服务器卡片上的 Enabled 开关切换 |
| **手动连接** | 点击 Connect 按钮手动重新连接已断开的服务器 |
| **断开连接** | 点击 Disconnect 按钮断开已连接的服务器 |
| **删除服务器** | 点击 Remove 按钮,确认后永久删除 |
| **刷新状态** | 点击页面顶部的 Refresh 按钮更新所有服务器的连接状态 |
扩展启动时会自动连接所有已启用的服务器,连接状态实时同步到所有已打开的 AI 页面侧边栏。
### 侧边栏功能详解
点击 AI 页面右侧的 **MCP** 按钮展开侧边栏,侧边栏分为三个标签页:
#### 工具标签页
- **工具列表**:展示所有已连接服务器提供的工具,按服务器分组,显示工具名称和简要描述。
- **附加 .md**:将包含所有工具定义和调用规范的系统提示词以 Markdown 文件形式附加到当前 AI 对话框,这是初始化 MCP 连接的关键步骤。
- **下载 .md**:将提示词文件下载到本地,适用于自动附加失败时手动上传。
- **复制**:将提示词文本复制到剪贴板,可手动粘贴到对话框。
- **刷新工具列表**:重新从所有服务器获取最新工具列表。
#### 调用标签页
每当检测到 AI 输出工具调用指令时,此处会自动创建调用卡片,显示:
- 工具名称与调用 ID
- 工具描述
- 调用参数(键值对)
- 执行状态(等待中 / 执行中 / 已完成 / 失败)
- 执行结果预览(截取前 500 字符)
- **执行**按钮:手动触发工具调用
- **复制结果**按钮:将执行结果复制为标准 MCP 格式
同时,AI 输出中工具调用代码块的正下方会注入一个 **内联执行按钮**,点击即可就地执行对应工具。
#### 设置标签页
| 设置项 | 说明 | 默认值 |
|--------|------|--------|
| **自动执行工具调用** | 检测到工具调用后无需手动点击,自动触发执行 | 关闭 |
| **注入结果后自动发送** | 将结果注入输入框后自动点击发送按钮 | 关闭 |
| **粘贴拦截** | 粘贴 MCP 格式结果时自动转换为文件附件 | 开启 |
| **等待注入延迟** | 最后一个工具调用完成后,等待多少秒再统一注入(用于等待可能的后续调用)| 4 秒 |
| **发送前延迟** | 文件注入后等待多少秒再发送(给平台解析文件留出时间)| 8 秒 |
所有设置通过 `chrome.storage.local` 持久化,刷新页面后自动恢复。
### 工具调用流程
MCP Multi Bridge 通过检测 AI 输出中的特定 `jsonl` 格式代码块来识别工具调用意图:
```jsonl
{"type": "function_call_start", "name": "read_file", "call_id": 1}
{"type": "description", "text": "读取指定路径的文件内容"}
{"type": "parameter", "key": "path", "value": "/home/user/project/main.py"}
{"type": "function_call_end", "call_id": 1}
```
检测到该格式后,扩展的完整处理流程如下:
```
AI 输出工具调用代码块
↓
MutationObserver 检测到 DOM 变化
↓
parseToolCalls() 解析 jsonl 内容
↓
创建调用卡片 + 注入内联执行按钮
↓
(自动执行模式)executeToolCall()
↓
background.js → MCPConnection.callTool()
↓
通过 SSE / HTTP / Stdio 发送到 MCP 服务器
↓
接收执行结果
↓
(批量聚合)injectBatchResults()
↓
结果以 .md 文件形式注入对话框
↓
(自动发送模式)点击发送按钮
```
### 提示词系统
扩展会根据当前连接的所有服务器和工具,动态生成一份完整的系统提示词(`mcp-tools.md`),内容包括:
1. **工具调用格式规范**:精确的 `jsonl` 代码块格式要求
2. **多调用并行格式**:如何在一次响应中发起多个独立工具调用
3. **调用规则说明**:10 条强制执行规则(不伪造结果、调用后立即停止等)
4. **结果回传格式**:AI 接收工具结果的标准格式
5. **Agent 模式指令**:完整的自主 Agent 行为规范
6. **工具列表**:所有可用工具的名称、描述和参数定义(含必选/可选标注)
---
## Agent 模式
Agent 模式是本扩展的核心高级功能,可让 AI 在无需用户干预的情况下**自主、连续、迭代**地使用工具完成复杂任务。
### 激活方式
在对话中向 AI 发送以下任意指令均可激活 Agent 模式:
```
enter agent mode
agent mode
进入 agent 模式
自主模式
agentic mode
```
### Agent 模式行为规范
激活后,AI 会遵循以下循环工作流:
1. **分析**:拆解用户目标,制定执行计划(在首次响应中列出计划步骤)
2. **调用**:输出工具调用代码块,然后立即停止,等待结果
3. **评估**:收到结果后判断任务是否完成,以及下一步应做什么
4. **迭代**:若未完成,直接发起下一个工具调用,无需请求用户许可
5. **总结**:任务完成后输出完整的执行摘要
### Agent 模式核心规则
| 规则 | 说明 |
|------|------|
| **主动性** | 不等待用户指示下一步,根据已有结果自主决策 |
| **持续性** | 单次工具调用失败时,尝试不同参数或备用工具,不轻易放弃 |
| **迭代性** | 持续调用工具直至任务完全完成 |
| **交叉验证** | 搜索类任务必须用不同关键词进行多轮搜索,交叉验证信息 |
| **质量优先** | 宁可多调用几次也不基于不充分的数据给出浅层答案 |
| **格式一致** | Agent 模式下仍然严格遵守 `jsonl` 代码块格式规范 |
### 退出 Agent 模式
发送以下指令可退出 Agent 模式:
```
exit agent mode
退出 agent 模式
stop agent mode
```
### Agent 模式示例
**用户**:进入 agent 模式,帮我分析一下我本地 `/project/src` 目录下的所有 Python 文件,找出其中可能存在内存泄漏的代码。
**AI(Agent 响应 1)**:我已进入 Agent 模式。我的计划:1) 列出 `/project/src` 目录结构,2) 逐个读取 `.py` 文件,3) 分析每个文件的内存使用模式,4) 汇总报告。
```jsonl
{"type": "function_call_start", "name": "list_directory", "call_id": 1}
{"type": "description", "text": "列出项目源码目录结构"}
{"type": "parameter", "key": "path", "value": "/project/src"}
{"type": "function_call_end", "call_id": 1}
```
*(扩展自动执行,返回目录列表 → AI 读取每个文件 → 完成分析)*
---
## 高级功能
### 自动执行与自动发送
开启 **自动执行工具调用** 后,扩展会在检测到 AI 输出的工具调用时立即执行,无需手动点击。
开启 **注入结果后自动发送** 后,结果注入输入框后会自动触发发送操作,实现完全自动的 MCP 循环。
**批量收集机制**:当 AI 在同一次响应中发出多个工具调用(并行调用)时,扩展会:
1. 并发执行所有工具调用
2. 等待所有调用完成
3. 在最后一个调用完成后,等待「等待注入延迟」秒(默认 4 秒),以确认没有更多新的调用产生
4. 将所有结果合并为一个 `.md` 文件统一注入
5. 等待「发送前延迟」秒(默认 8 秒)后自动发送
这套机制确保了即使 AI 发出大量并行调用,也不会出现重复发送或结果丢失的问题。
**会话切换保护**:当用户在 SPA 应用(如 ChatGPT)中切换到不同对话时,扩展会检测 URL 变化,并在 3 秒内抑制自动执行,防止将旧会话的历史工具调用在新会话中重复执行。
### 多服务器并发
扩展支持同时连接任意数量的 MCP 服务器(包括混合使用不同传输协议),所有服务器的工具会被聚合到统一的工具列表中,并带有所属服务器的标注。
当 AI 发出工具调用时,扩展会根据工具名称自动找到提供该工具的服务器并路由请求,整个过程对 AI 完全透明。
**示例场景**:同时连接 Stdio 方式的"本地文件系统服务器"和 SSE 方式的"GitHub API 服务器",让 AI 能够读取本地代码文件并对比 GitHub 上的版本。
### 粘贴拦截
当 **粘贴拦截** 功能开启时,如果你在 AI 对话框中粘贴包含 MCP 工具结果格式(`jsonl` 代码块 + `function_result_start`)的文本,扩展会自动:
1. 拦截粘贴事件
2. 将文本内容转换为 `.md` 文件
3. 通过文件上传机制附加到对话框
这避免了大量结果文本直接出现在输入框中导致 token 浪费或格式问题。
### 深色模式
点击侧边栏右上角的 **深色** 按钮可切换深色/浅色主题,偏好自动持久化保存。
### 服务器配置在线编辑
🆕 在服务器列表中,每个服务器卡片的配置字段均支持直接编辑:
| 传输类型 | 可编辑字段 | 典型用途 |
|----------|-----------|---------|
| **SSE / Streamable HTTP** | URL | 切换服务器地址或端口 |
| **Stdio (Local)** | Command、Args | 快速切换目标目录或修改启动参数 |
修改后会出现 **Save** 按钮,点击即可保存配置并自动断开重连,使更改立即生效。
---
## MCP 协议传输方式
扩展原生实现了三种 MCP 传输协议:
### SSE(Server-Sent Events)传输
**适用场景**:通过 HTTP 代理(如 `supergateway`)暴露的 MCP 服务器
**工作原理**:
1. 扩展向 SSE 端点(如 `http://localhost:3006/sse`)发起长连接
2. 服务器通过 `endpoint` 事件返回消息端点 URL
3. 后续请求通过 HTTP POST 发送到该消息端点
4. 响应通过 SSE 流异步推回
**配置示例**:
```
URL: http://localhost:3006/sse
Transport: SSE
```
### Streamable HTTP 传输
**适用场景**:使用新版 MCP SDK(支持 Streamable HTTP)的服务器
**工作原理**:
1. 所有请求直接 POST 到配置的 URL
2. 支持会话 ID(`Mcp-Session-Id` Header)保持状态
3. 响应可以是普通 JSON 或 SSE 流(根据服务器返回的 `Content-Type` 自动判断)
**配置示例**:
```
URL: http://localhost:3006/mcp
Transport: Streamable HTTP
```
### Stdio 传输(Native Messaging)
🆕 **适用场景**:所有基于 stdio 的 MCP 服务器(如 `@modelcontextprotocol/server-filesystem`、`@modelcontextprotocol/server-github` 等),无需额外代理
**工作原理**:
1. 扩展通过 `chrome.runtime.connectNative()` 连接本地 Native Messaging Host
2. Native Host 根据配置的 Command 和 Args 启动 MCP 服务器子进程
3. JSON-RPC 消息通过 `stdin/stdout` 在扩展与 MCP 服务器之间双向转发
4. 扩展自动管理进程的生命周期(连接时启动,断开时终止)
**配置示例**:
```
Transport: Stdio (Local)
Command: npx
Args: -y @modelcontextprotocol/server-filesystem C:\Users\username\Desktop
```
**架构对比**:
```
SSE 方式:
扩展 ──fetch()──→ supergateway ──stdio──→ MCP 服务器
Stdio 方式(推荐):
扩展 ──connectNative()──→ native-host.js ──stdio──→ MCP 服务器
```
Stdio 方式省去了手动启动代理的步骤,由扩展自动管理进程生命周期,使用更简洁。
### 失败重试机制
工具调用失败时,扩展会自动重试最多 **5 次**,采用线性退避策略(第 n 次重试等待 n 秒),超时限制为 **30 秒**。重试过程中,UI 会实时更新状态提示。
---
## 技术架构
### 权限说明
| 权限 | 用途 |
|------|------|
| `storage` | 持久化服务器配置和用户设置 |
| `nativeMessaging` | 🆕 通过 Native Messaging 协议与本地 Host 程序通信,实现 stdio 传输 |
| `host_permissions: ` | 向本地 MCP 服务器发送 fetch 请求(跨域) |
> 扩展**不需要**也不申请读取浏览器历史、Cookie、书签等敏感权限。
### Shadow DOM 隔离
侧边栏 UI 完全运行在 Shadow DOM 内部,与宿主页面的样式完全隔离,确保不会与各 AI 平台的页面样式发生冲突。
### 服务工作线程保活
内容脚本通过 `chrome.runtime.connect()` 建立持久化端口连接,防止 Chrome 在空闲时挂起 Service Worker,维持 MCP 服务器的长连接稳定性。
### Native Messaging 架构
🆕 Stdio 传输通过 Chrome 的 [Native Messaging](https://developer.chrome.com/docs/extensions/develop/concepts/native-messaging) 机制实现:
```
┌──────────────────┐ Chrome Native ┌──────────────────┐ stdin/stdout ┌──────────────────┐
│ background.js │ ←── Messaging协议 ───→ │ native-host.js │ ←── JSON-RPC ──────→ │ MCP Server进程 │
│ (Service Worker)│ (4字节长度+JSON) │ (Node.js) │ (行分隔JSON) │ (子进程) │
└──────────────────┘ └──────────────────┘ └──────────────────┘
```
每个 Stdio 类型的 MCP 连接都会创建一个独立的 Native Host 实例,实例内管理一个子进程。断开连接时,子进程自动终止。
---
## 使用场景示例
### 场景一:本地代码审查
利用文件系统 MCP 服务器暴露本地项目目录,在任意 AI 平台中:
> "请帮我读取 `src/utils/memory.js` 文件并分析其中潜在的内存泄漏问题,然后给出修复建议。"
AI 会自动调用 `read_file` 工具获取代码,分析后给出具体的修复方案,**省去了手动复制粘贴多个文件的繁琐操作**。
### 场景二:本地数据库自然语言查询
将本地 MySQL 或 PostgreSQL 数据库包装为 MCP 工具后:
> "帮我查询昨天新注册且今天有登录记录的活跃用户数量,并生成一份 Markdown 格式的日报。"
AI 会自动调用数据库查询工具,生成结构化报告,整个过程无需编写任何 SQL。
### 场景三:多步骤研究任务(Agent 模式)
结合网络搜索 MCP 服务器,使用 Agent 模式:
> "进入 agent 模式。研究一下 Claude 4 和 GPT-5 在代码生成基准测试上的最新得分,用表格对比,并给出你对两者优劣的分析。"
AI 会自主进行多轮搜索、交叉验证、汇总分析,直到获得可靠数据后输出完整报告。
### 场景四:多服务器跨域自动化
同时连接"本地文件系统服务器"和"GitHub 搜索服务器":
> "我本地的 `utils/parser.js` 实现了一个 JSON 解析器,帮我在 GitHub 上找几个类似的开源实现,对比一下性能和设计思路。"
AI 会先读取本地文件,再搜索 GitHub,最后给出对比分析,两个服务器的工具被无缝调度。
### 场景五:Stdio 快速目录切换
🆕 使用 Stdio 传输连接 Filesystem MCP Server,随时在插件弹窗中修改 Args 参数切换目标目录:
> 先分析 `D:\project-a` 的代码结构 → 修改 Args 为 `-y @modelcontextprotocol/server-filesystem D:\project-b` → 点击 Save → 无缝切换到另一个项目。
无需重新启动任何服务,扩展自动处理进程的重启和重连。
---
## 常见问题
**Q:服务器状态显示红色(连接失败)怎么办?**
A:请确认:
1. 本地 MCP 服务器已启动并正在监听(SSE/HTTP 模式)
2. URL 和传输协议类型填写正确(SSE 服务器的 URL 通常以 `/sse` 结尾)
3. 没有防火墙或安全软件阻断 `localhost` 连接
**Q:Stdio 模式显示"连接失败"或"Native host disconnected"?**
🆕 A:请检查:
1. 已运行 `install-host.bat` 并传入了正确的扩展 ID
2. 已安装 Node.js 且 `node` 命令在系统 PATH 中可用
3. 安装后已重启浏览器
4. Args 字段格式正确(不要在 Args 中重复填写 Command 的内容)
**Q:Stdio 模式连接成功但工具数量为 0?**
🆕 A:请检查:
1. Args 字段是否包含了必需的目录路径参数(如 `-y @modelcontextprotocol/server-filesystem C:\your\path`)
2. Args 字段是否意外地以命令名开头(如 `npx -y ...`),这会导致命令重复
**Q:工具列表显示为空?**
A:点击侧边栏中的 **刷新工具列表** 按钮。如果服务器刚刚连接,可能需要等待几秒钟。
**Q:AI 没有按照 jsonl 格式输出工具调用?**
A:请确保已将提示词文件附加给 AI(点击侧边栏工具标签页中的 **附加 .md** 按钮),AI 必须先读取提示词才能了解工具调用格式。
**Q:结果注入后文件没有出现在对话框?**
A:不同平台的文件上传机制存在差异。扩展会依次尝试文件输入框注入、拖放注入、粘贴事件注入三种策略。如果全部失败,会回退为直接文本粘贴。Gemini 使用了特殊的拖放处理机制(`dragDropListener.js`)。
**Q:自动发送是否安全?**
A:自动发送前有多重安全检查,包括等待所有工具调用完成、等待平台解析文件等。如果需要对每次发送进行人工审核,请关闭 **注入结果后自动发送** 开关。
---
## 灵感来源与版权说明
本项目在产品概念和 UI 交互思路上受到优秀开源项目 [MCP-SuperAssistant](https://github.com/srbhptl39/MCP-SuperAssistant) 的启发。
---
## 致谢
> *本项目由 **OPENCODE + Claude Opus 4.6** 协助完成开发。*
---
## 许可证
本项目采用 [MIT License](LICENSE) 开源许可。你可以自由使用、修改和分发,但请保留原始版权声明。