/reflection-method-call
Call a C# method by reflection — including private methods. Requires a method schema obtained via 'reflection-method-find'. Supports static methods, instance methods (with optional target deserialization), and main-thread / off-thread execution.
$ npx -y skills add IvanMurzak/Unity-MCP --skill reflection-method-call --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/reflection-method-call
Context preview
The summary Claude sees to decide when to auto-load this skill.
Call a C# method by reflection — including private methods. Requires a method schema obtained via 'reflection-method-find'. Supports static methods, instance methods (with optional target deserialization), and main-thread / off-thread execution.
SKILL.md
reflection-method-call.SKILL.mdname: reflection-method-call
description: Call a C# method by reflection — including private methods. Requires a method schema obtained via 'reflection-method-find'. Supports static methods, instance methods (with optional target deserialization), and main-thread / off-thread execution.
Method C# / Call
Call C# method. Any method could be called, even private methods. It requires to receive proper method schema. Use 'reflection-method-find' to find available method before using it. Receives input parameters and returns result.
Match levels (apply to `typeName`, `MethodName`, `Parameters`)
- `typeNameMatchLevel` / `methodNameMatchLevel` (default 1 — contains ignoring case): `0` ignore filter, `1` contains-ic, `2` contains-cs, `3` starts-with-ic, `4` starts-with-cs, `5` equals-ic, `6` equals-cs.
- `parametersMatchLevel` (default 2 — equals): `0` ignore filter, `1` count matches, `2` equals.
Inputs
- `targetObject` (optional) — for instance methods. When null, a new instance is created from the declaring type. Required shape: `{ type, value }` (value is deserialized to `type`).
- `inputParameters` (optional) — list of `{ type, name, value }`. Names are enhanced against the resolved method signature if omitted.
- `executeInMainThread` (default `true`) — Unity API calls should keep this true; set false only for thread-safe pure logic.
How to Call
unity-mcp-cli run-tool reflection-method-call --input '{
"filter": "string_value",
"knownNamespace": false,
"typeNameMatchLevel": 0,
"methodNameMatchLevel": 0,
"parametersMatchLevel": 0,
"targetObject": "string_value",
"inputParameters": "string_value",
"executeInMainThread": false
}'> For complex input (multi-line strings, code), save the JSON to a file and use: > ```bash > unity-mcp-cli run-tool reflection-method-call --input-file args.json > ``` > > Or pipe via stdin (recommended): > ```bash > unity-mcp-cli run-tool reflection-method-call --input-file - <<'EOF' > {"param": "value"} > EOF > ```
Troubleshooting
If `unity-mcp-cli` is not found, either install it globally (`npm install -g unity-mcp-cli`) or use `npx unity-mcp-cli` instead. Read the /unity-initial-setup skill for detailed installation instructions.
Input
| Name | Type | Required | Description | |------|------|----------|-------------| | `filter` | `any` | Yes | Method reference. Used to find method in codebase of the project. | | `knownNamespace` | `boolean` | No | Set to true if 'Namespace' is known and full namespace name is specified in the 'filter.Namespace' property. Otherwise, set to false. | | `typeNameMatchLevel` | `integer` | No | Minimal match level for 'typeName'. 0 - ignore 'filter.typeName', 1 - contains ignoring case (default value), 2 - contains case sensitive, 3 - starts with ignoring case, 4 - starts with case sensitive, 5 - equals ignoring case, 6 - equals case sensitive. | | `methodNameMatchLevel` | `integer` | No | Minimal match level for 'MethodName'. 0 - ignore 'filter.MethodName', 1 - contains ignoring case (default value), 2 - contains case sensitive, 3 - starts with ignoring case, 4 - starts with case sensitive, 5 - equals ignoring case, 6 - equals case sensitive. | | `parametersMatchLevel` | `integer` | No | Minimal match level for 'Parameters'. 0 - ignore 'filter.Parameters', 1 - parameters count is the same, 2 - equals (default value). | | `targetObject` | `any` | No | Specify target object to call method on. Should be null if the method is static or if there is no specific target instance. New instance of the specified class will be created if the method is instance method and the targetObject is null. Required: type - full type name of the object to call method on, value - serialized object value (it will be deserialized to the specified type). | | `inputParameters` | `any` | No | Method input parameters. Per each parameter specify: type - full type name of the object to call method on, name - parameter name, value - serialized object value (it will be deserialized to the specified type). | | `executeInMainThread` | `boolean` | No | Set to true if the method should be executed in the main thread. Otherwise, set to false. |
Input JSON Schema
{
"type": "object",
"properties": {
"filter": {
"$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.MethodRef"
},
"knownNamespace": {
"type": "boolean"
},
"typeNameMatchLevel": {
"type": "integer"
},
"methodNameMatchLevel": {
"type": "integer"
},
"parametersMatchLevel": {
"type": "integer"
},
"targetObject": {
"$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember"
},
"inputParameters": {
"$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMemberList"
},
"executeInMainThread": {
"type": "boolean"
}
},
"$defs": {
"System.Collections.Generic.List(com.IvanMurzak.ReflectorNet.Model.MethodRef-Parameter)": {
"type": "array",
"items": {
"$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.MethodRef-Parameter",
"description": "Parameter of a method. Contains type and name of the parameter."
}
},
"com.IvanMurzak.ReflectorNet.Model.MethodRef-Parameter": {
"type": "object",
"properties": {
"typeName": {
"type": "string",
"description": "Type of the parameter including namespace. Sample: 'System.String', 'System.Int32', 'UnityEngine.GameObject', etc."
},
"name": {
"type": "string",
"description": "Name of the parameter. It may be empty if the name is unknown."
}
},
"description": "Parameter of a method. Contains type and name of the parameter."
},
"com.IvanMurzak.ReflectorNet.Model.MethodRef": {
"type": "object",
"properties": {
"namespace": {
"type": "string",
"description": "Namespace of the class. It may be empty if the clasRead more
name: reflection-method-call description: Call a C# method by reflection — including private methods. Requires a method schema obtained via 'reflection-method-find'. Supports static methods, instance methods (with optional target deserialization), and main-thread / off-thread execution.
Method C# / Call
Call C# method. Any method could be called, even private methods. It requires to receive proper method schema. Use 'reflection-method-find' to find available method before using it. Receives input parameters and returns result.
Match levels (apply to `typeName`, `MethodName`, `Parameters`)
- `typeNameMatchLevel` / `methodNameMatchLevel` (default 1 — contains ignoring case): `0` ignore filter, `1` contains-ic, `2` contains-cs, `3` starts-with-ic, `4` starts-with-cs, `5` equals-ic, `6` equals-cs.
- `parametersMatchLevel` (default 2 — equals): `0` ignore filter, `1` count matches, `2` equals.
Inputs
- `targetObject` (optional) — for instance methods. When null, a new instance is created from the declaring type. Required shape: `{ type, value }` (value is deserialized to `type`).
- `inputParameters` (optional) — list of `{ type, name, value }`. Names are enhanced against the resolved method signature if omitted.
- `executeInMainThread` (default `true`) — Unity API calls should keep this true; set false only for thread-safe pure logic.
How to Call
unity-mcp-cli run-tool reflection-method-call --input '{
"filter": "string_value",
"knownNamespace": false,
"typeNameMatchLevel": 0,
"methodNameMatchLevel": 0,
"parametersMatchLevel": 0,
"targetObject": "string_value",
"inputParameters": "string_value",
"executeInMainThread": false
}'> For complex input (multi-line strings, code), save the JSON to a file and use: > ```bash > unity-mcp-cli run-tool reflection-method-call --input-file args.json > ``` > > Or pipe via stdin (recommended): > ```bash > unity-mcp-cli run-tool reflection-method-call --input-file - <<'EOF' > {"param": "value"} > EOF > ```
Troubleshooting
If `unity-mcp-cli` is not found, either install it globally (`npm install -g unity-mcp-cli`) or use `npx unity-mcp-cli` instead. Read the /unity-initial-setup skill for detailed installation instructions.
Input
| Name | Type | Required | Description | |------|------|----------|-------------| | `filter` | `any` | Yes | Method reference. Used to find method in codebase of the project. | | `knownNamespace` | `boolean` | No | Set to true if 'Namespace' is known and full namespace name is specified in the 'filter.Namespace' property. Otherwise, set to false. | | `typeNameMatchLevel` | `integer` | No | Minimal match level for 'typeName'. 0 - ignore 'filter.typeName', 1 - contains ignoring case (default value), 2 - contains case sensitive, 3 - starts with ignoring case, 4 - starts with case sensitive, 5 - equals ignoring case, 6 - equals case sensitive. | | `methodNameMatchLevel` | `integer` | No | Minimal match level for 'MethodName'. 0 - ignore 'filter.MethodName', 1 - contains ignoring case (default value), 2 - contains case sensitive, 3 - starts with ignoring case, 4 - starts with case sensitive, 5 - equals ignoring case, 6 - equals case sensitive. | | `parametersMatchLevel` | `integer` | No | Minimal match level for 'Parameters'. 0 - ignore 'filter.Parameters', 1 - parameters count is the same, 2 - equals (default value). | | `targetObject` | `any` | No | Specify target object to call method on. Should be null if the method is static or if there is no specific target instance. New instance of the specified class will be created if the method is instance method and the targetObject is null. Required: type - full type name of the object to call method on, value - serialized object value (it will be deserialized to the specified type). | | `inputParameters` | `any` | No | Method input parameters. Per each parameter specify: type - full type name of the object to call method on, name - parameter name, value - serialized object value (it will be deserialized to the specified type). | | `executeInMainThread` | `boolean` | No | Set to true if the method should be executed in the main thread. Otherwise, set to false. |
Input JSON Schema
{
"type": "object",
"properties": {
"filter": {
"$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.MethodRef"
},
"knownNamespace": {
"type": "boolean"
},
"typeNameMatchLevel": {
"type": "integer"
},
"methodNameMatchLevel": {
"type": "integer"
},
"parametersMatchLevel": {
"type": "integer"
},
"targetObject": {
"$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember"
},
"inputParameters": {
"$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMemberList"
},
"executeInMainThread": {
"type": "boolean"
}
},
"$defs": {
"System.Collections.Generic.List(com.IvanMurzak.ReflectorNet.Model.MethodRef-Parameter)": {
"type": "array",
"items": {
"$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.MethodRef-Parameter",
"description": "Parameter of a method. Contains type and name of the parameter."
}
},
"com.IvanMurzak.ReflectorNet.Model.MethodRef-Parameter": {
"type": "object",
"properties": {
"typeName": {
"type": "string",
"description": "Type of the parameter including namespace. Sample: 'System.String', 'System.Int32', 'UnityEngine.GameObject', etc."
},
"name": {
"type": "string",
"description": "Name of the parameter. It may be empty if the name is unknown."
}
},
"description": "Parameter of a method. Contains type and name of the parameter."
},
"com.IvanMurzak.ReflectorNet.Model.MethodRef": {
"type": "object",
"properties": {
"namespace": {
"type": "string",
"description": "Namespace of the class. It may be empty if the clasGet up and running in three steps: Install plugin — download the .unitypackage installer or run openupm add com.ivanmurzak.unity.mcp Alternative: npx unity-mcp-cli install-plugin ./MyUnityProject — see CLI documentation Pick an AI agent — Claude Code, Claude
Repo: IvanMurzak/Unity-MCP
Other skills on ivanmurzak-unity-mcp.
- /build-cli
Build the unity-mcp-cli TypeScript CLI tool and link it globally for terminal use.
Open skill - /github-pr-review-fix
Review and resolve PR comments from GitHub. Validates each comment, fixes legitimate issues.
Open skill - /assets-copy
Copy assets at given paths and store them at new paths. Refreshes the AssetDatabase at the end. Use 'assets-find' to locate the source assets first.
Open skill - /assets-create-folder
Create a new folder under a parent folder inside 'Assets/'. The parent path must start with 'Assets/' and every intermediate folder in it must already exist. Refreshes the AssetDatabase at the end and returns the GUID(s) of the created folder(s).
Open skill - /assets-delete
Delete the assets at the given project paths. Refreshes the AssetDatabase at the end. Use 'assets-find' to locate the assets first.
Open skill - /assets-find-built-in
Search the built-in assets of the Unity Editor (located at Resources/unity_builtin_extra). Filters by name and/or type; built-in assets have no GUID so GUID-based lookups are not supported.
Open skill

