Skip to content

方法调用 MCP ​

DebugTools IDEA 插件在 DebugToolsMethodInvocationToolset 中提供连接、JVM 附着、方法调用、状态聚合、HTTP 地址搜索、日志和 SQL 查询工具。

本页是工具参考手册,只说明每个工具的作用、输入参数和返回值。AI 应该在什么条件下选择工具、工具之间如何组合、失败后如何恢复,由 方法调用 Skill 负责。

工具概览 ​

工具作用
list_debug_tools_connections查询当前 IDEA 项目已经建立的 DebugTools 连接。
list_attachable_jvms查询当前 IDEA 项目可以附着的本地 JVM。
attach_local_jvm向指定本地 JVM 加载 DebugTools agent,并可等待连接建立。
generate_method_args_template根据 IDEA 项目中的 Java 方法签名生成 DebugTools argsJson 参数模板。
invoke_java_method通过指定 DebugTools 连接调用目标 JVM 中的 Java 方法。
list_method_around_scripts列出当前 IDEA 项目中已保存的 Method Around 脚本。
get_method_around_script读取指定已保存 Method Around 脚本的源码和标识。
get_debug_tools_status聚合项目、连接、JVM、调试会话、就绪状态和能力信息。
search_http_url搜索索引中的 HTTP 地址并返回稳定的 Controller 元数据。
read_target_application_logs查询目标 JVM 最近的一段日志。
get_last_sql_statements查询目标 JVM 最近的 SQL。

公共约定 ​

这些工具都支持可选参数 projectPath:

参数必填类型说明
projectPath否stringIDEA 项目目录或项目内文件路径。MCP 上下文无法确定项目,或 IDEA 同时打开多个项目时用于指定目标项目。

省略 projectPath 时,插件会从 IDEA MCP 调用上下文和当前打开的项目中解析目标项目。如果无法确定项目,工具会返回 MCP error。

工具的正常结果以 JSON 文本返回。参数缺失、项目不存在或工具执行异常时,插件可能直接返回 MCP error;部分工具还会在正常 JSON 结构中通过 success=false 和错误字段表达业务失败。

1. 查看 DebugTools 连接 ​

工具名:list_debug_tools_connections

作用

读取当前 IDEA 项目的 DebugTools 连接快照。它只查询连接,不会附着 JVM、切换连接或发起方法调用。

参数

没有工具专属的必填参数,只支持公共可选参数 projectPath。

返回值

字段类型说明
countinteger当前项目的连接数量。
connectionsarrayDebugTools 连接列表。
connections[].connectionIdstring连接唯一标识,可传给 invoke_java_method.connectionId。
connections[].applicationNamestring目标应用名称。
connections[].pidstring | null目标 JVM 进程 ID;远程连接等场景可能为空。
connections[].sourcestring连接来源类型,当前为 LOCAL 或 REMOTE。
connections[].hoststringDebugTools agent 所在主机。
connections[].portintegerDebugTools socket 端口。
connections[].httpPortinteger | nullDebugTools HTTP 端口;未提供 HTTP 能力时为空。
connections[].remarkstring | null连接备注。
connections[].statestring当前连接状态,例如 CONNECTING、CONNECTED、RECONNECTING 或 DISCONNECTED。
connections[].activeboolean连接是否处于可用状态。
connections[].defaultClassLoaderobject | null当前连接选中的默认 ClassLoader。
connections[].defaultClassLoader.namestring默认 ClassLoader 名称。
connections[].defaultClassLoader.identitystring默认 ClassLoader 标识。
connections[].headersobject当前连接保存的 Header。
connections[].printSqlTypestring | null当前连接的 SQL 打印模式。

返回示例:

json
{
  "count": 1,
  "connections": [
    {
      "connectionId": "demo-connection",
      "applicationName": "DemoApplication",
      "pid": "42135",
      "source": "LOCAL",
      "host": "127.0.0.1",
      "port": 12345,
      "httpPort": 22222,
      "remark": null,
      "state": "CONNECTED",
      "active": true,
      "defaultClassLoader": {
        "name": "org.springframework.boot.loader.launch.LaunchedClassLoader",
        "identity": "12345678"
      },
      "headers": {},
      "printSqlType": null
    }
  ]
}

