Skip to main content
Glama

Roblox MCP Server

A Model Context Protocol (MCP) server that bridges AI assistants with Roblox via a Lua client. This enables AI tools like Claude to interact with the Roblox game environment in real-time.

Overview

This project consists of two components:

  1. MCP Server (src/index.ts) - A Node.js server that implements the MCP protocol and communicates with AI clients

  2. Lua Client (client.lua) - A Lua script that runs inside Roblox via a script executor and connects to the MCP server via WebSocket

Prerequisites

  • Node.js v18 or higher

  • npm or yarn

  • A Roblox script executor with WebSocket support (e.g., Synapse X, KRNL, Fluxus, Solara)

Installation

1. Clone and Install Dependencies

cd mcp
npm install

2. Build the Server

npm run build

This compiles the TypeScript source to JavaScript in the build/ directory.

Configuration

MCP Client Configuration (Claude Desktop, etc.)

Add the following to your MCP client configuration file:

Claude Desktop (Windows)

Location: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "roblox": {
      "command": "node",
      "args": ["C:/path/to/mcp/build/index.js"]
    }
  }
}

Claude Desktop (macOS)

Location: ~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "roblox": {
      "command": "node",
      "args": ["/path/to/mcp/build/index.js"]
    }
  }
}

WebSocket Port

The server listens on port 8888 by default. You can modify this in src/index.ts if needed.

Usage

Step 1: Start the MCP Server

The MCP server starts automatically when your AI client (like Claude Desktop) initializes it. Alternatively, for testing:

npm start

Step 2: Connect the Lua Client

  1. Open Roblox and join a game

  2. Open your script executor

  3. Copy the contents of client.lua and execute it

The client will automatically:

  • Connect to the WebSocket server at ws://localhost:8888

  • Forward game logs to the MCP server

  • Handle commands from the AI assistant

  • Auto-reconnect if disconnected

Tip: Add client.lua to your executor's autoexec folder for automatic connection on startup.

Available Tools

The MCP server exposes the following tools that AI assistants can use:

Instance Navigation

Tool

Description

get_children

Get children of an instance (default: game)

find_instances

Search for instances by name pattern or ClassName

get_properties

Get properties and attributes of an instance

get_hidden_properties

Get hidden/internal properties using executor functions

Script Operations

Tool

Description

read_script

Read/decompile the source code of a script

execute_script

Execute Lua code in the Roblox context

Remote Spy

Tool

Description

remote_spy_start

Start monitoring RemoteEvent/RemoteFunction calls

remote_spy_stop

Stop the remote spy

remote_spy_get_logs

Get collected remote spy logs

fire_remote

Fire a RemoteEvent or invoke a RemoteFunction

Advanced/Debug

Tool

Description

getgc_find

Search Lua garbage collector for functions/tables

get_connections

Get all connections on an event/signal

get_upvalues

Get upvalues of a function

Tool Examples

Get Children of Workspace

Use get_children with path "game.Workspace"

Find All Parts

Use find_instances with query "" and className "Part"

Read a Script

Use read_script with path "game.ReplicatedStorage.SomeModule"

Execute Code

Use execute_script with code "print(game.Players.LocalPlayer.Name)"

Monitor Remotes

1. Use remote_spy_start (optionally with filter "Shop")
2. Play the game normally
3. Use remote_spy_get_logs to see captured calls
4. Use remote_spy_stop when done

Fire a Remote

Use fire_remote with path "game.ReplicatedStorage.MyRemote" and args ["hello", 123]

Executor Compatibility

The Lua client checks for WebSocket support from various executors:

  • ✅ Synapse X (syn.websocket)

  • ✅ KRNL (WebSocket)

  • ✅ Fluxus (fluxus.websocket)

  • ✅ Solara (WebSocket)

  • ✅ Any executor with global WebSocket

Some advanced features require additional executor functions:

Feature

Required Function

Script decompilation

decompile()

Remote spy

hookmetamethod()

GC search

getgc(), getinfo()

Get connections

getconnections()

Get upvalues

getupvalues()

Hidden properties

gethiddenproperty()

Development

Run in Development Mode

npm run dev

Build

npm run build

Project Structure

