UNPKG

mcp-chrome-bridge

Version:

Chrome Native-Messaging host (Node)

79 lines 5.28 kB
{ "name": "mcp-chrome-bridge", "version": "1.0.15", "description": "Chrome Native-Messaging host (Node)", "main": "dist/index.js", "bin": { "mcp-chrome-bridge": "/dist/cli.js" }, "files": [ "dist" ], "engines": { "node": ">=14.0.0" }, "preferGlobal": true, "keywords": [ "mcp", "chrome", "browser" ], "author": "hangye", "license": "MIT", "dependencies": { "@fastify/cors": "^11.0.1", "@modelcontextprotocol/sdk": "^1.11.0", "chalk": "^5.4.1", "commander": "^13.1.0", "fastify": "^5.3.2", "is-admin": "^4.0.0", "pino": "^9.6.0", "sudo-prompt": "^9.2.1", "uuid": "^11.1.0", "chrome-mcp-shared": "1.0.0" }, "devDependencies": { "@jest/globals": "^29.7.0", "@types/chrome": "^0.0.318", "@types/jest": "^29.5.14", "@types/node": "^22.15.3", "@types/supertest": "^6.0.3", "@typescript-eslint/parser": "^8.31.1", "cross-env": "^7.0.3", "husky": "^9.1.7", "jest": "^29.7.0", "lint-staged": "^15.5.1", "nodemon": "^3.1.10", "pino-pretty": "^13.0.0", "rimraf": "^6.0.1", "supertest": "^7.1.0", "ts-jest": "^29.3.2", "ts-node": "^10.9.2" }, "husky": { "hooks": { "pre-commit": "lint-staged" } }, "lint-staged": { "*.{js,ts}": [ "eslint --fix", "prettier --write" ], "*.{json,md}": [ "prettier --write" ] }, "scripts": { "dev": "nodemon --watch src --ext ts,js,json --ignore dist/ --exec \"npm run build && npm run register:dev\"", "build": "ts-node src/scripts/build.ts", "test": "jest", "test:watch": "jest --watch", "lint": "eslint 'src/**/*.{js,ts}'", "lint:fix": "eslint 'src/**/*.{js,ts}' --fix", "format": "prettier --write 'src/**/*.{js,ts,json}'", "register:dev": "node dist/scripts/register-dev.js", "postinstall": "node dist/scripts/postinstall.js" }, "readme": "# Fastify Chrome Native Messaging服务\n\n这是一个基于Fastify的TypeScript项目,用于与Chrome扩展进行原生通信。\n\n## 功能特性\n\n- 通过Chrome Native Messaging协议与Chrome扩展进行双向通信\n- 提供RESTful API服务\n- 完全使用TypeScript开发\n- 包含完整的测试套件\n- 遵循代码质量最佳实践\n\n## 开发环境设置\n\n### 前置条件\n\n- Node.js 14+ \n- npm 6+\n\n### 安装\n\n```bash\ngit clone https://github.com/your-username/fastify-chrome-native.git\ncd fastify-chrome-native\nnpm install\n```\n\n### 开发\n\n1. 本地构建注册native server\n```bash\ncd app/native-server\nnpm run dev\n```\n2. 启动chrome extension\n```bash\ncd app/chrome-extension\nnpm run dev\n```\n\n### 构建\n\n```bash\nnpm run build\n```\n\n### 注册Native Messaging主机\n\n全局安装后会自动注册\n```bash\nnpm i -g mcp-chrome-bridge\n```\n\n### 与Chrome扩展集成\n\n以下是Chrome扩展中如何使用此服务的简单示例:\n\n```javascript\n// background.js\nlet nativePort = null;\nlet serverRunning = false;\n\n// 启动Native Messaging服务\nfunction startServer() {\n if (nativePort) {\n console.log('已连接到Native Messaging主机');\n return;\n }\n \n try {\n nativePort = chrome.runtime.connectNative('com.yourcompany.fastify_native_host');\n \n nativePort.onMessage.addListener(message => {\n console.log('收到Native消息:', message);\n \n if (message.type === 'started') {\n serverRunning = true;\n console.log(`服务已启动,端口: ${message.payload.port}`);\n } else if (message.type === 'stopped') {\n serverRunning = false;\n console.log('服务已停止');\n } else if (message.type === 'error') {\n console.error('Native错误:', message.payload.message);\n }\n });\n \n nativePort.onDisconnect.addListener(() => {\n console.log('Native连接断开:', chrome.runtime.lastError);\n nativePort = null;\n serverRunning = false;\n });\n \n // 启动服务器\n nativePort.postMessage({ type: 'start', payload: { port: 3000 } });\n \n } catch (error) {\n console.error('启动Native Messaging时出错:', error);\n }\n}\n\n// 停止服务器\nfunction stopServer() {\n if (nativePort && serverRunning) {\n nativePort.postMessage({ type: 'stop' });\n }\n}\n\n// 测试与服务器的通信\nasync function testPing() {\n try {\n const response = await fetch('http://localhost:3000/ping');\n const data = await response.json();\n console.log('Ping响应:', data);\n return data;\n } catch (error) {\n console.error('Ping失败:', error);\n return null;\n }\n}\n\n// 在扩展启动时连接Native主机\nchrome.runtime.onStartup.addListener(startServer);\n\n// 导出供popup或内容脚本使用的API\nchrome.runtime.onMessage.addListener((message, sender, sendResponse) => {\n if (message.action === 'startServer') {\n startServer();\n sendResponse({ success: true });\n } else if (message.action === 'stopServer') {\n stopServer();\n sendResponse({ success: true });\n } else if (message.action === 'testPing') {\n testPing().then(sendResponse);\n return true; // 指示我们将异步发送响应\n }\n});\n```\n\n### 测试\n\n```bash\nnpm run test\n```\n\n### 许可证\n\nMIT\n" }