2. 查看可附着 JVM ​

工具名:list_attachable_jvms

作用

复用 DebugTools IDEA 附着窗口的 JVM 枚举逻辑,列出当前项目可附着的本地 Java 进程。它只返回候选 JVM,不会执行附着。

参数

没有工具专属的必填参数,只支持公共可选参数 projectPath。

返回值

字段类型说明
countinteger可附着 JVM 数量。
jvmsarray可附着 JVM 列表。
jvms[].pidstringJVM 进程 ID。
jvms[].displayNamestring用于展示和识别进程的名称。
jvms[].attachNamestringDebugTools 实际执行附着时使用的应用名。
jvms[].configurationNamestring | null关联的 IDEA 运行配置名称。
jvms[].moduleNamestring | null关联的 IDEA 模块名称。
jvms[].projectNamestring | null关联的 IDEA 项目名称。

返回示例:

json
{
  "count": 1,
  "jvms": [
    {
      "pid": "42135",
      "displayName": "com.example.DemoApplication",
      "attachName": "DemoApplication",
      "configurationName": "DemoApplication",
      "moduleName": "demo-service",
      "projectName": "demo"
    }
  ]
}

3. 附着本地 JVM ​

工具名:attach_local_jvm

作用

向指定本地 JVM 加载 DebugTools agent,触发与 IDEA 插件相同的本地附着逻辑。工具可以只提交附着请求,也可以在指定时间内等待 DebugTools 连接建立。

参数

参数必填类型说明
pid是string目标 JVM 进程 ID。
projectPath否string目标 IDEA 项目路径,含义见“公共约定”。
attachName否string附着使用的应用名。省略时,插件会按 pid 从当前可附着 JVM 列表中解析。
waitForConnectionMillis否integer附着后等待连接建立的最长时间,单位毫秒。大于 0 时每 100 毫秒检查一次连接。

返回值

字段类型说明
successboolean是否成功触发附着流程。
pidstring实际附着的 JVM 进程 ID。
attachNamestring | null实际使用的应用名。
messagestring结果说明,例如 Attach requested 或 Attach requested and connection established。
connectionIdstring | null等待期间建立的 DebugTools 连接 ID。未等待或等待期间未建立连接时为空。
hoststring | null新连接的主机。
portinteger | null新连接的 DebugTools socket 端口。
httpPortinteger | null新连接的 DebugTools HTTP 端口。

WARNING

success=true 只保证附着流程已经成功触发。只有返回了 connectionId,才能说明在 waitForConnectionMillis 指定的时间内检测到了 DebugTools 连接。

请求示例:

json
{
  "pid": "42135",
  "waitForConnectionMillis": 10000
}

返回示例:

json
{
  "success": true,
  "pid": "42135",
  "attachName": "DemoApplication",
  "message": "Attach requested and connection established",
  "connectionId": "demo-connection",
  "host": "127.0.0.1",
  "port": 12345,
  "httpPort": 22222
}

4. 生成方法参数模板 ​

工具名:generate_method_args_template

作用

读取 IDEA 项目中的 Java PSI,根据目标方法签名生成与 DebugTools 方法调用页面相同的 argsJson 模板。它只读取项目源码并生成 JSON,不会连接 JVM,也不会调用目标方法。

参数

参数必填类型说明
className是string声明目标方法的 Java 类全限定名。
methodName是string目标方法名。
projectPath否string目标 IDEA 项目路径,含义见“公共约定”。
parameterTypes否string[]方法参数类型,按声明顺序排列。存在重载方法时用于选择准确签名,建议使用全限定名。
genParamType否string参数模板展开模式,可选 SIMPLE、CURRENT、ALL。省略时使用 DebugTools 全局默认值。

