Skip to main content
Glama
okenjioxx

Roblox Executor MCP Server

by okenjioxx

Set (or clear) a custom attribute on a live Instance

set-attribute
Destructive

Write a custom attribute on a live Roblox instance by resolving a Luau expression and calling inst:SetAttribute, returning old and new values for auditing.

Instructions

WRITES LIVE GAME STATE. Resolve a Luau expression to an Instance and write one of its custom attributes via inst:SetAttribute(name, value), returning both the OLD and NEW value so the change is auditable. Attributes are the named, typed key/value pairs games store on instances (visible in the Studio Attributes panel and read with :GetAttribute) — distinct from engine properties (use set-instance-property for those). Common uses while debugging: flip a 'IsAdmin'/'Frozen' boolean attribute, bump a 'Cooldown'/'Damage' number, or set a 'State' string. For non-primitive attribute types use value.kind='raw'; use kind='nil' to DELETE the attribute. The read of the old value and the write are each pcall-guarded. WARNING: this mutates the running game on the client — the change takes effect immediately and may replicate, and game scripts listening on GetAttributeChangedSignal will fire. Returns { Path, Attribute, OldValue, NewValue, ok } or { error }. Signature: { instancePath: string, attributeName: string, value: { kind: "string" | "number" | "boolean" | "nil" | "raw", value: string | number | boolean? }, threadContext: number? }. Phase: act; cost=medium; idempotency=idempotent-write. Requires: active-client, resolved-target, explicit-mutation-approval. Produces: operation-receipt. Verify with: get-instance-properties. Safety: MUTATING; writes live game/client state. On failure: inspect tool-schema for exact fields, defaults, constraints, and an invocation example.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
valueYesThe new attribute value to write, expressed as a typed argument.
instancePathYesLuau expression resolving to the Instance whose attribute you want to set, e.g. 'game.Workspace.Part', 'game.Players.LocalPlayer', or 'game:GetService("Workspace").Boss'. Evaluated as `return <instancePath>`.
attributeNameYesThe exact attribute name to write, e.g. 'IsAdmin', 'Cooldown', 'State'. Case-sensitive. If the attribute does not exist yet it will be created; passing value.kind='nil' deletes it.
threadContextNoOptional Roblox thread identity for this call; omit it to use the server default.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv2.0.0-spies.2

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only supply destructive/not-read-only/not-idempotent hints; the description goes well past them, disclosing that the write takes effect immediately on the client and may replicate, that GetAttributeChangedSignal listeners will fire, that both the old-value read and the write are pcall-guarded, and that approval plus an operation receipt are required. It also gives the failure envelope ({ error }) and the UserWarning-style 'MUTATING' framing.

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 highest-value fact (this writes live game state) and organized from purpose to mechanics to warnings. It is dense and nearly every sentence earns its place, but the trailing 'Signature', 'Phase/cost/idempotency' and 'Safety: MUTATING' lines largely restate the schema and annotations, so it is slightly longer than needed.

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?

No output schema exists, yet the description supplies the return shape ({ Path, Attribute, OldValue, NewValue, ok } or { error }), the idempotency/approval prerequisites, the verification tool, and a fallback instruction ('inspect tool-schema for exact fields'). For a mutating tool with nested value object and 4 parameters, nothing an agent needs to invoke it safely is missing.

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 description coverage is 100%, so the baseline is 3, but the description adds integrative meaning by tying value.kind to intent ('raw' for the non-primitive types Roblox permits, 'nil' to DELETE the attribute) and by giving realistic attributeName examples (IsAdmin, Frozen, Cooldown, Damage, State). The 'Signature' restatement of the schema is redundant, so it does not reach a full 5.

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?

Opens with a specific verb+resource ('WRITES LIVE GAME STATE', sets a custom attribute on a live Instance) and explicitly differentiates the resource from the sibling concept: 'distinct from engine properties (use set-instance-property for those)'. An agent can select this over list-attributes, set-instance-property, or set-properties-bulk 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 Guidelines5/5

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

Names the alternative tool and the condition that routes to it (set-instance-property for engine properties), gives concrete debugging scenarios, and states the branch conditions for the call itself: kind='raw' for non-primitive attribute types, kind='nil' to delete. Prerequisites (active-client, explicit-mutation-approval) and a verification step (get-instance-properties) are spelled out.

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

Deploy Server

Other Tools