mcpField
C
Chrome Extension Bridge MCP

Chrome Extension Bridge MCP

本地服务
github.com/Oanakiaja开发工具3282 周前更新

关于 Chrome Extension Bridge MCP

一个 Chrome 扩展,在网页与本地 MCP 服务之间建立 WebSocket 连接,使 MCP 服务能够读取页面资源并在页面上下文中执行函数,例如访问 window.editor。

主要功能

  1. 01基于 WebSocket 的网页与本地服务连接
  2. 02读取浏览器资源与页面属性
  3. 03在网页上下文中执行函数
  4. 04通过 mcp:resource.* 与 mcp:tool.* 调用

适用场景

  1. 01从本地服务控制网页编辑器,如 Three.js 编辑器
  2. 02读取网页运行时的状态与属性

MCP 相关

该项目包含一个本地 MCP 服务,它通过 WebSocket 向 Chrome 扩展发送命令并接收结果,从而把网页能力暴露给 MCP 客户端。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Chrome Extension Bridge MCP

一个 Chrome 扩展,可在网页与本地 MCP 服务之间建立 WebSocket 连接。借助它,你可以与网页资源交互,并执行 MCP 服务中的函数。

灵感来自 playcanvas/editor-mcp-server。

示例

概述

本项目由两个主要组件构成:

  1. Chrome 扩展:将客户端脚本注入网页,以便与本地服务建立 WebSocket 连接。
  2. 本地 MCP 服务:一个 WebSocket 服务,可向扩展发送命令并接收响应。

通过此设置,你可以:

  • 从本地服务访问浏览器 API 和 DOM 元素
  • 在网页上下文中执行 JavaScript 函数
  • 获取网页中的资源和信息
  • 尤其是访问全局对象,例如 editor: https://threejs.org/editor/。你可以使用网站公开的 window.editor 来控制编辑器,就像 playcanvas/editor-mcp-server 一样。

安装

设置
  1. 克隆仓库:
git clone https://github.com/yourusername/chrome-extension-socket-mcp.git
cd chrome-extension-socket-mcp
  1. 安装依赖:
npm install

开发

运行以下命令,以开发模式构建扩展:

npm run debug
加载扩展
  1. 打开 Chrome 并访问 chrome://extensions/
  2. 打开右上角的开关,启用“开发者模式”
  3. 点击“加载已解压的扩展程序”,然后选择本项目中的 extension 文件夹
  4. 扩展现已安装。你应该会在任意网页的右上角看到一个红色小指示器,显示“MCP Extension Loaded”

用法

服务端
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod"; 
import { Client } from "../src/client";

// Define the port for WebSocket connection
// This should match the port in your Chrome extension's WebSocket connection
const port = 54319;
const client = new Client(port);

// Establish connection to the Chrome extension
await client.connect();

// Create a new MCP server instance with name and version
const server = new McpServer({
  name: "Extension-Socket-Server",
  version: "1.0.0",
});

// Register a tool that executes the window.alert function in the browser
// This demonstrates how to interact with browser APIs from your server
server.tool(
  "alert",                  // Tool name
  "use window.alert",       // Tool description
  { message: z.string() },  // Tool parameters schema using Zod
  async ({ message }) => {  // Tool implementation function
    // Call the extension to execute alert in the browser context
    const response = await client.callToolExtension("alert", { message });
    return response;
  }
);

// Register a resource to retrieve the browser's user agent
// This demonstrates how to access browser properties from your server
server.resource(
  "userAgent",              // Resource name
  "useragent://chrome",     // Resource URI template
  async (uri) => {          // Resource handler function
    // Get the user agent from the browser
    const { content } = await client.callResourceExtension("navigator.userAgent");
    // Return the formatted resource
    return {
      contents: [
        {
          uri: uri.href,
          text: content[0].text,
        },
      ],
    };
  }
);

// Set up a transport layer for the MCP server
// StdioServerTransport uses standard input/output for communication
const transport = new StdioServerTransport();
await server.connect(transport);

// Handle application termination gracefully
process.on("SIGINT", async () => {
  console.log("SIGINT signal received");  // Log when SIGINT is received
  await client.dispose();                 // Close the WebSocket connection
  process.exit(0);                        // Exit the process
});
扩展端

扩展默认会自动连接到 ws://localhost:54319。你可以在 extension/content.js 中修改此设置。

扩展为服务端命令公开了两个主要入口:

  • mcp:resource.* - 用于访问浏览器资源和属性
  • mcp:tool.* - 用于在浏览器上下文中执行函数

API 参考

客户端
  • new Client(port) - 创建一个连接到指定端口的新客户端实例
  • connect() - 连接到 MCP 服务
  • callToolExtension(toolName, params) - 在浏览器中调用工具
  • callResourceExtension(resourceName, params) - 从浏览器获取资源
  • dispose() - 关闭连接
WebSocket 协议

扩展使用一种简单的类 JSON-RPC 协议:

请求:

{
  "id": "unique-request-id",
  "method": "mcp:resource.navigator.userAgent",
  "params": {}
}

响应:

{
  "id": "unique-request-id",
  "result": "Mozilla/5.0 ..."
}

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。