mcp/
├── src/
│   └── index.ts      # MCP server source
├── build/
│   └── index.js      # Compiled server
├── client.lua        # Roblox Lua client
├── package.json
├── tsconfig.json
└── README.md

Troubleshooting

"No Lua client connected"

  • Make sure you've executed client.lua in your Roblox executor

  • Check that the WebSocket port (8888) is not blocked by firewall

  • Verify your executor supports WebSocket

"Port 8888 is already in use"

Another instance of the server is running. Kill it or restart your computer.

"WebSocket not supported on this executor"

Your executor doesn't have WebSocket support. Try a different executor.

Connection drops frequently

The client auto-reconnects after 5 seconds. If issues persist, check your network or executor stability.

Security Notice

⚠️ This tool is intended for educational and development purposes only. Using script executors may violate Roblox's Terms of Service and could result in account termination.

License

ISC

Available Tools

13 tools
execute_scriptC

Execute a Lua script in the Roblox context.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesThe Lua code to execute.

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure but only states the basic action. It doesn't mention critical traits such as whether execution is safe/read-only, potential side effects (e.g., modifying game state), authentication needs, rate limits, or error handling, leaving significant gaps for an agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero wasted words, clearly front-loading the core action. It's appropriately sized for a simple tool, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of executing code in a Roblox context, the description is incomplete. With no annotations and no output schema, it lacks details on behavioral risks, return values, or error cases. Siblings suggest a debugging/analysis context, but this isn't addressed, leaving the agent under-informed.

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?

The schema description coverage is 100%, with the parameter 'code' well-documented in the schema as 'The Lua code to execute.' The description adds no additional meaning beyond this, such as syntax examples or constraints, so it meets the baseline for high schema coverage without compensating value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Execute') and target ('a Lua script in the Roblox context'), making the purpose understandable. However, it doesn't differentiate from siblings like 'read_script' (which might retrieve code) or 'fire_remote' (which might trigger events), leaving room for confusion in tool selection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. For example, it doesn't specify if this is for testing scripts, modifying game state, or debugging, nor does it mention prerequisites like required permissions or risks compared to siblings like 'remote_spy_start'.

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

find_instancesC

Find instances by ClassName or Name pattern.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesName or pattern to search for
classNameNoClassName filter (optional)
ancestorNoPath to search under (default game)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool finds instances but doesn't describe what 'instances' are in this context (e.g., game objects, scripts), the search scope (e.g., partial matches, case sensitivity), return format, or potential limitations (e.g., performance impact). This is inadequate for a search tool with no annotation support.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence: 'Find instances by ClassName or Name pattern.' It is front-loaded with the core purpose, has zero redundant words, and is appropriately sized for the tool's complexity. Every part of the sentence contributes essential information without waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (search functionality with 3 parameters), lack of annotations, and no output schema, the description is incomplete. It doesn't explain what 'instances' are, the search behavior (e.g., wildcards, exact matches), or the return structure. For a tool with no structured support, more context is needed to guide effective use.

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?

The input schema has 100% description coverage, with clear parameter definitions (e.g., 'query' as 'Name or pattern to search for'). The description adds minimal value beyond the schema by mentioning 'ClassName or Name pattern,' which aligns with the 'query' and 'className' parameters. Since schema coverage is high, the baseline score of 3 is appropriate, as the description doesn't significantly enhance parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Find instances by ClassName or Name pattern.' It specifies the verb ('Find') and resource ('instances'), and mentions the search criteria (ClassName or Name pattern). However, it doesn't explicitly differentiate from sibling tools like 'get_children' or 'getgc_find', which might also retrieve instance-related data, leaving some ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, context (e.g., when searching by ClassName vs. Name), or exclusions. Given sibling tools like 'get_children' and 'getgc_find', the lack of comparative guidance is a significant gap, leaving the agent to infer usage.

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

fire_remoteC

