Skip to main content
Glama
okenjioxx

Roblox Executor MCP Server

by okenjioxx

Capture / compare GC snapshots

compare-gc-snapshots
Read-onlyIdempotent

Capture a GC baseline, run an in-game action, then diff against it to reveal newly allocated and freed functions, pinpointing leaks and behavior changes.

Instructions

Take a census of the garbage collector (getgc) and diff it over time to find what was allocated or freed between two points - a leak-hunting / behaviour-attribution tool. Workflow: call with action='capture' (a baseline), perform some action in-game (open a menu, fire a remote, etc.), then call with action='compare' (same snapshotName) to see what changed. Snapshots are stored CLIENT-SIDE in getgenv().__mcp_gc_snapshots[name], so they live in the target game and are naturally isolated per game / per session. capture returns: { action='capture', name, ts, counts={ function, table, thread, total }, fnSampled, truncated }. compare returns: { action='compare', name, baselineTs, nowTs, countDeltas={ function, table, thread, total }, newFunctions=[..pointers..], newFunctionCount, freedApprox (functions no longer present), sampledOnly, truncated }. Caps: at most 200000 GC objects are walked per pass and at most 4000 function pointers are remembered; results note when truncation occurred, so treat large freed/new counts near the cap as approximate. Signature: { action: "capture" | "compare", snapshotName: any?, threadContext: number? }. Phase: verify; cost=medium; idempotency=read-only. Requires: active-client. Capabilities: getgc. 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
actionYes'capture' stores a baseline census of the GC under snapshotName. 'compare' diffs the current GC against the previously stored snapshot of that name and reports new/freed functions and per-type count deltas.
snapshotNameNoName/slot for the snapshot (default 'default'). Use distinct names to keep several independent baselines around at once.default
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.6/5.0
Behavior5/5

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

Goes well beyond the readOnly/destructive/idempotent annotations by disclosing where state lives (getgenv().__mcp_gc_snapshots[name], per-game/per-session isolation) and hard caps (200000 objects walked, 4000 function pointers remembered) with truncation flags to treat large counts as approximate. Requires/preconditions (active-client, getgc capability) are also stated.

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 purpose and workflow, then return shapes and caps, so an agent can stop reading early. It is dense rather than bloated, though the trailing 'Phase/cost/idempotency/Safety: read-only' block partly restates annotation data already provided structurally.

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?

With no output schema, the description carries the full burden of describing return values and does so precisely for both action='capture' and action='compare' (counts, fnSampled, countDeltas, newFunctions, freedApprox, truncated). Nothing an agent needs to call or interpret this tool correctly 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; the description adds sequencing semantics the schema lacks — capture must precede compare, and compare must reuse the same snapshotName, with distinct names keeping independent baselines. threadContext is not elaborated further than the schema already does.

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 ('take a census of the garbage collector (getgc) and diff it over time') and names the analyst goal ('leak-hunting / behaviour-attribution tool'). It is clearly separable from siblings like list-gc-functions or list-gc-tables, which enumerate rather than diff snapshots.

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 an explicit three-step workflow (capture baseline, perform an in-game action, compare with the same snapshotName), which tells the agent precisely when each action applies. It does not, however, name any alternative sibling (e.g. measure-memory, list-gc-functions) or state when this tool is the wrong choice.

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