Skip to content

DebugTools MCP 工作流 ​

DebugTools 的 MCP 工具可以跨组完成目标选择、就绪检查、热重载、执行与结果验证。按任务使用需要的步骤:读取配置或线程诊断可以直接结束,无需先执行 Java 方法。完整参数入口见 工具清单。

明确项目和运行实例 ​

  1. 用 get_debug_tools_status 或 list_debug_tools_connections 确认项目与连接;多项目传 projectPath,多活跃连接明确 connectionId。
  2. 用 get_agent_capabilities 读取实际能力、限额和 agentInstanceId。没有适用连接时,发现并附着明确 PID,或按任务要求启动准确的运行配置,再发现连接。
  3. Spring 相关操作用 wait_for_application_ready 确认 ready=true/state=UP。只在 STARTING 且 retryable=true 时继续等待;HTTP 不可达和不支持端点需要单独处理。
  4. 远程连接提供明确的主机、TCP 和 HTTP 端口;Kubernetes 先发现目标,再用 Pod UID、容器 ID 及 PID 确认实例。

DebugTools Agent 连接提供方法调用等能力,IDEA Java Debugger 会话提供断点与 HotSwap。热重载与调用需要指向同一 JVM;不能仅凭应用名称相同就判断为同一目标。

修改代码后调用方法 ​

需要组合热重载与调用时,使用 run_and_invoke:

json
{
  "connectionId": "demo-connection",
  "sessionName": "DemoApplication",
  "className": "com.example.HealthService",
  "methodName": "status",
  "parameterTypes": [],
  "argsJson": "{}",
  "compileBeforeReload": true,
  "waitMillis": 30000,
  "springReadiness": "REQUIRED",
  "resultView": "JSON",
  "verifyLogs": true,
  "verifySql": true
}

编排会绑定选定连接,检查 Spring 就绪,匹配调试会话并等待热重载 SUCCESS,然后调用方法。无法证明调试会话与连接匹配时需显式 sessionName;发现 PID 不一致、连接被替换或步骤失败时停止后续执行。可选的启动、附着和恢复参数见 Hotswap MCP。

日志和 SQL 查询绑定同一连接,从调用开始时间筛选;这是时间窗口证据,可能包含并发流量。要精确关联,另用 invokeResult.invocationId 查询日志、SQL 或调用诊断,并说明实际采集范围。

也可以分步调用 compile_and_reload_modified_files、get_hotswap_operation、invoke_java_method。先确认热重载完成,再把业务结果作为修改后的验证依据。

调用、恢复与继续读取 ​

已知类和方法时,用 generate_method_args_template 准备参数;只知道接口路径时,先用 search_http_url 定位源码签名。保持模板键、类型和声明顺序,只填 content。已保存的参数和前后置脚本可通过 manage_method_preset、manage_method_around_script 复用。

调用一次后保存 invocationId、offsetPath 和 traceOffsetPath:

需求后续工具
等待超时、断连后继续取原结果get_invocation_result
JSON、Debug 或子字段分页inspect_run_result
Trace 调用树、耗时与热点get_method_trace
Flux/SSE 后续事件read_invocation_stream,沿用 nextCursor
取消流订阅cancel_invocation_stream,再读取终态
排查调用为何未结束diagnose_invocation
冻结并比较修改前后的结果capture_result_snapshot、compare_result_snapshots

超时结束本次等待,业务操作可能仍在运行。UNKNOWN_OR_PENDING、UNKNOWN_OR_EXPIRED 不能证明未执行。使用原 ID 恢复,不为获取输出而重复执行业务。实例变化后停止旧句柄恢复,重新选择目标。

真实 HTTP、脚本和部署 ​

验证 HTTP 过滤器、认证和序列化时,先用 build_controller_http_request 生成请求及 cURL,检查业务 URL、方法和请求体,再用 execute_http_request 发送。Agent HTTP 端口不能代替业务端口;反射调用 Controller 不经过真实 HTTP 链路。

Groovy、远端 Java 编译和类/资源部署使用明确 ClassLoader。保存执行返回的 operationId 和 agentInstanceId,用 get_agent_operation 查询完成状态。资源写入哈希只能证明文件落盘,框架刷新仍需业务验证。

Spring、性能和真实调用诊断 ​

  • 配置值用 get_spring_config,覆盖链用 explain_spring_config;Bean 与多容器选择用 inspect_spring_beans。
  • 已加载类和来源用 inspect_runtime_class,目标 ClassLoader 用 find_class_loaders 分页查找;多个匹配项需要明确选择。
  • JVM 内存、GC 和线程诊断用 get_jvm_snapshot、get_thread_snapshot,无需为了收集这些信息先调用业务方法。
  • 观察外部请求触发的真实方法调用时,用 manage_method_watch 选择准确方法签名并设置观察限额。
  • 业务日志先显式开启 manage_business_log_capture;SQL 查询前确认打印模式。指定 Executor 的异步关联用 manage_async_context,保留传播范围说明。

完成与清理 ​

核对业务执行状态、额外结果读取状态、流终态、截断与丢失事件。空日志、空 SQL、未发现死锁或有界快照相等,都只对返回的采集范围成立。

清理本次创建的日志采集、方法观察、异步传播、结果缓存、比较快照与隧道。保留原有会话。没有最终状态确认时,如实报告结果未知或清理未确认。