Skip to main content
Glama

add_light

Create or update a single light (spot, point, area, or sun) in a Blender scene by setting location, power, color, and shadow softness.

Instructions

Create or update one light you control (setup_lighting makes a whole preset instead). The same name updates that light and keeps every setting you omit; it never makes a copy. A new light is a spot of 1000 W. spot is a cone, point shines all ways, area is a panel, sun gives parallel rays. location is in world metres; look_at is the point a spot, area or sun aims at. A new light without them sits at [0, 0, 3] and points down. power_w is watts; for a sun it is W/m2 (1-5, about 3 is a normal day). A point or spot needs about 40 W at 1 m, 150 W at 2 m, 600 W at 4 m for a normal exposure; an area panel a third of that. color is '#rrggbb' or linear [r, g, b]; temperature_k (800-20000) multiplies it with a blackbody tint. Spot: spot_size_deg is the full cone angle (1-180), blend (0-1) softens its edge. cutoff_m stops a spot or point hard at that distance. radius (spot, point) is the source size in metres: bigger means softer shadows. size (area) is [width, height] in metres or one number for a square (1 m when empty). shadow_soft=false makes hard shadows. Names that start with bl_light_ belong to setup_lighting and are refused. Remove lights with delete.

Input Schema

NameRequiredDescriptionDefault
kindNo
nameNolight
sizeNo
blendNo
colorNo
radiusNo
look_atNo
power_wNo
cutoff_mNo
locationNo
shadow_softNo
spot_size_degNo
temperature_kNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed21 schema fields changed
    • addedInput schema / properties / blend / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / blend / default
      Previous value: -0.15New value: +null
    • removedInput schema / properties / blend / type
      Removed value: -"number"
    • changedInput schema / properties / color / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "items": {
      -      "type": "number"
      -    },
      -    "type": "array"
      -  }
      -]New value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "type": "number"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / color / default
      Previous value: -"#ffffff"New value: +null
    • addedInput schema / properties / kind / anyOf
      Added value: +[
      +  {
      +    "enum": [
      +      "spot",
      +      "point",
      +      "area",
      +      "sun"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / kind / default
      Previous value: -"spot"New value: +null
    • removedInput schema / properties / kind / enum
      Removed value: -[
      -  "spot",
      -  "point",
      -  "area",
      -  "sun"
      -]
    • removedInput schema / properties / kind / type
      Removed value: -"string"
    • addedInput schema / properties / power_w / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / power_w / default
      Previous value: -1000New value: +null
    • removedInput schema / properties / power_w / type
      Removed value: -"number"
    • addedInput schema / properties / radius / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / radius / default
      Previous value: -0.05New value: +null
    • removedInput schema / properties / radius / type
      Removed value: -"number"
    • addedInput schema / properties / shadow_soft / anyOf
      Added value: +[
      +  {
      +    "type": "boolean"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / shadow_soft / default
      Previous value: -trueNew value: +null
    • removedInput schema / properties / shadow_soft / type
      Removed value: -"boolean"
    • addedInput schema / properties / spot_size_deg / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / spot_size_deg / default
      Previous value: -45New value: +null
    • removedInput schema / properties / spot_size_deg / type
      Removed value: -"number"
  2. First observedv0.4.0

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only declare it is a non-read-only, non-destructive, closed-world call; the description adds substantial behavior beyond that — update-by-name semantics that preserve omitted settings and never copy, new-light defaults (spot, 1000 W, [0,0,3] pointing down), and a refusal rule for bl_light_ names. This is exactly the extra context annotations cannot carry.

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

Conciseness4/5

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

Dense but nearly every sentence carries parameter or behavior information that is otherwise unavailable at 0% schema coverage. It is front-loaded with the create/update distinction, though the long unstructured paragraph could be easier to scan as a parameter list.

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

Completeness5/5

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

For a 13-parameter, zero-coverage mutation tool with no output schema and only thin annotations, the description supplies defaults, units, per-kind constraints, naming restrictions, and update semantics. Nothing an agent needs to invoke it correctly appears to be missing.

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

Parameters5/5

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

Schema description coverage is 0% across 13 parameters, so the description must compensate and it does: units for location/look_at, wattage semantics including the W/m2 sun case and exposure guidance, color formats, temperature_k range, cone angle and blend ranges, cutoff_m, radius vs size, and shadow_soft are all explained.

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

Purpose5/5

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

States a precise verb+resource ('Create or update one light') and immediately distinguishes itself from setup_lighting, which makes whole presets. An agent can tell add_light apart from the lighting siblings without opening a schema.

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

Usage Guidelines4/5

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

Explicitly routes to setup_lighting for presets and to delete for removal, and states the bl_light_ name restriction. It does not say how to discover existing light names (e.g. list_lights) or what to do when several lights are needed, so the when-to-use picture is clear but not exhaustive.

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