服务端 ggmcp 共提供 45 个 MCP 工具。App 已把常用操作做成按钮;任何工具都可以在「工具 → RAW 调用」里填写工具名 + JSON 参数直接调用,因此服务端升级后无需等待 App 更新。
| 参数 |
取值 |
type |
byte word dword qword float double;gg_search 额外支持 auto(同时扫 byte/word/dword/qword/float,按稀有度汇总) |
region |
all heap stack anonymous module |
address / rangeStart / rangeEnd |
0x 十六进制或十进制 |
value |
十进制、0x 十六进制、浮点(按 type 解析) |
aligned |
是否按类型宽度对齐扫描(默认 true) |
refine |
两步搜索:只在上一次结果集中过滤,秒级完成 |
| 工具 |
说明 |
参数 |
gg_status |
会话状态:附加进程、读写模式(kernel / processvm / memfile)、结果数、冻结数、GG 绑定状态 |
无 |
gg_config_get |
查看运行时配置 |
无 |
gg_config_set |
修改配置并持久化到 /data/local/tmp/ggmcp/config.json |
searchMaxResults searchCandidateMax fuzzyMaxSnapshotMB freezeIntervalMs listDefaultLimit listMaxLimit resultsDefaultLimit resultsMaxLimit setAllMax |
gg_server_stop |
关闭服务端进程(释放内存;再次使用需重新启动) |
无 |
| 工具 |
说明 |
参数 |
gg_list_processes |
进程列表(pid / 名称 / 命令行 / uid / rss) |
query includeKernel appOnly sort(active pid adj name)limit offset |
gg_attach |
附加目标进程,后续内存操作都针对它;自动初始化内核通道 |
target(pid、包名或进程名) |
gg_detach |
分离当前进程并清空搜索状态 |
无 |
gg_target_info |
目标进程内存映射概况 + 模块列表 |
无 |
gg_module_list |
已加载模块(路径 + 基址 + 大小) |
query |
gg_pause / gg_resume |
暂停(SIGSTOP)/ 恢复(SIGCONT)目标进程 |
无 |
| 工具 |
说明 |
参数 |
gg_search |
精确搜索已知值;auto 类型会同时扫多种宽度 |
value type region rangeStart rangeEnd aligned refine |
gg_search_unknown_init |
模糊搜索初始化:记录当前值作为快照,候选为全地址 |
type region rangeStart rangeEnd |
gg_search_refine |
模糊搜索细化,与上次快照比较 |
mode(increased decreased unchanged changed range)minValue maxValue minAbsValue |
gg_search_range |
搜索落在 [min, max] 区间的地址 |
min max type region |
gg_search_xor |
Xor 加密值搜索:统计密钥分布并以众数密钥为候选;refine=true 保留密钥不变的地址 |
value type region rangeStart rangeEnd refine |
gg_result_count |
当前结果数量 |
无 |
gg_get_results |
查看结果(地址 + 当前值,分页) |
limit offset |
gg_clear_results |
清空结果 |
无 |
| 工具 |
说明 |
参数 |
gg_read |
读取指定地址的值 |
address type |
gg_read_bytes |
读取原始字节(hex) |
address size |
gg_hex_dump |
Hex 转储一段内存(便于看结构体) |
address size |
gg_write |
向指定地址写入值 |
address value type |
gg_set_results |
批量修改结果:① values 数组({index 或 address, value, type})② all=true + value 把所有结果改成同一值 |
values all value type |
gg_freeze |
冻结地址的值(持续写入,直到解冻) |
index address value type id |
gg_unfreeze |
解冻:id 指定冻结项,或 all 解冻全部 |
id |
gg_freeze_results |
批量冻结当前结果集为同一值,支持范围过滤与坐标对模式 |
value type minValue maxValue minAbsValue excludeNaN pairOnly maxCount |
gg_watch |
持续监控若干地址的值变化(坐标流 / 动态值检测) |
addresses(数组)type durationMs intervalMs onlyChanges |
| 工具 |
说明 |
参数 |
gg_module_base |
取指定模块基址 |
name |
gg_calc_offset |
计算地址相对模块基址的偏移 |
address module |
gg_pointer_scan |
扫描内存中“值等于目标地址”的指针(找指针链) |
targetAddress type(dword / qword)region |
gg_analyze_results |
分析当前结果:值分组统计 + 地址相邻对(结构体特征)+ 区间分布 |
maxScan gap |
gg_export_results |
把当前结果导出为 JSON 文件,返回路径与大小 |
path |
| 工具 |
说明 |
参数 |
gg_snapshot_results |
把当前结果保存为命名快照(持久化到 /data/local/tmp/ggmcp/snapshots) |
id source |
gg_list_snapshots |
列出所有快照 |
无 |
gg_delete_snapshot |
删除快照(id=all 删除全部) |
id |
gg_cross_analyze |
交叉分析两个结果集:交集 / 仅 A / 仅 B / 相邻对 / 同值交集(current 表示当前结果) |
snapA snapB gap |
| 工具 |
说明 |
参数 |
gg_bind_gg |
自动发现并绑定 GG 修改器(改版随机包名也能识别);绑定信息持久化 |
package |
gg_switch_gg |
换绑另一个 GG 修改器 |
package |
gg_unbind_gg |
解绑并清除持久化信息 |
无 |
gg_read_gg_saved |
从 GG 进程内存中读取你手动保存的地址列表 |
gameStart gameEnd maxItems |
gg_list_gg_files |
列出 GG 数据目录下的文件(路径 + 大小 + 时间) |
path |
gg_read_gg_file |
读取 GG 数据目录内的指定文件(只读,路径限定在 GG 数据目录内) |
path |
gg_lua_write |
生成 Lua 脚本到 /sdcard/ggmcp/,供 GG 执行 |
code name |
gg_lua_read_out |
回读脚本输出(脚本用 io.open 写到 <name>.out.txt) |
name |
注意(工具名变更):上游 v2.9.13 把读取 GG 数据文件的 handler 改名为 gg_read_gg_file,但工具列表里的 gg_list_gg_files 条目未同步更新,导致:
- 用仓库内
server/ 源码重新编译的服务端:gg_read_gg_file 可用(按名调用),gg_list_gg_files 会报未知工具;
- 用 APK 内置二进制:
gg_list_gg_files 可用,gg_read_gg_file 不存在。
两个按钮在「工具 → GameGuardian 联动」里都有;若其中一个报错,用另一个,或在 RAW 调用里手动指定可用的工具名。详见 FAQ.md。
| 工具 |
说明 |
参数 |
gg_shell |
以 root 身份执行 shell 命令(危险,谨慎使用) |
cmd |
直接对本机服务发 JSON-RPC(电脑上配合 adb forward tcp:8788 tcp:8788 更方便):
# 附加进程
curl -s -X POST http://127.0.0.1:8788/mcp -H 'Content-Type: application/json' -d '{
"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"gg_attach","arguments":{"target":"com.example.game"}}
}'
# 精确搜索
curl -s -X POST http://127.0.0.1:8788/mcp -H 'Content-Type: application/json' -d '{
"jsonrpc":"2.0","id":2,"method":"tools/call",
"params":{"name":"gg_search","arguments":{"value":"100","type":"dword","region":"all"}}
}'
# 两步搜索:数值变化后 refine
curl -s -X POST http://127.0.0.1:8788/mcp -H 'Content-Type: application/json' -d '{
"jsonrpc":"2.0","id":3,"method":"tools/call",
"params":{"name":"gg_search","arguments":{"value":"120","type":"dword","refine":true}}
}'
# 把所有结果改成 99999
curl -s -X POST http://127.0.0.1:8788/mcp -H 'Content-Type: application/json' -d '{
"jsonrpc":"2.0","id":4,"method":"tools/call",
"params":{"name":"gg_set_results","arguments":{"all":true,"value":"99999","type":"dword"}}
}'
# 列出全部工具(含参数 schema)
curl -s -X POST http://127.0.0.1:8788/mcp -H 'Content-Type: application/json' -d '{
"jsonrpc":"2.0","id":5,"method":"tools/list","params":{}
}'
响应结构(tools/call):
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"content": [{ "type": "text", "text": "{...}" }],
"structuredContent": {
"ok": true,
"data": { "...": "工具返回的数据" },
"error": null,
"nextActions": []
}
}
}
ok=false 时,error 里包含 code / message / severity / recoverable,App 会用中文提示出来。