Skip to main content
Glama
Heretek-RE

re-il2cpp

by Heretek-RE

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.

Related MCP server: revula

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-fingerprint on GameAssembly.dll for 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*). Use re-format-decode for those.

  • Does not fully resolve return_type_index / type_index for methods and fields to a C# type name. The walker returns raw type indices; full name resolution requires reading s_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 real global-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 the typeDefinitions table; 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 with has_getter / has_setter flags.

  • get_events(metadata_path, class_fqn, limit=200) — events with has_add / has_remove / has_raise flags.

  • 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 a Namespace.ClassName.MethodName to its GameAssembly.dll RVA by parsing the runtime registration structures. Pass the returned function_rva to re-rizin.disassemble_function to 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 with re-rizin.search_bytes.

Available Tools

14 tools
check_il2cppB

Read the metadata header and return version + per-table counts.

Args: metadata_path: optional path to global-metadata.dat. If empty, returns the server's status (no path is OK).

ParametersJSON Schema
NameRequiredDescriptionDefault
metadata_pathNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explains the behavior of the optional parameter (returns server status if empty) and the return type (version + per-table counts). No annotations are present, so the description carries full burden. It does not disclose side effects, error conditions, or performance implications, but for a read tool it is moderately transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, with two sentences and a clear Args section. No redundant information. It front-loads the core purpose and then explains the parameter. Every sentence serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one optional parameter and no output schema, the description covers the main functionality. However, it does not specify the format of the return value (e.g., JSON structure), which may leave the agent guessing. It is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It describes the sole parameter 'metadata_path' as optional and explains the behavior when empty. This adds significant meaning beyond the schema, which only lists the parameter name and type.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action: 'Read the metadata header and return version + per-table counts.' It clearly identifies the resource and output. However, it does not distinguish from sibling tools like get_assembly_types or get_methods, which may have overlapping functionality. The purpose is clear but lacks differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It implies it is a basic check, but does not explicitly state use cases, prerequisites, or when to choose another tool like list_classes or get_images.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_assembly_typesA

Enumerate every type in one IL2CPP assembly.

Unlike :func:list_classes (which scans the string table and misses root-namespace types), this walks the typeDef range owned by a specific image — use it to enumerate the publisher's actual game code (Assembly-CSharp.dll) or a specific engine module (UnityEngine.CoreModule.dll).

Each record: {fqn, namespace, name, type_index, method_count, field_count, property_count, event_count, nested_type_count, parent_index, token, flags} — same shape as :func:get_type_definitions.

Args: metadata_path: path to global-metadata.dat image_name: assembly file name (e.g. "Assembly-CSharp.dll") limit: maximum results