Fire a RemoteEvent or invoke a RemoteFunction with specified arguments.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the remote (e.g., 'game.ReplicatedStorage.MyRemote')
argsNoArray of arguments to pass

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action ('fire' or 'invoke') but lacks details on permissions required, side effects (e.g., whether it modifies game state), error handling, or response behavior. This is inadequate for a tool that likely involves remote execution.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is front-loaded and wastes no space, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of remote invocation (likely involving game scripting or debugging), no annotations, and no output schema, the description is incomplete. It doesn't cover behavioral aspects like safety, return values, or error conditions, which are crucial for effective tool use in this context.

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 the input schema already documents both parameters ('path' and 'args') adequately. The description adds no additional meaning beyond what the schema provides, such as examples of valid paths or argument types, meeting the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('fire' or 'invoke') and the resource ('RemoteEvent' or 'RemoteFunction'), making the purpose specific and understandable. However, it doesn't explicitly differentiate this tool from its siblings like 'execute_script' or 'remote_spy_start', which might also involve remote interactions in some contexts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention any prerequisites, exclusions, or specific contexts (e.g., for debugging vs. production), leaving the agent to infer usage based on the tool name alone.

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

get_childrenC

Get the structure of the Roblox DataModel (children of a specific instance).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoThe full path to the instance (e.g., 'game.Workspace'). Default is 'game'.

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states what the tool does but lacks details on permissions, rate limits, error handling, or the format of returned data (e.g., structure type, pagination). For a read operation with zero annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's function without unnecessary words. It's front-loaded and appropriately sized for its purpose, with every part contributing to understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of retrieving hierarchical data in Roblox, no annotations, and no output schema, the description is incomplete. It doesn't explain the return format (e.g., list of instances, nested structure), error conditions, or how it interacts with sibling tools, leaving gaps for effective agent use.

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?

The input schema has 100% description coverage, with the 'path' parameter well-documented in the schema. The description adds minimal value by implying the tool retrieves children based on an instance path, but doesn't provide additional syntax, examples beyond the schema's default, or clarify edge cases, meeting the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'structure of the Roblox DataModel (children of a specific instance)', making the purpose understandable. However, it doesn't explicitly differentiate from sibling tools like 'find_instances' or 'get_properties', which might also retrieve instance-related data, so it misses full sibling distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, context for selecting it over siblings like 'find_instances' or 'get_properties', or any exclusions, leaving the agent to infer usage based on the name alone.

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

get_connectionsC

Get all connections on a specific event/signal of an instance.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to instance
eventYesEvent name (e.g., 'Changed', 'Touched')

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool retrieves connections but doesn't explain what 'connections' entail (e.g., data structures, permissions), whether this is a read-only operation, potential side effects, or response format. For a tool with no annotation coverage, this leaves significant gaps in understanding its behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded with the core action and target, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of retrieving 'connections' (which could involve various data types or permissions), no annotations, and no output schema, the description is incomplete. It doesn't explain what 'connections' are, the return format, or any limitations, leaving the agent with insufficient context to use the tool effectively beyond basic parameter input.

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?

The schema description coverage is 100%, with both parameters ('path' and 'event') documented in the input schema. The description doesn't add any additional meaning beyond what the schema provides (e.g., clarifying 'path' format or 'event' examples beyond the schema's 'e.g., 'Changed', 'Touched''). Baseline 3 is appropriate as the schema handles the parameter documentation adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get all connections') and target ('on a specific event/signal of an instance'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate this tool from its siblings like 'get_children' or 'get_properties', which might also retrieve related data from instances.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description mentions 'specific event/signal' but doesn't clarify prerequisites, exclusions, or compare it to sibling tools like 'get_hidden_properties' or 'remote_spy_get_logs' that might handle similar data retrieval in different contexts.

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

getgc_findB

Search the Lua garbage collector for functions/tables by constants, upvalues, or name patterns. Useful for finding hidden functions.

