ce-mcp
Enables AI agents to programmatically control Cheat Engine for memory scanning, editing, cheat table management, and reverse engineering tasks.
README
š§ ce-mcp ā Cheat Engine MCP Server
Give an AI agent full, programmatic control of Cheat Engine through the Model Context Protocol.
ce-mcp lets a model like Claude attach to a running process, scan and edit
memory, build cheat tables, resolve pointer chains, disassemble/assemble code,
run Auto Assembler scripts, and inspect Unity/Mono games ā the same workflow a
human reverse-engineer follows in the Cheat Engine UI, exposed as clean MCP
tools.
"Attach to the game, find my health value, then freeze it."
ā
āāāāāā¼āāāāāāāāāā MCP/stdio āāāāāāāāāāāāāāāā HTTP/JSON āāāāāāāāāāāāāāāā
ā AI agent ā āāāāāāāāāāāāāāāā¶ā ce-mcp ā āāāāāāāāāāāāāā¶ā Cheat Engine ā
ā (Claude etc) ā āāāāāāāāāāāāāāāāā (Python, ā āāāāāāāāāāāāāāā Lua bridge ā
āāāāāāāāāāāāāāāā ā FastMCP) ā 37712 ā (in-process) ā
āāāāāāāāāāāāāāāā āāāāāāāāāāāāāāāā
⨠Why this design
Cheat Engine has no external API ā its automation surface lives entirely in its
embedded Lua engine. ce-mcp bridges that gap with two cooperating halves:
| Half | Lives in | Job |
|---|---|---|
Lua bridge (lua/ce_mcp_bridge.lua) |
Inside Cheat Engine | Tiny loopback HTTP/JSON server that calls CE's Lua API directly ā scanning, reading/writing, AA, debugger, Mono. Ships its own hand-written JSON parser (no external deps). |
MCP server (src/ce_mcp/) |
Python process | Speaks MCP over stdio to the agent, translates each tool call into an HTTP request to the bridge. Built on the official mcp SDK (FastMCP). |
This keeps the agent-facing contract clean and typed, while all the CE-specific magic stays where it has to be ā inside Cheat Engine.
š ļø Capabilities
40+ tools covering effectively the whole manual workflow:
| Group | Tools |
|---|---|
| Process | process_list, process_attach, process_detach, process_current, process_modules, process_regions |
| Memory | memory_read, memory_read_batch, memory_write, memory_dump, memory_alloc, memory_free |
| Scanning | scan_first, scan_next, scan_results, scan_reset, scan_aob |
| Cheat table | table_list, table_add, table_remove, table_set_value, table_freeze, table_enable, table_hotkey, table_save, table_load, table_clear |
| Pointers | pointer_resolve, pointer_scan |
| Code | disassemble, assemble, auto_assemble |
| Debugger | find_what_writes, find_what_accesses, breakpoint |
| Mono/Unity | mono_init, mono_classes |
| Misc | speedhack, lua_execute (raw Lua escape hatch), ce_status, ce_version, ce_routes |
Every scan type Cheat Engine supports is available: exact, bigger,
smaller, between, unknown, changed, unchanged, increased,
decreased, increasedby, decreasedby. Every value type too: byte ⦠qword,
float, double, string (incl. UTF-16), and AOB byte arrays with wildcards.
š Quick start
1. Requirements
- Windows with Cheat Engine 7.x installed
- Python 3.10+
2. Install the Python server
git clone https://github.com/imrx44/mcp.git
cd mcp
pip install -e .
# or, without packaging: pip install -r requirements.txt
3. Start the in-CE bridge
- Open Cheat Engine.
- Table āø Cheat Table Lua Script (
Ctrl+Alt+L). - Paste the contents of
lua/ce_mcp_bridge.luaand click Execute. - The CE console prints:
[CE-MCP] listening on http://127.0.0.1:37712.
š” To auto-start it every time, drop the file into Cheat Engine's
autorun/folder.
4. Wire it into your MCP client
Add the block from examples/claude_desktop_config.json
to your Claude Desktop config (or any MCP client), pointing PYTHONPATH at this
repo's src/. Restart the client and the cheat-engine tools appear.
5. Verify
Ask the agent: "Run ce_status." ā you should get the Cheat Engine version back.
š® Example: freeze your health (end to end)
A natural-language session the agent can now carry out by itself:
1. process_list filter="game" ā find the pid
2. process_attach process="game.exe"
3. scan_first value=100 value_type="4byte" scan_type="exact"
... take damage in-game ...
4. scan_next value=92 scan_type="exact"
... repeat until one result remains ...
5. scan_results ā 0x1F3A4C20
6. table_add address="0x1F3A4C20" description="Health" type="4byte"
7. table_freeze id=<id> ā health locked
And a code-injection ("godmode") cheat via Auto Assembler:
auto_assemble(script="""
[ENABLE]
aobscanmodule(hpHook,game.exe,29 87 ?? ?? ?? ??) // sub [edi+offset],eax
alloc(newmem,128,hpHook)
label(ret)
newmem:
// skip the subtract ā take no damage
jmp ret
hpHook:
jmp newmem
nop 2
ret:
[DISABLE]
hpHook:
db 29 87 ?? ?? ?? ??
dealloc(newmem)
""")
āļø Configuration
The Python server reads these environment variables:
| Variable | Default | Meaning |
|---|---|---|
CE_MCP_HOST |
127.0.0.1 |
Bridge host |
CE_MCP_PORT |
37712 |
Bridge port (must match the Lua file) |
CE_MCP_TIMEOUT |
60 |
HTTP timeout (s) ā raise for long scans |
š Security notes
- The bridge binds to loopback only and has no authentication ā anything
that can reach
localhost:37712can drive Cheat Engine. Don't expose the port. - This is a debugging / reverse-engineering tool. Use it on software you own or are authorised to analyse, and respect the terms of service of online games.
š§© Architecture details
- No external Lua dependencies. The bridge implements its own recursive-descent JSON encoder/decoder, so it runs on a stock Cheat Engine install.
- Non-blocking server. The HTTP accept loop runs on a CE timer, so it never freezes the Cheat Engine UI.
- Stateful scan session.
scan_firstcreates a CEMemScan/FoundListthat laterscan_next/scan_results/scan_resetcalls operate on ā mirroring the UI. - Clean error contract. Every response is
{ ok, data | error }; the Python client raises a typedBridgeErrorthat tools surface as a readable message.
See docs/TOOLS.md for the full per-tool reference.
š Project layout
MCP/
āāā lua/
ā āāā ce_mcp_bridge.lua # In-Cheat-Engine HTTP/JSON bridge
āāā src/ce_mcp/
ā āāā server.py # FastMCP server + all tool definitions
ā āāā client.py # Async HTTP client for the bridge
ā āāā __main__.py # python -m ce_mcp
ā āāā __init__.py
āāā examples/
ā āāā claude_desktop_config.json
āāā docs/
ā āāā TOOLS.md # Full tool reference
āāā pyproject.toml
āāā requirements.txt
āāā README.md
š License
MIT ā see LICENSE.
Not affiliated with Cheat Engine or its author. "Cheat Engine" is the property of its respective owners.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
Neon Database
MCP server for interacting with Neon Management API and databases
E2B
Using MCP to run code via e2b.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.