browser-devtools-mcp-server
Version:
MCP服务器,通过WebSocket连接浏览器插件获取DevTools信息,支持Cursor集成
182 lines (148 loc) • 4.71 kB
JavaScript
/**
* Browser DevTools MCP Server CLI
* 支持通过npx直接运行的命令行入口
*/
import { spawn } from 'child_process';
import { fileURLToPath } from 'url';
import { dirname, join } from 'path';
import { existsSync } from 'fs';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
// 默认配置
const DEFAULT_CONFIG = {
port: 8080,
host: '0.0.0.0'
};
// 解析命令行参数
function parseArgs() {
const args = process.argv.slice(2);
const config = { ...DEFAULT_CONFIG };
for (let i = 0; i < args.length; i++) {
const arg = args[i];
switch (arg) {
case '--port':
case '-p':
const port = parseInt(args[++i]);
if (port && port > 0 && port <= 65535) {
config.port = port;
} else {
console.error('❌ 无效的端口号,必须在1-65535之间');
process.exit(1);
}
break;
case '--host':
case '-h':
config.host = args[++i];
break;
case '--help':
showHelp();
process.exit(0);
break;
case '--version':
case '-v':
showVersion();
process.exit(0);
break;
default:
if (arg.startsWith('-')) {
console.error(`❌ 未知参数: ${arg}`);
console.log('使用 --help 查看帮助信息');
process.exit(1);
}
}
}
return config;
}
// 显示帮助信息
function showHelp() {
console.log(`
🚀 Browser DevTools MCP Server
用法: npx browser-devtools-mcp-server [选项]
选项:
-p, --port <port> 设置WebSocket服务器端口 (默认: 8080)
-h, --host <host> 设置WebSocket服务器主机 (默认: 0.0.0.0)
--help 显示帮助信息
--version 显示版本信息
环境变量:
WS_PORT 设置WebSocket服务器端口
WS_HOST 设置WebSocket服务器主机
示例:
# 使用默认端口8080
npx browser-devtools-mcp-server
# 指定端口9000
npx browser-devtools-mcp-server --port 9000
# 指定主机和端口
npx browser-devtools-mcp-server --host 127.0.0.1 --port 9000
📖 更多信息: https://github.com/yourusername/browser-devtools-mcp
`);
}
// 显示版本信息
async function showVersion() {
try {
const fs = await import('fs');
const packageJson = JSON.parse(
fs.readFileSync(join(__dirname, 'package.json'), 'utf8')
);
console.log(`browser-devtools-mcp-server v${packageJson.version}`);
} catch (error) {
console.log('browser-devtools-mcp-server v1.0.0');
}
}
// 启动服务器
async function startServer(config) {
try {
// 设置环境变量
process.env.WS_PORT = config.port.toString();
process.env.WS_HOST = config.host;
console.log('🚀 启动Browser DevTools MCP服务器...');
console.log(`🌐 WebSocket服务器: ${config.host}:${config.port}`);
console.log('📡 MCP服务器准备接收Cursor连接');
console.log('');
console.log('💡 提示:');
console.log(' - 确保浏览器插件已安装并配置');
console.log(' - 在Cursor中配置MCP服务器');
console.log(' - 按Ctrl+C停止服务器');
console.log('');
// 导入并启动服务器
const { DevToolsMCPServer } = await import('./server.js');
const server = new DevToolsMCPServer();
await server.run();
} catch (error) {
console.error('❌ 服务器启动失败:', error.message);
if (error.code === 'MODULE_NOT_FOUND') {
console.log('');
console.log('🔧 解决方案:');
console.log(' 1. 确保在正确的目录中运行');
console.log(' 2. 运行 npm install 安装依赖');
console.log(' 3. 检查Node.js版本 (需要 >= 18.0.0)');
}
process.exit(1);
}
}
// 主函数
async function main() {
try {
// 解析命令行参数
const config = parseArgs();
// 启动服务器
await startServer(config);
} catch (error) {
console.error('❌ 程序执行失败:', error.message);
process.exit(1);
}
}
// 处理进程信号
process.on('SIGINT', () => {
console.log('\n🛑 正在关闭服务器...');
process.exit(0);
});
process.on('SIGTERM', () => {
console.log('\n🛑 正在关闭服务器...');
process.exit(0);
});
// 启动程序
main().catch(error => {
console.error('❌ 未处理的错误:', error);
process.exit(1);
});