genParamType 的含义:

值说明
SIMPLE对象参数只生成对象外壳,不继续展开字段。
CURRENT展开当前类直接声明的字段。
ALL展开当前类及其继承得到的字段。

返回值

字段类型说明
successboolean是否成功找到方法并生成模板。
classNamestring | null请求中的目标类名。
methodNamestring | null请求中的目标方法名。
parameterNamesstring[]从 Java 方法声明读取的参数名,保持声明顺序。
parameterTypesstring[]最终选中方法的参数类型,保持声明顺序。
argsJsonstring生成的 DebugTools 参数 JSON 字符串。失败时为 {}。
genParamTypestring | null实际使用的模板展开模式。
errorMessagestring | null失败原因;成功时为空。

请求示例:

json
{
  "className": "com.example.UserService",
  "methodName": "findUser",
  "parameterTypes": ["java.lang.Long"],
  "genParamType": "CURRENT"
}

返回示例:

json
{
  "success": true,
  "className": "com.example.UserService",
  "methodName": "findUser",
  "parameterNames": ["id"],
  "parameterTypes": ["java.lang.Long"],
  "argsJson": "{\"id\":{\"type\":\"simple\",\"content\":\"\"}}",
  "genParamType": "CURRENT",
  "errorMessage": null
}

如果同一个类中存在多个同名方法但没有提供 parameterTypes,工具会返回 success=false,并在 errorMessage 中提示指定重载签名。

5. 调用 Java 方法 ​

工具名:invoke_java_method

作用

把 MCP 参数转换为 DebugTools 原有的 RunDTO 请求,通过已建立的 DebugTools socket 连接发送到目标 JVM,并等待方法执行结果。

参数

参数必填类型说明
className是string目标类全限定名。
methodName是string目标方法名。
projectPath否string目标 IDEA 项目路径,含义见“公共约定”。
connectionId否string目标 DebugTools 连接 ID。省略时,当前项目必须只有一个活跃连接。
parameterTypes否string[]目标方法参数类型,按声明顺序排列;用于确定重载方法。
argsJson否stringDebugTools 方法参数 JSON 字符串。无参方法可省略或传 {}。
headers否object本次调用的 Header,键和值都按字符串处理。优先级高于连接 Header 和全局 Header。
xxlJobParam否string传入目标调用上下文的 XXL-JOB 参数。
traceMethodDTO否object方法链路、MyBatis 和 SQL 等 Trace 配置。
methodAroundContent否string在目标方法前后执行的 Method Around Java 源码内容。
methodAroundName否string已保存脚本名称,不含 .java。先用 list_method_around_scripts 获取精确名称;如果同时提供源码,源码优先。
methodAroundContentIdentity否stringMethod Around 内容标识。省略但提供了内容时,插件使用内容 MD5。
classLoaderIdentity否string目标 ClassLoader 标识。省略时使用连接当前选中的默认 ClassLoader。
timeoutMillis否integer等待目标 JVM 响应的超时时间,单位毫秒,默认 30000。小于 1 时按 1 处理。
resultView否stringTO_STRING(默认)、JSON、DEBUG 或 NONE,控制是否获取额外的结果视图。

省略 connectionId 时,如果项目没有活跃连接,返回 No active DebugTools connection found;如果存在多个活跃连接,返回错误并列出可选的 connectionId。

traceMethodDTO 支持的字段:

字段类型说明
traceMethodboolean是否启用方法链路追踪。
traceMaxDepthinteger最大追踪深度。
traceMyBatisboolean是否追踪 MyBatis 调用。
traceSQLboolean是否追踪 SQL。
traceSkipStartGetSetCheckBoxboolean是否跳过 getter、setter 风格方法。
traceBusinessPackageRegexpstring需要追踪的业务包前缀或正则。
traceIgnorePackageRegexpstring需要忽略的包前缀或正则。

argsJson 格式 ​

argsJson 是一个 JSON 字符串。字符串解析后的根对象中,每个字段对应一个 Java 方法参数;字段值使用 DebugTools RunContentDTO 结构。

