re-il2cpp
An MCP server that recovers original C# class, method, field, and parameter names from Unity IL2CPP global-metadata.dat files to assist with reverse engineering Unity games.
README
re-il2cpp
An MCP server that reads Unity IL2CPP global-metadata.dat files to recover
the original C# class, method, field, and parameter names that the IL2CPP
compiler stripped from GameAssembly.dll. Drives Claude Code's reverse
engineering on Unity games.
The format is reverse-engineered from the public
Il2CppDumper MetadataLoader.cs.
Install
pip install -e ./servers/re-il2cpp[rva] # [rva] pulls in LIEF for resolve_method_rva
Without the [rva] extra, all 12 tools in the table walker work; only
resolve_method_rva requires LIEF. The repo's install.sh calls the
[rva] form automatically.
What it does
IL2CPP compiles a Unity C# project into native x86_64 / ARM64 code. The
resulting GameAssembly.dll (often 100s of MB) has all the C# class names
mangled away. But the unprotected global-metadata.dat (typically
5-15 MB) sitting next to it still has every original C# symbol name as a
plain UTF-8 string. This server reads that file and exposes the class
graph as JSON.
What it does NOT do
- Does not crack encrypted-VM bytecode (any commercial variant) —
use
re-drm-fingerprintonGameAssembly.dllfor that. - Does not recover C# source code — only the class/method/field names.
The bodies are in
GameAssembly.dll, which is the encrypted-VM bytecode-protected IL2CPP runtime. - Does not parse Unity asset bundles (
level*,sharedassets*). Usere-format-decodefor those. - Does not fully resolve
return_type_index/type_indexfor methods and fields to a C# type name. The walker returns raw type indices; full name resolution requires readings_Il2CppMetadataRegistration::types[]from GameAssembly.dll, which is a v2.3.0 follow-up.
Supported versions
Unity 2019.4 - 2022.3 LTS lines (metadata header versions 24, 25, 26, 27, 28, 29). The bundled test target (Unity 2020.3.15f2, header v27) is the canonical integration-test sample.
Tools
Metadata header
check_il2cpp(metadata_path)— confirm the file is a realglobal-metadata.dat, return Unity version, header version, and per-table counts.
String table (fast enumeration)
list_strings(metadata_path, substring="", limit=500)— return strings from the string table (the unprotected C# symbol table). Filter by substring.list_namespaces(metadata_path)— return a sorted list of namespaces extracted from class FQNs in the string table.list_classes(metadata_path, namespace="", limit=500)— return class FQNs (filterable by namespace).search_strings(metadata_path, substring, limit=50)— substring search; useful for finding asset-bundle paths, save keys, or specific gameplay terms in the metadata.
Binary tables (structured class graph)
get_type_definitions(metadata_path, namespace="", limit=500)— walk thetypeDefinitionstable; return per-class parent, method/field/property/event counts, type index, and token.get_methods(metadata_path, class_fqn, limit=500)— typed methods of a class with token, parameter count, return type index.get_fields(metadata_path, class_fqn, limit=200)— typed fields of a class with type index.get_parameters(metadata_path, method_fqn, limit=50)— typed parameters of a method in declaration order.get_properties(metadata_path, class_fqn, limit=200)— properties withhas_getter/has_setterflags.get_events(metadata_path, class_fqn, limit=200)— events withhas_add/has_remove/has_raiseflags.get_images(metadata_path)— list of IL2CPP images (assemblies) with type ranges and exported-type counts.
RVA cross-reference (requires pip install re-il2cpp[rva])
resolve_method_rva(metadata_path, gameassembly_path, method_fqn)— resolve aNamespace.ClassName.MethodNameto its GameAssembly.dll RVA by parsing the runtime registration structures. Pass the returnedfunction_rvatore-rizin.disassemble_functionto read the function body. For stripped GameAssembly.dll (the default for shipped Unity games), returns the structured data plus the IL2CPP mangled name to use withre-rizin.search_bytes.
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.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.
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.