ParametersJSON Schema
NameRequiredDescriptionDefault
metadata_pathYes
image_nameYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but the description details that it walks the typeDef range owned by a specific image and lists the output fields. Lacks mention of side effects or permissions, but for a read-only query it is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with bullet points and clear sections, no wasted words, and efficiently conveys all necessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and the presence of an output schema, the description is fairly complete: explains tool behavior, parameter semantics, and output shape. Could mention error conditions or required context, but adequate for the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description explains the purpose of each parameter (metadata_path, image_name, limit) and the record structure, adding significant meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it enumerates every type in one IL2CPP assembly, and explicitly distinguishes from list_classes which misses root-namespace types, making the purpose specific and distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance (enumerating publisher's code or engine module) and contrasts with list_classes, giving clear context and alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_eventsA

Return the events of a class.

Args: metadata_path: path to global-metadata.dat class_fqn: fully qualified class name limit: maximum events to return (default 200)

ParametersJSON Schema
NameRequiredDescriptionDefault
metadata_pathYes
class_fqnYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It states it returns events but does not disclose potential side effects, performance implications, or what happens with large limits. It is minimally adequate for a simple retrieval tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, using a single sentence for the purpose and a structured Args list for parameters. Every line is essential, with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (not shown but indicated), the description could be slightly more complete by mentioning the output format. However, for a tool with 3 parameters, it provides adequate context for basic usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds significant value by explaining each parameter beyond the schema: 'path to global-metadata.dat', 'fully qualified class name', and 'maximum events to return (default 200)'. This fully compensates for the schema's minimal descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Return the events of a class,' using a specific verb and resource. It effectively distinguishes itself from sibling tools like 'get_fields' or 'get_methods', which return different aspects of a class.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when events are needed but lacks explicit guidance on when to use this tool vs alternatives, exclusions, or prerequisites. No context about required setup or typical scenarios is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_fieldsC

Return the fields of a class as a structured list.

Args: metadata_path: path to global-metadata.dat class_fqn: fully qualified class name limit: maximum fields to return (default 200)

ParametersJSON Schema
NameRequiredDescriptionDefault
metadata_pathYes
class_fqnYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It only says 'Return' but does not disclose potential performance impact, auth requirements, or whether fields are ordered. No behavioral traits beyond the basic action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise (one line plus args list), with no wasted words. However, the parameter list could be integrated more naturally into the description text rather than a separate block.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists but the description does not reference it or describe the return structure. No context about typical usage patterns or edge cases. Incomplete for a tool with 0% schema coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It lists parameters but adds no extra meaning beyond their names (e.g., does not explain 'limit' behavior or format of 'metadata_path').

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Return the fields of a class as a structured list,' which identifies the verb (return), resource (fields of a class), and output format (structured list). This distinguishes it from sibling tools like get_methods and get_properties.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives. It lacks context about prerequisites (e.g., need to get class FQN from list_classes) or exclusions (e.g., not for instance fields).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_imagesA

Walk the binary images table; return assembly image records.

Each image corresponds to one IL2CPP assembly (e.g. Assembly-CSharp.dll, UnityEngine.CoreModule.dll). The name field is the assembly file name; the type_count is the size of the typeDef range owned by this image.

Args: metadata_path: path to global-metadata.dat

ParametersJSON Schema
NameRequiredDescriptionDefault
metadata_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description bears full responsibility for behavioral transparency. It only states that the tool returns records, but does not mention whether it is read-only, performance implications, error conditions, or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose in the first sentence. Additional lines about fields add value, but the use of a code block is slightly verbose. Overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists and the tool has only one parameter, the description covers the essential context: what an image is, the parameter meaning, and the return concept. Missing error details, but acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description explicitly explains that the metadata_path parameter is the path to global-metadata.dat, adding valuable context beyond the schema's type 'string'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool walks the binary images table and returns assembly image records, explaining what an image corresponds to and what key fields mean. This specificity distinguishes it from sibling tools like get_assembly_types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool vs alternatives such as get_assembly_types or list_classes. No prerequisites or exclusions are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_methodsA

Return the methods of a class as a structured list.

Use this instead of search_strings for typed method discovery.

Args: metadata_path: path to global-metadata.dat class_fqn: fully qualified class name (e.g. "MyGame.PlayerController") limit: maximum methods to return (default 500)

ParametersJSON Schema
NameRequiredDescriptionDefault
metadata_pathYes
class_fqnYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It does not disclose behavioral traits such as auth requirements, side effects, error handling, or ordering of results. Only mentions default limit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very concise (5 lines) with front-loaded purpose and usage guidelines. Every sentence adds value, no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Tool has 3 params and output schema; description covers inputs well but lacks information about output format, error cases, or expected behavior when class not found. Acceptable given output schema exists but still some gaps for complex tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage, but description adds essential meaning: metadata_path explained as 'path to global-metadata.dat', class_fqn with example 'MyGame.PlayerController', and limit with default 500. Greatly enhances schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Return the methods of a class as a structured list', which is a specific verb+resource. It distinguishes from siblings like search_strings and other get_* tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises to 'Use this instead of search_strings for typed method discovery', providing clear when-to-use and an alternative tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_parametersA

Return the parameters of a method (in declaration order).

Args: metadata_path: path to global-metadata.dat method_fqn: "ClassName.MethodName" (e.g. "MyGame.PlayerController.TakeDamage") limit: maximum parameters to return (default 50)

ParametersJSON Schema
NameRequiredDescriptionDefault
metadata_pathYes
method_fqnYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses the ordering of parameters but does not discuss side effects, permissions, or error behavior. The description is adequate but minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: one line for purpose followed by clear bullet points for each parameter. No unnecessary words, well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete given the output schema exists; it covers the three parameters adequately. Minor omission: no mention of error cases or edge conditions, but not critical for this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds significant meaning beyond the input schema by explaining the format of method_fqn with an example and defining the purpose of each parameter. Schema coverage is 0%, so the description fully compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Return' and the resource 'parameters of a method', and specifies 'in declaration order'. This distinguishes it from sibling tools like get_fields or get_events.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context on required inputs (metadata_path, method_fqn) and a default limit, but does not explicitly state when to use this tool versus alternatives or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_propertiesB

Return the properties of a class.

Args: metadata_path: path to global-metadata.dat class_fqn: fully qualified class name limit: maximum properties to return (default 200)

ParametersJSON Schema
NameRequiredDescriptionDefault
metadata_pathYes
class_fqnYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must cover behavioral traits. It mentions the default limit (200) but omits whether the operation is read-only, requires authentication, or error behavior (e.g., if class is not found). This leaves significant gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured as a docstring with clear separation of purpose and arguments. It is reasonably concise but includes extra whitespace and indentation that could be trimmed without loss.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (not shown) and 3 parameters, the description covers parameter semantics adequately. However, it lacks information on return format, error handling, or prerequisites, leaving some contextual gaps for a new agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description fully explains all three parameters: metadata_path ('path to global-metadata.dat'), class_fqn ('fully qualified class name'), and limit ('maximum properties to return (default 200)'). This adds substantial value beyond the schema's title fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb 'Return' and resource 'properties of a class', making the purpose clear. However, it does not differentiate from sibling tools like 'get_fields' or 'get_methods', though the name itself provides distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives. The description only states what it does without context for selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_type_definitionsA

Walk the binary typeDefinitions table; return structured records.

Unlike list_classes (which harvests the string table for FQNs), this reads the actual record array and returns parent, type_index, method_count, field_count, etc. for each class.

Args: metadata_path: path to global-metadata.dat namespace: if set, only return typeDefs whose FQN starts with namespace + "." limit: maximum results (default 500)

ParametersJSON Schema
NameRequiredDescriptionDefault
metadata_pathYes
namespaceNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description implies a read-only operation without explicit annotation, and explains the returned fields (parent, type_index, etc.). However, it does not state side effects, permissions, or that it is non-destructive, though the context strongly suggests safety.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very concise, front-loaded action sentence, followed by a brief comparison, then a clean bullet list for parameters. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists, the description complements it by naming specific fields returned. It covers tool purpose, parameters, and distinguishes from siblings, making it fully complete for its complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema description coverage, the description fully explains each parameter: metadata_path is 'path to global-metadata.dat', namespace filter is 'only return typeDefs whose FQN starts with namespace + "."', and limit includes default. Adds critical meaning missing from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a clear verb 'Walk' and specific resource 'binary typeDefinitions table', and explicitly distinguishes itself from sibling tool list_classes by contrasting their data sources and outputs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Directly compares with list_classes, stating when to use each: 'Unlike list_classes...this reads the actual record array'. Provides clear context for when this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_classesA

Return class FQNs from the string table.

Args: metadata_path: path to global-metadata.dat namespace: if set, only return classes whose FQN starts with namespace + "." (e.g. "UnityEngine") limit: maximum classes to return (default 500)

ParametersJSON Schema
NameRequiredDescriptionDefault
metadata_pathYes
namespaceNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses return type (FQNs), parameter effects, and default limit. Lacks mention of error handling or authentication, but adequate for a read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise, using docstring format with Args. Every sentence adds value; no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers parameters, return value, and default behavior. With output schema present, lack of return value detail is acceptable. Could mention the concept of 'string table' explicitly, but sufficient for context given sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description fully compensates. Each parameter (metadata_path required, namespace with filter behavior, limit with default) is described clearly with purpose and behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns class FQNs from the string table, with a specific verb and resource. It differentiates from siblings like get_assembly_types which likely handles assembly types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains parameter usage (e.g., namespace filters by prefix, limit caps results) but does not explicitly state when to use this tool versus alternatives like get_assembly_types or get_type_definitions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_namespacesA

Return a sorted list of namespaces with class counts.

Scans the string table for class FQNs and buckets them by namespace. The class count is an upper bound (a FQN-shaped string might be a non-class entity, though rare).

Args: metadata_path: path to global-metadata.dat limit: maximum namespaces to return (default 200)

ParametersJSON Schema
NameRequiredDescriptionDefault
metadata_pathYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description mentions scanning a file and that the count is an upper bound, but does not explicitly state that the tool is read-only, safe, or other behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with purpose, followed by a structured Args block. Minor redundancy could be eliminated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists and no annotations, the description provides sufficient context about processing and caveats, covering key aspects for a 2-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description includes an Args section explaining both parameters beyond the schema: 'path to global-metadata.dat' for metadata_path and 'maximum namespaces to return (default 200)' for limit, adding significant value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Return' and the resource 'sorted list of namespaces with class counts', distinguishing it from sibling tools like list_classes and list_strings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what the tool does but does not explicitly state when to use it versus alternatives or when not to use it, leaving usage context implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_stringsA

Return strings from the unprotected C# symbol table.

Args: metadata_path: path to global-metadata.dat substring: if set, only return strings containing this case-sensitive substring limit: maximum number of results to return (default 500)

ParametersJSON Schema
NameRequiredDescriptionDefault
metadata_pathYes
substringNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It does not disclose side effects (likely none), performance implications, or the meaning of 'unprotected'. The tool appears to be a read operation but this is not explicitly stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and front-loaded with the purpose, followed by parameter details in a clear list. Every sentence provides value with no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple listing tool with an output schema, the description covers the basics but lacks usage guidance and behavioral context. Given the complexity (3 params, 1 required) and sibling tools, more context would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description's Args section adds meaning to all three parameters: metadata_path as file path, substring as filter, limit as max results. This compensates well for the missing schema descriptions, though more detail on format could help.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Return' and the resource 'strings from the unprotected C# symbol table', making the tool's purpose specific. It distinguishes from siblings like search_strings by implying listing all strings, though not explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives like search_strings. No prerequisites or exclusions mentioned. The description only explains parameters, not usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resolve_method_rvaA

Resolve a method FQN to its GameAssembly.dll RVA.

Walks the global-metadata.dat typeDef/method tables to find the method, then parses GameAssembly.dll to look for the s_Il2CppCodeRegistrations global. If the binary is non-stripped and contains the registration symbols, the pointer table's RVA is reported. If the binary is stripped (the default for shipped Unity games), the function returns rva_status="binary_stripped" plus the IL2CPP mangled name to use with re-rizin.search_bytes.

Requires pip install lief (an optional dep — install via pip install re-il2cpp[rva]).

Args: metadata_path: path to global-metadata.dat gameassembly_path: path to GameAssembly.dll method_fqn: "Namespace.ClassName.MethodName"

ParametersJSON Schema
NameRequiredDescriptionDefault
metadata_pathYes
gameassembly_pathYes
method_fqnYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It details internal operations (walking tables, parsing binary), handles both stripped and non-stripped cases, and mentions an optional dependency. It does not cover all failure modes but provides good transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a summary line, process explanation, return scenarios, dependency note, and args list. It is front-loaded and each sentence adds value, though could be slightly shorter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description explains return values (rva_status, mangled name) and covers input and logic. It is fairly complete for the tool's complexity, though exact output format is not specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description includes an 'Args' section with brief explanations for each parameter, including the format of method_fqn. This adds meaningful context beyond the schema's type information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'Resolve a method FQN to its GameAssembly.dll RVA.' It clearly identifies the specific resource and action, distinguishing it from sibling tools that list or search metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what the tool does and mentions a related sibling tool (re-rizin.search_bytes) but does not provide explicit guidance on when to use this tool vs alternatives or when not to use it. Usage context is implied but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_stringsA

Substring search of the C# symbol table.

Returns [{index, string}] matches. Useful for finding asset paths, save keys, or specific gameplay terms in the metadata.

Args: metadata_path: path to global-metadata.dat substring: case-sensitive substring to search for limit: maximum matches to return (default 50)

ParametersJSON Schema
NameRequiredDescriptionDefault
metadata_pathYes
substringYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description does not explicitly state that the tool is read-only or non-destructive. For a read operation, this is acceptable but could be clearer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three clear sentences: purpose, output format, and parameter breakdown. No wasted words; front-loaded with core functionality.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter search tool with an output schema (assumed from context), the description covers purpose, parameters, and return format adequately. No missing critical information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, the description adds meaningful semantics: explains metadata_path as path to global-metadata.dat, substring as case-sensitive, limit with default value. Provides clarity beyond parameter names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description explicitly states 'substring search of the C# symbol table' and provides return format. Differentiates from siblings like list_strings by specifying search behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage contexts (finding asset paths, save keys, gameplay terms) but does not explicitly state when not to use or compare with sibling tools like list_strings or get_assembly_types.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 14 tool updatesv0.2.0
    • First observedcheck_il2cpp
    • First observedget_assembly_types
    • First observedget_events
    • First observedget_fields
    • First observedget_images
    • First observedget_methods
    • First observedget_parameters
    • First observedget_properties
    • First observedget_type_definitions
    • First observedlist_classes
    • First observedlist_namespaces
    • First observedlist_strings
    • First observedresolve_method_rva
    • First observedsearch_strings

TDQS

A3.8/5.0
Disambiguation5/5

Each tool targets a distinct aspect of IL2CPP metadata: metadata header, assemblies, type definitions, class members, strings, namespaces, and RVA resolution. Overlaps like get_assembly_types, get_type_definitions, and list_classes are clearly differentiated in their descriptions, leaving no ambiguity.

Naming Consistency4/5

The naming pattern is mostly consistent with verb_noun (get_*, list_*, search_*, resolve_*). A minor deviation is 'check_il2cpp' instead of 'get_metadata' but it is a single outlier. Overall patterns are clear and predictable.

Tool Count5/5

With 14 tools, the count is well within the ideal 3-15 range. Each tool serves a specific purpose without redundancy or bloat, perfectly scoped for a metadata inspection server.

Completeness4/5

The tool set covers the main metadata operations: header info, assembly listing, type definitions, class members, string search, and RVA resolution. A minor gap is lack of a direct 'get_class_by_fqn' tool, but this can be worked around with list_classes and get_type_definitions. Overall, it is fairly complete for read-only analysis.

Maintenance

ActivityStale
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that enables LLMs to autonomously reverse engineer applications through Cutter, allowing them to decompile binaries, analyze code, and rename methods programmatically.
    30
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server for safely inspecting and editing Unity/VRChat prefabs, scenes, and assets. It diagnoses override collisions, broken references, and runtime exceptions, with read-only YAML analysis and write operations via an Editor Bridge.
    11
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Heretek-RE/re-il2cpp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server