json
{
  "id": {
    "type": "simple",
    "content": "10001"
  },
  "query": {
    "type": "json_entity",
    "content": "{\"keyword\":\"debug-tools\"}"
  }
}

参数字段应保持 Java 方法声明顺序。能够取得真实参数名时使用真实名称;无法取得时可以使用 arg0、arg1 等有序名称。支持的常用 type 包括 simple、json_entity、enum、bean、lambda、request、response、file 和 class。

返回值

字段类型说明
successboolean方法是否执行成功。目标方法抛异常或插件侧调用失败时为 false。
applicationNamestring | null返回结果的目标应用名称。
classNamestring | null实际调用的目标类名。
methodNamestring | null实际调用的目标方法名。
parameterTypesstring[]实际调用的方法参数类型。
resultClassTypestring | null结果分类,常见值为 VOID、NULL、SIMPLE、OBJECT。
resultstring | null目标方法返回值的 ToString 展示文本。
throwablestring | null目标方法异常或插件侧失败原因。
offsetPathstring | null普通结果在 DebugTools 结果存储中的偏移路径。
traceOffsetPathstring | nullTrace 结果在 DebugTools 结果存储中的偏移路径。
durationMillisinteger | null目标方法执行耗时,单位毫秒。

请求示例:

json
{
  "connectionId": "demo-connection",
  "className": "com.example.UserService",
  "methodName": "findUser",
  "parameterTypes": ["java.lang.Long"],
  "argsJson": "{\"id\":{\"type\":\"simple\",\"content\":\"10001\"}}",
  "timeoutMillis": 30000
}

成功返回示例:

json
{
  "success": true,
  "applicationName": "DemoApplication",
  "className": "com.example.UserService",
  "methodName": "findUser",
  "parameterTypes": ["java.lang.Long"],
  "resultClassType": "OBJECT",
  "result": "User(id=10001, name=DebugTools)",
  "throwable": null,
  "offsetPath": "123456789012345",
  "traceOffsetPath": null,
  "durationMillis": 18
}

失败返回示例:

json
{
  "success": false,
  "applicationName": "DemoApplication",
  "className": "com.example.UserService",
  "methodName": "findUser",
  "parameterTypes": ["java.lang.Long"],
  "resultClassType": "OBJECT",
  "result": null,
  "throwable": "java.lang.IllegalArgumentException: user not found",
  "offsetPath": "987654321098765",
  "traceOffsetPath": null,
  "durationMillis": 3
}

结果视图和辅助工具 ​

invoke_java_method 保留兼容的 result ToString 结果,同时支持可选的 resultView:

  • TO_STRING(默认)保持原有返回结构。
  • JSON 获取 JSON 结果,并可能返回 resultJson。
  • DEBUG 获取 DebugTools 对象结构,内容也放在 resultJson 字符串中。
  • NONE 跳过额外 HTTP 结果获取;原有 result ToString 文本仍可能返回。

额外结果字段如下:

字段说明
resultJsonJSON 或 DEBUG 视图的 HTTP 响应文本;无额外获取结果时为空。
resultFetchStatusNOT_REQUESTED、SKIPPED、SUCCESS 或 FAILED。
resultFetchError额外结果获取失败的原因。

只有调用成功、选择了 JSON 或 DEBUG,且结果带有 offsetPath 时,才会额外请求结果视图。简单值、空值或失败调用可能返回 NOT_REQUESTED;NONE 返回 SKIPPED。

resultFetchStatus 和 resultFetchError 描述额外结果获取过程。结果获取失败不等于 Java 方法调用失败。额外结果也可通过 Agent 的 /result/type 和 /result/detail HTTP 端点读取,此时使用所选连接的 host、httpPort 和 offsetPath。

