mcp-chrome-bridge
Version:
Chrome Native-Messaging host (Node)
79 lines • 5.28 kB
JSON
{
"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"
}