DebugTools MCP 工作流
DebugTools 的 MCP 工具可以跨组完成目标选择、就绪检查、热重载、执行与结果验证。按任务使用需要的步骤:读取配置或线程诊断可以直接结束,无需先执行 Java 方法。完整参数入口见 工具清单。
明确项目和运行实例
- 用
get_debug_tools_status或list_debug_tools_connections确认项目与连接;多项目传projectPath,多活跃连接明确connectionId。 - 用
get_agent_capabilities读取实际能力、限额和agentInstanceId。没有适用连接时,发现并附着明确 PID,或按任务要求启动准确的运行配置,再发现连接。 - Spring 相关操作用
wait_for_application_ready确认ready=true/state=UP。只在STARTING且retryable=true时继续等待;HTTP 不可达和不支持端点需要单独处理。 - 远程连接提供明确的主机、TCP 和 HTTP 端口;Kubernetes 先发现目标,再用 Pod UID、容器 ID 及 PID 确认实例。
DebugTools Agent 连接提供方法调用等能力,IDEA Java Debugger 会话提供断点与 HotSwap。热重载与调用需要指向同一 JVM;不能仅凭应用名称相同就判断为同一目标。
修改代码后调用方法
需要组合热重载与调用时,使用 run_and_invoke:
{
"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、未发现死锁或有界快照相等,都只对返回的采集范围成立。
清理本次创建的日志采集、方法观察、异步传播、结果缓存、比较快照与隧道。保留原有会话。没有最终状态确认时,如实报告结果未知或清理未确认。