使用 get_debug_tools_status 获取项目、连接、可附着 JVM、调试会话和能力探测的完整快照,并根据 nextAction 选择下一步。使用 read_target_application_logs 查询有上限的目标日志,使用 get_last_sql_statements 查询最近 SQL。能力不可用时工具会返回 LOGS_UNAVAILABLE 或 SQL_HISTORY_UNAVAILABLE,这和“没有记录”不同。

状态、HTTP 搜索、日志、SQL 和脚本查询等新增工具使用结构化错误,包含 code、hint、availableOptions、retryable、nextAction 和 details。存在多个连接时,应从 availableOptions 选择明确的 connectionId,不要猜测。

6. 已保存的前后置脚本 ​

IDEA 方法调用页保存的脚本位于项目的 .idea/DebugTools/MethodAround/ 目录。AI 应先调用 list_method_around_scripts 获取脚本名称,再按需调用 get_method_around_script 查看源码,最后把不含 .java 的精确名称传给 invoke_java_method.methodAroundName 或 run_and_invoke.methodAroundName。MCP 不返回本地文件路径,也不接受路径穿越参数。只提供 methodAroundContent 时直接使用该源码;同时提供名称时,名称仍需对应有效的已保存脚本,执行内容以显式源码为准。

列出脚本 ​

工具名:list_method_around_scripts。没有专属必填参数,可传 projectPath。此操作只读取项目已保存的 Java 脚本,不创建或执行脚本。

正常结果使用 success、data、error、requestId、timestamp 包装。data 包含:

字段说明
count已保存脚本数量。目录不存在时为 0。
scripts[].name不含 .java 的脚本名称,按名称排序。
scripts[].sizeBytes文件大小,单位字节。
scripts[].modifiedAt文件修改时间,Unix 毫秒时间戳。

读取脚本 ​

工具名:get_method_around_script。

参数必填类型说明
name是string列表返回的精确名称,不含 .java,不能包含目录分隔符。
projectPath否string目标 IDEA 项目路径。

请求示例:

json
{
  "name": "准备测试上下文"
}

正常结果的 data 包含 name、content、identity、sizeBytes、modifiedAt。content 是 UTF-8 Java 源码,identity 是内容 MD5。脚本不存在返回 SCRIPT_NOT_FOUND;名称不合法返回 INVALID_ARGUMENT。

确认脚本内容后,将名称传入方法调用:

json
{
  "connectionId": "demo-connection",
  "className": "com.example.UserService",
  "methodName": "findUser",
  "parameterTypes": ["java.lang.Long"],
  "argsJson": "{\"id\":{\"type\":\"simple\",\"content\":\"10001\"}}",
  "methodAroundName": "准备测试上下文",
  "resultView": "JSON"
}

前后置脚本的执行规则见前后置脚本。

7. 搜索 HTTP 地址 ​

工具名:search_http_url。读取 IDEA 项目中的 HTTP 索引并返回 Controller 元数据,不会发送 HTTP 请求,也不会调用目标方法。

参数必填类型说明
projectPath否string目标 IDEA 项目路径。
path否stringURL 路径子串,忽略大小写。
method否stringHTTP 方法,例如 GET、POST;GET 也匹配通用 Request 映射。
moduleName否stringIDEA 模块名称,精确匹配。
limit否integer默认 50,限制在 1 到 200。

请求示例:

json
{
  "path": "/users",
  "method": "GET",
  "moduleName": "demo-service",
  "limit": 20
}

正常结果使用结构化包装,data 中包含 count、indexState 和 items:

字段说明
items[].methodHTTP 方法。
items[].path映射路径。
items[].moduleNameIDEA 模块名称。
items[].classNameController 类全限定名。
items[].methodNameJava 方法名称。
items[].targetMethodIdentity索引中的方法标识,可辅助区分重载。
items[].comment方法注释。

部分元数据可能为空。选择候选后,仍需根据准确的方法签名生成参数模板;不要把 URL 直接当作方法调用参数。

5.3.0 的正常结果中 indexState 为 READY。count=0 表示本次索引查询没有匹配项,不是对运行中服务端路由是否存在的验证。