ParametersJSON Schema
NameRequiredDescriptionDefault
constantsNoArray of string constants to search for in functions
upvaluesNoArray of upvalue names to search for
nameNoFunction name pattern to match
typeNoType to search for: 'function', 'table', or 'all' (default 'function')

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It mentions the tool is 'useful for finding hidden functions,' which hints at a read-only, investigative purpose, but doesn't disclose critical behavioral traits like whether it's safe (non-destructive), requires specific permissions, has rate limits, or what the output format looks like. For a search tool with zero annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core action (searching the Lua garbage collector) and key parameters, with a second clause explaining utility. Every word earns its place, with no redundancy or unnecessary elaboration, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (searching the Lua GC with multiple parameters) and lack of annotations and output schema, the description is incomplete. It doesn't explain what the tool returns (e.g., a list of functions/tables, error handling), behavioral constraints, or integration with sibling tools. For a tool with no structured output and zero annotation coverage, more context is needed to be fully helpful.

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 the schema already documents all four parameters (constants, upvalues, name, type) with clear descriptions. The description adds minimal value beyond the schema by mentioning 'constants, upvalues, or name patterns' and the purpose of finding hidden functions, but doesn't provide additional syntax, format details, or examples. 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches the Lua garbage collector for functions/tables using specific criteria (constants, upvalues, name patterns), with a specific purpose of finding hidden functions. It distinguishes from siblings like 'get_upvalues' (which likely retrieves upvalues rather than searching by them) and 'find_instances' (which might search for instances rather than GC objects). However, it doesn't explicitly contrast with all siblings, keeping it at 4 instead of 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for 'finding hidden functions,' suggesting it's for debugging or reverse-engineering scenarios. It doesn't provide explicit when-to-use vs. when-not-to-use guidance or name alternatives among siblings (e.g., when to use this vs. 'find_instances' or 'get_hidden_properties'). The context is clear but lacks detailed exclusions or comparisons.

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

get_hidden_propertiesC

Get hidden/internal properties of an instance using gethiddenproperty.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to instance
propertiesYesList of hidden property names to fetch

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool retrieves hidden/internal properties, implying a read-only operation, but does not address potential risks (e.g., accessing sensitive data), permissions required, rate limits, or what happens if properties are invalid. For a tool with no annotations, this leaves significant behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is front-loaded with the core action and resource, making it easy to parse. Every part of the sentence earns its place by conveying essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and output schema, the description is incomplete for a tool that accesses hidden properties. It does not explain what 'gethiddenproperty' entails, the format of returned data, potential errors, or security implications. For a tool with no structured behavioral data, more context is needed to ensure safe and effective use.

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?

The description does not add meaning beyond what the input schema provides. The schema has 100% description coverage, clearly defining 'path' and 'properties' parameters. The description mentions 'instance' and 'hidden property names,' which align with the schema but do not provide additional context, syntax, or examples. With high schema coverage, a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get hidden/internal properties of an instance using gethiddenproperty.' It specifies the verb ('Get'), resource ('hidden/internal properties'), and method ('using gethiddenproperty'). However, it does not explicitly differentiate from sibling tools like 'get_properties' or 'get_upvalues', which likely retrieve different types of properties.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention any context, prerequisites, or exclusions, such as when to prefer 'get_properties' for non-hidden properties or 'get_upvalues' for upvalues. Without such information, the agent lacks clear usage direction.

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

get_propertiesC

Get properties and attributes of an instance. Returns Name, ClassName, Path, Properties, and Attributes.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to instance (e.g., 'game.Workspace.Part')
propertiesNoOptional list of specific property names to fetch

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It mentions the return values (Name, ClassName, Path, Properties, Attributes), which adds some behavioral context, but doesn't cover critical aspects like whether this is a read-only operation, permission requirements, error handling, or rate limits. For a tool with no annotations, this leaves significant gaps.

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 description is a single, efficient sentence that front-loads the purpose and lists return values. It's appropriately sized with no wasted words, though it could be slightly more structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (2 parameters, no output schema, no annotations), the description is minimally adequate. It covers the purpose and return values, but lacks details on usage guidelines, behavioral traits, and doesn't fully compensate for the absence of annotations and output schema.

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?

The schema description coverage is 100%, so the schema already documents both parameters ('path' and 'properties') fully. The description doesn't add any additional meaning beyond what's in the schema, such as examples or constraints, but it doesn't need to since the schema is comprehensive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'properties and attributes of an instance', specifying what the tool does. It distinguishes from siblings like 'get_children' or 'get_hidden_properties' by focusing on properties and attributes, but doesn't explicitly differentiate from them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'get_hidden_properties' or 'find_instances'. The description lacks context about prerequisites, exclusions, or comparisons to sibling tools.

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

get_upvaluesC

Get upvalues of a function found via getgc or other means.

ParametersJSON Schema
NameRequiredDescriptionDefault
functionIndexYesIndex of function from getgc_find results

TDQS

