Skip to main content
Glama

Add something to an R3 project

r3_factory_run

Add an object to an existing R3 project — a cube, sphere, terrain, lighting, a physics body, and so on. Each factory builds a complete, correctly-wired object (mesh + geometry + material + colour, already connected), so you never assemble components by hand. Kept at once in the project's live copy: every R3 tab with the project open shows it now, no editor needed and nothing to save (r3_editor_create is the same tool). The answer says what was kept and its seq. "name" names what you make ("Leg front left" → entityRef leg_front_left): the primary component (a cube's Mesh, a light), unique in the project (a name already used gets _2); its geometry and material take it too (leg_front_left_geometry, leg_front_left_material). Name parts when you make them: renaming later is done in the R3 editor. "StudioLighting" lights a scene the way a photo studio does: one of R3's built-in HDR environments (studio, sunset, sky) as the scene's environment, so metal and glossy materials reflect, plus a key light. Use r3_factory_list to see the factories and their options.

Input Schema

NameRequiredDescriptionDefault
nameNoThe name of what you make, e.g. "Leg front left" (at most 120 characters). Its entityRef, the name code uses, follows from it (leg_front_left).
paramsNoFactory options, e.g. {"color": 16711680, "position": {"y": 2}}. Every option has a default. NOTE: rotation is in RADIANS and color is a packed RGB integer.
factoryYesFactory name, e.g. "Cube", "Sphere", "PhysicsCube". See r3_factory_list.
projectIdYesThe project to add to, from r3_project_create.

Output Schema

NameRequiredDescriptionDefault
seqNo
rolesYes
answerYesThis answer in words: what was done, what R3 measured, decided or refused, and what to do next. The same text as the result's text block. Read it: the fields beside it are the data, this is the guidance.
createdYes
factoryYes
physicsYes
projectIdYes
componentCountYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / name
      Added value: +{
      +  "description": "The name of what you make, e.g. \"Leg front left\" (at most 120 characters). Its entityRef, the name code uses, follows from it (leg_front_left).",
      +  "type": "string"
      +}
  2. Changed2 schema fields changed
    • addedOutput schema / properties / physics
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "code": {
      +        "type": "string"
      +      },
      +      "collider": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "message": {
      +        "type": "string"
      +      },
      +      "rigidBody": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "code",
      +      "collider",
      +      "rigidBody",
      +      "message"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "projectId",
      -  "factory",
      -  "created",
      -  "roles",
      -  "componentCount",
      -  "answer"
      -]New value: +[
      +  "projectId",
      +  "factory",
      +  "created",
      +  "roles",
      +  "physics",
      +  "componentCount",
      +  "answer"
      +]
  3. Changed1 schema field changed
    • addedOutput schema / properties / roles / additionalProperties / properties / readThrough
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "entityRef": {
      +      "type": "string"
      +    },
      +    "property": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "entityRef",
      +    "property"
      +  ],
      +  "type": "object"
      +}
  4. Changed2 schema fields changed
    • addedOutput schema / properties / answer
      Added value: +{
      +  "description": "This answer in words: what was done, what R3 measured, decided or refused, and what to do next. The same text as the result's text block. Read it: the fields beside it are the data, this is the guidance.",
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "projectId",
      -  "factory",
      -  "created",
      -  "roles",
      -  "componentCount"
      -]New value: +[
      +  "projectId",
      +  "factory",
      +  "created",
      +  "roles",
      +  "componentCount",
      +  "answer"
      +]
  5. First observed

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the annotations: writes land in the project's live copy, every open R3 tab reflects the change immediately, nothing needs saving, and the response reports what was kept plus its seq. It also discloses the name-collision behavior (a reused name gets _2) and that renaming afterwards must happen in the R3 editor — consistent with destructiveHint=false and idempotentHint=false.

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

Conciseness3/5

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

Front-loaded correctly — what it does, then the live-copy behavior, then naming — but it is a dense run-on paragraph that packs naming rules, live sync, and a multi-sentence StudioLighting tutorial together. The live-editing point is restated twice ("every R3 tab shows it now" / "no editor needed and nothing to save"), and the studio-lighting digression interrupts the flow.

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 mutating factory tool with four documented params and an output schema, nothing essential is missing: side effects on the live project are covered, naming/identity semantics are covered, option discovery is delegated to r3_factory_list, and return content is summarized rather than re-specified.

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

Parameters4/5

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

Schema coverage is already 100%, so the baseline is 3, but the description adds real meaning: how "name" propagates to entityRef and to derived geometry/material names, and that collisions are suffix-disambiguated. The lengthy StudioLighting passage effectively explains one factory's params (HDR environment + key light), though it is oddly placed and factory-specific rather than general.

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 specific verb and resource ("Add an object to an existing R3 project") plus the concrete object families (cube, sphere, terrain, lighting, physics body). It also distinguishes itself from the component-level siblings by explaining that factories produce fully-wired objects, and explicitly identifies r3_editor_create as the same tool.

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?

Clear routing guidance: "Use r3_factory_list to see the factories and their options" for discovery, and "so you never assemble components by hand" implicitly steers away from r3_component_add/r3_editor_add_component. It never names those siblings explicitly as the alternative, so the exclusion is inferred rather than stated.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources