项目简介

'devtools-debugger-mcp' 是一个将Node.js调试功能封装为Model Context Protocol (MCP) 工具的服务器。它允许MCP客户端(如LLM)通过标准化的JSON-RPC接口与Node.js应用程序进行交互式调试。服务器内部使用Chrome DevTools Protocol (CDP) 来控制Node.js进程。

主要功能点

  • 启动/停止调试会话:灵活启动和终止Node.js应用的调试会话。
  • 断点管理:支持设置普通断点、条件断点和日志点(logpoint),以便在特定代码行暂停或输出信息。
  • 程序执行控制:提供恢复执行、单步跳过、单步进入、单步退出以及继续执行到指定位置等操作。
  • 状态检查:能够获取当前调用栈(Call Stack)、检查作用域内的变量(Scopes)、查看对象属性,并读取控制台输出。
  • 运行时表达式评估:在程序暂停时,可以在当前上下文中评估任意JavaScript表达式,即时获取结果。
  • 脚本源获取与黑盒化:可以获取已加载脚本的源代码,并支持将特定脚本模式列入黑盒,使其在单步调试时被跳过。
  • 异常处理:支持设置在捕获或未捕获异常时暂停。
  • 帧重启:允许重启调用栈中的特定帧,重新执行该帧。

安装步骤

要运行此MCP服务器,您需要具备Node.js环境。

  1. 克隆仓库
    git clone https://github.com/Gulhidayat/devtools-debugger-mcp.git
    cd devtools-debugger-mcp
  2. 安装依赖
    npm install
  3. 编译项目
    npm run build
    这将在 'dist/src' 目录下生成可执行的JavaScript文件 'index.js'。

服务器配置

MCP客户端需要以下配置信息来连接并使用 'devtools-debugger-mcp' 服务器:

{
  "name": "devtools-debugger-mcp",
  "command": "node",
  "args": ["dist/src/index.js"],
  "description": "一个用于调试Node.js应用的MCP服务器,通过标准输入输出与LLM客户端通信。",
  "transport": "stdio"
}
  • 'name': 服务器的唯一名称。
  • 'command': 启动服务器的命令,这里是Node.js运行时。
  • 'args': 传递给Node.js命令的参数,指定要运行的服务器入口文件。
  • 'description': 服务器功能的简要描述。
  • 'transport': 通信协议类型,此处为标准输入输出(Stdio)。

基本使用方法

一旦MCP客户端连接到 'devtools-debugger-mcp' 服务器,就可以通过调用其暴露的工具来进行Node.js应用的调试。

  1. 启动调试会话: 调用 'start_node_debug' 工具,提供要调试的Node.js脚本路径。服务器将启动脚本并暂停在第一行或第一个 'debugger' 语句处。 'tool_code('start_node_debug', {'scriptPath': './my-app.js'})'
  2. 设置断点: 使用 'set_breakpoint' 工具在特定文件和行号设置断点。 'tool_code('set_breakpoint', {'filePath': './my-app.js', 'line': 10})'
  3. 控制执行流程
    • 'resume_execution': 继续执行直到下一个断点或程序结束。
    • 'step_over': 单步跳过当前行。
    • 'step_into': 单步进入函数调用。
    • 'step_out': 单步跳出当前函数。
  4. 检查程序状态
    • 'inspect_scopes': 查看当前暂停位置的局部变量和闭包变量。
    • 'list_call_stack': 获取当前的调用栈信息。
    • 'evaluate_expression': 在当前上下文中评估JavaScript表达式,例如 'tool_code('evaluate_expression', {'expr': 'myVariable + 1'})'。
    • 'read_console': 获取在程序执行过程中产生的控制台输出。
  5. 结束调试: 完成调试后,调用 'stop_debug_session' 工具来终止Node.js进程和调试会话。 'tool_code('stop_debug_session', {})'

信息

分类

开发者工具