Skip to main content
Glama

Set a property

set_property
DestructiveIdempotent

Change a property on a live Roblox instance by passing its dotted path and a JSON-encoded value. Returns the old and new value so you can verify the edit and revert if needed.

Instructions

Set a property on an instance in the running game (on the client, so it only replicates where Roblox allows it). The value is given as JSON text in value_json: a string, number or boolean (for example "42" or ""Hello""), or an object with a type field: {"type":"Vector3","x":1,"y":2,"z":3}, {"type":"Vector2","x":1,"y":2}, {"type":"Color3","r":255,"g":0,"b":0}, {"type":"Enum","enum":"Material","name":"Neon"} or {"type":"Instance","path":"game.Workspace.Part"}. Returns the old and new value. Requires the connected state.

Input Schema

NameRequiredDescriptionDefault
pathYesDotted path to the instance, starting at game.
clientNoClient id from list_clients, for example c2. Defaults to the client that connected last.
propertyYesProperty name, for example Transparency.
value_jsonYesThe new value as JSON text (see the tool description).

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.2/5.0
Behavior4/5

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

With annotations already declaring destructiveHint=true and idempotentHint=true, the description adds genuinely new behavior: the write happens client-side, replication is conditional, and the call returns old and new values (which enables manual rollback). It stops short of explaining what makes the operation destructive or what happens on invalid/read-only properties.

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?

Front-loaded with the purpose, then the parameter format, then the return value and prerequisite. Dense but every clause carries information; the type examples cost length but buy real clarity. Slightly long for a single paragraph, though not padded.

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

Completeness4/5

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

No output schema exists, and the description does cover the return ("the old and new value") and the connected-state prerequisite, plus the full value encoding. Missing only edge-case behavior — what occurs when the property is read-only, the path is invalid, or replication is disallowed.

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 coverage is already 100%, but the description goes well past it by fully specifying the value_json encoding — bare primitives plus typed object forms for Vector3, Vector2, Color3, Enum and Instance with concrete examples. That is meaning the schema alone ("see the tool description") does not supply.

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?

The description states a specific verb and resource ("Set a property on an instance in the running game") and immediately bounds the scope with the client-side caveat about replication. That distinguishes it from the sibling execute_lua, which could otherwise do the same job with arbitrary code.

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

Usage Guidelines3/5

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

It gives useful context — it operates on the client, replication is limited to what Roblox allows, and it "Requires the connected state" — but never explicitly says when to prefer it over execute_lua or when to avoid it (e.g. read-only properties, server-side effects). Usage is implied rather than directed.

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