← WebMCP Directory

Tool tree

feather-engine.vercel.app

Developer ToolsTools verified
Website
Feather Engine
Explore capabilities
    list_sceneAnswer

    List the current project snapshot. Defaults to tiny; request compact/standard/full only when extra graph or asset detail is needed.

    View tool JSON
    {
      "name": "list_scene",
      "kind": "answer",
      "impl": "imperative",
      "description": "List the current project snapshot. Defaults to tiny; request compact/standard/full only when extra graph or asset detail is needed.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "detail": {
            "type": "string",
            "enum": [
              "tiny",
              "compact",
              "standard",
              "full"
            ]
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 200
          }
        }
      }
    }
    set_blueprint_scriptAction

    REPLACE a blueprint's entire logic by compiling FeatherScript source into its node graph (the fastest way to author behavior — one call instead of many add_graph_node/connect calls). See the FeatherScript section of the engine guide for the language. The source must be the COMPLETE script (start from get_blueprint_script when editing). Syntax errors AND unsupported lines reject the change and leave the previous graph intact — never applied as silent comment nodes. Returns the resulting node/edge counts.

    View tool JSON
    {
      "name": "set_blueprint_script",
      "kind": "act",
      "impl": "imperative",
      "description": "REPLACE a blueprint's entire logic by compiling FeatherScript source into its node graph (the fastest way to author behavior — one call instead of many add_graph_node/connect calls). See the FeatherScript section of the engine guide for the language. The source must be the COMPLETE script (start from get_blueprint_script when editing). Syntax errors AND unsupported lines reject the change and leave the previous graph intact — never applied as silent comment nodes. Returns the resulting node/edge counts.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "blueprintId": {
            "type": "string"
          },
          "source": {
            "type": "string",
            "description": "Complete FeatherScript source, e.g. \"blueprint Guard\\n\\non update(dt):\\n    if (AI.distance_to_player() < 5):\\n        self.jump()\""
          }
        },
        "required": [
          "blueprintId",
          "source"
        ]
      }
    }
    create_new_projectAction

    Create a brand new blank project with a clean scene, resetting the canvas. Call this when the user asks to start a new project or create a game from scratch.

    View tool JSON
    {
      "name": "create_new_project",
      "kind": "act",
      "impl": "imperative",
      "description": "Create a brand new blank project with a clean scene, resetting the canvas. Call this when the user asks to start a new project or create a game from scratch.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "name": {
            "description": "Project name. Defaults to \"New Game\".",
            "type": "string"
          }
        }
      }
    }
    create_objectAction

    Create a new scene object. Returns its id. Spawn dynamic physics objects slightly above the ground (y > 0). Pass parentId to nest it under another object (e.g. building a composite character).

    View tool JSON
    {
      "name": "create_object",
      "kind": "act",
      "impl": "imperative",
      "description": "Create a new scene object. Returns its id. Spawn dynamic physics objects slightly above the ground (y > 0). Pass parentId to nest it under another object (e.g. building a composite character).",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "empty",
              "cube",
              "sphere",
              "capsule",
              "plane",
              "terrain",
              "light",
              "camera"
            ]
          },
          "name": {
            "type": "string"
          },
          "position": {
            "minItems": 3,
            "maxItems": 3,
            "type": "array",
            "items": {
              "type": "number"
            },
            "description": "[x, y, z]"
          },
          "color": {
            "description": "Hex color, e.g. #FF6B6B",
            "type": "string"
          },
          "parentId": {
            "description": "Nest the new object under this existing object.",
            "type": "string"
          },
          "terrain": {
            "description": "Only for kind:\"terrain\": procedural terrain/chunk/foliage settings.",
            "type": "object",
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "size": {
                "description": "Total terrain width/depth in world units.",
                "type": "number",
                "minimum": 32,
                "maximum": 8192
              },
              "chunkSize": {
                "description": "Streamed chunk width/depth in world units.",
                "type": "number",
                "minimum": 8,
                "maximum": 512
              },
              "resolution": {
                "description": "Segments per chunk edge. Higher = more detail/cost.",
                "type": "integer",
                "minimum": 4,
                "maximum": 64
              },
              "streamRadius": {
                "description": "Render chunk rings around the camera/player.",
                "type": "integer",
                "minimum": 1,
                "maximum": 10
              },
              "physicsRadius": {
                "description": "Physics chunk rings around characters/dynamic bodies.",
                "type": "integer",
                "minimum": 1,
                "maximum": 5
              },
              "seed": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "heightScale": {
                "type": "number",
                "minimum": 0,
                "maximum": 256
              },
              "frequency": {
                "type": "number",
                "minimum": 0.001,
                "maximum": 0.25
              },
              "octaves": {
                "type": "integer",
                "minimum": 1,
                "maximum": 8
              },
              "persistence": {
                "type": "number",
                "minimum": 0.05,
                "maximum": 0.95
              },
              "lacunarity": {
                "type": "number",
                "minimum": 1.1,
                "maximum": 4
              },
              "editSpacing": {
                "description": "World units between persistent sculpt/paint samples.",
                "type": "number",
                "minimum": 0.5,
                "maximum": 16
              },
              "lowColor": {
                "type": "string"
              },
              "midColor": {
                "type": "string"
              },
              "highColor": {
                "type": "string"
              },
              "materialLayers": {
                "minItems": 1,
                "maxItems": 8,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "color": {
                      "type": "string"
                    },
                    "textureAssetId": {
                      "description": "Optional image asset id for the layer base texture, or \"\" to clear.",
                      "type": "string"
                    },
                    "normalMapAssetId": {
                      "description": "Optional image asset id for the layer normal map, or \"\" to clear.",
                      "type": "string"
                    }
                  }
                }
              },
              "foliage": {
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  },
                  "mode": {
                    "type": "string",
                    "enum": [
                      "grass",
                      "trees",
                      "mixed"
                    ]
                  },
                  "density": {
                    "description": "Grass/shrub density 0..1.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "treeDensity": {
                    "description": "Tree density 0..1.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "minScale": {
                    "type": "number",
                    "minimum": 0.1,
                    "maximum": 12
                  },
                  "maxScale": {
                    "type": "number",
                    "minimum": 0.1,
                    "maximum": 16
                  },
                  "slopeLimit": {
                    "description": "Minimum normal Y for placement; higher avoids steep slopes.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "grassMesh": {
                    "description": "'clump' (default) is the stylized painted-card grass with gradient/variation/interaction; the rest are simple legacy shapes.",
                    "type": "string",
                    "enum": [
                      "clump",
                      "blade",
                      "cross",
                      "tuft"
                    ]
                  },
                  "stylizedGrass": {
                    "description": "Look/motion of the 'clump' grass. Prefer set_grass_look for a whole look; use this to tweak single settings.",
                    "type": "object",
                    "properties": {
                      "gradientTop": {
                        "description": "Tip hex color — multiplies grassColor.",
                        "type": "string"
                      },
                      "gradientBottom": {
                        "description": "Root hex color — dark values plant the grass in the ground.",
                        "type": "string"
                      },
                      "gradientOffset": {
                        "description": "Where the dark root ends, 0..1 up the blade.",
                        "type": "number",
                        "minimum": 0,
                        "maximum": 0.95
                      },
                      "gradientContrast": {
                        "description": "0 soft blend, 1 hard two-tone band.",
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1
                      },
                      "colorNoiseScale": {
                        "description": "Patch frequency; smaller = broader patches.",
                        "type": "number",
                        "minimum": 0.001,
                        "maximum": 2
                      },
                      "colorNoiseStrength": {
                        "description": "Patch-to-patch color variation, 0 disables.",
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1
                      },
                      "colorNoiseLow": {
                        "type": "string"
                      },
                      "colorNoiseHigh": {
                        "type": "string"
                      },
                      "windSpeed": {
                        "description": "How fast gusts scroll across the field.",
                        "type": "number",
                        "minimum": 0,
                        "maximum": 8
                      },
                      "windNoiseScale": {
                        "description": "Gust size; smaller = longer rolling waves.",
                        "type": "number",
                        "minimum": 0.001,
                        "maximum": 2
                      },
                      "bendPivot": {
                        "description": "Height where bending starts; below it the clump stays rooted.",
                        "type": "number",
                        "minimum": 0,
                        "maximum": 0.95
                      },
                      "perspectiveCorrection": {
                        "description": "Leans tips toward the camera when looking down so top-down views stay full.",
                        "type": "number",
                        "minimum": 0,
                        "maximum": 2
                      },
                      "perspectiveHeightStart": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 0.95
                      },
                      "interactionStrength": {
                        "description": "How far characters/vehicles shove grass aside during Play.",
                        "type": "number",
                        "minimum": 0,
                        "maximum": 4
                      },
                      "pushDownAmount": {
                        "description": "How far actors mash grass down.",
                        "type": "number",
                        "minimum": 0,
                        "maximum": 2
                      },
                      "trailTint": {
                        "description": "Hex color multiplier on grass currently bent by an actor.",
                        "type": "string"
                      },
                      "normalLift": {
                        "description": "Leans shading toward straight up; high = soft turf lighting.",
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1
                      },
                      "fadeMode": {
                        "type": "string",
                        "enum": [
                          "off",
                          "smooth",
                          "dither"
                        ]
                      },
                      "fadeStart": {
                        "description": "Distance where grass starts fading out.",
                        "type": "number",
                        "minimum": 1,
                        "maximum": 4000
                      },
                      "fadeEnd": {
                        "description": "Distance where grass is fully gone.",
                        "type": "number",
                        "minimum": 2,
                        "maximum": 5000
                      }
                    }
                  },
                  "treeSpecId": {
                    "description": "Scatter a parametric tree ASSET from the project tree library (see list_tree_specs) instead of the simple crowns. \"\" clears it.",
                    "type": "string"
                  },
                  "treeMesh": {
                    "description": "Built-in tree shape: 'fir' = stylized layered conifer (stacked tiers — the BOTW/stylized-nature look, best default), 'cone' = single cone, 'round' = single sphere crown.",
                    "type": "string",
                    "enum": [
                      "cone",
                      "round",
                      "fir"
                    ]
                  },
                  "grassSource": {
                    "description": "Grass mesh source: 'builtin' high-quality wind-animated blades (default), 'image' a 2D billboard from grassImageAssetId, or 'model' from grassModelAssetId.",
                    "type": "string",
                    "enum": [
                      "builtin",
                      "image",
                      "model"
                    ]
                  },
                  "treeSource": {
                    "description": "Tree mesh source: 'builtin', 'image' billboard (treeImageAssetId), or 'model' (treeModelAssetId).",
                    "type": "string",
                    "enum": [
                      "builtin",
                      "image",
                      "model"
                    ]
                  },
                  "grassModelAssetId": {
                    "description": "Model asset id for 3D grass (sets grassSource to model), or \"\" to clear.",
                    "type": "string"
                  },
                  "treeModelAssetId": {
                    "description": "Model asset id for 3D trees (sets treeSource to model), or \"\" to clear.",
                    "type": "string"
                  },
                  "grassImageAssetId": {
                    "description": "Image asset id for 2D billboard grass (use with grassSource:\"image\"), or \"\" to clear.",
                    "type": "string"
                  },
                  "treeImageAssetId": {
                    "description": "Image asset id for 2D billboard trees (use with treeSource:\"image\"), or \"\" to clear.",
                    "type": "string"
                  },
                  "windStrength": {
                    "description": "Foliage sway multiplier on the global scene wind (0 = stiff, no sway). Set the wind via set_scene_environment.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 4
                  },
                  "interactStrength": {
                    "description": "BOTW-style player interaction: how strongly grass/flowers part & flatten around a passing player/vehicle during Play. 1 = natural (default), 0 = ignores actors, >1 = exaggerated.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 4
                  },
                  "flowerDensity": {
                    "description": "Wildflower density 0..1 — small brightly-colored blooms (red/yellow/white/purple/pink/orange) scattered through the grass; they sway and part like the blades. 0 = none. Only appears in grass/mixed mode.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "grassColor": {
                    "type": "string"
                  },
                  "trunkColor": {
                    "type": "string"
                  },
                  "treeColor": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "physics": {
            "type": "object",
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "bodyType": {
                "type": "string",
                "enum": [
                  "dynamic",
                  "fixed",
                  "kinematic"
                ]
              },
              "collider": {
                "type": "string",
                "enum": [
                  "box",
                  "sphere",
                  "capsule",
                  "mesh",
                  "convex"
                ]
              },
              "isTrigger": {
                "type": "boolean"
              }
            }
          }
        },
        "required": [
          "kind"
        ]
      }
    }
    create_meadowAction

    One-click BOTW-style meadow: creates a streamed terrain carpeted in dense INTERACTIVE grass + wildflowers (they part & flatten around the player/vehicles during Play, then spring back) with scattered swaying trees, then sets a gentle breeze, sky-dissolving atmospheric fog, and the Stylized Nature render look. The fastest way to a lush, living outdoor scene. Returns the terrain id.

    View tool JSON
    {
      "name": "create_meadow",
      "kind": "act",
      "impl": "imperative",
      "description": "One-click BOTW-style meadow: creates a streamed terrain carpeted in dense INTERACTIVE grass + wildflowers (they part & flatten around the player/vehicles during Play, then spring back) with scattered swaying trees, then sets a gentle breeze, sky-dissolving atmospheric fog, and the Stylized Nature render look. The fastest way to a lush, living outdoor scene. Returns the terrain id.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "position": {
            "description": "Terrain origin. Default [0,0,0].",
            "minItems": 3,
            "maxItems": 3,
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "size": {
            "description": "Terrain footprint in world units. Default 400.",
            "type": "number",
            "minimum": 32,
            "maximum": 8192
          },
          "grassColor": {
            "description": "Base grass hex (per-blade variation is added automatically). Default a lush green.",
            "type": "string"
          },
          "density": {
            "description": "Grass density 0..1. Default 0.7 (lush).",
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "trees": {
            "description": "Scatter swaying trees too (mixed). Default true; false = pure grass field.",
            "type": "boolean"
          }
        }
      }
    }
    create_water_volumeAction

    Create an Unreal-style water/physics volume: a box trigger that renders a realistic ANIMATED water surface (Gerstner waves, fresnel reflection, depth color, foam, caustics, optional underwater screen tint) and makes characters swim + gives dynamic bodies buoyancy/drag/wave lift. Scale controls the volume size. Pick a `style` (ocean/pool/lake/toxic/lava) for an instant look, or set the individual visual fields. Defaults to the "ocean" look.

    View tool JSON
    {
      "name": "create_water_volume",
      "kind": "act",
      "impl": "imperative",
      "description": "Create an Unreal-style water/physics volume: a box trigger that renders a realistic ANIMATED water surface (Gerstner waves, fresnel reflection, depth color, foam, caustics, optional underwater screen tint) and makes characters swim + gives dynamic bodies buoyancy/drag/wave lift. Scale controls the volume size. Pick a `style` (ocean/pool/lake/toxic/lava) for an instant look, or set the individual visual fields. Defaults to the \"ocean\" look.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "buoyancy": {
            "description": "Upward force multiplier for dynamic bodies in the volume.",
            "type": "number",
            "minimum": 0,
            "maximum": 3
          },
          "drag": {
            "description": "Linear drag in water; higher slows objects faster.",
            "type": "number",
            "minimum": 0,
            "maximum": 6
          },
          "angularDrag": {
            "description": "Rotational damping hint for water interaction.",
            "type": "number",
            "minimum": 0,
            "maximum": 4
          },
          "surfaceBounce": {
            "description": "Extra upward bounce when objects hit the water surface.",
            "type": "number",
            "minimum": 0,
            "maximum": 2
          },
          "waveAmplitude": {
            "description": "Wave height in world units.",
            "type": "number",
            "minimum": 0,
            "maximum": 2
          },
          "waveFrequency": {
            "description": "Wave cycles per world unit.",
            "type": "number",
            "minimum": 0.05,
            "maximum": 2
          },
          "waveSpeed": {
            "description": "Wave scroll speed.",
            "type": "number",
            "minimum": 0,
            "maximum": 6
          },
          "style": {
            "description": "Ready-made look: ocean | pool | lake | toxic | lava | custom. Sets all the visual fields below.",
            "type": "string",
            "enum": [
              "ocean",
              "pool",
              "lake",
              "toxic",
              "lava",
              "custom"
            ]
          },
          "shallowColor": {
            "description": "Hex tint near the surface / shallow edges.",
            "type": "string"
          },
          "deepColor": {
            "description": "Hex tint of deep water (also the underwater fog color).",
            "type": "string"
          },
          "foamColor": {
            "description": "Hex foam color.",
            "type": "string"
          },
          "surfaceOpacity": {
            "description": "Rendered water-surface opacity (clear pool low, murky high).",
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "reflectivity": {
            "description": "Fresnel + sky-reflection strength 0-1.",
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "foam": {
            "description": "Crest + shoreline foam amount 0-1.",
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "sparkle": {
            "description": "Animated micro-ripple sparkle / sun-glint sharpness 0-1.",
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "caustics": {
            "description": "Animated caustic shimmer across the surface 0-1.",
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "emissiveIntensity": {
            "description": "Self-illumination glow (use for lava/toxic).",
            "type": "number",
            "minimum": 0,
            "maximum": 2
          },
          "underwaterFog": {
            "description": "Tint the screen + murk the view while the camera is submerged.",
            "type": "boolean"
          },
          "flowStrength": {
            "description": "Current strength: 0 = still lake, >0 = flowing river/waterfall (surface scrolls + bodies drift).",
            "type": "number",
            "minimum": 0,
            "maximum": 4
          },
          "flowAngle": {
            "description": "Current direction in degrees on XZ (0 = +X, 90 = +Z).",
            "type": "number",
            "minimum": 0,
            "maximum": 360
          },
          "rainStrength": {
            "description": "Rain on the water: 0 = clear, >0 speckles the surface with raindrop ripple rings (use for storms).",
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "name": {
            "type": "string"
          },
          "position": {
            "description": "Center of the water volume. Default [0,1,0].",
            "minItems": 3,
            "maxItems": 3,
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "scale": {
            "description": "Volume size [width,height,depth]. Default [10,2,10].",
            "minItems": 3,
            "maxItems": 3,
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "color": {
            "description": "Underlying box tint hex (the animated surface is driven by style/shallowColor/deepColor). Default #2BA8FF.",
            "type": "string"
          },
          "opacity": {
            "description": "Underlying box opacity. Default 0.45 (the surface has its own surfaceOpacity).",
            "type": "number",
            "minimum": 0,
            "maximum": 1
          }
        }
      }
    }
    update_transformAction

    Update an object's position, rotation (radians) and/or scale.

    View tool JSON
    {
      "name": "update_transform",
      "kind": "act",
      "impl": "imperative",
      "description": "Update an object's position, rotation (radians) and/or scale.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "position": {
            "minItems": 3,
            "maxItems": 3,
            "type": "array",
            "items": {
              "type": "number"
            },
            "description": "[x, y, z]"
          },
          "rotation": {
            "minItems": 3,
            "maxItems": 3,
            "type": "array",
            "items": {
              "type": "number"
            },
            "description": "[x, y, z]"
          },
          "scale": {
            "minItems": 3,
            "maxItems": 3,
            "type": "array",
            "items": {
              "type": "number"
            },
            "description": "[x, y, z]"
          }
        },
        "required": [
          "id"
        ]
      }
    }
    update_rendererAction

    Update an object's inline material/render settings. For imported models, color/metalness/roughness need overrideMaterial:true; textureAssetId applies an image texture. Set hideInPlay:true for editor-visible trigger/debug meshes that should disappear during Play/runtime.

    View tool JSON
    {
      "name": "update_renderer",
      "kind": "act",
      "impl": "imperative",
      "description": "Update an object's inline material/render settings. For imported models, color/metalness/roughness need overrideMaterial:true; textureAssetId applies an image texture. Set hideInPlay:true for editor-visible trigger/debug meshes that should disappear during Play/runtime.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "color": {
            "type": "string"
          },
          "metalness": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "roughness": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "opacity": {
            "description": "Surface opacity 0–1 (1 = opaque). Below 1 renders translucent — use ~0.5 for water/glass.",
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "hideInPlay": {
            "description": "Hide this renderer during Play/runtime while keeping it visible in the editor. Trigger volumes default to hidden at runtime unless explicitly false.",
            "type": "boolean"
          },
          "textureAssetId": {
            "description": "An \"image\"-type asset id for the base-color map, or \"\" to remove the texture.",
            "type": "string"
          },
          "overrideMaterial": {
            "description": "For model objects: when true, color/metalness/roughness override the model's baked materials.",
            "type": "boolean"
          }
        },
        "required": [
          "id"
        ]
      }
    }
    set_scene_environmentAction

    Set the active scene sky/fog/base lighting. Use this for mood, time of day, sunset/night/daylight, panorama skyboxes, fog, and Unreal-style volumetric fog/light shafts (volumetricFog* fields — atmospheric mist, sun glow, god rays). This is scene-level World Settings, not a Blueprint node.

    View tool JSON
    {
      "name": "set_scene_environment",
      "kind": "act",
      "impl": "imperative",
      "description": "Set the active scene sky/fog/base lighting. Use this for mood, time of day, sunset/night/daylight, panorama skyboxes, fog, and Unreal-style volumetric fog/light shafts (volumetricFog* fields — atmospheric mist, sun glow, god rays). This is scene-level World Settings, not a Blueprint node.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "skyMode": {
            "type": "string",
            "enum": [
              "color",
              "procedural",
              "image"
            ]
          },
          "backgroundColor": {
            "description": "Flat/fallback background hex color.",
            "type": "string"
          },
          "skyTopColor": {
            "description": "Procedural sky zenith hex color.",
            "type": "string"
          },
          "skyHorizonColor": {
            "description": "Procedural horizon hex color.",
            "type": "string"
          },
          "skyGroundColor": {
            "description": "Procedural lower-sky/ground-tint hex color.",
            "type": "string"
          },
          "skyTextureAssetId": {
            "description": "Image asset id for an equirectangular panorama, or \"\" to clear.",
            "type": "string"
          },
          "environmentMapAssetId": {
            "description": "Image asset id of an equirectangular panorama/HDRI used as the image-based-lighting (IBL) source — real reflections + ambient sampled from it, replacing the studio light rig. Independent of skyMode. \"\" to clear (back to studio).",
            "type": "string"
          },
          "skyRotation": {
            "description": "Sky dome yaw in degrees.",
            "type": "number"
          },
          "environmentIntensity": {
            "description": "Built-in ambient/environment light strength.",
            "type": "number",
            "minimum": 0
          },
          "sunColor": {
            "description": "Directional sun hex color.",
            "type": "string"
          },
          "sunIntensity": {
            "description": "Directional sun strength.",
            "type": "number",
            "minimum": 0
          },
          "sunAzimuth": {
            "description": "Sun compass angle in degrees.",
            "type": "number"
          },
          "sunElevation": {
            "description": "Sun height in degrees.",
            "type": "number"
          },
          "fogEnabled": {
            "type": "boolean"
          },
          "fogColor": {
            "type": "string"
          },
          "fogNear": {
            "type": "number",
            "minimum": 0
          },
          "fogFar": {
            "type": "number",
            "minimum": 1
          },
          "atmosphericFog": {
            "description": "Sky-sampled atmospheric fog: exponential aerial perspective whose color auto-follows the sky horizon, so distant hills/mountains dissolve into the sky (BOTW/Genshin stylized-outdoors look). Uses fogFar as the range. Best with a procedural sky; ignored when volumetric fog is on.",
            "type": "boolean"
          },
          "volumetricFogEnabled": {
            "description": "Unreal-style raymarched volumetric fog: height-based mist + sun glow (in-scattering) and god-ray light shafts. Replaces flat linear fog when on. Great for atmospheric/cinematic/foggy/dusty looks.",
            "type": "boolean"
          },
          "volumetricFogDensity": {
            "description": "Volumetric fog thickness (≈0.02 thin haze, 0.1+ thick).",
            "type": "number",
            "minimum": 0
          },
          "volumetricFogColor": {
            "description": "Volumetric mist/scatter tint hex color.",
            "type": "string"
          },
          "volumetricFogHeight": {
            "description": "World Y where volumetric density starts thinning out.",
            "type": "number"
          },
          "volumetricFogFalloff": {
            "description": "How fast volumetric fog thins with height (0 = uniform).",
            "type": "number",
            "minimum": 0
          },
          "volumetricScattering": {
            "description": "Sun scatter anisotropy (−0.95..0.95); higher = stronger forward glow toward the sun.",
            "type": "number",
            "minimum": -0.95,
            "maximum": 0.95
          },
          "volumetricSunStrength": {
            "description": "Strength of the volumetric sun glow / light shafts.",
            "type": "number",
            "minimum": 0
          },
          "volumetricMaxDistance": {
            "description": "Far clamp (world units) for the volumetric raymarch.",
            "type": "number",
            "minimum": 1
          },
          "wind": {
            "description": "Global wind force vector [x,y,z] (world space). Drives all cloth and pushes dynamic bodies by their windInfluence. [0,0,0] = calm.",
            "minItems": 3,
            "maxItems": 3,
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "windTurbulence": {
            "description": "Global wind gust turbulence 0–1.",
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "gravity": {
            "description": "World gravity acceleration [x,y,z] in units/s². Earth = [0,-9.81,0] (the default), Moon = [0,-1.62,0], space = [0,0,0]. Every dynamic body scales this by its own gravityScale.",
            "minItems": 3,
            "maxItems": 3,
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "toneMapping": {
            "description": "Film tonemapping curve for the whole scene — the biggest single lever on overall look. aces = classic punchy filmic (default); agx = modern, preserves bright highlights instead of blowing them to white (great for neon/sunlit/HDR scenes); neutral = accurate/flat PBR; reinhard/cineon = classic curves; linear/none = no filmic shaping.",
            "type": "string",
            "enum": [
              "aces",
              "agx",
              "neutral",
              "reinhard",
              "cineon",
              "linear",
              "none"
            ]
          },
          "toneMappingExposure": {
            "description": "Exposure multiplier before tonemapping. 1 = neutral, >1 brighter, <1 darker.",
            "type": "number",
            "minimum": 0
          },
          "ambientMode": {
            "description": "Ambient fill model. hemisphere grades sky color above → ground color below (more natural); flat is a constant term (legacy).",
            "type": "string",
            "enum": [
              "flat",
              "hemisphere"
            ]
          },
          "contactShadows": {
            "description": "Soft grounding shadow blob under objects. On by default; turn off for flying/space/no-floor scenes.",
            "type": "boolean"
          },
          "contactShadowY": {
            "description": "World Y the contact-shadow plane sits at — match the ground height. Default 0.",
            "type": "number"
          },
          "contactShadowScale": {
            "description": "Footprint size of the contact-shadow plane in world units. Default 14; raise for big scenes.",
            "type": "number",
            "minimum": 1
          },
          "contactShadowOpacity": {
            "description": "Contact shadow darkness 0–1. Default 0.36.",
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "contactShadowBlur": {
            "description": "Contact-shadow softness. Default 2.4; 3–4 gives broad studio-style edges.",
            "type": "number",
            "minimum": 0
          },
          "contactShadowFar": {
            "description": "Vertical capture distance for contact casters. Default 6 world units.",
            "type": "number",
            "minimum": 0.1
          },
          "contactShadowColor": {
            "description": "Contact-shadow tint as a hex color. Near-black scene hues integrate more softly than pure black.",
            "type": "string"
          },
          "dayCycleEnabled": {
            "description": "When on, Play advances time of day and drives sun/sky from a built-in day/night ramp.",
            "type": "boolean"
          },
          "dayCycleDuration": {
            "description": "Real seconds for a full day loop while Playing. Default 360 (~6 min).",
            "type": "number",
            "minimum": 30
          },
          "dayCycleTime": {
            "description": "Normalized time of day 0–1 (0 midnight, 0.25 sunrise, 0.5 noon, 0.75 sunset).",
            "type": "number",
            "minimum": 0,
            "maximum": 1
          }
        }
      }
    }
    apply_lighting_presetAction

    Apply a complete one-click scene lighting/look preset. It updates sky, fog, sun, environment intensity, bloom/vignette, quality/shadow/AO budget, and project color grade together.

    View tool JSON
    {
      "name": "apply_lighting_preset",
      "kind": "act",
      "impl": "imperative",
      "description": "Apply a complete one-click scene lighting/look preset. It updates sky, fog, sun, environment intensity, bloom/vignette, quality/shadow/AO budget, and project color grade together.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "preset": {
            "type": "string",
            "enum": [
              "sunny",
              "overcast",
              "night",
              "cyberpunk",
              "indoor",
              "cinematic",
              "godrays"
            ],
            "description": "sunny, overcast, night, cyberpunk, indoor, cinematic, or godrays (low hazy sun + strong volumetric light shafts)."
          }
        },
        "required": [
          "preset"
        ]
      }
    }
    set_physicsAction

    Enable/configure object physics. Use fixed solids for walls/floors, dynamic for movable bodies, and fixed triggers for pickups/volumes.

    View tool JSON
    {
      "name": "set_physics",
      "kind": "act",
      "impl": "imperative",
      "description": "Enable/configure object physics. Use fixed solids for walls/floors, dynamic for movable bodies, and fixed triggers for pickups/volumes.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "bodyType": {
            "type": "string",
            "enum": [
              "dynamic",
              "fixed",
              "kinematic"
            ]
          },
          "collider": {
            "type": "string",
            "enum": [
              "box",
              "sphere",
              "capsule",
              "mesh",
              "convex"
            ]
          },
          "materialPreset": {
            "description": "Physical surface preset: default, rubber, slime, ice, metal, stone, wood, or mud. Applies friction/bounce/damping.",
            "type": "string",
            "enum": [
              "default",
              "rubber",
              "slime",
              "ice",
              "metal",
              "stone",
              "wood",
              "mud"
            ]
          },
          "isTrigger": {
            "type": "boolean"
          },
          "collisionLayer": {
            "type": "integer",
            "minimum": 0,
            "maximum": 15
          },
          "collisionMask": {
            "type": "integer",
            "minimum": 0,
            "maximum": 65535
          },
          "mass": {
            "type": "number"
          },
          "gravityScale": {
            "type": "number"
          },
          "friction": {
            "type": "number"
          },
          "restitution": {
            "description": "Bounciness: 0 = no bounce, 1 = very elastic.",
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "linearDamping": {
            "type": "number"
          },
          "angularDamping": {
            "type": "number"
          },
          "lockedTranslation": {
            "description": "AXIS LOCK [x,y,z]: freeze this DYNAMIC body's position on those world axes. [false,false,true] pins a 2.5D side-scroller prop to the play plane.",
            "type": "array",
            "prefixItems": [
              {
                "type": "boolean"
              },
              {
                "type": "boolean"
              },
              {
                "type": "boolean"
              }
            ]
          },
          "lockedRotation": {
            "description": "AXIS LOCK [x,y,z]: freeze this DYNAMIC body's rotation about those world axes. [true,false,true] keeps a crate/barrel/character upright while it can still turn.",
            "type": "array",
            "prefixItems": [
              {
                "type": "boolean"
              },
              {
                "type": "boolean"
              },
              {
                "type": "boolean"
              }
            ]
          },
          "windInfluence": {
            "description": "How strongly global scene wind pushes this DYNAMIC body (0 = ignores wind). Set the wind itself via set_environment.",
            "type": "number",
            "minimum": 0
          },
          "knockOverThreshold": {
            "description": "BREAKAWAY PROP (GTA streetlight): on a FIXED body, an impact faster than this speed (u/s) converts it to a dynamic body that tumbles with the hit — lamp posts, signs, fences, bollards. 0/omit = solid.",
            "type": "number",
            "minimum": 0
          },
          "ccd": {
            "description": "Continuous Collision Detection: stops a fast DYNAMIC body tunnelling through thin walls/floors at high speed. Small cost — enable for bullets, fast vehicles, fast-falling props. Projectiles always have it.",
            "type": "boolean"
          },
          "extraColliders": {
            "description": "COMPOUND COLLIDER: extra shapes welded to this body (a hammer = box head + capsule handle; an L-shaped counter = two boxes). They move rigidly with the body and share its material/trigger/layer settings. Pass the FULL list (replaces). Verify with F10 during Play.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "shape": {
                  "type": "string",
                  "enum": [
                    "box",
                    "sphere",
                    "capsule"
                  ]
                },
                "offset": {
                  "type": "array",
                  "prefixItems": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "number"
                    }
                  ],
                  "description": "Local offset from the body origin."
                },
                "size": {
                  "type": "array",
                  "prefixItems": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "number"
                    }
                  ],
                  "description": "box: half-extents [hx,hy,hz] · sphere: [radius,0,0] · capsule: [radius, halfHeight, 0]."
                }
              },
              "required": [
                "shape",
                "offset",
                "size"
              ]
            }
          }
        },
        "required": [
          "id"
        ]
      }
    }
    set_character_controllerAction

    Add/configure the built-in third-person character controller on an object (WASD move, Shift sprint, Space jump, optional follow camera). The motion it produces auto-drives an animator with speed/verticalSpeed parameters. Pass enabled:false to remove control. All numeric fields optional.

    View tool JSON
    {
      "name": "set_character_controller",
      "kind": "act",
      "impl": "imperative",
      "description": "Add/configure the built-in third-person character controller on an object (WASD move, Shift sprint, Space jump, optional follow camera). The motion it produces auto-drives an animator with speed/verticalSpeed parameters. Pass enabled:false to remove control. All numeric fields optional.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "objectId": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "moveSpeed": {
            "type": "number"
          },
          "sprintMultiplier": {
            "type": "number"
          },
          "crouchMultiplier": {
            "type": "number"
          },
          "jumpStrength": {
            "type": "number"
          },
          "gravity": {
            "type": "number"
          },
          "turnSpeed": {
            "type": "number"
          },
          "groundLevel": {
            "type": "number"
          },
          "acceleration": {
            "description": "Ground accel toward target speed (units/s²). Default 60.",
            "type": "number"
          },
          "deceleration": {
            "description": "Ground decel to a stop (units/s²). Default 70.",
            "type": "number"
          },
          "airControl": {
            "description": "Accel/decel multiplier while airborne, 0..1. Default 0.35.",
            "type": "number"
          },
          "fallMultiplier": {
            "description": "Gravity ×multiplier while descending. >1 = snappier fall. Default 1.9.",
            "type": "number"
          },
          "jumpCutMultiplier": {
            "description": "Upward velocity kept when jump released early, 0..1. Default 0.45.",
            "type": "number"
          },
          "coyoteTime": {
            "description": "Grace seconds after leaving a ledge a jump still fires. Default 0.12.",
            "type": "number"
          },
          "jumpBufferTime": {
            "description": "Jump pressed up to this many seconds BEFORE landing fires on touchdown. Default 0.15. 0 disables.",
            "type": "number"
          },
          "landingRecovery": {
            "description": "0..1: hard landings briefly sap speed + dip the camera, scaled by impact (drives the \"landing\" animator source). Default 0.4. 0 disables.",
            "type": "number"
          },
          "apexHang": {
            "description": "Gravity ×multiplier near the jump apex — <1 adds a brief controllable hang at the peak. Default 0.65. 1 disables.",
            "type": "number"
          },
          "sprintTurnFactor": {
            "description": "Turn-rate ×multiplier at full sprint (full rate at a walk) so fast runs carve wider arcs. Default 0.55. 1 disables.",
            "type": "number"
          },
          "slideEnabled": {
            "description": "Sprint-slide: tapping crouch at sprint speed drops into a steerable momentum slide (drives the \"sliding\" animator source; jump cancels into a slide-hop). Default true.",
            "type": "boolean"
          },
          "slideDuration": {
            "description": "Max slide seconds. Default 0.9.",
            "type": "number"
          },
          "slideSpeedBoost": {
            "description": "Slide entry speed = current speed × this. Default 1.2.",
            "type": "number"
          },
          "turnInPlace": {
            "description": "Idle third-person body rotates toward the mouse-look camera. Default true.",
            "type": "boolean"
          },
          "turnInPlaceThreshold": {
            "description": "Yaw difference before idle turning starts, radians. Default 0.45.",
            "type": "number"
          },
          "turnInPlaceSpeed": {
            "description": "Turn-in-place rotation speed in radians/sec. Defaults to turnSpeed.",
            "type": "number"
          },
          "mantleEnabled": {
            "description": "Enable Space-to-vault/mantle against obstacles tagged vaultable/mantleable.",
            "type": "boolean"
          },
          "keyMantle": {
            "description": "Optional dedicated mantle key. Empty/omitted means jump key can mantle.",
            "type": "string"
          },
          "mantleRange": {
            "description": "Forward search distance for vault/mantle targets. Default 1.35.",
            "type": "number"
          },
          "mantleMaxHeight": {
            "description": "Tallest obstacle top that can be mantled. Default 1.45.",
            "type": "number"
          },
          "vaultMaxHeight": {
            "description": "Low obstacle height treated as vault. Default 0.9.",
            "type": "number"
          },
          "mantleDuration": {
            "description": "Seconds for the mantle/vault arc. Default 0.38.",
            "type": "number"
          },
          "modelYawOffset": {
            "description": "Facing offset in radians; use Math.PI (~3.14159) to flip a model that faces backwards.",
            "type": "number"
          },
          "keyForward": {
            "type": "string"
          },
          "keyBackward": {
            "type": "string"
          },
          "keyLeft": {
            "type": "string"
          },
          "keyRight": {
            "type": "string"
          },
          "keyJump": {
            "type": "string"
          },
          "keySprint": {
            "type": "string"
          },
          "keyCrouch": {
            "type": "string"
          },
          "keyCrawl": {
            "type": "string"
          },
          "crawlMultiplier": {
            "type": "number"
          },
          "strafe": {
            "description": "Face the camera + move 8-way (pairs with a 2D MoveX/MoveY blend space).",
            "type": "boolean"
          },
          "keyRoll": {
            "type": "string"
          },
          "rollSpeed": {
            "type": "number"
          },
          "rollDuration": {
            "type": "number"
          },
          "keyAttack": {
            "type": "string"
          },
          "meleeDamage": {
            "description": "Melee damage. Default 34.",
            "type": "number"
          },
          "meleeRange": {
            "description": "Melee range. Default 2.4.",
            "type": "number"
          },
          "meleeComboCount": {
            "description": "Melee combo chain length 1–3. >1 enables attack input buffering between hits. Default 1.",
            "type": "integer",
            "minimum": 1,
            "maximum": 3
          },
          "meleeComboWindow": {
            "description": "Seconds after a swing starts during which another Attack press queues the next combo hit. Default 0.35.",
            "type": "number",
            "minimum": 0.05
          },
          "meleeHitstop": {
            "description": "Wall-clock seconds of global slow-mo on a successful melee hit (0 = off). ~0.09 feels snappy.",
            "type": "number",
            "minimum": 0
          },
          "meleeHitstopScale": {
            "description": "runtimeTimeScale during melee hitstop. Default 0.05.",
            "type": "number",
            "minimum": 0.01,
            "maximum": 1
          },
          "rollIFrameStart": {
            "description": "Seconds from roll start when dodge invulnerability begins. Pair with rollIFrameEnd.",
            "type": "number",
            "minimum": 0
          },
          "rollIFrameEnd": {
            "description": "Seconds from roll start when dodge invulnerability ends. Both 0 = no i-frames.",
            "type": "number",
            "minimum": 0
          },
          "keyAim": {
            "type": "string"
          },
          "keyReload": {
            "type": "string"
          },
          "keyInteract": {
            "type": "string"
          },
          "interactRange": {
            "description": "Interact distance. Default 3.",
            "type": "number"
          },
          "keyEmote": {
            "type": "string"
          },
          "keyRagdoll": {
            "type": "string"
          },
          "lockOnEnabled": {
            "description": "Lock-on targeting: keyLockOn toggles a lock on the nearest living target (object with health > 0 or enemy tag); the character strafes facing it and the camera frames both. Default true.",
            "type": "boolean"
          },
          "keyLockOn": {
            "description": "Lock-on toggle key. Default \"KeyT\".",
            "type": "string"
          },
          "lockOnRange": {
            "description": "Max distance to acquire a lock-on target. Default 16.",
            "type": "number"
          },
          "lockOnBreakDistance": {
            "description": "Distance at which an existing lock breaks. Default 22.",
            "type": "number"
          },
          "keySwapShoulder": {
            "description": "Tap to mirror the third-person camera to the other shoulder (also flips the aim shoulder shift). Default \"KeyV\".",
            "type": "string"
          },
          "footstepSoundId": {
            "description": "Footstep audio asset id.",
            "type": "string"
          },
          "jumpSoundId": {
            "description": "Jump audio asset id.",
            "type": "string"
          },
          "landSoundId": {
            "description": "Land audio asset id.",
            "type": "string"
          },
          "swimSoundId": {
            "description": "Water splash audio asset id.",
            "type": "string"
          },
          "attackSoundId": {
            "description": "Attack audio asset id.",
            "type": "string"
          },
          "hurtSoundId": {
            "description": "Hurt audio asset id.",
            "type": "string"
          },
          "cameraFollow": {
            "type": "boolean"
          },
          "cameraOffset": {
            "description": "[side, up, back]. Negative Z is behind.",
            "minItems": 3,
            "maxItems": 3,
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "cameraPitch": {
            "description": "Base camera elevation in radians.",
            "type": "number"
          },
          "mouseLook": {
            "description": "Orbit camera with mouse.",
            "type": "boolean"
          },
          "mouseSensitivity": {
            "type": "number"
          },
          "cameraRelativeMovement": {
            "description": "Move relative to camera.",
            "type": "boolean"
          }
        },
        "required": [
          "objectId"
        ]
      }
    }
    set_vehicleAction

    Add/configure the built-in VEHICLE (car) controller on an object — the driving peer of set_character_controller. WASD drives (W throttle, S brake/reverse, A/D steer, Space handbrake to drift, H horn). TWO physics models via physicsModel: (1) "arcade" (default) = a hand-rolled tire/bicycle model with the tunables below (weightTransfer/tractionControl/downforce/grip etc.) on a dynamic Rapier convex body; raise turnRate for snappier turning, weightTransfer/lower handbrakeGrip for drift, tractionControl/downforce for planted racers; supports crashDamageEnabled (rollovers/wheel-break/crush/debris). (2) "raycast" = a REAL Rapier DynamicRayCastVehicleController sim (BeamNG/sim-racing style): genuine per-wheel ray-cast suspension, weight transfer, tire friction, true rollovers, PLUS a full drivetrain sim — engine torque curve + RPM + a gearbox (auto or manual paddle shifting; engine audio pitch follows RPM through the gears; the runtime mirrors live values into "RPM"/"Gear"/"Speed" project vars for HUD binding), aero drag + downforce, front/rear anti-roll bars, ABS + traction-control assists, and per-wheel SURFACE grip (wheels read the `surface` instance variable — tarmac/curb/dirt/grass/gravel/sand/snow/ice — of whatever they roll over; tag runoff areas to punish corner-cutting). In raycast mode the car needs NO Rapier body of its own (the sim builds a dynamic chassis from the object scale), the 4 wheel CHILD objects go in wheelObjectIds in [FL,FR,RL,RR] order, and the FRONT pair (the actual wheel ids, NOT anchors) go in steeredWheelIds. Tune with engineForce/brakeForce/handbrakeForce/drivetrain/brakeBias, chassisMass/centerOfMassY (lower = harder to roll), wheelFrictionSlip/sideFrictionStiffness + the suspension fields, the gearbox fields (transmission/gearRatios/finalDrive/idleRpm/maxRpm/shiftUpRpm/shiftDownRpm/shiftTime), aeroDrag/downforceSim/antiRollFront/antiRollRear, absEnabled/tcsEnabled/surfaceGripEnabled, and the DRIVING-FEEL trio — engineBrakeForce (off-throttle compression braking through the gears), loadSensitivity (weight-transfer grip balance: trail-braking rotates the nose, throttle plants the rear) and counterSteerAssist (auto opposite-lock that keeps drifts catchable; set 0 for raw). tireMarkIds, headlightIds/brakeLightIds and the engine/skid/brake/horn/collision audio ids work in both. Pass enabled:false to remove control. All fields optional.

    View tool JSON
    {
      "name": "set_vehicle",
      "kind": "act",
      "impl": "imperative",
      "description": "Add/configure the built-in VEHICLE (car) controller on an object — the driving peer of set_character_controller. WASD drives (W throttle, S brake/reverse, A/D steer, Space handbrake to drift, H horn). TWO physics models via physicsModel: (1) \"arcade\" (default) = a hand-rolled tire/bicycle model with the tunables below (weightTransfer/tractionControl/downforce/grip etc.) on a dynamic Rapier convex body; raise turnRate for snappier turning, weightTransfer/lower handbrakeGrip for drift, tractionControl/downforce for planted racers; supports crashDamageEnabled (rollovers/wheel-break/crush/debris). (2) \"raycast\" = a REAL Rapier DynamicRayCastVehicleController sim (BeamNG/sim-racing style): genuine per-wheel ray-cast suspension, weight transfer, tire friction, true rollovers, PLUS a full drivetrain sim — engine torque curve + RPM + a gearbox (auto or manual paddle shifting; engine audio pitch follows RPM through the gears; the runtime mirrors live values into \"RPM\"/\"Gear\"/\"Speed\" project vars for HUD binding), aero drag + downforce, front/rear anti-roll bars, ABS + traction-control assists, and per-wheel SURFACE grip (wheels read the `surface` instance variable — tarmac/curb/dirt/grass/gravel/sand/snow/ice — of whatever they roll over; tag runoff areas to punish corner-cutting). In raycast mode the car needs NO Rapier body of its own (the sim builds a dynamic chassis from the object scale), the 4 wheel CHILD objects go in wheelObjectIds in [FL,FR,RL,RR] order, and the FRONT pair (the actual wheel ids, NOT anchors) go in steeredWheelIds. Tune with engineForce/brakeForce/handbrakeForce/drivetrain/brakeBias, chassisMass/centerOfMassY (lower = harder to roll), wheelFrictionSlip/sideFrictionStiffness + the suspension fields, the gearbox fields (transmission/gearRatios/finalDrive/idleRpm/maxRpm/shiftUpRpm/shiftDownRpm/shiftTime), aeroDrag/downforceSim/antiRollFront/antiRollRear, absEnabled/tcsEnabled/surfaceGripEnabled, and the DRIVING-FEEL trio — engineBrakeForce (off-throttle compression braking through the gears), loadSensitivity (weight-transfer grip balance: trail-braking rotates the nose, throttle plants the rear) and counterSteerAssist (auto opposite-lock that keeps drifts catchable; set 0 for raw). tireMarkIds, headlightIds/brakeLightIds and the engine/skid/brake/horn/collision audio ids work in both. Pass enabled:false to remove control. All fields optional.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "objectId": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "physicsModel": {
            "description": "\"arcade\" (default) tire model, or \"raycast\" for the real Rapier sim vehicle (per-wheel suspension/weight-transfer/rollovers). Use raycast for sim-racing / realistic cars.",
            "type": "string",
            "enum": [
              "arcade",
              "raycast"
            ]
          },
          "deformable": {
            "description": "(raycast) Soft-body crash damage: the body MESH plastically dents/crumples on hard impacts during Play (direction + force based). Great for BeamNG-style destruction.",
            "type": "boolean"
          },
          "maxSpeed": {
            "description": "Top forward speed (u/s). Default 34. (arcade)",
            "type": "number"
          },
          "maxReverseSpeed": {
            "description": "Top reverse speed (u/s). Default 10.",
            "type": "number"
          },
          "acceleration": {
            "description": "Throttle accel (u/s²). Default 25.",
            "type": "number"
          },
          "braking": {
            "description": "Brake decel (u/s²). Default 42.",
            "type": "number"
          },
          "drag": {
            "description": "Coast decel (u/s²). Default 8.",
            "type": "number"
          },
          "steerAngle": {
            "description": "Max front-wheel steer (radians). Default 0.66.",
            "type": "number"
          },
          "turnRate": {
            "description": "Arcade steering authority multiplier. Default 2.8; higher turns harder.",
            "type": "number"
          },
          "gripFactor": {
            "description": "Lateral grip 0..1; higher damps sideways tire slip faster. Default 0.96.",
            "type": "number"
          },
          "handbrakeGrip": {
            "description": "Lateral grip 0..1 while handbrake held — lower = looser drift. Default 0.24.",
            "type": "number"
          },
          "weightTransfer": {
            "description": "0..1 grip loss/lean from accel, braking, and cornering load. Higher feels heavier and more analog. Default 0.42.",
            "type": "number"
          },
          "tractionControl": {
            "description": "0..1 throttle cut when tires are slipping. Lower for raw/drifty cars, higher for planted assists. Default 0.35.",
            "type": "number"
          },
          "downforce": {
            "description": "Speed-squared extra grip/downward impulse. 0 for loose trucks, higher for race cars. Default 0.18.",
            "type": "number"
          },
          "bodyRoll": {
            "description": "Chassis lean into turns. Default 0.05.",
            "type": "number"
          },
          "bodyPitch": {
            "description": "Chassis squat/dive under accel/brake. Default 0.04.",
            "type": "number"
          },
          "suspensionStiffness": {
            "description": "How quickly lean/squat settles, 0..1. Default 0.18.",
            "type": "number"
          },
          "crashDamageEnabled": {
            "description": "Enable impact damage, rollovers, wheel breakage, body crush, and debris on dynamic cars. Default true.",
            "type": "boolean"
          },
          "crashDamageThreshold": {
            "description": "Impact speed below this is a normal bump. Default 12.",
            "type": "number"
          },
          "crashRolloverThreshold": {
            "description": "Impact speed where hard crashes briefly tumble/roll the car. Default 22.",
            "type": "number"
          },
          "crashRolloverStrength": {
            "description": "Angular impulse multiplier on hard crashes. Higher flips/tumbles more. Default 0.32.",
            "type": "number"
          },
          "crashDeformation": {
            "description": "Visual crush amount 0..1 from accumulated damage. Default 0.45.",
            "type": "number"
          },
          "crashWheelBreakThreshold": {
            "description": "Accumulated damage at which wheels start hanging crooked. Default 1.6.",
            "type": "number"
          },
          "crashDebris": {
            "description": "Throw small dynamic debris chunks on heavy impacts. Default true.",
            "type": "boolean"
          },
          "wheelRadius": {
            "description": "Wheel radius (u) — sets spin rate (and the raycast wheel ray length). Default 0.4.",
            "type": "number"
          },
          "engineForce": {
            "description": "(raycast) Max engine force N at full throttle, split across driven wheels. Default 1800.",
            "type": "number"
          },
          "brakeForce": {
            "description": "(raycast) Max service-brake force N, split by brakeBias. Default 2200.",
            "type": "number"
          },
          "handbrakeForce": {
            "description": "(raycast) Extra rear-wheel brake force N from the handbrake. Default 1400.",
            "type": "number"
          },
          "drivetrain": {
            "description": "(raycast) Which wheels get engine force. Default rwd.",
            "type": "string",
            "enum": [
              "fwd",
              "rwd",
              "awd"
            ]
          },
          "brakeBias": {
            "description": "(raycast) Brake split 0..1: 0 all-rear, 0.5 even, 1 all-front. Default 0.55.",
            "type": "number"
          },
          "chassisMass": {
            "description": "(raycast) Chassis mass kg. Default 1100.",
            "type": "number"
          },
          "centerOfMassY": {
            "description": "(raycast) Center-of-mass Y offset; negative = lower = far harder to roll. Default -0.4.",
            "type": "number"
          },
          "linearDamping": {
            "description": "(raycast) Chassis linear damping. Default 0.15.",
            "type": "number"
          },
          "angularDamping": {
            "description": "(raycast) Chassis angular damping. Default 0.6.",
            "type": "number"
          },
          "wheelFrictionSlip": {
            "description": "(raycast) Forward tire grip; higher = less wheelspin. Default 1.4.",
            "type": "number"
          },
          "sideFrictionStiffness": {
            "description": "(raycast) Lateral cornering grip. Default 0.9.",
            "type": "number"
          },
          "suspensionRestLength": {
            "description": "(raycast) Suspension rest length (u). Default 0.35.",
            "type": "number"
          },
          "suspensionStiffnessSim": {
            "description": "(raycast) Suspension spring stiffness. Default 24.",
            "type": "number"
          },
          "suspensionCompression": {
            "description": "(raycast) Damping while compressing. Default 0.82.",
            "type": "number"
          },
          "suspensionRelaxation": {
            "description": "(raycast) Damping while extending. Default 0.88.",
            "type": "number"
          },
          "maxSuspensionForce": {
            "description": "(raycast) Suspension force clamp N. Default 30000.",
            "type": "number"
          },
          "maxSuspensionTravelSim": {
            "description": "(raycast) Max suspension travel (u). Default 0.3.",
            "type": "number"
          },
          "transmission": {
            "description": "(raycast) auto self-shifts on RPM; manual shifts on keyShiftUp/keyShiftDown (E/Q default; gamepad Y/LB). Default auto.",
            "type": "string",
            "enum": [
              "auto",
              "manual"
            ]
          },
          "gearRatios": {
            "description": "(raycast) Forward gear ratios 1st→top. Default [3.1,2.05,1.55,1.2,0.97,0.8].",
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "finalDrive": {
            "description": "(raycast) Final-drive ratio multiplied into every gear. Default 3.6.",
            "type": "number"
          },
          "idleRpm": {
            "description": "(raycast) Idle RPM. Default 900.",
            "type": "number"
          },
          "maxRpm": {
            "description": "(raycast) Redline; the limiter cuts power past it. Default 7200.",
            "type": "number"
          },
          "shiftUpRpm": {
            "description": "(raycast, auto box) Upshift RPM. Default 6500.",
            "type": "number"
          },
          "shiftDownRpm": {
            "description": "(raycast, auto box) Downshift RPM. Default 2400.",
            "type": "number"
          },
          "shiftTime": {
            "description": "(raycast) Torque-cut seconds per shift. Default 0.22.",
            "type": "number"
          },
          "keyShiftUp": {
            "description": "(raycast manual) Shift-up key code. Default KeyE.",
            "type": "string"
          },
          "keyShiftDown": {
            "description": "(raycast manual) Shift-down key code. Default KeyQ.",
            "type": "string"
          },
          "aeroDrag": {
            "description": "(raycast) Quadratic air drag — shapes top speed. Default 0.5.",
            "type": "number"
          },
          "downforceSim": {
            "description": "(raycast) Speed² downforce while grounded. Default 1.1.",
            "type": "number"
          },
          "antiRollFront": {
            "description": "(raycast) Front anti-roll bar stiffness (flatter cornering; stiffer front = understeer). Default 6000.",
            "type": "number"
          },
          "antiRollRear": {
            "description": "(raycast) Rear anti-roll bar stiffness (stiffer rear = oversteer/rotation). Default 4200.",
            "type": "number"
          },
          "absEnabled": {
            "description": "(raycast) ABS assist: keeps the fronts steering under hard braking. Default true.",
            "type": "boolean"
          },
          "tcsEnabled": {
            "description": "(raycast) Traction control: tames wheelspin launches + power-oversteer. Turn OFF for a raw drift car. Default true.",
            "type": "boolean"
          },
          "surfaceGripEnabled": {
            "description": "(raycast) Per-wheel surface grip from the `surface` instance variable of whatever a wheel rolls over (tarmac/curb/dirt/grass/gravel/sand/snow/ice). Default true.",
            "type": "boolean"
          },
          "engineBrakeForce": {
            "description": "(raycast) Engine braking N at the driven wheels when coasting off-throttle in gear — scales with gear ratio + RPM, so lifting/downshifting slows the car into corners. 0 = freewheel. Default 600.",
            "type": "number"
          },
          "loadSensitivity": {
            "description": "(raycast) 0..1 weight-transfer grip balance: braking loads the fronts (sharper turn-in, lift-off oversteer on a closed throttle), throttle loads the rears (planted exits). Average grip unchanged. 0 = off. Default 0.6.",
            "type": "number"
          },
          "counterSteerAssist": {
            "description": "(raycast) 0..1 automatic opposite lock toward the slip angle once the car genuinely slides — keeps drifts/snap-oversteer catchable. 0 for a raw sim feel. Default 0.5.",
            "type": "number"
          },
          "aiDriver": {
            "description": "Self-driving car: steers itself around the scene's \"Checkpoint <n>\" gates with no blueprint. Race rivals AND ambient city traffic both use this — pick the behavior with aiMode.",
            "type": "boolean"
          },
          "aiMode": {
            "description": "AI driving behavior. \"race\" (default): laps the checkpoints IN ORDER at racing pace with rubber-banding. \"wander\": ambient TRAFFIC — treats the checkpoints as a road network, picks a random nearby gate at each one, cruises at city pace.",
            "type": "string",
            "enum": [
              "race",
              "wander"
            ]
          },
          "aiSkill": {
            "description": "AI pace 0..1 (corner speed, commitment, steering aggression). Default 0.7; use ~0.2-0.35 for calm city traffic.",
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "aiRubberBand": {
            "description": "(race mode) 0..1 keep-the-pack-close assist: slows when ahead of the player, pushes when behind. 0 = honest pace. Default 0.5.",
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "wheels": {
            "description": "(raycast, PREFERRED) Explicit wheel rig: each wheel object with its declared role — order never matters. Drives drivetrain split, brake bias, handbrake and anti-roll pairing. Replaces the whole rig; wins over the legacy wheelObjectIds/steeredWheelIds convention.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "objectId": {
                  "type": "string"
                },
                "axle": {
                  "type": "string",
                  "enum": [
                    "front",
                    "rear"
                  ]
                },
                "side": {
                  "type": "string",
                  "enum": [
                    "left",
                    "right"
                  ]
                },
                "steered": {
                  "description": "Turns with steering input. Defaults true on the front axle.",
                  "type": "boolean"
                }
              },
              "required": [
                "objectId",
                "axle",
                "side"
              ]
            }
          },
          "wheelObjectIds": {
            "description": "LEGACY (prefer `wheels`): the 4 spinning tire mesh ids in [FL,FR,RL,RR] order. Arcade: child meshes at [0,0,0]. Raycast: direct wheel CHILD objects of the car.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "steeredWheelIds": {
            "description": "LEGACY (prefer `wheels`): front steering ids. Arcade: prefer wheel-anchor empty ids (direct wheel ids also work). Raycast: MUST be the front wheel ids that appear in wheelObjectIds.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "tireMarkIds": {
            "description": "Particle emitter object ids near tire contact patches; runtime emits only while slipping/handbraking.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "garageBodyIds": {
            "description": "(raycast) Ordered MODEL ASSET ids for the in-game garage: a \"CarBody\" project variable (0,1,2…) picks which body the chassis wears at runtime (chassis re-fits automatically). Replaces the whole list. Also editable in the Inspector Garage section.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "headlightIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "brakeLightIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "brakeDiscIds": {
            "description": "(raycast) Brake DISC child object ids — their emissive glows orange with accumulated brake heat (sustained hard braking from speed) and cools when released.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "loosePartIds": {
            "description": "(raycast) LOOSE cosmetic child part ids (bumpers/spoiler/skirts): a hard impact tears off the part facing the hit — it becomes a free dynamic prop tumbling away with the car momentum; R-respawn bolts everything back on.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "hoodCameraOffset": {
            "description": "(raycast) Car-local [side, up, forward] hood camera position — the Play camera cycles chase → hood → cockpit on C (hold V to look back).",
            "minItems": 3,
            "maxItems": 3,
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "cockpitCameraOffset": {
            "description": "(raycast) Car-local [side, up, forward] cockpit (driver's eye) camera position for the C-key view cycle.",
            "minItems": 3,
            "maxItems": 3,
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "keyThrottle": {
            "type": "string"
          },
          "keyReverse": {
            "type": "string"
          },
          "keyLeft": {
            "type": "string"
          },
          "keyRight": {
            "type": "string"
          },
          "keyHandbrake": {
            "type": "string"
          },
          "keyHorn": {
            "description": "Key code that sounds the horn. Default KeyH.",
            "type": "string"
          },
          "cameraFollow": {
            "type": "boolean"
          },
          "cameraOffset": {
            "description": "[side, up, back]. Negative Z is behind.",
            "minItems": 3,
            "maxItems": 3,
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "cameraPitch": {
            "type": "number"
          },
          "mouseLook": {
            "type": "boolean"
          },
          "engineSoundId": {
            "description": "Audio asset id LOOPED as the engine (playback rate rises with speed).",
            "type": "string"
          },
          "skidSoundId": {
            "description": "Audio asset id LOOPED while the tires slip (volume ∝ drift).",
            "type": "string"
          },
          "brakeSoundId": {
            "description": "One-shot brake squeal on hard deceleration.",
            "type": "string"
          },
          "hornSoundId": {
            "description": "One-shot horn fired on the horn key.",
            "type": "string"
          },
          "collisionSoundId": {
            "description": "One-shot impact when the car hits something while moving.",
            "type": "string"
          }
        },
        "required": [
          "objectId"
        ]
      }
    }
    set_playingAction

    Start or stop the runtime preview (Play mode).

    View tool JSON
    {
      "name": "set_playing",
      "kind": "act",
      "impl": "imperative",
      "description": "Start or stop the runtime preview (Play mode).",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "playing": {
            "type": "boolean"
          }
        },
        "required": [
          "playing"
        ]
      }
    }
    search_engine_toolsAnswer

    Search across all 200+ advanced Feather Engine tools by keyword (e.g. "ragdoll", "joint", "cinematic", "audio", "ui", "particle", "timeline", "material", "prefab", "terrain", "vehicle"). Returns matching tool names, descriptions, and input parameters so you can call them using execute_engine_tool.

    View tool JSON
    {
      "name": "search_engine_tools",
      "kind": "answer",
      "impl": "imperative",
      "description": "Search across all 200+ advanced Feather Engine tools by keyword (e.g. \"ragdoll\", \"joint\", \"cinematic\", \"audio\", \"ui\", \"particle\", \"timeline\", \"material\", \"prefab\", \"terrain\", \"vehicle\"). Returns matching tool names, descriptions, and input parameters so you can call them using execute_engine_tool.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Keyword, system, or feature to search for (e.g. \"ragdoll\", \"camera\", \"water\", \"cloth\", \"score\", \"light\"). Pass empty string or \"categories\" to list all categories."
          },
          "limit": {
            "type": "number",
            "description": "Maximum number of tool definitions to return (default 8)."
          }
        },
        "required": [
          "query"
        ]
      }
    }
    execute_engine_toolAction

    Execute any advanced Feather Engine tool from the full 200+ tool catalog by name (e.g. tools discovered via search_engine_tools like add_joint, set_ragdoll, create_cinematic, add_cinematic_shot, create_ui_document, add_ui_element, customize_vehicle, etc.).

    View tool JSON
    {
      "name": "execute_engine_tool",
      "kind": "act",
      "impl": "imperative",
      "description": "Execute any advanced Feather Engine tool from the full 200+ tool catalog by name (e.g. tools discovered via search_engine_tools like add_joint, set_ragdoll, create_cinematic, add_cinematic_shot, create_ui_document, add_ui_element, customize_vehicle, etc.).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "toolName": {
            "type": "string",
            "description": "The exact name of the engine tool to execute (from search_engine_tools or the engine tool catalog)."
          },
          "parameters": {
            "type": "object",
            "description": "JSON dictionary of arguments for the specified tool."
          }
        },
        "required": [
          "toolName"
        ]
      }
    }