Skip to main content
Glama

Spy on remote calls

remote_spy

Records the RemoteEvent:FireServer and RemoteFunction:InvokeServer calls a Roblox game's scripts make, including arguments and calling script, so you can inspect or block them.

Instructions

Record the RemoteEvent:FireServer and RemoteFunction:InvokeServer calls the game's own scripts make, with their arguments and the calling script. Actions: start (begin recording, optional only, ignore, max_calls, include_own), get (read recorded calls, optional since_id, contains, remote, limit), stop, clear and status. Typical use: start, make the action happen (ask the user or use gui_interact), then get. block (remotes: names or full paths) drops the game's calls to those remotes before they reach the server, even without recording, and unblock releases them (all when remotes is empty). Blocking changes how the game behaves, so only do it when the user asked for it and tell them which remotes are blocked. Recording and blocking need hookmetamethod in the executor and stay installed until the game is left. Requires the connected state.

Input Schema

NameRequiredDescriptionDefault
onlyNostart: only record remotes whose name contains this.
limitNoget: maximum calls to return, newest kept (default 50).
actionYesWhat to do.
clientNoClient id from list_clients, for example c2. Defaults to the client that connected last.
ignoreNostart: remote names to skip, for example noisy ones.
remoteNoget: only calls to the remote with exactly this name.
remotesNoblock or unblock: remote names or full paths (for example ReplicatedStorage.Events.Buy).
containsNoget: only calls whose remote name or arguments contain this.
since_idNoget: only calls after this id (use the lastId of the previous result).
max_callsNostart: how many calls to keep (default 500).
include_ownNostart: also record calls made by code run through Superbase. block: also block those calls (default false).

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.3/5.0
Behavior4/5

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

Beyond the annotations, the description discloses real behavioral traits: recording and blocking need hookmetamethod in the executor, the hooks stay installed until the game is left, block drops calls before they reach the server even without recording, and unblock with an empty remotes list releases everything. It does not mention rate limits or what happens if the hook is already installed, and there is a mild tension with destructiveHint=false given that dropping remote calls visibly alters game behavior — though the description flags that risk explicitly rather than contradicting the annotation.

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?

It is front-loaded with the core purpose, then action list, then typical workflow, then the block caveat — a sensible order. The action enumeration partially duplicates the enum and the paragraph runs long, but every sentence (prerequisites, persistence, blocking warning) contributes information an agent needs.

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 an 11-parameter, multi-mode tool it covers the prerequisites (connected state, hookmetamethod), session persistence, and the two risky mutating actions, which is the information an agent cannot get from the schema. Return values are not explained, but no output schema exists and the get/since_id pairing is implied well enough through "use the lastId of the previous result."

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 every parameter including boundaries, defaults, and the dual start/block meaning of include_own is already documented. The description only lists parameter names per action (only, ignore, max_calls, since_id, contains, remote, limit) without adding format or syntax detail beyond the schema, so the schema carries the semantic load.

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 first sentence names the exact resource (RemoteEvent:FireServer / RemoteFunction:InvokeServer calls made by the game's own scripts), what is captured (arguments and calling script), and then enumerates the seven actions including the non-obvious block/unblock pair. This is clearly distinguishable from siblings like execute_lua, get_logs, or inspect_instance, which deal with outgoing code or static inspection rather than intercepted remote traffic.

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?

It gives an explicit operational sequence ("start, make the action happen (ask the user or use gui_interact), then get") and names the sibling gui_interact as the way to trigger activity, plus the alternative of asking the user. It also sets a clear when-not rule for blocking: only when the user asked for it, and tell them which remotes are blocked.

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