DexKit 调试 MCP 工具
DexKit 调试 MCP 工具
这一组工具把 DexKit 的类、方法、字段和分组字符串检索暴露给外部 AI,并维护可继续收窄的调试作用域。
当前源码在这一组注册了 8 个工具。工具名大小写敏感;调用参数以本页表格和 MCP 客户端实时拿到的 input schema 为准。
使用前先知道
- 所有工具都通过 ScriptX 设置页启动的内置 MCP 服务暴露,不是脚本侧的
mcpServer对象。 - 所有返回值至少包含
ok、message、result。不要只判断 HTTP 状态码。 - 带
projectDir的分析工具通常要求先在 ScriptX 中缓存 APK,并使用get_analysis_state/list_apk_workspaces得到的真实工作区名。 - 安装、卸载、停止运行时和恢复备份等有副作用的工具,必须按参数表显式传入
confirm: true。
dexkit_debug_clear_scope
清空当前 DexKit 会话的筛选链,后续搜索重新从整包 APK 开始。
显示名称:DexKit 重置筛选链
参数:无。
返回值
返回统一 MCP 结果对象:ok 表示调用是否成功,message 是可读说明,具体数据放在 result。分析尚未准备好、后端安装中或需要先缓存 APK 时,ok 可能为 false,应先读 message 与 result 中的状态字段再决定下一步。
示例
{"name":"dexkit_debug_clear_scope","arguments":{}}
dexkit_debug_overview
返回当前缓存 APK、DexKit 当前筛选链和基础状态,供 VS Code 面板初始化使用。
显示名称:DexKit 调试概览
参数
| 参数 | 类型 | 必填 | 可填值 / 范围 | 说明 |
|---|---|---|---|---|
resetScope | boolean | 否 | true / false;默认 false | 是否重置当前 DexKit 筛选链。 |
返回值
返回统一 MCP 结果对象:ok 表示调用是否成功,message 是可读说明,具体数据放在 result。分析尚未准备好、后端安装中或需要先缓存 APK 时,ok 可能为 false,应先读 message 与 result 中的状态字段再决定下一步。
示例
{"name":"dexkit_debug_overview","arguments":{"resetScope":true}}
dexkit_debug_promote_last_result
把上一轮 DexKit 搜索结果提升为当前筛选链,后续搜索只在该结果范围内继续筛选。
显示名称:DexKit 继续筛选
参数:无。
返回值
返回统一 MCP 结果对象:ok 表示调用是否成功,message 是可读说明,具体数据放在 result。分析尚未准备好、后端安装中或需要先缓存 APK 时,ok 可能为 false,应先读 message 与 result 中的状态字段再决定下一步。
示例
{"name":"dexkit_debug_promote_last_result","arguments":{}}
dexkit_debug_search_batch_class
按手机端 DexKit 调试器的批量类字符串搜索条件搜索当前缓存 APK。
显示名称:DexKit 批量类搜索
参数
| 参数 | 类型 | 必填 | 可填值 / 范围 | 说明 |
|---|---|---|---|---|
groups | object | 是 | - | 分组条件,key 为组名,value 为字符串列表。 |
packageIncludes | array | 否 | - | 包名前缀白名单。 |
packageExcludes | array | 否 | - | 包名前缀黑名单。 |
ignoreCase | boolean | 否 | true / false;默认 false | 是否忽略大小写。 |
stringMatchType | string | 否 | Contains / StartsWith / EndsWith / SimilarRegex / Equals;默认 Contains | 字符串匹配方式。 |
maxResultsPerGroup | number | 否 | >= 1;默认 20 | 每组最大结果数;小于 1 时会被修正为 1。 |
返回值
返回统一 MCP 结果对象:ok 表示调用是否成功,message 是可读说明,具体数据放在 result。分析尚未准备好、后端安装中或需要先缓存 APK 时,ok 可能为 false,应先读 message 与 result 中的状态字段再决定下一步。
示例
{"name":"dexkit_debug_search_batch_class","arguments":{"groups":{"group1":["login","token"]},"maxResultsPerGroup":20}}
dexkit_debug_search_batch_method
按手机端 DexKit 调试器的批量方法字符串搜索条件搜索当前缓存 APK。
显示名称:DexKit 批量方法搜索
参数
| 参数 | 类型 | 必填 | 可填值 / 范围 | 说明 |
|---|---|---|---|---|
groups | object | 是 | - | 分组条件,key 为组名,value 为字符串列表。 |
packageIncludes | array | 否 | - | 包名前缀白名单。 |
packageExcludes | array | 否 | - | 包名前缀黑名单。 |
ignoreCase | boolean | 否 | true / false;默认 false | 是否忽略大小写。 |
stringMatchType | string | 否 | Contains / StartsWith / EndsWith / SimilarRegex / Equals;默认 Contains | 字符串匹配方式。 |
maxResultsPerGroup | number | 否 | >= 1;默认 20 | 每组最大结果数;小于 1 时会被修正为 1。 |
返回值
返回统一 MCP 结果对象:ok 表示调用是否成功,message 是可读说明,具体数据放在 result。分析尚未准备好、后端安装中或需要先缓存 APK 时,ok 可能为 false,应先读 message 与 result 中的状态字段再决定下一步。
示例
{"name":"dexkit_debug_search_batch_method","arguments":{"groups":{"group1":["login","token"]},"maxResultsPerGroup":20}}
dexkit_debug_search_class
按手机端 DexKit 调试器的类搜索条件搜索当前缓存 APK。
显示名称:DexKit 类搜索
参数
| 参数 | 类型 | 必填 | 可填值 / 范围 | 说明 |
|---|---|---|---|---|
packageIncludes | array | 否 | - | 包名前缀白名单。 |
packageExcludes | array | 否 | - | 包名前缀黑名单。 |
ignoreCase | boolean | 否 | true / false;默认 false | 是否忽略大小写。 |
stringMatchType | string | 否 | Contains / StartsWith / EndsWith / SimilarRegex / Equals;默认 Contains | 字符串匹配方式。 |
findFirst | boolean | 否 | true / false;默认 false | 是否只查找第一个结果。 |
maxResults | number | 否 | >= 1;默认 50 | 最大结果数量;小于 1 时会被修正为 1。 |
descriptor | string | 否 | - | 类描述符。 |
className | string | 否 | - | 类名。 |
source | string | 否 | - | 源文件名。 |
superClass | string | 否 | - | 父类描述。 |
usingStrings | array | 否 | - | 使用的字符串列表。 |
countSpec | object | 否 | - | method/field/interface 的最小值与最大值。 |
countSpec 可以填哪些字段
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
methodCountMin | number | 否 | 声明方法数量下限。 |
methodCountMax | number | 否 | 声明方法数量上限。 |
fieldCountMin | number | 否 | 声明字段数量下限。 |
fieldCountMax | number | 否 | 声明字段数量上限。 |
interfaceCountMin | number | 否 | 实现接口数量下限。 |
interfaceCountMax | number | 否 | 实现接口数量上限。 |
没有传入的字段不参与限制。这里的数量条件会和 className、usingStrings、包名白名单等其他条件同时生效。
{"name":"dexkit_debug_search_class","arguments":{"packageIncludes":["com.example"],"usingStrings":["token"],"countSpec":{"methodCountMin":2,"methodCountMax":20,"fieldCountMin":1},"maxResults":50}}
返回值
返回统一 MCP 结果对象:ok 表示调用是否成功,message 是可读说明,具体数据放在 result。分析尚未准备好、后端安装中或需要先缓存 APK 时,ok 可能为 false,应先读 message 与 result 中的状态字段再决定下一步。
示例
{"name":"dexkit_debug_search_class","arguments":{"className":"Main","usingStrings":["login"],"maxResults":50}}
dexkit_debug_search_field
按手机端 DexKit 调试器的字段搜索条件搜索当前缓存 APK。
显示名称:DexKit 字段搜索
参数
| 参数 | 类型 | 必填 | 可填值 / 范围 | 说明 |
|---|---|---|---|---|
packageIncludes | array | 否 | - | 包名前缀白名单。 |
packageExcludes | array | 否 | - | 包名前缀黑名单。 |
ignoreCase | boolean | 否 | true / false;默认 false | 是否忽略大小写。 |
stringMatchType | string | 否 | Contains / StartsWith / EndsWith / SimilarRegex / Equals;默认 Contains | 字符串匹配方式。 |
findFirst | boolean | 否 | true / false;默认 false | 是否只查找第一个结果。 |
maxResults | number | 否 | >= 1;默认 50 | 最大结果数量;小于 1 时会被修正为 1。 |
descriptor | string | 否 | - | 字段描述符。 |
name | string | 否 | - | 字段名。 |
declaredClass | string | 否 | - | 声明类。 |
type | string | 否 | - | 字段类型。 |
readMethods | array | 否 | - | 读取该字段的方法列表。 |
writeMethods | array | 否 | - | 写入该字段的方法列表。 |
返回值
返回统一 MCP 结果对象:ok 表示调用是否成功,message 是可读说明,具体数据放在 result。分析尚未准备好、后端安装中或需要先缓存 APK 时,ok 可能为 false,应先读 message 与 result 中的状态字段再决定下一步。
示例
{"name":"dexkit_debug_search_field","arguments":{"name":"guid","type":"Ljava/lang/String;","maxResults":50}}
dexkit_debug_search_method
按手机端 DexKit 调试器的方法搜索条件搜索当前缓存 APK。
显示名称:DexKit 方法搜索
参数
| 参数 | 类型 | 必填 | 可填值 / 范围 | 说明 |
|---|---|---|---|---|
packageIncludes | array | 否 | - | 包名前缀白名单。 |
packageExcludes | array | 否 | - | 包名前缀黑名单。 |
ignoreCase | boolean | 否 | true / false;默认 false | 是否忽略大小写。 |
stringMatchType | string | 否 | Contains / StartsWith / EndsWith / SimilarRegex / Equals;默认 Contains | 字符串匹配方式。 |
findFirst | boolean | 否 | true / false;默认 false | 是否只查找第一个结果。 |
maxResults | number | 否 | >= 1;默认 50 | 最大结果数量;小于 1 时会被修正为 1。 |
descriptor | string | 否 | - | 方法描述符。 |
name | string | 否 | - | 方法名。 |
declaredClass | string | 否 | - | 声明类。 |
returnType | string | 否 | - | 返回类型。 |
paramCount | number | 否 | >= 0 | 精确参数个数;0 表示无参方法。 |
paramTypes | array | 否 | - | 参数类型列表。 |
usingStrings | array | 否 | - | 使用的字符串列表。 |
usingFields | array | 否 | - | 使用的字段列表。 |
usingFieldType | string | 否 | Any / Read / Write;默认 Any | 字段使用方式 Any/Read/Write。 |
callerMethods | array | 否 | - | 调用者方法列表。 |
invokeMethods | array | 否 | - | 调用的方法列表。 |
opNames | array | 否 | - | 操作码名称列表。 |
opCodes | array | 否 | - | 操作码数值列表。 |
opCodeMatchType | string | 否 | Contains / StartsWith / EndsWith / Equals;默认 Contains | 操作码匹配方式。 |
方法搜索枚举怎么选
usingFieldType: "Any":读或写目标字段都可以命中。usingFieldType: "Read":只匹配读取目标字段的方法。usingFieldType: "Write":只匹配写入目标字段的方法。opCodeMatchType控制opNames/opCodes序列如何匹配,可填Contains、StartsWith、EndsWith、Equals;无法识别的值会按当前实现回退为Contains。stringMatchType也按枚举名精确解析;无法识别的值会回退为Contains。
{"name":"dexkit_debug_search_method","arguments":{"packageIncludes":["com.example"],"name":"login","paramCount":2,"usingFields":["Lcom/example/Session;->token:Ljava/lang/String;"],"usingFieldType":"Read","opNames":["const-string","invoke-virtual"],"opCodeMatchType":"Contains","maxResults":50}}
返回值
返回统一 MCP 结果对象:ok 表示调用是否成功,message 是可读说明,具体数据放在 result。分析尚未准备好、后端安装中或需要先缓存 APK 时,ok 可能为 false,应先读 message 与 result 中的状态字段再决定下一步。
示例
{"name":"dexkit_debug_search_method","arguments":{"name":"login","usingStrings":["token"],"maxResults":50}}