C2.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It doesn't disclose behavioral traits such as whether this is a read-only operation, potential performance impacts, error conditions, or what the output looks like. The mention of 'getgc or other means' hints at context but lacks specifics on dependencies or limitations.

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 description is a single sentence that is front-loaded with the core action ('Get upvalues of a function'), making it efficient. However, the phrase 'found via getgc or other means' could be more precise, slightly reducing clarity without adding necessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and a single parameter with full schema coverage, the description is incomplete. It doesn't explain what 'upvalues' are, how to interpret results, or provide context for use with siblings like getgc_find. For a tool in a debugging/inspection context, this leaves significant gaps.

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 the schema already documents the single parameter 'functionIndex' with its description. The description adds no additional meaning beyond what the schema provides, such as format details or usage examples. Baseline 3 is appropriate as the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool retrieves upvalues of a function, which is a clear purpose, but it's vague about what 'upvalues' are and doesn't differentiate from siblings like get_properties or get_hidden_properties. It mentions 'found via getgc or other means' but doesn't specify if this is the only source or how it relates to other tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. It references 'getgc or other means' but doesn't explain when to prefer this over siblings like get_properties or get_hidden_properties for function inspection. The agent must infer usage from context alone.

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

read_scriptB

Read the source code of a script. Requires executor support for decompilation if it's a LocalScript/ModuleScript not created by you.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesThe full path to the script instance.

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It adds useful context about decompilation requirements for specific script types, which goes beyond a basic read operation. However, it doesn't cover other behavioral traits like error handling, performance implications, or what happens if the path is invalid, leaving some transparency gaps.

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 description is a single sentence that efficiently conveys the core action and a key constraint, with no wasted words. It's appropriately sized and front-loaded, making it easy to parse. However, it could be slightly more structured by separating the main purpose from the prerequisite, but it's still highly concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (a read operation with a decompilation nuance), no annotations, no output schema, and 100% schema coverage, the description is adequate but incomplete. It covers the purpose and a key behavioral aspect, but lacks details on return values, error cases, or integration with siblings, making it minimally viable but with clear gaps.

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?

The input schema has 100% description coverage, with the 'path' parameter fully documented in the schema. The description doesn't add any additional meaning or details about the parameter beyond what the schema provides, such as format examples or constraints. 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Read') and resource ('source code of a script'), making the purpose specific and understandable. It distinguishes from siblings like 'execute_script' or 'get_properties' by focusing on source code retrieval. However, it doesn't explicitly differentiate from all siblings, such as 'get_hidden_properties' which might also involve reading data, so it's not a perfect 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by mentioning a prerequisite ('Requires executor support for decompilation if it's a LocalScript/ModuleScript not created by you'), which provides some context for when to use it. However, it doesn't explicitly state when to choose this tool over alternatives like 'get_properties' or 'find_instances', nor does it outline exclusions or detailed scenarios, so it's only adequate with gaps.

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

remote_spy_get_logsC

Get the collected remote spy logs.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of logs to return (default 50)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states what the tool does but lacks critical details: it doesn't specify if this is a read-only operation, what format the logs are returned in, whether there are rate limits, or if authentication is required. This leaves significant gaps for an agent to understand the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is appropriately sized and front-loaded, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a logging tool with no annotations and no output schema, the description is insufficient. It doesn't explain what 'remote spy logs' contain, how they are structured, or what the return values look like, leaving the agent with incomplete context for proper usage.

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?

The input schema has 100% description coverage, with the 'limit' parameter clearly documented in the schema. The description adds no additional parameter information beyond what the schema provides, so it meets the baseline score of 3 for high schema coverage without extra value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'collected remote spy logs', making the purpose understandable. However, it doesn't differentiate from sibling tools like 'remote_spy_start' or 'remote_spy_stop', which are related to controlling the spy functionality rather than retrieving logs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., whether 'remote_spy_start' must be called first), exclusions, or comparisons to other tools like 'get_connections' that might retrieve different types of data.

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

remote_spy_startC

Start spying on RemoteEvent and RemoteFunction calls. Logs all remote traffic.

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoOptional filter pattern for remote names

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. While it states the tool 'Logs all remote traffic,' it doesn't explain where logs are stored, how to access them (though 'remote_spy_get_logs' is a sibling), performance impact, permission requirements, or whether this is a continuous background process. The description is insufficient for a tool that presumably initiates system monitoring.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with just two sentences that directly state the tool's purpose and primary function. Every word earns its place with zero wasted text, making it front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool that initiates system monitoring with no annotations and no output schema, the description is incomplete. It doesn't explain the monitoring scope beyond 'remote traffic,' how logs are structured, whether there are rate limits, how to stop monitoring (though 'remote_spy_stop' exists), or what happens if monitoring is already active. The context signals show minimal parameter complexity, but the behavioral implications require more explanation.

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 the schema already documents the single optional 'filter' parameter. The description doesn't add any parameter-specific information beyond what the schema provides, such as examples of filter patterns or how filtering affects logging behavior. Baseline 3 is appropriate when schema does the documentation work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Start spying') and target ('RemoteEvent and RemoteFunction calls'), providing a specific verb+resource combination. However, it doesn't explicitly distinguish this tool from its sibling 'remote_spy_stop' beyond the action difference, missing an opportunity for clearer sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'remote_spy_stop' or other monitoring tools. It mentions 'Logs all remote traffic' which implies a monitoring context but doesn't specify prerequisites, timing considerations, or when not to use it.

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

