Skip to main content
Glama
okenjioxx

Roblox Executor MCP Server

by okenjioxx

Check whether a table/metatable is read-only

is-readonly
Read-onlyIdempotent

Check if a Luau table or metatable is locked read-only before attempting metatable hooks or edits, so you know whether setreadonly must be disabled first.

Instructions

Resolve a Luau expression to a table (or a metatable expression) and report whether it is locked read-only via isreadonly. Roblox marks core metatables (e.g. getrawmetatable(game)) and many security tables read-only so __index/__namecall can't be swapped; this tells you whether you'd need setreadonly(t, false) before any mutation would take effect. Use it as a safe, non-mutating pre-check before attempting metatable hooks or constant/upvalue edits — it changes nothing. Typical targets: a plain table from getgenv(), or 'getrawmetatable(game)' to confirm the global instance metatable is frozen. Requires isreadonly; returns { Target, TargetType, ReadOnly } or { error } when the value isn't a table or isreadonly is unavailable. Signature: { targetPath: string, threadContext: number? }. Phase: observe; cost=medium; idempotency=read-only. Requires: active-client, resolved-target. Produces: structured-observation. Safety: read-only. On failure: inspect tool-schema for exact fields, defaults, constraints, and an invocation example.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
targetPathYesLuau expression resolving to the table or metatable to test, e.g. 'getgenv().SomeTable', 'getrawmetatable(game)', or 'getrawmetatable(game.Players.LocalPlayer)'. Evaluated as `return <targetPath>`. isreadonly only applies to tables — userdata/Instances will report an error.
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.5/5.0
Behavior4/5

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

Adds strong behavioral context beyond annotations: it changes nothing, requires isreadonly, returns { Target, TargetType, ReadOnly } or an error, and explains why Roblox marks metatables read-only. Annotations already declare read-only/idempotent, but the description usefully adds the failure case and the reason the check matters.

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-loads purpose and use-case, but the tail (signature, phase, cost, idempotency, requires, produces, safety, on-failure) is metadata-ish and somewhat repetitive of annotations. It is still readable and mostly earns its place.

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?

For a 2-param read-only tool with no output schema, the description covers when to use it, error behavior, and return shape. It is close to complete, though it could mention pagination/timeout or threadContext semantics more explicitly.

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 100%, so baseline is 3. The description adds semantic value by giving concrete examples of targetPath (getgenv().SomeTable, getrawmetatable(game)) and warning that isreadonly only applies to tables, which enriches how the agent should populate the field.

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?

Specific verb+resource: resolves a Luau expression to a table/metatable and reports whether it is read-only via isreadonly. It distinguishes itself from siblings like set-metatable-readonly (which mutates) and inspect-instance-metatable (which inspects metatables rather than lock state).

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?

Explicitly states when to use it: as a safe pre-check before attempting metatable hooks or constant/upvalue edits. It names the alternative action (setreadonly(t, false)) that would be needed if locked, and gives typical targets, which routes the agent correctly.

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