AI-powered game memory scanner and reverse engineering toolkit — an MCP (Model Context Protocol) server that gives AI coding assistants direct access to memory scanning, process memory editing, and IL2CPP reverse engineering tools across Linux & Windows.
Turn your AI assistant into a game hacking partner. Scan memory, freeze values, search IL2CPP metadata, and modify game values — all through natural language.
| Category | Tools | Description | Supported OS |
|---|---|---|---|
| 🔍 Memory Scanning | scanmem_scan_*, session_* |
Exact, range, type-based, increased/decreased/changed value scanning | Linux & Windows |
| 🧱 Memory Alloc & Protect | memory_allocate, memory_protect, memory_free |
Allocate virtual memory (VirtualAllocEx / mmap), set page protection flags (VirtualProtectEx / mprotect), and free stubs |
Linux & Windows |
| ✏️ Memory Writing | scanmem_write_*, memory_write_bytes (up to 64KB), scanmem_freeze_* |
Safe guarded writes with preview, dry-run, confirmation, hex patching, and persistent freeze | Linux & Windows |
| 📖 Memory Reading | memory_read_* |
Read bytes, ints, floats, and strings from process memory | Linux & Windows |
| 🧬 IL2CPP Reverse | il2cpp_* |
Search classes, methods, fields, strings, and RVA in Unity IL2CPP dumps | Linux & Windows |
| 🔄 IL2CPP Automation | il2cpp_run_dumper, il2cpp_scan_taskbarhero_offsets |
Automated dumper execution & deterministic heuristic offset recovery across game updates | Linux & Windows |
| 📊 Cheat Tables | table_* |
Save/load/resolve/validate cheat entries with module+RVA tracking | Linux & Windows |
| 📋 Reports | reverse_report_* |
Create and manage local reverse engineering reports per game | Linux & Windows |
| 🎯 Process Utils | process_*, rva_* |
Process search, module listing, RVA/address conversion, memory maps | Linux & Windows |
| 🔬 GDB Hooks | gdb_hook_*, gdb_probe_* |
Dynamic function hooking, breakpoint probes, disassembly preview | Linux only |
78 MCP tools in total — all accessible via natural language through any MCP-compatible AI assistant.
# Arch Linux
sudo pacman -S scanmem gdb rust
# Debian / Ubuntu
sudo apt update && sudo apt install -y scanmem gdb cargoNo external dependencies (scanmem or GDB) required! The memory engine runs natively via Win32 API (kernel32.dll).
Install Rust if building from source:
winget install Rustlang.Rustupgit clone https://github.com/gede-cahya/cheat-engine-mcp.git
cd cheat-engine-mcp
./install.shThis builds the release binary and installs it to:
~/.local/bin/cheat-engine-mcpAdd this MCP config to your client:
{
"mcpServers": {
"cheat-engine-mcp": {
"command": "/home/YOUR_USER/.local/bin/cheat-engine-mcp"
}
}
}Build the MCP server natively (or run install-antigravity.ps1):
git clone https://github.com/gede-cahya/cheat-engine-mcp.git
cd cheat-engine-mcp
cargo build --releaseCopy the binary to a stable location:
New-Item -ItemType Directory -Force C:\Tools | Out-Null
Copy-Item .\target\release\cheat-engine-mcp.exe C:\Tools\cheat-engine-mcp.exeCheck it:
C:\Tools\cheat-engine-mcp.exe --helpAdd this MCP config to your client:
{
"mcpServers": {
"cheat-engine-mcp": {
"command": "C:\\Tools\\cheat-engine-mcp.exe"
}
}
}Or run the automated setup script for Antigravity:
.\install-antigravity.ps1Choose your AI assistant and follow Install cheat-engine-mcp ke MCP Client.
| AI Assistant | Config | Skill support |
|---|---|---|
| Google Antigravity | ~/.gemini/config/settings.json or %USERPROFILE%\.gemini\config\settings.json |
Copy SKILL.md into Antigravity/Gemini skills folder if enabled |
| Claude Code | .claude/settings.json per repo |
.claude/skills/cheat-engine-mcp/SKILL.md |
| Claude Desktop | claude_desktop_config.json |
Use project instructions / prompt installer |
| Cursor / Windsurf / Generic MCP | Client MCP config file | Use the prompt installer or custom rules |
Need an agent to install it for you? Copy docs/SKILL_INSTALL_PROMPT.md into Antigravity, Claude Code, or another coding agent.
All MCP-compatible clients use the same server binary. The only difference is where the config file lives.
| Client | Linux | macOS | Windows |
|---|---|---|---|
| Antigravity | ~/.gemini/config/settings.json |
~/.gemini/config/settings.json |
%USERPROFILE%\.gemini\config\settings.json |
| Claude Code | .claude/settings.json (per-repo) |
Same | Same |
| Claude Desktop | ~/.config/Claude/claude_desktop_config.json |
~/Library/Application Support/Claude/claude_desktop_config.json |
%APPDATA%\Claude\claude_desktop_config.json |
| Cursor | .cursor/mcp.json (per-project) |
Same | Same |
For the best experience, install the skill definition so your AI assistant knows how to use the tools effectively.
mkdir -p ~/.gemini/config/skills/cheat-engine-mcp
cp .claude/skills/cheat-engine-mcp/SKILL.md ~/.gemini/config/skills/cheat-engine-mcp/SKILL.mdmkdir -p YOUR_REPO/.claude/skills
cp -r .claude/skills/cheat-engine-mcp/ YOUR_REPO/.claude/skills/cheat-engine-mcp/
cp CLAUDE.md YOUR_REPO/CLAUDE.mdOnce configured, just talk to your AI assistant naturally:
"Scan game TaskbarHero for health value 100, then set it to 999"
The AI will:
process_search→ find the game PIDsession_create→ create a scan sessionscanmem_scan_exact→ scan for value 100- Refine with
scanmem_scan_decreased/scanmem_scan_unchanged scanmem_preview_write→ preview the writescanmem_write_selected→ apply with safety guards
"Search for Hero class methods in TaskbarHero's IL2CPP dump"
The AI will:
workspace_set_active→ set game workspaceil2cpp_class_search→ find Hero classil2cpp_method_search→ find relevant methodsil2cpp_field_search→ find class fields and offsetsil2cpp_find_by_rva→ map RVA addresses
"Game Taskbar Heroes habis update, tolong dump dan scan offset terbarunya untuk godmode dan damage"
The AI will:
process_search→ findTaskbarHero.exelive PIDil2cpp_run_dumper→ automatically run Il2CppDumper from PIDil2cpp_scan_taskbarhero_offsets→ heuristically match anchors ondump.cs:- Base health & Damage RVA (
pj.gsi) - Hero Receiver Godmode RVA (
pf.gsi) - Stat multiplier RVA (
zo.haz) - AoE radius & hitbox RVA (
bec.nax)
- Base health & Damage RVA (
- Compute Runtime Addresses (
Base + RVA) and output Markdown comparison table memory_write_bytes→ apply godmode byte patches with confirmation
"Hook the damage function at RVA 0x958ADC in GameAssembly.dll and multiply damage by 1000"
The AI will:
rva_disassemble_preview→ inspect the functiongdb_hook_preview→ preview the hook scriptgdb_hook_start→ attach and hook (with confirmation)- Monitor via log output
| Tool | Description |
|---|---|
process_search |
Search running processes by name |
process_info |
Get detailed process information |
process_suggest_target |
AI-friendly target suggestion |
process_list_modules |
List loaded modules/DLLs |
process_read_maps |
Read /proc/PID/maps |
process_module_base |
Get module base address |
rva_to_address |
Convert RVA to absolute address |
address_to_rva |
Convert absolute address to RVA |
memory_read_bytes |
Read raw bytes from memory |
memory_read_int |
Read integer value |
memory_read_float |
Read float value |
memory_read_string |
Read string from memory |
| Tool | Description |
|---|---|
session_create |
Create scan session for a PID |
session_status |
Check session state |
session_close |
Close session and cleanup |
scanmem_scan_exact |
Scan for exact value |
scanmem_scan_increased |
Filter: value increased |
scanmem_scan_decreased |
Filter: value decreased |
scanmem_scan_changed |
Filter: value changed |
scanmem_scan_unchanged |
Filter: value unchanged |
scanmem_scan_unknown |
Initial unknown value scan |
scanmem_scan_range |
Scan value range |
scanmem_scan_by_type |
Typed scan (int32/float/string/etc.) |
| Tool | Description |
|---|---|
memory_allocate |
Allocate virtual memory (VirtualAllocEx on Windows, mmap on Linux) with rwx, rw, rx, or r permissions |
memory_protect |
Modify memory page protection flags (VirtualProtectEx on Windows, mprotect on Linux) |
memory_free |
Free or decommit virtual memory (VirtualFreeEx on Windows, munmap on Linux) |
memory_write_bytes |
Write bounded raw hex bytes (up to 64KB, e.g. code cave payloads, detour stubs) directly to memory / RVA |
scanmem_preview_write |
Preview write operation (safe) |
scanmem_write_selected |
Write to matched addresses |
scanmem_freeze_value |
Freeze value (one-shot or persistent) |
scanmem_unfreeze_value |
Stop freezing |
| Tool | Description |
|---|---|
gdb_hook_preview |
Preview single hook script |
gdb_hook_start |
Start single GDB hook |
gdb_hook_stop |
Stop hook and detach |
gdb_hook_group_preview |
Preview multi-breakpoint hook |
gdb_hook_group_start |
Start hook group |
gdb_hook_group_stop |
Stop hook group |
gdb_probe_preview |
Preview read-only probe |
gdb_probe_start |
Start probe (auto-stops after N hits) |
gdb_probe_stop |
Stop probe |
rva_disassemble_preview |
Disassemble at RVA |
gdb_disassemble_address |
Disassemble at absolute address |
gdb_breakpoint_probe_preview |
Preview breakpoint probe |
| Tool | Description |
|---|---|
il2cpp_run_dumper |
Automatically run Il2CppDumper from live PID or GameAssembly.dll path |
il2cpp_scan_taskbarhero_offsets |
Heuristic anchor scan on dump.cs to discover Godmode, Instakill, and AoE RVAs |
il2cpp_artifacts_status |
Check dump.cs availability |
il2cpp_class_search |
Search classes by name |
il2cpp_method_search |
Search methods by name |
il2cpp_field_search |
Search fields by name |
il2cpp_string_search |
Search string literals |
il2cpp_script_search |
Search MonoBehaviour scripts |
il2cpp_method_detail |
Get method details |
il2cpp_find_by_rva |
Find method by RVA |
il2cpp_related_methods |
Find related methods |
| Tool | Description |
|---|---|
workspace_list |
List all game workspaces |
workspace_status |
Current workspace status |
workspace_set_active |
Set active workspace |
workspace_clear_active |
Clear active workspace |
reverse_report_create |
Create reverse report |
reverse_report_add_finding |
Add finding to report |
reverse_report_list |
List reports for a game |
| Tool | Description |
|---|---|
table_create |
Create new cheat table |
table_add_entry |
Add entry to table |
table_list_entries |
List table entries |
table_resolve_entries |
Resolve RVAs to addresses |
table_validate_entries |
Validate entries against live process |
table_load |
Load table from file |
table_save |
Save table to file |
This tool is built with defense-in-depth safety:
- Preview First — All destructive operations have a preview/dry-run mode
- Explicit Confirmation — Writes require
confirm_write: true, hooks requireconfirm_hook: true - Write Limits —
max_writescaps the number of addresses modified - Dry Run —
dry_run: truesimulates without touching memory - GDB Command Whitelist — Only
set,printf,if/else/endallowed in hook scripts - Session Timeout — Scan sessions auto-expire after 30 minutes
- Live PID Check — Validates process is alive before any operation
git clone https://github.com/gede-cahya/cheat-engine-mcp.git
cd cheat-engine-mcp
cargo build --release
# Binary: ./target/release/cheat-engine-mcpgit clone https://github.com/gede-cahya/cheat-engine-mcp.git
cd cheat-engine-mcp
cargo build --release
# Binary: .\target\release\cheat-engine-mcp.exe./install.sh
# Installs to ~/.local/bin/cheat-engine-mcp
# Custom prefix:
PREFIX=/usr/local sudo -E ./install.shcargo fmt --check
cargo test
cargo check
cargo build --release
(cd examples/dummy-target && cargo check)# Initialize
printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}' | cargo run -q
# List tools
printf '%s\n' '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' | cargo run -q
# Ping
printf '%s\n' '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"ping","arguments":{}}}' | cargo run -q# Terminal 1: Start dummy target
cd examples/dummy-target && cargo run
# Terminal 2: Scan with PID from terminal 1
printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"scanmem_scan_exact","arguments":{"pid":PID,"value":"100"}}}' | cargo run -q# Check current setting
cat /proc/sys/kernel/yama/ptrace_scope
# Allow ptrace (for development)
sudo sysctl kernel.yama.ptrace_scope=0
# Restore default (more secure)
sudo sysctl kernel.yama.ptrace_scope=1| Problem | Solution |
|---|---|
scanmem not found |
Install: sudo apt install scanmem or sudo pacman -S scanmem |
gdb not found |
Install: sudo apt install gdb or sudo pacman -S gdb |
| Permission denied | Run MCP and target as same user; check ptrace_scope |
| PID not found | Ensure target process is running; check with pgrep |
| Too many matches | Use refine scans (increased/decreased/unchanged) |
cheat-engine-mcp/
├── src/
│ ├── main.rs # MCP server (78 tools, JSON-RPC router)
│ ├── native_scan.rs # Pure cross-platform memory buffer scanner
│ ├── windows.rs # Win32 API native process memory backend
│ └── il2cpp_heuristic.rs # Heuristic anchor offset recovery engine
├── Cargo.toml # Rust project config
├── install.sh # Linux install script
├── install-antigravity.sh # Antigravity one-click installer
├── install-antigravity.ps1 # Antigravity Windows installer
├── install-claude-code.sh # Claude Code one-click installer
├── install-claude-code.ps1 # Claude Code Windows installer
├── skills/
│ └── antigravity/ # Antigravity skill definition
│ ├── SKILL.md
│ └── AGENTS.md
├── .claude/
│ └── skills/
│ └── cheat-engine-mcp/ # Claude Code skill definition
│ └── SKILL.md
├── docs/
│ ├── SETUP_ANTIGRAVITY.md
│ ├── SETUP_CLAUDE_CODE.md
│ ├── SETUP_CLAUDE_DESKTOP.md
│ ├── SETUP_CURSOR.md
│ ├── SETUP_GENERIC.md
│ ├── REVERSE_OFFSETS.md
│ ├── RULES_INSTALL.md
│ ├── RELEASE.md
│ └── *.example.json
├── examples/
│ └── dummy-target/ # Test target for scanning
├── reverse/ # Local reverse artifacts (gitignored)
├── .cheat-tables/ # Local cheat tables (gitignored)
├── .github/workflows/ # CI + Release automation
├── CLAUDE.md # Claude Code project rules
├── README.md
├── ROADMAP.md
└── LICENSE
MIT License © gede-cahya
- Fork the repo
- Create your feature branch (
git checkout -b feature/amazing-feature) - Run tests (
cargo fmt --check && cargo test && cargo check) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request