remote_spy_stopB

Stop the remote spy.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. 'Stop' implies a state change operation, but the description doesn't specify whether this is destructive (e.g., terminates spy processes), has side effects, requires specific permissions, or what happens upon execution (e.g., confirmation message, error if not running). This leaves significant behavioral gaps for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, direct sentence with zero wasted words. It's appropriately sized for a simple tool with no parameters, front-loading the core action without fluff or redundant explanations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (a state-changing operation with siblings like remote_spy_start and remote_spy_get_logs), no annotations, and no output schema, the description is incomplete. It doesn't explain the tool's role in the remote spy workflow, what 'stopping' entails, or what to expect after execution, leaving the agent with insufficient context for reliable use.

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?

The tool has 0 parameters with 100% schema description coverage (empty schema), so no parameter documentation is needed. The description appropriately doesn't discuss parameters, earning a baseline score of 4 for not introducing unnecessary information while matching the schema's completeness.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Stop') and the target resource ('the remote spy'), which is a specific verb+resource combination. However, it doesn't explicitly differentiate this tool from its sibling 'remote_spy_start' beyond the obvious action difference, missing an opportunity to clarify their relationship within the remote spy functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., that remote_spy_start must be running first), exclusions, or relationships with sibling tools like remote_spy_get_logs. The agent must infer usage context from the tool name alone.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 13 tool updatesv1.0.0
    • First observedexecute_script
    • First observedfind_instances
    • First observedfire_remote
    • First observedget_children
    • First observedget_connections
    • First observedget_hidden_properties
    • First observedget_properties
    • First observedget_upvalues
    • First observedgetgc_find
    • First observedread_script
    • First observedremote_spy_get_logs
    • First observedremote_spy_start
    • First observedremote_spy_stop

TDQS

B3.2/5.0

Scored across 13 tools

Disambiguation4/5

Most tools have distinct purposes, such as execute_script for running Lua code, find_instances for locating objects, and remote_spy tools for monitoring network traffic. However, some tools like get_properties and get_hidden_properties could be confused as they both retrieve instance properties, though their descriptions clarify the difference between standard and hidden properties.

Naming Consistency4/5

The tool names follow a consistent verb_noun pattern with snake_case throughout, such as execute_script, find_instances, and get_properties. There are minor deviations like getgc_find, which uses an abbreviation (gc) that might break the pattern slightly, but overall the naming is highly predictable and readable.

Tool Count5/5

With 13 tools, the count is well-scoped for a Roblox server covering scripting, instance manipulation, and remote monitoring. Each tool appears to serve a specific function, such as executing scripts, inspecting properties, or spying on remote events, making the set comprehensive without being overwhelming.

Completeness4/5

The tool set provides strong coverage for core Roblox operations, including script execution, instance discovery, property inspection, and remote event handling. Minor gaps exist, such as no tools for creating or modifying instances or scripts, which could limit full CRUD capabilities, but agents can likely work around this with the available tools for reading and executing.

Related MCP Connectors