Skip to main content
Glama
okenjioxx

Roblox Executor MCP Server

by okenjioxx

Recursively dump a Luau table

dump-table
Read-onlyIdempotent

Evaluate a Luau expression in a live Roblox client, recursively encode its table contents to a chosen depth and key limit, and detect cycles or truncation for inspecting configs and globals.

Instructions

Resolve a Luau expression to a TABLE and recursively encode its contents to a chosen depth. Scalar, Instance and function values are encoded via the shared encoder; nested tables are recursed into until maxDepth, after which they collapse to 'table: (truncated)'. Each level is capped at maxKeys (the cap is noted via a per-level Truncated flag), and cycles are detected so self-referential tables won't loop forever. Ideal for reading config tables, getgenv()/getrenv() subtables, a ModuleScript's return value, or any captured upvalue table you already have a handle on. WARNING: this ACTS ON THE LIVE GAME — it evaluates your expression in the running client, which may trigger __index metamethods or other side effects while iterating. Returns { Target, Depth, Table:, Truncated } or { error }. Signature: { tablePath: string, maxDepth: any?, maxKeys: any?, 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
maxKeysNoMaximum number of keys to encode PER table level (default 100, max 500). When a level has more keys than this, the extras are dropped and that level is flagged Truncated = true.
maxDepthNoHow many levels of nested tables to recurse into (default 2, max 5). Beyond this depth, nested tables are rendered as 'table: <addr> (truncated)' rather than expanded.
tablePathYesLuau expression resolving to a table, e.g. 'getgenv()', 'getrenv()._G', 'require(game.ReplicatedStorage.Config)', 'getrawmetatable(game)', or 'debug.getupvalues(someFn)[1]'. Evaluated as `return <tablePath>` and must yield a table.
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.3/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, but the description adds material context: cycle detection, per-level truncation flagging, maxDepth collapse behavior, and a WARNING that live evaluation may trigger __index metamethods or side effects. It also states the return shape and error form. This is well beyond what the annotations convey.

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?

Purpose is front-loaded and the body is informative, but the tail (Phase/cost/idempotency/Requires/Produces/Safety) partly duplicates the annotations (idempotency=read-only vs idempotentHint=true) and the closing 'inspect tool-schema...' line is filler. Mixed redundancy keeps it out of the top band.

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 moderately complex read tool with no output schema, the description covers the evaluation model, recursion/truncation/cycle rules, side-effect risk, and the exact return shape ({ Target, Depth, Table, Truncated } or { error }). Nothing an agent needs to call it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so maxKeys, maxDepth, tablePath and threadContext are already documented. The description's Signature line and truncation notes re-state the semantics rather than adding new meaning beyond the schema. Baseline 3 is appropriate when the schema does the heavy lifting.

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: 'Resolve a Luau expression to a TABLE and recursively encode its contents to a chosen depth.' The recursion, depth-collapse, key capping and cycle detection clearly separate it from table-scanning siblings like find-tables-by-key, list-gc-tables, and find-table-references. An agent can identify exactly what this tool does without opening the 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?

Gives concrete use cases: 'reading config tables, getgenv()/getrenv() subtables, a ModuleScript's return value, or any captured upvalue table.' This tells the agent when the tool is a fit. However it names no alternative tool or exclusion condition, so the when-not side is left to inference.

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