Skip to main content
Glama
okenjioxx

Roblox Executor MCP Server

by okenjioxx

Send a low-level virtual input event

virtual-input
Destructive

Send keyboard, mouse, touch, or gamepad input to the active Roblox client to simulate player actions and control live game state.

Instructions

WRITES LIVE GAME STATE. Send keyboard, mouse, touch, or gamepad input into the active Roblox client. This is the broad low-level input surface: keyDown/keyUp/keyPress use Enum.KeyCode, mouseMove supports absolute or relative movement, mouseButton supports down/up/click, mouseWheel sends a wheel delta, touch sends Begin/Change/End, and gamepadButton/gamepadAxis target a gamepad. VirtualInputManager is preferred; common executor mouse/key fallbacks are used when available. Calls into VirtualInputManager are wrapped with newcclosure when the executor provides it. Unsupported executor APIs return a structured error rather than silently claiming success. Use press-key for the simpler keyboard-only case. Signature: { action: "keyDown" | "keyUp" | "keyPress" | "mouseMove" | "mouseButton" | "mouseWheel" | "touch" | "gamepadButton" | "gamepadAxis", key: string?, x: number?, y: number?, relative: any?, button: any?, buttonAction: any?, delta: any?, holdSec: any?, touchId: any?, touchState: any?, gamepad: any?, gamepadButton: string?, gamepadDown: any?, axis: string?, axisX: any?, axisY: any?, axisZ: any?, threadContext: number? }. Phase: act; cost=medium; idempotency=contextual-write. Requires: active-client, explicit-mutation-approval. Capabilities: VirtualInputManager. Produces: structured-result. Verify with: assert-state. 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
xNoScreen X coordinate, or horizontal relative delta for mouseMove.
yNoScreen Y coordinate, or vertical relative delta for mouseMove.
keyNoExact Enum.KeyCode member name for keyDown, keyUp, or keyPress, such as W, Space, or LeftShift.
axisNoExact Enum.KeyCode member name for a gamepad axis, such as Thumbstick1 or ButtonL2.
axisXNoGamepad axis X/value component.
axisYNoGamepad axis Y/value component.
axisZNoGamepad axis Z/value component.
deltaNoWheel delta for mouseWheel.
actionYesThe virtual input operation to perform.
buttonNoMouse button for mouseButton.Left
gamepadNoGamepad input device.Gamepad1
holdSecNoSeconds to hold keyPress or a mouse click between down and up, capped at 10 seconds.
touchIdNoTouch identifier for touch.
relativeNoFor mouseMove, use executor relative movement when true; otherwise use absolute screen coordinates.
touchStateNoTouch phase.Begin
gamepadDownNoPressed state for gamepadButton.
buttonActionNoWhether mouseButton sends down, up, or a down/up click.click
gamepadButtonNoExact Enum.KeyCode member name for a gamepad button, such as ButtonA or ButtonStart.
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?

Annotations already flag destructiveHint=true and non-idempotent, and the description adds substantial context on top: VirtualInputManager is preferred with executor fallbacks, calls are wrapped in newcclosure when available, and unsupported executor APIs return a structured error instead of a false success. It also names the phase, cost, idempotency class, and verification path.

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?

The safety warning is front-loaded ('WRITES LIVE GAME STATE') and most sentences carry distinct information. The inline Signature block largely restates the enum and parameter list already present at 100% schema coverage, which is the one redundant element keeping this from a 5.

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 19-parameter mutation tool with no output schema, the description covers what it writes, how it behaves on failure (structured error, inspect tool-schema), the preferred implementation path, required approvals, and how to verify. Nothing an agent needs to invoke it 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, but the description adds real mapping value by binding each action to its parameters (keyDown/keyUp/keyPress use Enum.KeyCode, mouseMove supports absolute or relative, touch sends Begin/Change/End, gamepadButton/gamepadAxis target a gamepad). This clarifies which fields apply to which action, which the flat schema does not.

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 ('Send keyboard, mouse, touch, or gamepad input into the active Roblox client') and immediately frames itself as 'the broad low-level input surface', distinguishing it from press-key and the higher-level GUI input siblings. An agent can place it precisely 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?

Explicitly routes the simple case to press-key ('Use press-key for the simpler keyboard-only case') and lists prerequisites (active-client, explicit-mutation-approval) and a verification step (assert-state). It does not mention other plausible alternatives such as click-button or type-text-box for GUI targeting, so it falls just short of full when/when-not coverage.

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