0.7.23pypi · gladekit-mcp · latest release
Observed 2026-09-04T08:54:58.689Z using mcpSecurity-inventory. Protocol 2025-06-18.
| Tool | Category | Risk |
|---|---|---|
add_animator_parametersAdd parameters to an Animator Controller.Input schema{
"properties": {
"controllerPath": {
"type": "string",
"description": "Path to the Animator Controller asset"
},
"parameterList": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Parameter name"
},
"paramType": {
"type": "string",
"enum": [
"Float",
"Int",
"Bool",
"Trigger"
],
"description": "Parameter type"
},
"defaultValue": {
"type": "string",
"description": "Optional: Default value (number for Float/Int, 'true'/'false' for Bool)"
}
}
},
"description": "Array of parameters to add"
}
},
"required": [
"controllerPath",
"parameterList"
],
"type": "object"
} | — | — |
add_animator_stateAdd a state to an Animator Controller layer with an animation clip. After creating states, call add_animator_transition and add_animator_transition_conditions to wire up logic.Input schema{
"properties": {
"controllerPath": {
"type": "string",
"description": "Path to the Animator Controller asset"
},
"stateName": {
"type": "string",
"description": "Name for the new state"
},
"clipPath": {
"type": "string",
"description": "Optional: Path to the AnimationClip to assign"
},
"layerIndex": {
"type": "integer",
"description": "Optional: Layer index (0 = Base Layer). Default: 0"
},
"isDefault": {
"type": "boolean",
"description": "Optional: Set as default state. Default: false"
},
"position": {
"type": "string",
"description": "Optional: Position in state machine as 'x,y'. Default: auto-positioned"
}
},
"required": [
"controllerPath",
"stateName"
],
"type": "object"
} | — | — |
add_animator_transitionAdd a transition between animator states. After creating, call add_animator_transition_conditions to add conditions (transitions without conditions fire immediately). hasExitTime=false for locomotion; hasExitTime=true + exitTime=0.9 for attacks/jumps returning to idle.Input schema{
"properties": {
"controllerPath": {
"type": "string",
"description": "Path to the Animator Controller asset"
},
"fromState": {
"type": "string",
"description": "Source state name (use 'Any State' for global transitions like Jump from anywhere)"
},
"toState": {
"type": "string",
"description": "Destination state name"
},
"layerIndex": {
"type": "integer",
"description": "Layer index. Default: 0"
},
"hasExitTime": {
"type": "boolean",
"description": "IMPORTANT: false=immediate transition when condition met (locomotion), true=wait for animation to reach exitTime (attacks returning to idle). Default: false"
},
"exitTime": {
"type": "number",
"description": "When hasExitTime=true, exit at this point (0-1). Use 0.9 for 'near end of animation'. Default: 1"
},
"duration": {
"type": "number",
"description": "Blend duration in seconds. Default: 0.25"
}
},
"required": [
"controllerPath",
"fromState",
"toState"
],
"type": "object"
} | — | — |
add_componentAdd a component to a GameObject. Verify the GameObject exists in the scene hierarchy (check Unity context). For script components, ensure the script has been compiled first.Input schema{
"properties": {
"componentType": {
"type": "string",
"description": "Type name of the component (e.g., 'Rigidbody', 'MeshRenderer', 'MyScript'). Must match the exact class name (case-sensitive)."
},
"gameObjectPath": {
"type": "string",
"description": "Optional: Name or path of the GameObject from scene hierarchy (uses selected GameObject if not provided)"
}
},
"required": [
"componentType"
],
"type": "object"
} | — | — |
add_rigidbodyAdd a Rigidbody to a GameObject. Checks for existing Rigidbody, CharacterController conflicts, and missing colliders. Use Rigidbody for physics-based movement; do NOT combine with CharacterController on the same object.Input schema{
"properties": {
"gameObjectPath": {
"type": "string",
"description": "Path to the GameObject"
},
"mass": {
"type": "number",
"description": "Mass of the rigidbody (default: 1)"
},
"drag": {
"type": "number",
"description": "Linear drag (air resistance)"
},
"angularDrag": {
"type": "number",
"description": "Angular drag (rotational resistance)"
},
"useGravity": {
"type": "boolean",
"description": "Whether the rigidbody is affected by gravity"
},
"isKinematic": {
"type": "boolean",
"description": "If true, the rigidbody won't be affected by physics forces"
}
},
"required": [
"gameObjectPath"
],
"type": "object"
} | — | — |
add_rigidbody_2dAdd a Rigidbody2D — the 2D physics body for platformer characters, falling crates, projectiles. 2D and 3D physics are SEPARATE simulations: a Rigidbody2D never collides with 3D colliders, so pair it with create_collider_2d shapes. bodyType: 'dynamic' (gravity + forces), 'kinematic' (script-driven motion), 'static' (immovable). Set freezeRotation=true for characters so they don't tip over — the #1 2D beginner surprise. Unity blocks 2D physics on objects carrying 3D physics components; the tool refuses with the blocker named.Input schema{
"properties": {
"gameObjectPath": {
"type": "string",
"description": "Path to the GameObject"
},
"bodyType": {
"type": "string",
"enum": [
"dynamic",
"kinematic",
"static"
],
"description": "Body simulation mode. Defaults to dynamic (full physics)."
},
"mass": {
"type": "number",
"description": "Mass in kg (default: 1)"
},
"gravityScale": {
"type": "number",
"description": "Gravity multiplier (default: 1). 0 = no gravity (top-down games), >1 = snappier platformer falls."
},
"linearDrag": {
"type": "number",
"description": "Linear damping slowing movement (default: 0)"
},
"angularDrag": {
"type": "number",
"description": "Angular damping slowing rotation (default: 0.05)"
},
"freezeRotation": {
"type": "boolean",
"description": "Freeze Z rotation so the body never tips over. Recommended true for characters."
},
"freezePositionX": {
"type": "boolean",
"description": "Lock movement on X"
},
"freezePositionY": {
"type": "boolean",
"description": "Lock movement on Y"
},
"collisionDetection": {
"type": "string",
"enum": [
"discrete",
"continuous"
],
"description": "Use continuous for fast movers (bullets) that tunnel through thin colliders."
},
"interpolation": {
"type": "string",
"enum": [
"none",
"interpolate",
"extrapolate"
],
"description": "Smooths rendered motion between physics steps. Use interpolate for the player/camera target."
}
},
"required": [
"gameObjectPath"
],
"type": "object"
} | — | — |
add_tilemap_collider_2dMake a painted Tilemap SOLID so 2D physics bodies can stand on it. A tilemap is purely visual until this runs — a Rigidbody2D player falls straight through the floor. composite=true merges per-tile boxes into clean outlines (prevents ghost-collision seams between tiles; recommended for level geometry). oneWay=true makes platforms the player can jump up through and land on.Input schema{
"properties": {
"tilemapPath": {
"type": "string",
"description": "Path to the painted Tilemap"
},
"composite": {
"type": "boolean",
"description": "Merge per-tile colliders into clean outlines via CompositeCollider2D + static Rigidbody2D. Defaults to false."
},
"isTrigger": {
"type": "boolean",
"description": "Make the tiles a trigger zone (reports overlaps, doesn't block). Defaults to false."
},
"oneWay": {
"type": "boolean",
"description": "One-way platforms via PlatformEffector2D: jump up through, land on top. Defaults to false."
}
},
"required": [
"tilemapPath"
],
"type": "object"
} | — | — |
align_objectsAlign multiple GameObjects along a specified axis. Aligns to the min, center, or max bound of the target or first object.Input schema{
"properties": {
"gameObjectPaths": {
"type": "array",
"items": {
"type": "string"
},
"description": "Array of GameObject paths to align. If empty, uses current selection."
},
"axis": {
"type": "string",
"enum": [
"x",
"y",
"z"
],
"description": "Axis to align along: 'x', 'y', or 'z'"
},
"alignTo": {
"type": "string",
"enum": [
"min",
"center",
"max",
"first"
],
"description": "Alignment target: 'min', 'center', 'max' of bounds, or 'first' object's position. Default: 'first'"
},
"targetPath": {
"type": "string",
"description": "Optional: Specific GameObject to align to. If not provided, uses first object or calculates from selection."
}
},
"required": [
"axis"
],
"type": "object"
} | — | — |
apply_queued_fixApply a Live Loop FixProposal by dispatching each change through the existing tool dispatcher. Idempotent: a second call with the same proposalId returns alreadyApplied:true with the prior result and does NOT re-execute. Use after Play exits or the user accepts a proposed fix.Input schema{
"properties": {
"proposalId": {
"type": "string",
"description": "Idempotency key. Identifies this proposal across retries; second apply returns alreadyApplied:true."
},
"summary": {
"type": "string",
"description": "One-line user-facing description of what the fix does. Stored on the apply tracker for diagnostics and the renderer's status panel."
},
"changes": {
"type": "array",
"description": "Ordered list of tool calls to dispatch. Each change is attempted; first-error does NOT short-circuit. Per-change results returned in the response.",
"items": {
"type": "object",
"properties": {
"toolName": {
"type": "string",
"description": "Name of an existing Unity tool (e.g. modify_script, set_component_property)."
},
"args": {
"type": "object",
"description": "Arguments to pass to the tool. Same shape as a direct call to that tool."
},
"rationale": {
"type": "string",
"description": "Optional one-line reason for this specific change. Surfaced to the user in the apply summary."
}
},
"required": [
"toolName",
"args"
]
}
}
},
"required": [
"proposalId",
"changes"
],
"type": "object"
} | — | — |
assign_animator_controllerAssign an Animator Controller to a GameObject's Animator component.Input schema{
"properties": {
"gameObjectPath": {
"type": "string",
"description": "Path to the GameObject with Animator component"
},
"controllerPath": {
"type": "string",
"description": "Path to the Animator Controller asset"
}
},
"required": [
"gameObjectPath",
"controllerPath"
],
"type": "object"
} | — | — |
assign_audio_clipAssign an AudioClip asset to an AudioSource component.Input schema{
"properties": {
"gameObjectPath": {
"type": "string",
"description": "Path to the GameObject with AudioSource component"
},
"clipPath": {
"type": "string",
"description": "Path to AudioClip asset (e.g., 'Audio/Sounds/Jump.wav')"
}
},
"required": [
"gameObjectPath",
"clipPath"
],
"type": "object"
} | — | — |
assign_material_to_rendererAssign a Material to a GameObject's Renderer. Call after create_material. Verify existing materials exist with check_asset_exists first.Input schema{
"properties": {
"materialPath": {
"type": "string",
"description": "Path relative to Assets folder (e.g., 'Materials/Red.mat'). Must match the path used in create_material."
},
"gameObjectPath": {
"type": "string",
"description": "Name or path of the target GameObject (e.g., 'RedCube', 'BlueCube'). Required when you just created multiple objects."
},
"materialSlot": {
"type": "string",
"description": "Material slot index as string (e.g., '0' for first slot). Omit to use slot 0."
}
},
"required": [
"materialPath"
],
"type": "object"
} | — | — |
batch_executeExecute multiple tool calls in a single request to Unity. Reduces round-trip overhead for multi-step operations like create object → set transform → add component → create material → assign material. Each call runs sequentially on the Unity main thread. Returns per-call results with individual success/failure status — partial failures do not abort the batch.Input schema{
"properties": {
"calls": {
"type": "array",
"description": "Array of tool calls to execute sequentially.",
"items": {
"type": "object",
"properties": {
"toolName": {
"type": "string",
"description": "The tool name (e.g. 'create_game_object')."
},
"arguments": {
"type": "object",
"description": "Arguments for the tool call."
}
},
"required": [
"toolName"
]
},
"minItems": 1,
"maxItems": 50
}
},
"required": [
"calls"
],
"type": "object"
} | — | — |
change_material_shaderChange a material's shader to a different shader. Automatically preserves common shader properties (color, textures, metallic, smoothness) when converting between similar shaders. CRITICAL: Check system prompt for active render pipeline and use appropriate shader names.Input schema{
"properties": {
"materialPath": {
"type": "string",
"description": "Path relative to Assets folder (e.g., 'Materials/TreeMaterial.mat')"
},
"newShaderName": {
"type": "string",
"description": "Exact shader name to change to. Check system prompt for render pipeline and use appropriate shader (e.g., 'Universal Render Pipeline/Lit' for URP, 'HDRP/Lit' for HDRP)"
}
},
"required": [
"materialPath",
"newShaderName"
],
"type": "object"
} | — | — |
check_asset_existsCheck if an asset exists at a path (case-insensitive). Returns similar paths if not found. When false, immediately call the corresponding create tool in the same response — this is a verification step, not a stopping point.Input schema{
"properties": {
"assetPath": {
"type": "string",
"description": "Path relative to Assets folder (e.g., 'Materials/MyMaterial.mat', 'Prefabs/Cube.prefab', 'Textures/Logo.png')"
}
},
"required": [
"assetPath"
],
"type": "object"
} | — | — |
compile_scriptsCheck Unity script compilation status. Call this after create_script or modify_script. Returns isCompiling (bool) and status ('compiling' or 'idle'). If still compiling, call again. When compilation finishes with errors, returns hasErrors=true plus each error's file path, line number, and ±10 lines of source context — use that context to fix the script before retrying.Input schema{
"properties": {},
"required": [],
"type": "object"
} | — | — |
create_animator_controllerCreate a new Animator Controller asset.Input schema{
"properties": {
"controllerPath": {
"type": "string",
"description": "Path for the controller asset (e.g., 'Animation/PlayerController.controller')"
}
},
"required": [
"controllerPath"
],
"type": "object"
} | — | — |
create_audio_sourceCreate a new GameObject with an AudioSource component.Input schema{
"properties": {
"name": {
"type": "string",
"description": "Optional: Name for the audio source. Default: 'Audio Source'"
},
"position": {
"type": "string",
"description": "Optional: Position as 'x,y,z'. Default: origin"
},
"parentPath": {
"type": "string",
"description": "Optional: Path to parent GameObject"
},
"clipPath": {
"type": "string",
"description": "Optional: Path to AudioClip asset to assign"
},
"playOnAwake": {
"type": "boolean",
"description": "Optional: Play on awake. Default: false"
},
"loop": {
"type": "boolean",
"description": "Optional: Loop audio. Default: false"
},
"volume": {
"type": "number",
"description": "Optional: Volume (0-1). Default: 1"
},
"pitch": {
"type": "number",
"description": "Optional: Pitch. Default: 1"
},
"spatialBlend": {
"type": "number",
"description": "Optional: 2D (0) to 3D (1) blend. Default: 0"
},
"minDistance": {
"type": "number",
"description": "Optional: Min distance for 3D falloff. Default: 1"
},
"maxDistance": {
"type": "number",
"description": "Optional: Max distance for 3D falloff. Default: 500"
}
},
"required": [],
"type": "object"
} | — | — |
create_cameraCreate a Camera GameObject. For follow/third-person cameras, create a Camera + movement script. For advanced cinematic cameras with blending, use create_cinemachine_virtual_camera instead (requires Cinemachine package).Input schema{
"properties": {
"name": {
"type": "string"
},
"position": {
"type": "string"
},
"rotation": {
"type": "string"
},
"fieldOfView": {
"type": "number"
},
"orthographic": {
"type": "boolean"
},
"nearClip": {
"type": "number"
},
"farClip": {
"type": "number"
},
"clearFlags": {
"type": "string"
},
"backgroundColor": {
"type": "string"
},
"tagMain": {
"type": "boolean"
}
},
"required": [],
"type": "object"
} | — | — |
create_canvasCreate a Canvas with scaler and raycaster. Requires TextMeshPro (auto-installed if missing).Input schema{
"properties": {
"name": {
"type": "string"
},
"renderMode": {
"type": "string",
"enum": [
"ScreenSpaceOverlay",
"ScreenSpaceCamera",
"WorldSpace"
]
},
"cameraPath": {
"type": "string"
}
},
"required": [],
"type": "object"
} | — | — |
create_character_controllerAdd a CharacterController to a GameObject. Auto-removes existing colliders (CharacterController has its own built-in capsule collider). Auto-aligns to mesh bounds unless radius/height/center provided. Set keepExistingColliders=true to prevent auto-removal. Use for player movement; use Rigidbody for physics-based movement.Input schema{
"properties": {
"gameObjectPath": {
"type": "string",
"description": "Path to the GameObject"
},
"radius": {
"type": "number",
"description": "Radius of the capsule (disables auto-alignment if provided)"
},
"height": {
"type": "number",
"description": "Height of the capsule (disables auto-alignment if provided)"
},
"center": {
"type": "string",
"description": "Center offset as 'x,y,z' (disables auto-alignment if provided)"
},
"slopeLimit": {
"type": "number",
"description": "Maximum slope angle in degrees (default: 45)"
},
"stepOffset": {
"type": "number",
"description": "Maximum step height"
},
"skinWidth": {
"type": "number",
"description": "Skin width for collision detection (default: 0.08)"
},
"minMoveDistance": {
"type": "number",
"description": "Minimum move distance threshold (default: 0.001)"
},
"autoAlign": {
"type": "boolean",
"description": "Auto-align with mesh bounds (default: true). Set to false to use default Unity CharacterController size."
},
"keepExistingColliders": {
"type": "boolean",
"description": "If true, keeps existing colliders (not recommended - may cause conflicts). Default: false (auto-removes colliders)."
}
},
"required": [
"gameObjectPath"
],
"type": "object"
} | — | — |
create_colliderAdd a collider to a GameObject. Types: Box (walls/floors), Sphere (balls), Capsule (characters — auto-detects axis), Mesh (static exact shape), Convex (mesh + Rigidbody), Wheel (vehicles), Terrain. Auto-aligns to mesh bounds unless size/center/radius/height is provided. Checks for CharacterController/duplicate conflicts; warnings in response.Input schema{
"properties": {
"gameObjectPath": {
"type": "string",
"description": "Path to the GameObject"
},
"colliderType": {
"type": "string",
"enum": [
"Box",
"Sphere",
"Capsule",
"Mesh",
"Convex",
"Wheel",
"Terrain"
],
"description": "Type of collider to create. Box/Sphere/Capsule are primitives. Mesh/Convex use actual mesh geometry. Wheel is for vehicle wheels. Terrain wraps Unity Terrain."
},
"isTrigger": {
"type": "boolean",
"description": "Whether the collider is a trigger (not applicable to WheelCollider)"
},
"center": {
"type": "string",
"description": "Center offset as 'x,y,z' for Box/Sphere/CapsuleCollider (disables auto-alignment if provided)"
},
"size": {
"type": "string",
"description": "Size as 'x,y,z' for BoxCollider (disables auto-alignment if provided)"
},
"radius": {
"type": "number",
"description": "Radius for SphereCollider, CapsuleCollider, or WheelCollider (disables auto-alignment if provided)"
},
"height": {
"type": "number",
"description": "Height for CapsuleCollider (disables auto-alignment if provided)"
},
"direction": {
"type": "integer",
"enum": [
0,
1,
2
],
"description": "CapsuleCollider axis direction: 0=X-axis, 1=Y-axis (default/vertical), 2=Z-axis. Auto-detected if not provided."
},
"meshPath": {
"type": "string",
"description": "Asset path to mesh for MeshCollider/ConvexCollider. Auto-found from MeshFilter if omitted."
},
"convex": {
"type": "boolean",
"description": "Whether MeshCollider is convex (required when used with Rigidbody)"
},
"suspensionDistance": {
"type": "number",
"description": "WheelCollider suspension travel distance (meters)"
},
"wheelMass": {
"type": "number",
"description": "WheelCollider wheel mass (kg)"
},
"forwardFriction": {
"type": "number",
"description": "WheelCollider forward friction stiffness"
},
"sidewaysFriction": {
"type": "number",
"description": "WheelCollider sideways friction stiffness"
},
"terrainDataPath": {
"type": "string",
"description": "Asset path to TerrainData for TerrainCollider. Auto-linked from sibling Terrain component if omitted."
},
"autoAlign": {
"type": "boolean",
"description": "Auto-align collider with mesh bounds aggregated across all child meshes (default: true). Set to false to use default Unity collider size."
}
},
"required": [
"gameObjectPath"
],
"type": "object"
} | — | — |
create_collider_2dAdd a Collider2D. Types: Box (crates/platforms), Circle (balls/coins), Capsule (characters — slides smoothly over steps), Polygon (traces the sprite's outline), Edge (thin ground line from a point list). Box/Circle/Capsule auto-fit the attached sprite's bounds unless size/radius is given. 2D colliders only interact with 2D physics — pair with add_rigidbody_2d for moving bodies; static level geometry needs no Rigidbody2D. Unity blocks 2D physics on objects carrying 3D physics components; the tool refuses with the blocker named.Input schema{
"properties": {
"gameObjectPath": {
"type": "string",
"description": "Path to the GameObject"
},
"colliderType": {
"type": "string",
"enum": [
"Box",
"Circle",
"Capsule",
"Polygon",
"Edge"
],
"description": "Collider shape. Defaults to Box."
},
"isTrigger": {
"type": "boolean",
"description": "Trigger colliders report overlaps but don't block movement (coins, damage zones)"
},
"offset": {
"type": "string",
"description": "Local offset as 'x,y'"
},
"size": {
"type": "string",
"description": "Size as 'x,y' for Box/Capsule (overrides sprite auto-fit)"
},
"radius": {
"type": "number",
"description": "Radius for Circle (overrides sprite auto-fit)"
},
"direction": {
"type": "string",
"enum": [
"vertical",
"horizontal"
],
"description": "Capsule axis. Defaults to vertical."
},
"points": {
"type": "string",
"description": "Point list 'x,y;x,y;...' for Edge (min 2) or Polygon (min 3, replaces the sprite-traced outline). Local units."
}
},
"required": [
"gameObjectPath"
],
"type": "object"
} | — | — |
create_event_systemCreate an EventSystem if one does not exist.Input schema{
"properties": {},
"required": [],
"type": "object"
} | — | — |
create_folderCreate a folder in the Assets directory. Creates parent folders if needed.Input schema{
"properties": {
"folderPath": {
"type": "string",
"description": "Path relative to Assets folder (e.g., 'Prefabs/Enemies' creates Assets/Prefabs/Enemies)"
}
},
"required": [
"folderPath"
],
"type": "object"
} | — | — |
create_game_objectCreate an EMPTY GameObject with no mesh, no collider, no visual representation — only a Transform. Use ONLY for invisible logic-only nodes / hierarchy parents (e.g. 'GameManager', 'EnemySpawner', empty pivots). For ANY visible scene object (player capsule, enemy, prop, platform, ground), use create_primitive instead — create_game_object on a visible object produces an invisible Transform with no body and the user will see nothing in the Game view.Input schema{
"properties": {
"name": {
"type": "string",
"description": "Name of the GameObject"
},
"parent": {
"type": "string",
"description": "Optional: Name or path of parent GameObject"
}
},
"required": [
"name"
],
"type": "object"
} | — | — |
create_lightCreate a new Light GameObject in the scene.Input schema{
"properties": {
"lightType": {
"type": "string",
"enum": [
"Directional",
"Point",
"Spot",
"Area"
],
"description": "Type of light to create"
},
"name": {
"type": "string",
"description": "Optional: Name for the light GameObject. Default: based on type (e.g., 'Directional Light')"
},
"position": {
"type": "string",
"description": "Optional: Position as 'x,y,z'. Default: origin for Point/Spot/Area, (0,3,0) for Directional"
},
"rotation": {
"type": "string",
"description": "Optional: Rotation as 'x,y,z' Euler angles. Default: (50,-30,0) for Directional"
},
"color": {
"type": "string",
"description": "Optional: Light color as 'r,g,b' (0-1). Default: white (1,1,1)"
},
"intensity": {
"type": "number",
"description": "Optional: Light intensity. Default: 1"
},
"range": {
"type": "number",
"description": "Optional: Range for Point/Spot lights. Default: 10"
},
"spotAngle": {
"type": "number",
"description": "Optional: Spot angle for Spot lights. Default: 30"
}
},
"required": [
"lightType"
],
"type": "object"
} | — | — |
create_materialCreate a new Material asset. Check system prompt for 'ACTIVE RENDER PIPELINE' to pick the right shader: URP='Universal Render Pipeline/Lit', HDRP='HDRP/Lit', Built-in='Standard'. After creating, call assign_material_to_renderer to apply it.Input schema{
"properties": {
"materialPath": {
"type": "string",
"description": "Path relative to Assets folder (e.g., 'Materials/Red.mat', 'Materials/Blue.mat')"
},
"shaderName": {
"type": "string",
"description": "Required. Check system prompt for active render pipeline: URP='Universal Render Pipeline/Lit', HDRP='HDRP/Lit', Built-in='Standard'."
},
"color": {
"type": "string",
"description": "Base color as a comma-separated string 'r,g,b,a' (e.g., '1,0,0,1' for red, '0,0,1,1' for blue). All values 0-1. Must be a string, not an array."
},
"metallic": {
"type": "string",
"description": "Metallic value as string (e.g., '0.5'). Range 0-1. Omit to use default."
},
"smoothness": {
"type": "string",
"description": "Smoothness value as string (e.g., '0.5'). Range 0-1. Omit to use default."
}
},
"required": [
"materialPath",
"shaderName"
],
"type": "object"
} | — | — |
create_physics_materialCreate a PhysicMaterial asset. Defines friction and bounciness for colliders. Assign to colliders via assign_physics_material. Returns error if asset already exists at path.Input schema{
"properties": {
"materialPath": {
"type": "string",
"description": "Asset path where the PhysicMaterial will be created (e.g., 'PhysicsMaterials/Ice.mat')"
},
"dynamicFriction": {
"type": "number",
"description": "Friction when object is moving (0-1)"
},
"staticFriction": {
"type": "number",
"description": "Friction when object is at rest (0-1)"
},
"bounciness": {
"type": "number",
"description": "How bouncy the material is (0-1, where 1 is perfectly bouncy)"
},
"frictionCombine": {
"type": "string",
"description": "How to combine friction values: Average, Minimum, Maximum, Multiply",
"enum": [
"Average",
"Minimum",
"Maximum",
"Multiply"
]
},
"bounceCombine": {
"type": "string",
"description": "How to combine bounciness values: Average, Minimum, Maximum, Multiply",
"enum": [
"Average",
"Minimum",
"Maximum",
"Multiply"
]
}
},
"required": [
"materialPath"
],
"type": "object"
} | — | — |
create_prefabCreate a prefab from a GameObject in the sceneInput schema{
"properties": {
"prefabPath": {
"type": "string",
"description": "Path relative to Assets folder (e.g., 'Prefabs/MyPrefab.prefab')"
},
"gameObjectPath": {
"type": "string",
"description": "Name or path of the GameObject to save as prefab"
}
},
"required": [
"prefabPath",
"gameObjectPath"
],
"type": "object"
} | — | — |
create_primitiveCreate a VISIBLE primitive GameObject (Cube, Sphere, Capsule, Cylinder, Plane, Quad) at origin — comes with MeshFilter + MeshRenderer + Collider attached so it shows up in the Game view immediately. Use this for ANY visible scene object: player capsules, enemies, platforms, props, ground planes, level geometry. Do NOT use create_game_object for visible objects — that produces an empty invisible Transform. Follow up with set_transform for non-origin positioning and create_material + assign_material_to_renderer for non-default colors.Input schema{
"properties": {
"primitiveType": {
"type": "string",
"description": "Type of primitive: Cube, Sphere, Capsule, Cylinder, Plane, Quad",
"enum": [
"Cube",
"Sphere",
"Capsule",
"Cylinder",
"Plane",
"Quad"
]
},
"name": {
"type": "string",
"description": "Optional: Name for the GameObject"
},
"parent": {
"type": "string",
"description": "Optional: Name or path of parent GameObject"
}
},
"required": [
"primitiveType"
],
"type": "object"
} | — | — |
create_scriptCreate a new text-based asset file (.cs, .shader, .compute, .hlsl, etc.). Extension determines asset type. Use when the file does NOT exist; use modify_script if it already exists. IMPORTANT: After creating a .cs script, you MUST call compile_scripts and wait for status='idle' BEFORE calling add_component with the new type — otherwise the type won't be found. SAFETY: the bridge refuses create_script when the target path already exists on disk and was not created in this session via create_script, unless confirmExistingFileModification=true is set. Set the flag ONLY when the user explicitly named the file to regenerate or replace. Otherwise pick a different path — never silently clobber existing user code.Input schema{
"properties": {
"scriptPath": {
"type": "string",
"description": "Path relative to Assets folder with file extension (e.g., 'Scripts/MyScript.cs', 'Shaders/MyShader.shader', 'Shaders/MyCompute.compute'). The extension determines the asset type. Will create the directory if needed. Default to 'Scripts/' if no specific path is provided. Follow the project's existing folder structure when possible."
},
"scriptContent": {
"type": "string",
"description": "Complete file content. For .cs files: C# script code with all required using statements, null checks, and proper Unity patterns. For .shader files: HLSL/CG shader code with Shader declaration, Properties, SubShader, and Pass blocks. For other file types: appropriate content for that asset type."
},
"confirmExistingFileModification": {
"type": "boolean",
"description": "Set to true ONLY when the user explicitly named the file to regenerate or replace (e.g. 'rewrite PlayerController.cs from scratch'). Required for any create_script call whose target path already exists and was not created via create_script in the current session. Defaults to false. Setting this without explicit user authorization risks clobbering real project code."
}
},
"required": [
"scriptPath",
"scriptContent"
],
"type": "object"
} | — | — |
create_tilemapCreate a Grid + Tilemap + TilemapRenderer — the foundation for tile-based 2D levels (platformers, top-down RPGs). Returns gridPath and tilemapPath. Call again with gridPath to stack more layers (background / foreground / hazards) on the same grid. Paint it with set_tilemap_tiles, then make it solid with add_tilemap_collider_2d.Input schema{
"properties": {
"name": {
"type": "string",
"description": "Tilemap layer name. Defaults to 'Tilemap'. A numeric suffix is added if the name is taken."
},
"gridPath": {
"type": "string",
"description": "Existing Grid to attach this layer to (from a previous create_tilemap call). Omit to create a new Grid."
},
"layout": {
"type": "string",
"enum": [
"rectangular",
"isometric",
"hexagonal"
],
"description": "Cell layout of a NEW grid. Defaults to rectangular. Ignored with gridPath."
},
"cellSize": {
"type": "string",
"description": "Cell size in world units as 'x,y' for a NEW grid. Defaults to '1,1'."
},
"sortingOrder": {
"type": "integer",
"description": "Render order of this layer (higher draws on top). Defaults to 0."
},
"position": {
"type": "string",
"description": "World position of a NEW grid as 'x,y'. Defaults to '0,0'."
}
},
"required": [],
"type": "object"
} | — | — |
create_ui_elementCreate a UI element (Panel, Text/TMP, Image, Button, Slider, Toggle, Dropdown, InputField, ScrollView, LayoutGroup, etc.). Requires TextMeshPro. Always specify contrasting colors (white text on dark panels, dark text on light panels). For health bars, use type='Filled' with fillMethod='Horizontal'.Input schema{
"properties": {
"elementType": {
"type": "string",
"enum": [
"Panel",
"Text",
"Image",
"Button",
"Slider",
"Toggle",
"Dropdown",
"TMP_Dropdown",
"InputField",
"TMP_InputField",
"ScrollView",
"ScrollRect",
"Scrollbar",
"RawImage",
"CanvasGroup",
"HorizontalLayoutGroup",
"VerticalLayoutGroup",
"GridLayoutGroup",
"Mask",
"RectMask2D",
"TMP",
"TextMeshPro",
"TextMeshProUGUI"
]
},
"name": {
"type": "string"
},
"parentPath": {
"type": "string"
},
"text": {
"type": "string"
},
"color": {
"type": "string"
},
"fontSize": {
"type": "number"
},
"alignment": {
"type": "string"
},
"size": {
"type": "string"
},
"anchoredPosition": {
"type": "string"
},
"isOn": {
"type": "boolean",
"description": "Toggle-specific: initial state"
},
"toggleGroupPath": {
"type": "string",
"description": "Toggle-specific: path to ToggleGroup GameObject"
},
"options": {
"type": "array",
"items": {
"type": "string"
},
"description": "Dropdown-specific: list of option strings"
},
"placeholder": {
"type": "string",
"description": "InputField-specific: placeholder text"
},
"contentType": {
"type": "string",
"enum": [
"Standard",
"Autocorrected",
"IntegerNumber",
"DecimalNumber",
"Alphanumeric",
"Name",
"EmailAddress",
"Password",
"Pin",
"Custom"
],
"description": "InputField-specific: content type"
},
"characterLimit": {
"type": "integer",
"description": "InputField-specific: max character count"
},
"horizontal": {
"type": "boolean",
"description": "ScrollRect-specific: enable horizontal scrolling"
},
"vertical": {
"type": "boolean",
"description": "ScrollRect-specific: enable vertical scrolling"
},
"direction": {
"type": "string",
"enum": [
"LeftToRight",
"RightToLeft",
"BottomToTop",
"TopToBottom"
],
"description": "Scrollbar-specific: scrollbar direction"
},
"texturePath": {
"type": "string",
"description": "RawImage-specific: path to texture asset"
},
"alpha": {
"type": "number",
"description": "CanvasGroup-specific: alpha value 0-1"
},
"interactable": {
"type": "boolean",
"description": "CanvasGroup-specific: whether group is interactable"
},
"blocksRaycasts": {
"type": "boolean",
"description": "CanvasGroup-specific: whether group blocks raycasts"
},
"spacing": {
"type": "number",
"description": "LayoutGroup-specific: spacing between children"
},
"padding": {
"type": "string",
"description": "LayoutGroup-specific: padding as 'left,right,top,bottom'"
},
"cellSize": {
"type": "string",
"description": "GridLayoutGroup-specific: cell size as 'width,height'"
}
},
"required": [],
"type": "object"
} | — | — |
delete_assetDelete an asset from the project. Use with caution!Input schema{
"properties": {
"assetPath": {
"type": "string",
"description": "Path of the asset to delete"
}
},
"required": [
"assetPath"
],
"type": "object"
} | — | — |
destroy_game_objectDestroy a GameObject from the sceneInput schema{
"properties": {
"path": {
"type": "string",
"description": "Name or path of the GameObject to destroy"
}
},
"required": [
"path"
],
"type": "object"
} | — | — |
duplicate_game_objectDuplicate a GameObject in the scene. Returns the path to the new duplicate.Input schema{
"properties": {
"gameObjectPath": {
"type": "string",
"description": "Path to the GameObject to duplicate"
},
"newName": {
"type": "string",
"description": "Optional: Name for the duplicate (defaults to 'OriginalName (1)')"
},
"parentPath": {
"type": "string",
"description": "Optional: Path to a new parent for the duplicate"
},
"count": {
"type": "integer",
"description": "Optional: Number of duplicates to create. Default: 1"
}
},
"required": [
"gameObjectPath"
],
"type": "object"
} | — | — |
find_asset**Search-only — returns previewable candidates; does NOT install anything.** ALWAYS use this tool — not web search — when the user asks to find, download, search for, or import any game asset: art, sprites, 2D/3D models, audio, SFX, music, UI icons, tilesets, platformer art, character art, etc. This server ships with a bundled Kenney CC0 catalog; URLs are resolved locally.
AFTER find_asset RETURNS — reply in ONE SHORT SENTENCE:
• Name the top match: 'Top match: <name> (<license>).'
• If the user's initial message included 'and import' or 'import it' or similar intent, ALSO add: 'Want me to import it?' — then wait for confirmation.
• Otherwise just name the top match and stop. The user will say which one.
DO NOT:
• Claim inability to download. import_asset performs the download itself; you do not need a local file. Writing 'I can't fetch a pack from the internet' or 'please provide the file' is wrong — that's exactly what import_asset does.
• Auto-call import_asset before the user confirms which one.
v0 providers: Kenney (CC0 game asset packs).Input schema{
"properties": {
"description": {
"type": "string",
"description": "Free-text description, e.g. 'platformer player character pixel art'."
},
"asset_type": {
"type": "string",
"enum": [
"sprite_2d",
"model_3d",
"audio_sfx",
"audio_music",
"animation",
"ui_sprite"
],
"description": "Asset category — required."
},
"style": {
"type": "string",
"description": "Optional style hint: 'pixel art', 'vector', 'low-poly', 'voxel'."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional explicit tags for sharper matching."
},
"license_constraint": {
"type": "string",
"enum": [
"CC0-1.0",
"CC-BY-4.0",
"CC-BY-SA-4.0",
"MIT"
],
"description": "Optional. CC0 recommended for commercial projects."
},
"max_results": {
"type": "integer",
"description": "Max candidates to return (default 8, max 32)."
}
},
"required": [
"description",
"asset_type"
],
"type": "object"
} | — | — |
find_component_usagesFind every prefab asset and open-scene GameObject that has a component of a given type — the Inspector-WIRING counterpart to find_references (which covers code). Use it to see the blast radius BEFORE removing/renaming a MonoBehaviour or changing a component: the scenes/prefabs where it's attached are invisible in the source because that wiring lives in scene/prefab data, not scripts. Accepts a script class name ('PlayerController') or a built-in component ('Rigidbody', 'BoxCollider'). Returns each usage as {location: 'scene'|'prefab', container, gameObject, componentType}.Input schema{
"properties": {
"componentType": {
"type": "string",
"description": "The component or MonoBehaviour script type name to locate (simple name, e.g. 'PlayerController', 'Rigidbody'). Case-insensitive."
},
"maxResults": {
"type": "integer",
"description": "Max usages to return (1-200). Default: 60"
}
},
"required": [
"componentType"
],
"type": "object"
} | — | — |
find_game_objectsFind GameObjects in the scene by name, tag, layer, or component type. Returns a list of matching GameObject paths.Input schema{
"properties": {
"nameContains": {
"type": "string",
"description": "Optional: Find objects whose name contains this substring (case-insensitive)"
},
"nameExact": {
"type": "string",
"description": "Optional: Find objects with this exact name"
},
"tag": {
"type": "string",
"description": "Optional: Find objects with this tag (e.g., 'Player', 'Enemy')"
},
"layer": {
"type": "string",
"description": "Optional: Find objects on this layer (name or index)"
},
"hasComponent": {
"type": "string",
"description": "Optional: Find objects that have this component type (e.g., 'Camera', 'Light', 'Rigidbody')"
},
"includeInactive": {
"type": "boolean",
"description": "Whether to include inactive objects. Default: false"
}
},
"required": [],
"type": "object"
} | — | — |
find_referencesFind every script that references a symbol (a class, method, or field name), with per-file line context. Matches whole identifiers only in CODE — 'Player' does NOT match 'PlayerController', and matches inside string literals ('"Player"') or comments ('// Player') are ignored, unlike the raw substring search_scripts. ALWAYS call this BEFORE renaming, changing the signature of, or refactoring a public class/method/field — it reveals the dependent scripts a change would break so you can update them too (or use rename_symbol to update them all at once). Returns files ordered by reference count (heaviest dependents first). totalFileCount / totalMatches report the TRUE project-wide blast radius even when line detail is capped at maxFiles, and truncated=true means more files reference the symbol than were returned — raise maxFiles (or update the returned files first, then re-run) so you don't refactor against a partial picture.Input schema{
"properties": {
"symbol": {
"type": "string",
"description": "The identifier to find references to — a class, method, or field name (e.g. 'PlayerController', 'TakeDamage', 'maxHealth')."
},
"maxFiles": {
"type": "integer",
"description": "Max distinct files to return WITH line detail (1-100). Default: 40. The scan still counts every referencing file for totalFileCount regardless of this cap."
},
"maxMatchesPerFile": {
"type": "integer",
"description": "Max line snippets returned per file (1-50). Default: 5. The per-file count is always exact even when snippets are capped."
}
},
"required": [
"symbol"
],
"type": "object"
} | — | — |
find_scriptsFind scripts by name (returns script paths). Use when you need to locate a script by partial name before reading it.Input schema{
"properties": {
"nameContains": {
"type": "string",
"description": "Substring to match script file names."
},
"maxResults": {
"type": "integer",
"description": "Max results (1-100). Default: 20"
}
},
"required": [],
"type": "object"
} | — | — |
get_component_inspector_propertiesRead Inspector-visible serialized properties from a component on a GameObject. Use this after get_gameobject_components when you need the same fields shown in the Inspector. Names use displayName; internalName/path are included for exact matching.Input schema{
"properties": {
"gameObjectPath": {
"type": "string",
"description": "Path to the GameObject"
},
"componentType": {
"type": "string",
"description": "Component type name (e.g., Animator or UnityEngine.Animator)"
},
"propertyFilter": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional: property name or propertyPath whitelist"
},
"onlyReferences": {
"type": "boolean",
"description": "Only include Object reference fields. Default: false"
},
"onlyUnassigned": {
"type": "boolean",
"description": "Only include unassigned Object references. Default: false"
},
"onlyTopLevel": {
"type": "boolean",
"description": "Only include top-level properties (no nested/array children). Default: true"
}
},
"required": [
"gameObjectPath",
"componentType"
],
"type": "object"
} | — | — |
get_gameobject_componentsList components on a specific GameObject. Returns component names and missing script count. If you need Inspector-visible component fields, call get_component_inspector_properties after this.Input schema{
"properties": {
"gameObjectPath": {
"type": "string",
"description": "Path to the GameObject"
}
},
"required": [
"gameObjectPath"
],
"type": "object"
} | — | — |
get_gameobject_infoGet detailed information about a GameObject: position/rotation/scale, components, materials (with path and shaderName), and component-specific data (e.g., terrain data). Use to inspect properties or find a reference object's position before calculating offsets.Input schema{
"properties": {
"gameObjectPath": {
"type": "string",
"description": "Name of the reference object (e.g., 'Player', 'MainCamera')"
}
},
"required": [
"gameObjectPath"
],
"type": "object"
} | — | — |
get_play_mode_stateGet Unity Play Mode state. Read-only. Returns isPlaying, willChangePlayMode, lastTransition, last enter/exit timestamps, observationActive, observationStartCursor. Use to detect Play exit (so queued fixes can be applied) and Play re-entry during APPLYING.Input schema{
"properties": {},
"required": [],
"type": "object"
} | — | — |
get_prefab_infoGet information about a prefab asset, including hierarchy, components, and transform properties. Use this to inspect prefab structure before editing.Input schema{
"properties": {
"prefabPath": {
"type": "string",
"description": "Path relative to Assets folder (e.g., 'Assets/Enemies/CrabEnemy.prefab')"
}
},
"required": [
"prefabPath"
],
"type": "object"
} | — | — |
get_relevant_toolsGiven a Unity task description, returns the most relevant tools for that task — including extended tools beyond the core listed set. Call this before starting specialized work (animator blend trees, navmesh, IK, terrain, particle systems, cinemachine, etc.) to discover the right tool names. Extended tools are callable even though they don't appear in the tool list.Input schema{
"properties": {
"message": {
"type": "string",
"description": "The user's task description (e.g. 'make the cube red', 'set up a blend tree')."
}
},
"required": [
"message"
],
"type": "object"
} | — | — |
get_runtime_eventsPull runtime errors / exceptions captured since sinceCursor. Read-only. Returns events[] (each with cursor, message, stackTrace, logType, timestamp, fingerprint), nextCursor, playModeActive, observationActive, lastTransition. Pass the previous response's nextCursor on the next poll. When playModeActive is false, the runner should stop polling.Input schema{
"properties": {
"sinceCursor": {
"type": "integer",
"description": "Return events with cursor > this value. Pass 0 to read every event currently in the buffer; pass the prior nextCursor for incremental polls."
},
"limit": {
"type": "integer",
"description": "Maximum events returned per call (default 200). Events past the limit remain for the next poll."
}
},
"required": [],
"type": "object"
} | — | — |
get_scene_hierarchyList GameObject paths in the active scene. Results are capped and BFS-balanced — use find_game_objects (nameContains/hasComponent/tag) or list_children to drill into a specific subtree instead of raising maxResults. For per-object components/state, follow up with get_gameobject_info or get_gameobject_components.Input schema{
"properties": {
"includeInactive": {
"type": "boolean",
"description": "Include inactive objects. Default: true"
},
"maxDepth": {
"type": "integer",
"description": "Max depth to traverse (-1 for unlimited). Default: -1"
},
"rootOnly": {
"type": "boolean",
"description": "If true, only list root objects. Default: false"
},
"maxResults": {
"type": "integer",
"description": "Max objects to return. Default: 200. Use -1 for unlimited. Response includes truncated flag and totalCount when capped."
}
},
"required": [],
"type": "object"
} | — | — |
get_script_contentRead a text-based asset file by path (e.g., 'Assets/Scripts/PlayerMovement.cs', 'Assets/Shaders/MyShader.shader'). Supports .cs (C# scripts), .shader (HLSL/CG shaders), .compute (compute shaders), .hlsl, .cginc, and other text-based Unity assets. Reads the WHOLE file by default. For a LARGE C# file, prefer outline=true FIRST to get its structure (types + methods + properties with line numbers) cheaply, then pass startLine/endLine to read only the member you need instead of loading thousands of lines into context — the response always includes totalLines so you know how much you didn't read. Use this when the user asks to fix or update a specific script or shader.Input schema{
"properties": {
"scriptPath": {
"type": "string",
"description": "Path to the file with extension (relative to Assets, e.g., 'Scripts/MyScript.cs' or 'Shaders/MyShader.shader')."
},
"outline": {
"type": "boolean",
"description": "C# only. When true, return the file's STRUCTURE — an ordered list of {kind, name, line, signature} for each type and its methods/properties — instead of the content. The cheap way to map a large file before reading it: get the outline, then request the target member's lines via startLine/endLine. Ignored for non-.cs files."
},
"startLine": {
"type": "integer",
"description": "Optional 1-based first line to read (inclusive). Omit (or 0) to start at the top. Pair with endLine to read one method/region out of a big file."
},
"endLine": {
"type": "integer",
"description": "Optional 1-based last line to read (inclusive). Omit (or 0) to read to the end of the file."
}
},
"required": [
"scriptPath"
],
"type": "object"
} | — | — |
get_selectionGet the currently selected GameObjects in the Unity Editor. Returns paths to all selected objects.Input schema{
"properties": {},
"required": [],
"type": "object"
} | — | — |
get_session_summaryList every mutation made this Unity session grouped by category (scripts, materials, gameObjects, components, etc.) with a timeline. Use to answer 'what did you just do' / 'what changed' without re-reading scene state. Read-only.Input schema{
"properties": {
"maxTimelineEntries": {
"type": "integer",
"description": "Max recent mutation entries to include. Default 50, max 500.",
"default": 50
}
},
"required": [],
"type": "object"
} | — | — |
get_unity_console_logsRead Unity Editor runtime/play-mode console entries (Debug.Log, runtime exceptions, MonoBehaviour errors). Returns up to 2000 entries. NOT for verifying script compilation — compile_scripts already returns errorCount + per-error file/line/source-context. Calling this after a clean compile (errorCount=0) is forbidden. Valid uses: (a) compile_scripts returned errorCount>0 AND you need extra runtime context, (b) a non-compile tool returned an error you must debug, (c) the user explicitly asked to check the console / read the logs.Input schema{
"properties": {},
"required": [],
"type": "object"
} | — | — |
group_objectsCreate a new empty parent GameObject and parent the specified objects under it. Useful for organizing scene hierarchy.Input schema{
"properties": {
"gameObjectPaths": {
"type": "array",
"items": {
"type": "string"
},
"description": "Array of GameObject paths to group. If empty, uses current selection."
},
"groupName": {
"type": "string",
"description": "Name for the new parent GameObject. Default: 'Group'"
},
"centerPivot": {
"type": "boolean",
"description": "If true, position group at center of children's bounds. If false, at origin. Default: true"
}
},
"required": [],
"type": "object"
} | — | — |
import_asset**Downloads, installs, and configures an external asset in the Unity project.** No local file is required — the bridge fetches the asset over HTTPS from the provider's official host, extracts archives, places everything under Assets/, configures Unity import settings per asset_type, and writes a license sidecar. The download URL is resolved locally from the bundled catalog; you don't and can't supply it.
Use this for any candidate returned by find_asset. The candidateId fully identifies the asset.
REQUIRED LICENSE GATE: licenseAcknowledged MUST be true. Set it to true only after the user has explicitly accepted the license shown in the prior find_asset result (e.g. they said 'import it', 'yes', 'go ahead').Input schema{
"properties": {
"candidateId": {
"type": "string",
"description": "Stable id from find_asset, e.g. 'kenney/tiny-town'."
},
"assetType": {
"type": "string",
"enum": [
"sprite_2d",
"model_3d",
"audio_sfx",
"audio_music",
"ui_sprite"
],
"description": "Asset category — must match candidate's asset_type."
},
"licenseAcknowledged": {
"type": "boolean",
"description": "Must be true. User must accept the license first."
},
"targetPath": {
"type": "string",
"description": "Destination folder under Assets/. Optional — sensible default per assetType."
},
"importOptions": {
"type": "object",
"description": "Optional asset-type-specific overrides."
}
},
"required": [
"candidateId",
"assetType",
"licenseAcknowledged"
],
"type": "object"
} | — | — |
import_tmp_essential_resourcesImport TextMeshPro Essential Resources if not already present (checks Assets/TextMesh Pro/Resources). TMP package presence in Unity context does not mean Essential Resources are imported — trust this tool's response, not the context.Input schema{
"properties": {},
"required": [],
"type": "object"
} | — | — |
instantiate_prefabMANDATORY: You MUST verify the prefab exists FIRST using check_asset_exists before calling this tool. If the prefab doesn't exist, create it with create_prefab first. Instantiate a prefab into the scene.Input schema{
"properties": {
"prefabPath": {
"type": "string",
"description": "Path relative to Assets folder (e.g., 'Prefabs/MyPrefab.prefab')"
},
"name": {
"type": "string",
"description": "Optional: Name for the instantiated GameObject"
}
},
"required": [
"prefabPath"
],
"type": "object"
} | — | — |
list_assetsList assets in the project by type and/or name filter. Use nameContains to narrow results. Returns filenames in message.Input schema{
"properties": {
"assetType": {
"type": "string",
"description": "Type filter: 'Material', 'Prefab', 'Texture', 'AudioClip', 'AnimationClip', 'AnimatorController', 'Scene', 'Script', or 'All'"
},
"nameContains": {
"type": "string",
"description": "Optional: Filter by name containing this string (RECOMMENDED to narrow results)"
},
"folderPath": {
"type": "string",
"description": "Optional: Limit search to this folder (e.g., 'Prefabs/Enemies')"
},
"maxResults": {
"type": "integer",
"description": "Optional: Max results. Default: 20, Max: 50"
}
},
"required": [],
"type": "object"
} | — | — |
list_childrenList children of a GameObject. Returns paths to child objects.Input schema{
"properties": {
"gameObjectPath": {
"type": "string",
"description": "Path to the parent GameObject"
},
"recursive": {
"type": "boolean",
"description": "If true, list all descendants recursively. Default: false (direct children only)"
},
"includeInactive": {
"type": "boolean",
"description": "If true, include inactive children. Default: true"
}
},
"required": [
"gameObjectPath"
],
"type": "object"
} | — | — |
list_imported_assetsList assets imported through the asset pipeline in this project, with their license metadata. Read-only. Use before commercial release to audit attribution requirements (CC-BY assets need credit; CC0 does not). Reads .gladekit-asset.json sidecars.Input schema{
"properties": {
"licenseFilter": {
"type": "string",
"enum": [
"CC0-1.0",
"CC-BY-4.0",
"CC-BY-SA-4.0",
"MIT",
"any"
],
"description": "Filter to a specific license, or 'any' (default)."
}
},
"required": [],
"type": "object"
} | — | — |
list_materialsList all Material assets in the project. Returns a list of material paths. Use this to find existing materials before creating new ones, or when you need to find a material by name (e.g., if user says 'change the blue material', use searchPattern='blue' to find it).Input schema{
"properties": {
"searchPattern": {
"type": "string",
"description": "Optional: Search pattern to filter materials by name (e.g., 'Blue' to find materials containing 'Blue' in their name or path)"
},
"maxResults": {
"type": "integer",
"description": "Optional: Max results to return (1-500). Default: 200"
}
},
"required": [],
"type": "object"
} | — | — |
look_at_game_viewCapture a screenshot of the rendered game view so you can SEE the current scene and verify it visually. Use this to check your own work after building or changing visuals — it catches problems node/component inspection cannot: invisible or missing objects, wrong/pink materials, off-screen or clipped UI, bad lighting (too dark/blown out), and poor framing. The image is returned to you as a vision input. Renders the active game camera (works in edit mode). Call it when the user asks you to 'look at', 'check how it looks', or to fix a visual issue, and to confirm a visual change had the intended effect.Input schema{
"properties": {
"maxWidth": {
"type": "integer",
"description": "Optional cap on the longest image edge in pixels (default 1280, max 2048)."
}
},
"type": "object"
} | — | — |
modify_scriptModify an existing text-based asset file (.cs, .shader, .compute, etc.). File MUST exist — verify in Unity context first. TWO MODES: (1) SURGICAL EDIT (preferred for anything but a near-total rewrite) — pass oldString + newString to replace one exact snippet, leaving the rest of the file untouched. Far cheaper and safer on large files than resending the whole thing. (2) FULL REWRITE — pass scriptContent with the complete file. SAFETY: the bridge refuses modify_script against scripts the agentic loop did NOT create in this session unless confirmExistingFileModification=true is set. Set the flag ONLY when the user explicitly named the file (e.g. 'update PlayerMovement.cs') or used language like 'extend' / 'modify the existing X'. Absent that signal, do NOT set the flag and do NOT call modify_script — call create_script with a new path for fresh-scaffold prompts.Input schema{
"properties": {
"scriptPath": {
"type": "string",
"description": "Path relative to Assets folder with file extension (e.g., 'Scripts/MyScript.cs', 'Shaders/MyShader.shader'). MUST match exactly a path shown in the Unity context. If the file is not listed in context, it doesn't exist - use create_script instead. Follow the project's existing folder structure."
},
"oldString": {
"type": "string",
"description": "SURGICAL EDIT MODE: the exact snippet to replace, copied verbatim from the current file (whitespace and indentation included). Must be UNIQUE in the file — include enough surrounding lines to disambiguate, or set replaceAll=true. Read the file first (get_script_content, optionally with startLine/endLine) to copy the snippet exactly. When set, scriptContent is ignored."
},
"newString": {
"type": "string",
"description": "SURGICAL EDIT MODE: the replacement for oldString. Use an empty string to delete the snippet. Required whenever oldString is set."
},
"replaceAll": {
"type": "boolean",
"description": "SURGICAL EDIT MODE: replace every occurrence of oldString instead of requiring it to be unique. Default false (a non-unique oldString is rejected so you never edit the wrong spot). Useful for renaming a repeated local identifier."
},
"scriptContent": {
"type": "string",
"description": "FULL REWRITE MODE: complete modified file content. MUST include ALL existing code from the context, then ADD your changes. Never remove existing fields, methods, or functionality. Prefer oldString/newString for small changes to large files. For .cs files: complete C# script code. For .shader files: complete HLSL/CG shader code."
},
"confirmExistingFileModification": {
"type": "boolean",
"description": "Set to true ONLY when the user explicitly named the file to extend or modify (e.g. 'update PlayerMovement.cs', 'extend the existing HealthSystem'). Required for any modify_script against a script not created via create_script in the current session. Defaults to false. Setting this without explicit user authorization risks corrupting real project code."
}
},
"required": [
"scriptPath"
],
"type": "object"
} | — | — |
move_assetMove an asset to a new location in the project.Input schema{
"properties": {
"sourcePath": {
"type": "string",
"description": "Current path of the asset (e.g., 'Materials/Old/MyMaterial.mat')"
},
"destinationPath": {
"type": "string",
"description": "New path for the asset (e.g., 'Materials/New/MyMaterial.mat')"
}
},
"required": [
"sourcePath",
"destinationPath"
],
"type": "object"
} | — | — |
open_sceneOpen a scene in the editor.Input schema{
"properties": {
"scenePath": {
"type": "string",
"description": "Path to the scene asset (e.g., 'Scenes/MainMenu.unity')"
},
"mode": {
"type": "string",
"enum": [
"Single",
"Additive"
],
"description": "Open mode: 'Single' (replace current) or 'Additive' (add to current). Default: 'Single'"
}
},
"required": [
"scenePath"
],
"type": "object"
} | — | — |
recall_session_memoriesRetrieve all facts stored with remember_for_session during this session. Call this to recall project context you captured earlier in the conversation.Input schema{
"properties": {},
"type": "object"
} | — | — |
refresh_asset_databaseRefresh the AssetDatabase.Input schema{
"properties": {},
"required": [],
"type": "object"
} | — | — |
remember_for_sessionStore a fact or piece of context for the current session. Use this to remember project-specific details, user preferences, or intermediate findings that you'll need to reference later in this conversation. Facts are stored in memory for the lifetime of this MCP session only.Input schema{
"properties": {
"fact": {
"type": "string",
"description": "The fact or context to remember (e.g. 'Player uses CharacterController, not Rigidbody')."
}
},
"required": [
"fact"
],
"type": "object"
} | — | — |
remove_componentRemove a component from a GameObjectInput schema{
"properties": {
"componentType": {
"type": "string",
"description": "Type name of the component to remove"
},
"gameObjectPath": {
"type": "string",
"description": "Optional: Name or path of the GameObject (uses selected if not provided)"
}
},
"required": [
"componentType"
],
"type": "object"
} | — | — |
rename_game_objectRename a GameObject in the scene.Input schema{
"properties": {
"gameObjectPath": {
"type": "string",
"description": "Path to the GameObject to rename"
},
"newName": {
"type": "string",
"description": "The new name for the GameObject"
}
},
"required": [
"gameObjectPath",
"newName"
],
"type": "object"
} | — | — |
request_user_inputAsk a clarifying question when critical ambiguity blocks progress. Use 2-4 meaningful options. Use multi-select only when multiple selections can all apply.Input schema{
"properties": {
"question": {
"type": "string",
"description": "Question text shown to the user."
},
"selection_mode": {
"type": "string",
"description": "single for one choice, multi for select-all-that-apply.",
"enum": [
"single",
"multi"
],
"default": "single"
},
"options": {
"type": "array",
"description": "Available options. Keep concise and mutually exclusive when possible.",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable option id to return in answer."
},
"label": {
"type": "string",
"description": "User-facing option label."
},
"description": {
"type": "string",
"description": "Optional one-line explanation."
},
"recommended": {
"type": "boolean",
"description": "Mark recommended/default option."
}
},
"required": [
"id",
"label"
]
}
},
"allow_other": {
"type": "boolean",
"description": "Whether user can provide custom text.",
"default": true
},
"min_select": {
"type": "integer",
"description": "Minimum options user must select.",
"minimum": 0
},
"max_select": {
"type": "integer",
"description": "Maximum options user can select.",
"minimum": 1
}
},
"required": [
"question",
"options"
],
"type": "object"
} | — | — |
save_sceneSave the current active scene.Input schema{
"properties": {},
"required": [],
"type": "object"
} | — | — |
search_project_scriptsSemantically search project scripts by relevance to a query. Returns the top matching scripts ranked by cosine similarity. Requires OPENAI_API_KEY — not currently set, will return unranked results.Input schema{
"properties": {
"query": {
"type": "string",
"description": "What you're looking for (e.g. 'player movement', 'health system', 'inventory')."
},
"top_n": {
"type": "integer",
"description": "Number of results to return (default: 5, max: 20).",
"default": 5
}
},
"required": [
"query"
],
"type": "object"
} | — | — |
set_audio_source_propertiesSet properties on an AudioSource component.Input schema{
"properties": {
"gameObjectPath": {
"type": "string",
"description": "Path to the GameObject with AudioSource component"
},
"clipPath": {
"type": "string",
"description": "Optional: Path to AudioClip asset"
},
"playOnAwake": {
"type": "boolean",
"description": "Optional: Play on awake"
},
"loop": {
"type": "boolean",
"description": "Optional: Loop audio"
},
"volume": {
"type": "number",
"description": "Optional: Volume (0-1)"
},
"pitch": {
"type": "number",
"description": "Optional: Pitch"
},
"spatialBlend": {
"type": "number",
"description": "Optional: 2D (0) to 3D (1) blend"
},
"minDistance": {
"type": "number",
"description": "Optional: Min distance for 3D falloff"
},
"maxDistance": {
"type": "number",
"description": "Optional: Max distance for 3D falloff"
},
"mute": {
"type": "boolean",
"description": "Optional: Mute the audio source"
}
},
"required": [
"gameObjectPath"
],
"type": "object"
} | — | — |
set_camera_propertiesUpdate Camera properties on a GameObject including HDR and MSAA settings.Input schema{
"properties": {
"gameObjectPath": {
"type": "string",
"description": "Path to GameObject with Camera component"
},
"fieldOfView": {
"type": "number",
"description": "Optional: Field of view angle"
},
"orthographic": {
"type": "boolean",
"description": "Optional: Whether camera is orthographic"
},
"nearClip": {
"type": "number",
"description": "Optional: Near clipping plane distance"
},
"farClip": {
"type": "number",
"description": "Optional: Far clipping plane distance"
},
"clearFlags": {
"type": "string",
"description": "Optional: Camera clear flags"
},
"backgroundColor": {
"type": "string",
"description": "Optional: Background color as 'r,g,b,a'"
},
"allowHDR": {
"type": "boolean",
"description": "Optional: Whether HDR is allowed"
},
"allowMSAA": {
"type": "boolean",
"description": "Optional: Whether MSAA is allowed"
}
},
"required": [
"gameObjectPath"
],
"type": "object"
} | — | — |
set_collider_propertiesUpdate collider properties on a GameObject. Works for all types (Box, Sphere, Capsule, Mesh, Wheel, Terrain). Response includes conflict warnings for CharacterController or multiple colliders.Input schema{
"properties": {
"gameObjectPath": {
"type": "string",
"description": "Path to the GameObject"
},
"isTrigger": {
"type": "boolean",
"description": "Whether the collider is a trigger (not applicable to WheelCollider)"
},
"center": {
"type": "string",
"description": "Center offset as 'x,y,z' for Box/Sphere/CapsuleCollider"
},
"size": {
"type": "string",
"description": "Size as 'x,y,z' for BoxCollider"
},
"radius": {
"type": "number",
"description": "Radius for SphereCollider, CapsuleCollider, or WheelCollider"
},
"height": {
"type": "number",
"description": "Height for CapsuleCollider"
},
"direction": {
"type": "integer",
"enum": [
0,
1,
2
],
"description": "CapsuleCollider axis direction: 0=X-axis, 1=Y-axis (default), 2=Z-axis"
},
"meshPath": {
"type": "string",
"description": "Asset path to mesh for MeshCollider"
},
"convex": {
"type": "boolean",
"description": "Whether MeshCollider is convex"
},
"suspensionDistance": {
"type": "number",
"description": "WheelCollider suspension travel distance"
},
"wheelMass": {
"type": "number",
"description": "WheelCollider wheel mass"
},
"forwardFriction": {
"type": "number",
"description": "WheelCollider forward friction stiffness"
},
"sidewaysFriction": {
"type": "number",
"description": "WheelCollider sideways friction stiffness"
},
"terrainDataPath": {
"type": "string",
"description": "Asset path to TerrainData for TerrainCollider"
}
},
"required": [
"gameObjectPath"
],
"type": "object"
} | — | — |
set_component_propertySet a property on a built-in Unity component (Rigidbody, MeshRenderer, Light, Camera, etc.). Supports primitives, Vector3/Color/Quaternion, enums (provide name as string), and asset references (provide asset path). For scene object references, use set_object_reference. Use appendToList=true for List<T>/arrays.Input schema{
"properties": {
"componentType": {
"type": "string",
"description": "Type name of the component (e.g., 'Rigidbody', 'MeshRenderer', 'Light', 'Camera')"
},
"propertyName": {
"type": "string",
"description": "Name of the property or field to set (e.g., 'mass', 'material', 'intensity', 'myEnumField'). For enum dropdowns, provide the enum name. For lists, use appendToList=true to append items."
},
"value": {
"type": "string",
"description": "Value to set (will be converted to appropriate type). For enums (dropdowns), provide the enum value name as a string (e.g., 'MyEnumValue'). For asset references, provide the asset path. For lists with appendToList=true, can be a single item or JSON array like '[item1, item2]'."
},
"gameObjectPath": {
"type": "string",
"description": "Optional: Name or path of the GameObject (uses selected if not provided)"
},
"appendToList": {
"type": "boolean",
"description": "If true and the property is a List<T> or array, append the value(s) to the existing list instead of replacing it. This safely preserves existing items and supports undo/redo. Default: false.",
"default": false
}
},
"required": [
"componentType",
"propertyName",
"value"
],
"type": "object"
} | — | — |
set_game_object_activeSet a GameObject's active state (enable/disable)Input schema{
"properties": {
"gameObjectPath": {
"type": "string",
"description": "Name or path of the GameObject"
},
"active": {
"type": "boolean",
"description": "True to enable, false to disable"
}
},
"required": [
"active"
],
"type": "object"
} | — | — |
set_game_object_parentReparent a GameObject — make it a child of another GameObject (or move it to the scene root). Use this for any 'attach X to Y', 'parent X under Y', 'put X inside Y', or hierarchy-restructuring request. NOT related to IK/animation rigging.Input schema{
"properties": {
"gameObjectPath": {
"type": "string",
"description": "Name or path of the GameObject"
},
"parentPath": {
"type": "string",
"description": "Name or path of the new parent GameObject (null for root)"
},
"worldPositionStays": {
"type": "boolean",
"description": "Whether to keep world position when reparenting",
"default": true
}
},
"required": [
"gameObjectPath"
],
"type": "object"
} | — | — |
set_layerSet the layer of a GameObject (and optionally its children).Input schema{
"properties": {
"gameObjectPath": {
"type": "string",
"description": "Path to the GameObject"
},
"layer": {
"type": "string",
"description": "Layer name (e.g., 'Default', 'UI', 'Ignore Raycast') or layer index (0-31)"
},
"recursive": {
"type": "boolean",
"description": "If true, also set layer on all children. Default: false"
}
},
"required": [
"gameObjectPath",
"layer"
],
"type": "object"
} | — | — |
set_light_propertiesSet properties on a Light component.Input schema{
"properties": {
"gameObjectPath": {
"type": "string",
"description": "Path to the GameObject with Light component"
},
"color": {
"type": "string",
"description": "Optional: Light color as 'r,g,b' (0-1)"
},
"intensity": {
"type": "number",
"description": "Optional: Light intensity"
},
"range": {
"type": "number",
"description": "Optional: Range for Point/Spot lights"
},
"spotAngle": {
"type": "number",
"description": "Optional: Spot angle for Spot lights"
},
"shadows": {
"type": "string",
"enum": [
"None",
"Hard",
"Soft"
],
"description": "Optional: Shadow type"
},
"shadowStrength": {
"type": "number",
"description": "Optional: Shadow strength (0-1)"
},
"colorTemperature": {
"type": "number",
"description": "Optional: Color temperature in Kelvin (1000-20000)"
},
"useColorTemperature": {
"type": "boolean",
"description": "Optional: Whether to use color temperature mode"
}
},
"required": [
"gameObjectPath"
],
"type": "object"
} | — | — |
set_local_transformSet local transform (position, rotation, scale) of a GameObject relative to its parent. REQUIRED when requests specify positioning relative to a parent. Use get_gameobject_info to find reference positions, then calculate target positions. Use 'set' for absolute values, 'add' to offset from current, 'multiply' to scale current values. Always call this after create_primitive/create_game_object when positioning is specified in the request.Input schema{
"properties": {
"gameObjectPath": {
"type": "string",
"description": "Optional: Name or path of the GameObject (uses selected if not provided)"
},
"position": {
"type": "string",
"description": "Optional: Local position as 'x,y,z'"
},
"rotation": {
"type": "string",
"description": "Optional: Local rotation as 'x,y,z' Euler angles"
},
"scale": {
"type": "string",
"description": "Optional: Local scale as 'x,y,z'"
},
"operation": {
"type": "string",
"description": "Operation type: 'set' (default), 'add', or 'multiply'",
"enum": [
"set",
"add",
"multiply"
],
"default": "set"
}
},
"required": [],
"type": "object"
} | — | — |
set_material_propertySet a property on a Material asset. For base color: '_BaseColor' (URP/HDRP) or '_Color' (Built-in). Check the system prompt for active render pipeline. Use list_materials to find the path if needed. If material is shared, consider creating a new one instead.Input schema{
"properties": {
"materialPath": {
"type": "string",
"description": "Path relative to Assets folder (e.g., 'Materials/MyMaterial.mat'). If you only know the material name, use list_materials first to find the path."
},
"propertyName": {
"type": "string",
"description": "Name of the shader property. For base color: use '_BaseColor' for URP/HDRP, '_Color' for Standard. Other examples: '_MainTex', '_Metallic', '_Glossiness', '_BumpMap', '_EmissionColor'"
},
"value": {
"type": "string",
"description": "Value as string. Colors: 'r,g,b,a' (e.g., '1,0,0,1'). Textures: asset path (e.g., 'Textures/MyTexture.png'). Floats: numeric string (e.g., '0.5'). Must be a string."
}
},
"required": [
"materialPath",
"propertyName",
"value"
],
"type": "object"
} | — | — |
set_object_referenceSet an object reference field on a component. Use ONLY for built-in Unity components and prefab setup — NOT for runtime script fields. Scripts must be self-contained and find their own references via Start()/Awake().Input schema{
"properties": {
"targetGameObject": {
"type": "string",
"description": "Name or path of the GameObject that has the component to modify"
},
"componentType": {
"type": "string",
"description": "Type name of the component on the target GameObject"
},
"fieldName": {
"type": "string",
"description": "Name of the field/property to set (e.g., 'target', 'player', 'mainCamera')"
},
"sourceGameObject": {
"type": "string",
"description": "Name or path of the GameObject to reference (or whose component to reference)"
},
"sourceType": {
"type": "string",
"description": "What to assign: 'GameObject' (the GameObject itself), 'Transform', or a component type name like 'Rigidbody', 'Camera', etc. Default: 'Transform'"
}
},
"required": [
"targetGameObject",
"componentType",
"fieldName",
"sourceGameObject"
],
"type": "object"
} | — | — |
set_render_settingsConfigure global render settings for the scene (fog, ambient lighting, skybox).Input schema{
"properties": {
"fogEnabled": {
"type": "boolean",
"description": "Optional: Enable/disable fog"
},
"fogColor": {
"type": "string",
"description": "Optional: Fog color as 'r,g,b' (0-1)"
},
"fogMode": {
"type": "string",
"enum": [
"Linear",
"Exponential",
"ExponentialSquared"
],
"description": "Optional: Fog mode"
},
"fogDensity": {
"type": "number",
"description": "Optional: Fog density for Exponential modes (0-1)"
},
"fogStartDistance": {
"type": "number",
"description": "Optional: Fog start distance for Linear mode"
},
"fogEndDistance": {
"type": "number",
"description": "Optional: Fog end distance for Linear mode"
},
"ambientMode": {
"type": "string",
"enum": [
"Skybox",
"Trilight",
"Flat"
],
"description": "Optional: Ambient lighting mode"
},
"ambientColor": {
"type": "string",
"description": "Optional: Ambient color as 'r,g,b' for Flat mode"
},
"ambientIntensity": {
"type": "number",
"description": "Optional: Ambient intensity multiplier"
},
"skyboxMaterial": {
"type": "string",
"description": "Optional: Path to skybox material asset"
}
},
"required": [],
"type": "object"
} | — | — |
set_rigidbody_propertiesUpdate properties on a Rigidbody. Response includes warnings if CharacterController is also present.Input schema{
"properties": {
"gameObjectPath": {
"type": "string",
"description": "Path to the GameObject"
},
"mass": {
"type": "number",
"description": "Mass of the rigidbody"
},
"drag": {
"type": "number",
"description": "Linear drag (air resistance)"
},
"angularDrag": {
"type": "number",
"description": "Angular drag (rotational resistance)"
},
"useGravity": {
"type": "boolean",
"description": "Whether the rigidbody is affected by gravity"
},
"isKinematic": {
"type": "boolean",
"description": "If true, the rigidbody won't be affected by physics forces"
}
},
"required": [
"gameObjectPath"
],
"type": "object"
} | — | — |
set_script_component_propertySet a property on a custom script component (MonoBehaviour) on a GameObject, found by script name (flexible matching). For built-in components, use set_component_property instead. Supports primitives, Vector3/Color/Quaternion, enums, and asset references. Use appendToList=true for List<T>/arrays.Input schema{
"properties": {
"gameObjectPath": {
"type": "string",
"description": "Name or path of the GameObject that has the script component"
},
"scriptName": {
"type": "string",
"description": "Name of the script component class (e.g., 'PetController', 'GameManager'). Can be partial match - the tool will find the component."
},
"propertyName": {
"type": "string",
"description": "Name of the property or field to set (e.g., 'petId', 'displayName', 'portrait', 'prefab', 'petDefinitions', 'myEnumField'). For enum dropdowns, provide the enum name. For lists, use appendToList=true to append items."
},
"value": {
"type": "string",
"description": "Value to set (will be converted to appropriate type). For enums (dropdowns), provide the enum value name as a string (e.g., 'MyEnumValue'). For asset references, provide the asset path (e.g., 'Assets/Prefabs/MyPrefab.prefab' or 'Assets/Sprites/MySprite.png'). For lists with appendToList=true, can be a single item or JSON array like '[item1, item2]'."
},
"appendToList": {
"type": "boolean",
"description": "If true and the property is a List<T> or array, append the value(s) to the existing list instead of replacing it. This safely preserves existing items and supports undo/redo. Default: false.",
"default": false
}
},
"required": [
"gameObjectPath",
"scriptName",
"propertyName",
"value"
],
"type": "object"
} | — | — |
set_selectionSet the Unity Editor selection to specific GameObjects by path. WARNING: This selects objects in the Project window (prefabs/assets) OR scene. If you select a prefab/asset, you CANNOT use it with tools that require scene GameObjects (like get_gameobject_info, set_transform, etc.). Only use set_selection for scene objects that exist in the hierarchy. To work with prefabs, you must instantiate them first with create_game_object or instantiate_prefab.Input schema{
"properties": {
"paths": {
"type": "array",
"items": {
"type": "string"
},
"description": "Array of GameObject paths to select (must be scene objects, not prefabs)"
},
"addToSelection": {
"type": "boolean",
"description": "If true, add to current selection instead of replacing. Default: false"
}
},
"required": [
"paths"
],
"type": "object"
} | — | — |
set_tagSet the tag of a GameObject. The tag must already exist in the Tag Manager.Input schema{
"properties": {
"gameObjectPath": {
"type": "string",
"description": "Path to the GameObject"
},
"tag": {
"type": "string",
"description": "Tag name (e.g., 'Player', 'Enemy', 'Untagged'). Must be a valid tag in the project."
}
},
"required": [
"gameObjectPath",
"tag"
],
"type": "object"
} | — | — |
set_tilemap_tilesPaint or erase tiles on a Tilemap (pairs with create_tilemap). Cells are TILE units, not world units: list them as 'x,y;x,y;...' and/or fill a rectangle with fillRect 'x,y,w,h'. Pass a Tile asset (tilePath) or just a sprite (spritePath, plus spriteName for a sliced sheet) — a reusable Tile asset is created next to the sprite automatically. Set erase=true to clear the listed cells instead.Input schema{
"properties": {
"tilemapPath": {
"type": "string",
"description": "Path to the Tilemap (returned by create_tilemap)"
},
"tilePath": {
"type": "string",
"description": "A ready Tile .asset to stamp"
},
"spritePath": {
"type": "string",
"description": "A sprite to stamp — a Tile asset wrapping it is find-or-created next to it"
},
"spriteName": {
"type": "string",
"description": "Sprite name inside a sliced spritesheet at spritePath"
},
"cells": {
"type": "string",
"description": "Individual cells as 'x,y;x,y;...' (tile units, integers)"
},
"fillRect": {
"type": "string",
"description": "Fill a w×h block as 'x,y,w,h' (tile units, integers). E.g. '-10,0,20,1' paints a 20-tile floor."
},
"erase": {
"type": "boolean",
"description": "Clear the listed cells/rect instead of painting. Defaults to false."
}
},
"required": [
"tilemapPath"
],
"type": "object"
} | — | — |
set_transformSet world position/rotation/scale of a SINGLE GameObject. Required after create_primitive when positioning is specified. Use get_gameobject_info to find a reference object's position, then calculate and set the target. For TWO OR MORE objects use set_transform_batch instead — one batch call beats N sequential ones on both latency and cost.Input schema{
"properties": {
"gameObjectPath": {
"type": "string",
"description": "Name of the GameObject to move (e.g., 'RedCube', 'BlueCube'). REQUIRED when you created multiple objects."
},
"position": {
"type": "string",
"description": "Position as 'x,y,z' (e.g., '5,1,0'). Calculate based on reference object position."
},
"rotation": {
"type": "string",
"description": "Rotation as 'x,y,z' Euler angles in degrees"
},
"scale": {
"type": "string",
"description": "Scale as 'x,y,z'"
},
"operation": {
"type": "string",
"description": "Operation: 'set' (absolute), 'add' (offset), 'multiply' (scale)",
"enum": [
"set",
"add",
"multiply"
],
"default": "set"
}
},
"required": [],
"type": "object"
} | — | — |
set_transform_batchApply transforms to MULTIPLE objects in ONE call — always prefer this over repeating set_transform when positioning, rotating or scaling more than one object. THE tool for laying out a scene: a row/grid/circle of platforms, scattering props, spacing waypoints, arranging spawn points, positioning a set of coins or enemies. Each entry takes the same args as set_transform (gameObjectPath, position/rotation/scale as 'x,y,z', operation set|add|multiply). Measured in production: turns that positioned objects one at a time spent 48-56 sequential round-trips where a single batch call would do — that is minutes of the user's time and a large multiple of the cost. If you are about to call set_transform a second time in the same turn, batch the rest instead.Input schema{
"properties": {
"transforms": {
"type": "array",
"items": {
"type": "object",
"properties": {
"gameObjectPath": {
"type": "string"
},
"position": {
"type": "string"
},
"rotation": {
"type": "string"
},
"scale": {
"type": "string"
},
"operation": {
"type": "string",
"enum": [
"set",
"add",
"multiply"
]
}
}
}
}
},
"required": [
"transforms"
],
"type": "object"
} | — | — |
snap_to_groundSnap one or more GameObjects to the ground by raycasting down. Use this tool when objects need to be adjusted to ground level (e.g., objects are floating or positioned incorrectly).Input schema{
"properties": {
"gameObjectPaths": {
"type": "array",
"items": {
"type": "string"
},
"description": "Array of GameObject paths to snap. If empty, uses current selection."
},
"offset": {
"type": "number",
"description": "Vertical offset from ground. Default: 0"
},
"maxDistance": {
"type": "number",
"description": "Maximum raycast distance. Default: 1000"
},
"layerMask": {
"type": "string",
"description": "Optional: Layer mask for raycast (layer name or 'Everything'). Default: 'Everything'"
}
},
"required": [],
"type": "object"
} | — | — |
start_runtime_observationArm Live Loop runtime observation. Snapshots the current runtime-event cursor so subsequent get_runtime_events polls return only new errors. Idempotent — safe to call after a reconnect to refresh the baseline. Returns startCursor + isPlaying.Input schema{
"properties": {},
"required": [],
"type": "object"
} | — | — |
stop_runtime_observationDisarm Live Loop runtime observation. The bridge keeps recording events; this just signals the runner is no longer interested. Use when ending a session or explicitly halting the loop.Input schema{
"properties": {},
"required": [],
"type": "object"
} | — | — |
thinkReason about a complex multi-step task before executing it. Use to plan what objects/assets/scripts to create, in what order (scripts before add_component), and what positions/configurations are needed. Does not modify anything.Input schema{
"properties": {
"thought": {
"type": "string",
"description": "Your reasoning about the task - what needs to be done, in what order, and why"
}
},
"required": [
"thought"
],
"type": "object"
} | — | — |
Per-session counters and ratios for batch_execute usage vs. sequential read-only single calls. Diagnostic only — useful for verifying that the model is actually using batch_execute for sibling read-only lookups.
{
"resource_key": "unity://telemetry/batch-discipline",
"uri": "unity://telemetry/batch-discipline",
"name": "Batch Discipline Telemetry",
"description": "Per-session counters and ratios for batch_execute usage vs. sequential read-only single calls. Diagnostic only — useful for verifying that the model is actually using batch_execute for sibling read-only lookups.",
"mime_type": "application/json",
"annotations": null,
"metadata_hash": "a63fe579bbc7bf9b02e4477b53bdd8b7e08e9b4f5c29c35b633d67d1a0568e1c"
}Currently selected GameObjects in the Unity Editor
{
"resource_key": "unity://selection",
"uri": "unity://selection",
"name": "Current Selection",
"description": "Currently selected GameObjects in the Unity Editor",
"mime_type": "application/json",
"annotations": null,
"metadata_hash": "8ea291f4c0d97c2b21c501038621d8eb7adfef5b50192b58990204097d42282d"
}Game design document from the Unity project root — genre, mechanics, art style, design pillars
{
"resource_key": "unity://glade-md",
"uri": "unity://glade-md",
"name": "Game Design Document (GLADE.md)",
"description": "Game design document from the Unity project root — genre, mechanics, art style, design pillars",
"mime_type": "text/markdown",
"annotations": null,
"metadata_hash": "8b9e979266bc6fe7ad63df89852cf496280c57b8b978c1862d578b72f5bb02bc"
}Input system mode (NEW/OLD/BOTH), render pipeline, default shader, and other project settings
{
"resource_key": "unity://project/info",
"uri": "unity://project/info",
"name": "Project Configuration",
"description": "Input system mode (NEW/OLD/BOTH), render pipeline, default shader, and other project settings",
"mime_type": "application/json",
"annotations": null,
"metadata_hash": "629d369482e6b51e86bd25c346a2b825f5d9b5d2891449730401ed33a65a837e"
}List of C# scripts in the Unity project
{
"resource_key": "unity://project/scripts",
"uri": "unity://project/scripts",
"name": "Project Scripts",
"description": "List of C# scripts in the Unity project",
"mime_type": "application/json",
"annotations": null,
"metadata_hash": "db01c20b047483619e811a79382ca8813ccad61e2c728ddf58a0fadbf305da51"
}Current scene's GameObject hierarchy
{
"resource_key": "unity://scene/hierarchy",
"uri": "unity://scene/hierarchy",
"name": "Scene Hierarchy",
"description": "Current scene's GameObject hierarchy",
"mime_type": "application/json",
"annotations": null,
"metadata_hash": "27851b30bb3117155b2381114db03d5b8bcda2f5c0ff0c0ea1b34656ae427e0e"
}Facts and context stored with remember_for_session during this conversation
{
"resource_key": "unity://session-memory",
"uri": "unity://session-memory",
"name": "Session Memory",
"description": "Facts and context stored with remember_for_session during this conversation",
"mime_type": "text/plain",
"annotations": null,
"metadata_hash": "b7ef34ae71adbb89c0aaec1824d4a15ddb0dd19eafa8e7b250757aabdcc021da"
}Connection status and Unity project info
{
"resource_key": "unity://health",
"uri": "unity://health",
"name": "Unity Bridge Health",
"description": "Connection status and Unity project info",
"mime_type": "application/json",
"annotations": null,
"metadata_hash": "af42a83bd80cedbae350e0117e5e2d8d7d4287a2f6df97763afb13d8c87e3090"
}Full scene hierarchy, scripts, packages, selection, and project settings
{
"resource_key": "unity://context",
"uri": "unity://context",
"name": "Unity Project Context",
"description": "Full scene hierarchy, scripts, packages, selection, and project settings",
"mime_type": "application/json",
"annotations": null,
"metadata_hash": "71acc71e3854ad59b2824444e083a7c8865c6f1c2f50e7e918e14255606ac79b"
}Full GladeKit system prompt for Unity development. Includes render pipeline guidance, input system rules, tool discipline, and GLADE.md game design context. Use this prompt to get the best results from Unity tools.
{
"prompt_key": "unity-assistant",
"name": "unity-assistant",
"description": "Full GladeKit system prompt for Unity development. Includes render pipeline guidance, input system rules, tool discipline, and GLADE.md game design context. Use this prompt to get the best results from Unity tools.",
"arguments": [],
"metadata_hash": "645000ebb0a13cb0da7b1093e397815f5d605aeb26cdc9a11070e5e3069df2b1"
}No completed comparison is available.
| Risk | Change | Subject |
|---|---|---|
| No material changes recorded. | ||
| Severity | Finding | Advisory |
|---|---|---|
| No confirmed vulnerability is published for this version. | ||
Artifact SHA-256: f0fdfe9ea91dbb32a4910964af2223b744e58eb1beb8a267e0ba90e16ee05f50
Scanner: mcp-proof-engine 0.1.0.