### Instantiate and Run RobloxStudioMCPServer Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioMCPServer.md Example of how to create an instance of RobloxStudioMCPServer with necessary configuration and start its operation. The server will listen on stdio and HTTP, outputting connection details to stderr. ```typescript import { RobloxStudioMCPServer, getAllTools } from '@robloxstudio-mcp/core'; const server = new RobloxStudioMCPServer({ name: 'robloxstudio-mcp', version: '2.7.0', tools: getAllTools(), }); await server.run(); // Server listens on stdio and HTTP, prints connection info to stderr ``` -------------------------------- ### Install Roblox Studio Plugin via Startup Flag Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/configuration.md Execute the plugin installer for Windows and macOS using the `--install-plugin` flag. The process will exit after installation. ```bash npx robloxstudio-mcp@latest --install-plugin ``` -------------------------------- ### Example: Get Asset Details Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Demonstrates how to use the getAssetDetails method to fetch information for a specific asset. ```typescript const details = await tools.getAssetDetails(12345678); ``` -------------------------------- ### Install Studio Plugin Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/00_START_HERE.md Install the Roblox Studio plugin using npx. ```bash npx robloxstudio-mcp --install-plugin ``` -------------------------------- ### Dockerfile for Roblox Studio MCP Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/configuration.md Set up a Docker environment to run robloxstudio-mcp. This Dockerfile installs npx globally, sets necessary environment variables for API keys and user ID, exposes the application port, and defines the command to start the service. ```dockerfile FROM node:20 RUN npm install -g npx ENV ROBLOX_OPEN_CLOUD_API_KEY=... ENV ROBLOX_CREATOR_USER_ID=... ENV ROBLOX_STUDIO_HOST=0.0.0.0 EXPOSE 58741 CMD ["npx", "-y", "robloxstudio-mcp@latest"] ``` -------------------------------- ### Full Usage Example: Uploading a Decal Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxCookieClient.md A comprehensive example demonstrating how to initialize the `RobloxCookieClient`, check for authentication configuration, upload a decal using a local image file, and retrieve asset details. It includes error handling for the upload process. ```typescript import fs from 'fs'; import { RobloxCookieClient } from '@robloxstudio-mcp/core'; const client = new RobloxCookieClient(); // Check auth configured if (!client.hasCookie()) { console.error('Set ROBLOSECURITY environment variable'); process.exit(1); } // Upload decal const imageFile = fs.readFileSync('./my-texture.png'); try { const result = await client.uploadDecal( imageFile, 'My Texture', 'A custom game texture' ); console.log(`Success!`); console.log(`Decal asset ID: ${result.assetId}`); console.log(`Image asset ID: ${result.backingAssetId}`); // Fetch details const details = await client.getAssetDetails([result.assetId]); console.log(`Asset created: ${details[0].creationDate}`); } catch (error) { console.error(`Upload failed: ${error.message}`); } ``` -------------------------------- ### Install robloxstudio-mcp CLI Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/README.md Install the robloxstudio-mcp command-line interface globally using npm or use npx for temporary execution. ```bash npm install -g robloxstudio-mcp@latest # or use with npx npx robloxstudio-mcp@latest ``` -------------------------------- ### Install robloxstudio-mcp Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/00_START_HERE.md Install the robloxstudio-mcp package globally using npm. ```bash npm install -g robloxstudio-mcp@latest ``` -------------------------------- ### Example: Create Build Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Illustrates creating a 'scifi/wall_section' build with a metal and neon palette, and two part definitions. ```typescript const build = await tools.createBuild( 'scifi/wall_section', 'scifi', { metal: ['Institutional gray', 'Metal'], neon: ['Cyan', 'Neon'] }, [ [0, 0, 0, 4, 4, 1, 0, 0, 0, 'metal', 'Block'], [0, 4, 0, 4, 1, 1, 0, 0, 0, 'neon', 'Block'] ] ); ``` -------------------------------- ### Example: Export Build Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Demonstrates exporting a 'Castle' instance from 'game.Workspace' to the 'medieval' style with a specific ID. ```typescript const result = await tools.exportBuild('game.Workspace.Castle', 'medieval/castle_1', 'medieval'); // Saved to ~/.robloxstudio-mcp/build-library/medieval/castle_1.json ``` -------------------------------- ### ToolDefinition Example Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/types.md An example of a ToolDefinition for setting a property, demonstrating the structure and expected values for name, description, category, and inputSchema. ```typescript const toolDef: ToolDefinition = { name: 'set_property', description: 'Set a property on an instance', category: 'write', inputSchema: { type: 'object', properties: { instancePath: { type: 'string' }, propertyName: { type: 'string' }, propertyValue: {} }, required: ['instancePath', 'propertyName', 'propertyValue'] } }; ``` -------------------------------- ### Start Primary Roblox Studio MCP Server Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/ProxyBridgeService.md Command to start the primary Roblox Studio MCP server on a specified port. This is the first step in testing proxy mode. ```bash ROBLOX_STUDIO_PORT=58741 npx robloxstudio-mcp@latest ``` -------------------------------- ### Example ToolHandler Implementation Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/types.md An example implementation of a ToolHandler that calls the getFileTree method on the provided RobloxStudioTools instance. ```typescript const handler: ToolHandler = (tools, body) => tools.getFileTree(body.path); ``` -------------------------------- ### Start MCP Server with Open Cloud API Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/README.md Launch the MCP server using npx, providing Open Cloud API key and creator ID as startup flags. ```bash npx robloxstudio-mcp \ --open-cloud-key "api-key" \ --creator-id "user-id" ``` -------------------------------- ### RobloxStudioMCPServer Constructor and run() Method Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioMCPServer.md This snippet shows how to instantiate the RobloxStudioMCPServer and start its execution. The constructor requires a ServerConfig object, and the run() method initiates the server with stdio and optional HTTP transport. ```APIDOC ## RobloxStudioMCPServer ### Description The `RobloxStudioMCPServer` class is the main component for managing tool definitions, executing tools, and maintaining connections with Roblox Studio plugins. It implements the Model Context Protocol over stdio with optional HTTP/StreamableHTTP transport support. ### Constructor ```typescript constructor(config: ServerConfig) ``` Initializes a new instance of the `RobloxStudioMCPServer`. #### Parameters - **config** (ServerConfig) - Required - Server configuration object. - **config.name** (string) - Required - Server name (e.g., "robloxstudio-mcp"). - **config.version** (string) - Required - Semantic version string (e.g., "2.7.0"). - **config.tools** (ToolDefinition[]) - Required - Array of tool definitions to expose. ### Methods #### run() ```typescript async run(): Promise ``` Starts the MCP server with stdio transport and optional HTTP server. This method handles port binding, proxy mode fallback, and the lifecycle of plugin connections. **Behavior:** 1. Attempts to bind HTTP server to ports 58741-58745 (configurable via `ROBLOX_STUDIO_PORT`). 2. Falls back to proxy mode if all primary ports are in use. 3. Periodically attempts promotion from proxy to primary mode. 4. Listens on legacy port 3002 for backward compatibility with old plugins. 5. Sets up stdio MCP transport for communication. 6. Tracks plugin and MCP server activity. 7. Periodically cleans up stale instances and old requests. 8. Installs SIGTERM/SIGINT/SIGHUP handlers for graceful shutdown. **Throws:** - Logs errors to stderr; does not throw; attempts graceful fallback to proxy mode. ### Example ```typescript import { RobloxStudioMCPServer, getAllTools } from '@robloxstudio-mcp/core'; const server = new RobloxStudioMCPServer({ name: 'robloxstudio-mcp', version: '2.7.0', tools: getAllTools(), }); await server.run(); // Server listens on stdio and HTTP, prints connection info to stderr ``` ### ServerConfig Interface ```typescript interface ServerConfig { name: string; version: string; tools: ToolDefinition[]; } ``` | Field | Type | Description | |-------|------|-------------| | name | string | Human-readable server name | | version | string | Semantic version | | tools | ToolDefinition[] | Array of tools to expose to MCP clients | ``` -------------------------------- ### Get Connected Studio Instances Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Lists all connected Studio plugin instances and their count. ```typescript async getConnectedInstances(): Promise ``` -------------------------------- ### Example Build Library JSON Structure Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/configuration.md Illustrates the expected structure of a build library JSON file, including essential fields like id, style, bounds, palette, and parts. ```json { "id": "medieval/castle_1", "style": "medieval", "bounds": [50, 40, 30], "palette": { "stone": ["Dark stone gray", "Brick"], "wood": ["Reddish brown", "Wood"] }, "parts": [[...], [...], ...], "generatorCode": "optional", "generatorSeed": 42 } ``` -------------------------------- ### startPlaytest Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Starts a playtest session in Roblox Studio. You can specify the mode ('play' or 'run') and optionally the number of simulated players. ```APIDOC ## startPlaytest() ### Description Starts a playtest session. You can specify the mode ('play' or 'run') and optionally the number of simulated players. ### Method `async startPlaytest(mode: string, numPlayers?: number): Promise` ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Parameters Table | Parameter | Type | Required | Description | |---|---|---|---| | mode | string | Yes | Playtest mode: 'play' or 'run' | | numPlayers | number | No | Number of simulated players | **Throws:** Error if mode is not 'play' or 'run' ``` -------------------------------- ### Poll for Pending Requests - cURL Example Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/endpoints.md Example using cURL to poll for pending requests. Demonstrates sending the request body and shows example responses for both work availability and no work. ```bash curl -X POST http://localhost:58741/poll \ -H "Content-Type: application/json" \ -d '{"instanceId":"my-plugin-123","role":"edit"}' # Response (if work available): # {"requestId":"550e8400-e29b-41d4-a716-446655440000","request":{"endpoint":"/api/get-file-tree","data":{"path":"game.Workspace"}}} # Response (if no work): # (HTTP 204 No Content) ``` -------------------------------- ### Install MCP Server for Claude Desktop/Others Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/studio-plugin/INSTALLATION.md Configure MCP servers for Claude Desktop or other compatible AI assistants by adding this JSON configuration. ```json { "mcpServers": { "robloxstudio-mcp": { "command": "npx", "args": ["-y", "robloxstudio-mcp"] } } } ``` -------------------------------- ### Example Workflow: Plugin Registration to Promise Resolution Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/BridgeService.md Illustrates a complete interaction cycle: plugin registration, sending a request, polling for work, executing the request, returning a response, and finally resolving the initial promise. ```typescript // 1. Plugin registers bridge.registerInstance('plugin-123', 'edit'); // Assigned role: 'edit' // 2. MCP client requests tool const promise = bridge.sendRequest('/api/get-file-tree', {path: 'game.Workspace'}, 'edit'); // 3. Plugin polls for work const pending = bridge.getPendingRequest('edit'); // Returns: { // requestId: 'uuid-xyz', // request: {endpoint: '/api/get-file-tree', data: {path: 'game.Workspace'}} // } // 4. Plugin processes request const response = executePluginEndpoint(pending.request); // 5. Plugin returns response bridge.resolveRequest('uuid-xyz', response); // 6. Promise resolves const result = await promise; console.log(result); // File tree data ``` -------------------------------- ### Configuration Reference Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/MANIFEST.txt Documentation on environment variables, startup flags, and constructor options for configuring RobloxStudio-MCP. Covers server settings, API authentication, tool selection, and plugin authentication setup. ```APIDOC ## Configuration ### Description Details how to configure the RobloxStudio-MCP system, including environment variables, startup flags, and class constructor options. Covers server setup, API authentication, tool selection, and client configurations. ### Source `configuration.md` ### Configuration Areas - Environment variables (server, API auth, build library) - Startup flags (`--open-cloud-key`, `--creator-id`, `--install-plugin`) - Constructor options for classes - Tool selection functions - Build library setup - Plugin authentication (API keys, cookies) - MCP client configuration (Claude, Cursor, Claude Desktop) - Docker setup - Security best practices ``` -------------------------------- ### Test Tool Execution with Timeout Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/README.md Example demonstrating how to test tool execution, specifically fetching the file tree, which will result in a timeout if the plugin is not connected. ```typescript import { RobloxStudioTools, BridgeService } from '@robloxstudio-mcp/core'; const bridge = new BridgeService(); const tools = new RobloxStudioTools(bridge); // Test without plugin (will timeout after 30s) try { const tree = await tools.getFileTree('game.Workspace'); } catch (error) { console.error(error.message); // Timeout } ``` -------------------------------- ### Install MCP Server for Claude Code Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/studio-plugin/INSTALLATION.md Use this command to add the robloxstudio-mcp integration for Claude Code. ```bash claude mcp add robloxstudio-mcp ``` -------------------------------- ### CustomTools.myCustomEndpoint Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/StudioHttpClient.md An example of integrating a custom tool by extending RobloxStudioTools, demonstrating how to call a custom endpoint on the plugin. ```APIDOC ## POST /api/custom-endpoint ### Description An example of integrating a custom tool by extending RobloxStudioTools, demonstrating how to call a custom endpoint on the plugin. ### Method POST ### Endpoint /api/custom-endpoint ### Parameters #### Request Body - **param1** (string) - Required - The first parameter for the custom endpoint. - **param2** (number) - Required - The second parameter for the custom endpoint. ### Request Example ```json { "param1": "someValue", "param2": 123 } ``` ### Response #### Success Response (200) - **any** - The response from the custom endpoint. #### Response Example ```json { "result": "success" } ``` ``` -------------------------------- ### Custom Tool Integration Example Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/StudioHttpClient.md Shows how to integrate a new custom tool by extending RobloxStudioTools and using StudioHttpClient to communicate with a custom API endpoint. ```typescript import { StudioHttpClient, BridgeService } from '@robloxstudio-mcp/core'; class CustomTools { private client: StudioHttpClient; constructor(bridge: BridgeService) { this.client = new StudioHttpClient(bridge); } async myCustomEndpoint(param1: string, param2: number) { const response = await this.client.request('/api/custom-endpoint', { param1, param2 }); if (response.error) { throw new Error(response.error); } return { content: [{ type: 'text', text: JSON.stringify(response) }] }; } } ``` -------------------------------- ### Submit Request Response - cURL Example Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/endpoints.md Example using cURL to submit a completed request response. Includes the request ID in the URL and the response data in the JSON body. ```bash curl -X POST http://localhost:58741/response/550e8400-e29b-41d4-a716-446655440000 \ -H "Content-Type: application/json" \ -d '{"response":{"children":[{"name":"Part1","class":"Part"}],"path":"game.Workspace"}}' ``` -------------------------------- ### Install MCP Server for Windows Users (cmd) Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/studio-plugin/INSTALLATION.md For native Windows users encountering issues, update the configuration to use 'cmd' for executing the npx command. This ensures proper execution of the robloxstudio-mcp@latest package. ```json { "mcpServers": { "robloxstudio-mcp": { "command": "cmd", "args": ["/c", "npx", "-y", "robloxstudio-mcp@latest"] } } } ``` -------------------------------- ### Start a Playtest Session Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Initiates a playtest session with a specified mode and an optional number of simulated players. Ensure the mode is either 'play' or 'run'. ```typescript async startPlaytest(mode: string, numPlayers?: number): Promise ``` -------------------------------- ### Error Handling Example Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/OpenCloudClient.md Demonstrates how to handle potential errors when using the OpenCloudClient, including checking for API key configuration and catching general errors. ```typescript try { const results = await client.searchAssets({ searchCategoryType: 'Decal', query: 'invalid query' }); } catch (error) { if (!client.hasApiKey()) { console.error('API key not configured'); } else if (error instanceof Error) { console.error(`API error: ${error.message}`); } } ``` -------------------------------- ### getInstances Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/ProxyBridgeService.md Retrieves the list of plugin instances from the primary server via an HTTP GET request to the /status endpoint. ```APIDOC ## getInstances ### Description Gets instances from the primary server via HTTP GET to `/status`. ### Method GET ### Endpoint `/status` ### Response #### Success Response (200) - **PluginInstance[]** - Array of PluginInstance objects (or empty array on error) ### Fallback Returns empty array if primary unreachable. ``` -------------------------------- ### Connect AI Client to MCP Server Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/README.md Configuration examples for connecting AI clients like Claude or Cursor to the robloxstudio-mcp server. This involves adding the server configuration to the respective client's settings. ```bash # Claude Code claude mcp add robloxstudio -- npx -y robloxstudio-mcp@latest # Cursor # Edit .cursor/tools/mcp-servers.json with server config # Claude Desktop # Edit ~/Library/Application Support/Claude/claude_desktop_config.json ``` -------------------------------- ### Connect Gemini to Roblox Studio MCP Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/README.md Use this command to add the Roblox Studio MCP server for Gemini CLI. Ensure you have the Studio plugin installed, HTTP requests enabled, and trust the connection. ```bash gemini mcp add robloxstudio npx --trust -- -y robloxstudio-mcp@latest ``` -------------------------------- ### Get File Tree Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Retrieves the instance hierarchy tree starting from a specified path within the Roblox Studio game. Use this to explore the structure of your game's instances. ```typescript async getFileTree(path?: string): Promise ``` ```typescript const response = await tools.getFileTree('game.Workspace'); // Returns tree of all instances under Workspace ``` -------------------------------- ### Register Instance and Handle Polls via HTTP Server Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/BridgeService.md Handles plugin registration via POST to /ready and instance activity polling via GET to /poll. It also manages responses to requests via POST to /response/:requestId. ```typescript app.post('/ready', (req, res) => { const assignedRole = bridge.registerInstance(req.body.instanceId, req.body.role); res.json({ success: true, assignedRole }); }); app.get('/poll', (req, res) => { bridge.updateInstanceActivity(req.body.instanceId); const pending = bridge.getPendingRequest(req.body.role); if (pending) { res.json(pending); } else { res.status(204).send(); } }); app.post('/response/:requestId', (req, res) => { bridge.resolveRequest(req.params.requestId, req.body.response); res.json({ success: true }); }); ``` -------------------------------- ### Connect Claude to Roblox Studio MCP Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/README.md Use this command to add the Roblox Studio MCP server for Claude. Ensure you have the Studio plugin installed and HTTP requests enabled. ```bash claude mcp add robloxstudio -- npx -y robloxstudio-mcp@latest ``` -------------------------------- ### Initialize RobloxStudioTools Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Initializes the RobloxStudioTools class with a BridgeService for communication with the Studio plugin. This setup also configures internal clients for HTTP requests, OpenCloud API access, and authenticated asset operations. ```typescript constructor(bridge: BridgeService) ``` -------------------------------- ### Initialize RobloxStudioMCPServer with Tools Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/configuration.md Instantiate the RobloxStudioMCPServer with essential configuration, including its name, version, and an array of tools. Use `getAllTools()` for full access or `getReadOnlyTools()` for inspector-only mode. ```typescript import { RobloxStudioMCPServer, getAllTools } from '@robloxstudio-mcp/core'; const server = new RobloxStudioMCPServer({ name: 'robloxstudio-mcp', version: '2.7.0', tools: getAllTools(), // or getReadOnlyTools() for inspector }); await server.run(); ``` -------------------------------- ### Transparently Use BridgeService or ProxyBridgeService Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/ProxyBridgeService.md This TypeScript example shows how to instantiate either BridgeService or ProxyBridgeService based on primary port availability. The RobloxStudioTools can then use the 'bridge' object identically, regardless of which service is active. ```typescript let bridge: BridgeService | ProxyBridgeService; if (primaryPortAvailable) { bridge = new BridgeService(); } else { bridge = new ProxyBridgeService('http://localhost:58741'); } const tools = new RobloxStudioTools(bridge); // Works identically whether proxy or primary ``` -------------------------------- ### Configure Open Cloud API for Uploads Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/configuration.md Set up credentials for uploading assets using the Open Cloud API. This is the recommended method and requires an API key and creator user ID. ```bash export ROBLOX_OPEN_CLOUD_API_KEY="my-api-key" export ROBLOX_CREATOR_USER_ID="123456" npx robloxstudio-mcp@latest ``` -------------------------------- ### MCP Streamable HTTP Transport - cURL Example Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/endpoints.md Example using cURL to send multiple MCP messages over the streamable HTTP transport. Uses a heredoc to stream JSONL data. ```bash cat << 'EOF' | curl -X POST http://localhost:58741/mcp \ -H "Content-Type: application/json" \ -d @- {"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}} {"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}} EOF ``` -------------------------------- ### Get Plugin Instances Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/ProxyBridgeService.md Retrieve a list of registered plugin instances from the primary server. This method sends an HTTP GET request to the '/status' endpoint. Returns an empty array if the primary server is unreachable. ```typescript const instances = proxy.getInstances(); ``` -------------------------------- ### OpenCloudClient Constructor with API Key Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/OpenCloudClient.md Shows how to initialize the OpenCloudClient by directly providing the API key in the constructor configuration. ```typescript new OpenCloudClient({apiKey: '...'}) ``` -------------------------------- ### Get Registered Instances Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/BridgeService.md Retrieves a list of all currently registered plugin instances. ```typescript getInstances(): PluginInstance[] Get list of all currently registered instances. **Returns:** Array of PluginInstance objects **Example:** ```typescript const instances = bridge.getInstances(); // [{instanceId: 'plugin-abc-123', role: 'edit', ...}] ``` ``` -------------------------------- ### Plugin Registration Endpoint Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/endpoints.md Register a new Studio plugin instance using the POST /ready endpoint. This endpoint assigns a role to the plugin and returns a success status along with the assigned role. ```bash curl -X POST http://localhost:58741/ready \ -H "Content-Type: application/json" \ -d '{"instanceId":"my-plugin-123","role":"edit"}' # Response: {"success":true,"assignedRole":"edit"} ``` -------------------------------- ### POST /ready Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/endpoints.md Registers a new Studio plugin instance with the server and assigns it a role. This endpoint is crucial for initiating communication between a plugin and the MCP server. ```APIDOC ## POST /ready ### Description Register a new Studio plugin instance and receive assigned role. ### Method POST ### Endpoint /ready ### Parameters #### Request Body - **instanceId** (string) - Yes - Unique identifier from plugin - **role** (string) - Yes - Requested role: 'edit', 'play', or 'client' ### Request Example ```bash curl -X POST http://localhost:58741/ready \ -H "Content-Type: application/json" \ -d '{"instanceId":"my-plugin-123","role":"edit"}' ``` ### Response #### Success Response (200) - **success** (boolean) - Always true on success - **assignedRole** (string) - Assigned role ('client' becomes 'client-1', 'client-2', etc.) ``` -------------------------------- ### Get Asset Thumbnail Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/OpenCloudClient.md Retrieves the thumbnail image for a specific asset using its ID. ```APIDOC ## GET /cloud/v1/assets/{id}/thumbnail ### Description Retrieves the thumbnail image for a specific asset using its ID. ### Method GET ### Endpoint /cloud/v1/assets/{id}/thumbnail ### Parameters #### Path Parameters - **id** (string) - Required - The unique identifier of the asset. ### Response #### Success Response (200) - Response body contains the thumbnail image data. ``` -------------------------------- ### Get Asset Details Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/OpenCloudClient.md Retrieves detailed information about a specific asset using its ID. ```APIDOC ## GET /cloud/v1/assets/{id} ### Description Retrieves detailed information about a specific asset using its ID. ### Method GET ### Endpoint /cloud/v1/assets/{id} ### Parameters #### Path Parameters - **id** (string) - Required - The unique identifier of the asset. ### Response #### Success Response (200) - **assetId** (string) - The ID of the asset. - **displayName** (string) - The public display name of the asset. - **assetType** (string) - The type of the asset. - **revisionId** (string) - Optional - The ID of the current revision. - **revisionCreateTime** (string) - Optional - The creation time of the current revision. ``` -------------------------------- ### Instantiate OpenCloudClient Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/OpenCloudClient.md Initialize the OpenCloudClient. It can be configured with an API key and timeout, or by using environment variables. ```typescript const client = new OpenCloudClient(); ``` ```typescript const client = new OpenCloudClient({ apiKey: 'my-api-key', timeout: 60000 }); ``` -------------------------------- ### Get Pending Request Count Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/BridgeService.md Returns the current number of unresolved requests in the queue. ```typescript getPendingRequestCount(): number Get number of unresolved requests. **Returns:** Count of pending requests **Example:** ```typescript const pending = bridge.getPendingRequestCount(); if (pending > 100) { console.warn('Many requests queued:', pending); } ``` ``` -------------------------------- ### Get Studio Selection Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Retrieves the paths of currently selected instances within Roblox Studio. ```typescript async getSelection(): Promise ``` -------------------------------- ### Get All Attributes of an Instance with getAttributes Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Use getAttributes to retrieve all attributes associated with a given Roblox instance. ```typescript async getAttributes(instancePath: string): Promise ``` -------------------------------- ### Read Game Structure Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/README.md Retrieve and log the file tree structure of the Roblox Studio game, starting from 'game.Workspace'. ```typescript const tools = new RobloxStudioTools(bridge); const tree = await tools.getFileTree('game.Workspace'); console.log(JSON.stringify(tree, null, 2)); ``` -------------------------------- ### Get Playtest Output Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Retrieves output from a playtest session. The target can be specified as 'edit' or 'play', defaulting to 'edit'. ```typescript async getPlaytestOutput(target?: string): Promise ``` -------------------------------- ### registerInstance Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/ProxyBridgeService.md Registers a plugin instance with the primary server by sending an HTTP POST request to the /ready endpoint. ```APIDOC ## registerInstance ### Description Registers a plugin instance with the primary server via HTTP POST to `/ready`. ### Method POST ### Endpoint `/ready` ### Parameters #### Request Body - **instanceId** (string) - Required - Unique identifier from plugin - **role** (string) - Required - Requested role: 'edit', 'play', 'client' ### Request Example ```json { "instanceId": "plugin-123", "role": "edit" } ``` ### Response #### Success Response (200) - **role** (string) - The assigned role string. ### Example ```typescript const assigned = proxy.registerInstance('plugin-123', 'edit'); // Returns: 'edit' ``` ``` -------------------------------- ### Get All Tags of an Instance with getTags Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Use getTags to retrieve all tags currently applied to a specific Roblox instance. ```typescript async getTags(instancePath: string): Promise ``` -------------------------------- ### Create New Instance with Properties Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Use this method to create a new instance of a specified class, parent it, and optionally set initial properties. Ensure className and parent are provided. ```typescript await tools.createObject('Part', 'game.Workspace', 'MyPart', { Size: [2, 2, 2], Color: [1, 0, 0], Material: 'Neon' }); ``` -------------------------------- ### Get Read-Only Tools Definition Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/configuration.md Returns an array of ToolDefinition objects that are read-only. This is specifically used for the inspector variant. ```typescript getReadOnlyTools(): ToolDefinition[] ``` -------------------------------- ### RobloxStudioMCPServer Class Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/MANIFEST.txt Documentation for the main server class, which serves as the entry point for the RobloxStudio-MCP system. It includes details on its constructor, methods, properties, and environment variables. ```APIDOC ## RobloxStudioMCPServer ### Description This is the main server class and the entry point for the RobloxStudio-MCP system. It encapsulates the core functionality and manages server operations. ### Source `packages/core/src/server.ts` ### Contents - Constructor - Methods - Properties - Environment variables - Architecture overview ``` -------------------------------- ### Set Open Cloud API Key and Creator ID via Startup Flags Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/configuration.md Use startup flags to provide your Open Cloud API key and creator user ID for the current session. This is useful for temporary configurations or when environment variables are not accessible. ```bash npx robloxstudio-mcp@latest \ --open-cloud-key "my-api-key" \ --creator-id "123456" ``` -------------------------------- ### Build Library Path Configuration Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/README.md Specify the path to the build library using an environment variable. ```bash # Build library export BUILD_LIBRARY_PATH="/path/to/builds" ``` -------------------------------- ### Error Response - 404 Not Found Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/endpoints.md Example of a 404 Not Found error response. Indicates an unknown endpoint or method name. ```json { "error": { "code": -32601, "message": "Method not found" } } ``` -------------------------------- ### OpenCloudClient Constructor Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/OpenCloudClient.md Initializes the OpenCloudClient. It can be configured with an API key, base URL, and request timeout. If not provided, it attempts to use the ROBLOX_OPEN_CLOUD_API_KEY environment variable for the API key and a default base URL. ```APIDOC ## OpenCloudClient Constructor ### Description Initializes the OpenCloudClient. It can be configured with an API key, base URL, and request timeout. If not provided, it attempts to use the ROBLOX_OPEN_CLOUD_API_KEY environment variable for the API key and a default base URL. ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Parameters (Configuration Object) - **config** (OpenCloudConfig) - Optional - Configuration object - **config.apiKey** (string) - Optional - Open Cloud API key. Defaults to `ROBLOX_OPEN_CLOUD_API_KEY` environment variable. - **config.baseUrl** (string) - Optional - API base URL. Defaults to `https://apis.roblox.com`. - **config.timeout** (number) - Optional - Request timeout in milliseconds. Defaults to 30000. ### Request Example ```typescript // From environment const client = new OpenCloudClient(); // With explicit config const client = new OpenCloudClient({ apiKey: 'my-api-key', timeout: 60000 }); ``` ### Response None ``` -------------------------------- ### getConnectedInstances() Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Lists all connected Studio plugin instances. ```APIDOC ## getConnectedInstances() ### Description Get list of connected Studio plugin instances. ### Method Not applicable (SDK method) ### Parameters None ### Request Example ```typescript const instances = await tools.getConnectedInstances() ``` ### Response #### Success Response - **McpResponse** - JSON with instances array and count #### Response Example (McpResponse object structure not detailed in source) ``` -------------------------------- ### Get Roblox Asset Thumbnail Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Fetches the thumbnail image for a given asset ID. Requires the ROBLOX_OPEN_CLOUD_API_KEY environment variable. ```typescript async getAssetThumbnail(assetId: number, size?: string): Promise ``` -------------------------------- ### createBuild Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Creates a build from a specified part array and palette definition, saving it to the local library. You can also define bounding box dimensions. ```APIDOC ## createBuild() ### Description Create a build from part array and palette definition. You can also define bounding box dimensions. ### Method `async createBuild(id: string, style: string, palette: Record, parts: unknown, bounds?: [number, number, number]): Promise` ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Parameters Table | Parameter | Type | Required | Description | |---|---|---|---| | id | string | Yes | Build ID (library path segment) | | style | string | Yes | Build style category | | palette | Record | Yes | Map of palette keys to [BrickColor, Material] tuples | | parts | unknown | Yes | Array of part specifications | | bounds | [number, number, number] | No | Bounding box [x, y, z]; auto-computed if omitted | **Part Format:** Array tuples `[px, py, pz, sx, sy, sz, rx, ry, rz, paletteKey, shape?, transparency?]` **Throws:** Error if parts array is empty or palette has no keys **Example:** ```typescript const build = await tools.createBuild( 'scifi/wall_section', 'scifi', { metal: ['Institutional gray', 'Metal'], neon: ['Cyan', 'Neon'] }, [ [0, 0, 0, 4, 4, 1, 0, 0, 0, 'metal', 'Block'], [0, 4, 0, 4, 1, 1, 0, 0, 0, 'neon', 'Block'] ] ); ``` ``` -------------------------------- ### getPlaytestOutput Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Retrieves output from an active playtest session. You can specify a target ('edit' or 'play') to get output from a specific source. ```APIDOC ## getPlaytestOutput() ### Description Get output from playtest session. You can specify a target ('edit' or 'play') to get output from a specific source. ### Method `async getPlaytestOutput(target?: string): Promise` ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Parameters Table | Parameter | Type | Required | Default | Description | |---|---|---|---|---| | target | string | No | 'edit' | Output source: 'edit' or 'play' | ``` -------------------------------- ### Get All Instances with a Specific Tag using getTagged Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Use getTagged to find all Roblox instances that have a particular tag applied. ```typescript async getTagged(tagName: string): Promise ``` -------------------------------- ### editScriptLines Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Finds and replaces a specified text string within a script's source code, with an optional starting line for the search. ```APIDOC ## editScriptLines ### Description Find and replace text in script source. ### Method `editScriptLines(instancePath: string, oldString: string, newString: string, startLine?: number): Promise` ### Parameters #### Path Parameters - **instancePath** (string) - Yes - Script instance path - **oldString** (string) - Yes - Text to find - **newString** (string) - Yes - Replacement text - **startLine** (number) - No - Optional starting line for search ### Throws Error if instancePath, oldString, or newString is empty ``` -------------------------------- ### StudioHttpClient.request with specific target Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/StudioHttpClient.md Demonstrates sending a request to a specific target instance, such as the 'edit' or 'play' mode plugin. ```APIDOC ## POST /api/request (with target) ### Description Sends a request to a specific target instance, such as the 'edit' or 'play' mode plugin. ### Method POST ### Endpoint /api/request ### Parameters #### Query Parameters - **target** (string) - Required - Specifies the target plugin instance. Example: 'edit', 'play'. #### Request Body - **endpoint** (string) - Required - The API endpoint to call within the plugin. - **data** (any) - Optional - The payload to send with the request. ### Request Example ```json { "endpoint": "/api/get-file-tree", "data": {} } ``` ### Response #### Success Response (200) - **any** - The response from the plugin. #### Response Example ```json { "fileTree": [...] } ``` ``` -------------------------------- ### Get Studio Output Log Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Retrieves messages from the Studio output log, with options to limit entries and filter by message type. ```typescript async getOutputLog(maxEntries?: number, messageType?: string): Promise ``` -------------------------------- ### Get Roblox Asset Details Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Retrieves detailed information for a specific asset using its ID. Requires ROBLOX_OPEN_CLOUD_API_KEY or ROBLOSECURITY cookie. ```typescript async getAssetDetails(assetId: number): Promise ``` -------------------------------- ### Get Descendants of an Instance Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Fetches all descendants of a given instance, with options to limit the depth and filter by class. An instance path is required. ```typescript async getDescendants(instancePath: string, maxDepth?: number, classFilter?: string): Promise ``` -------------------------------- ### Delete Lines from Script Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Deletes a range of lines from a script's source code, specified by a start and end line number (inclusive). ```typescript await tools.deleteScriptLines('game.ServerScriptService.Main', 10, 20); ``` -------------------------------- ### Make a Request using StudioHttpClient Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/BridgeService.md Demonstrates how to initiate a request to the bridge service from a Roblox Studio tool. This client internally uses the bridge.sendRequest method. ```typescript const client = new StudioHttpClient(bridge); // When tool is called: const response = await client.request('/api/file-tree', data); // Internally calls: bridge.sendRequest(endpoint, data, 'edit') ``` -------------------------------- ### getFileTree Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Retrieves the instance hierarchy tree starting from a specified path within Roblox Studio. This is useful for navigating and understanding the structure of a place. ```APIDOC ## getFileTree() ### Description Returns the instance hierarchy tree starting from the specified path. ### Method GET (assumed) ### Endpoint /getFileTree ### Parameters #### Query Parameters - **path** (string) - Optional - Starting path for tree traversal. Defaults to the game root. ### Response #### Success Response (200) - **McpResponse** - MCP text content with JSON tree structure ### Request Example ```typescript const response = await tools.getFileTree('game.Workspace'); // Returns tree of all instances under Workspace ``` ``` -------------------------------- ### Create Build from Parts and Palette Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Constructs a build using a provided array of parts and a palette definition. Requires a build ID, style, palette, and parts array. Optional bounds can be specified. ```typescript async createBuild(id: string, style: string, palette: Record, parts: unknown, bounds?: [number, number, number]): Promise ``` -------------------------------- ### Get Instance Children Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Fetches the immediate children of a specified Roblox instance. This is useful for navigating the hierarchy and understanding the direct relationships between instances. ```typescript async getInstanceChildren(instancePath: string): Promise ``` -------------------------------- ### Get Roblox Services Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Fetches a list of available Roblox services and their immediate children. You can request details for a specific service by providing its name. ```typescript async getServices(serviceName?: string): Promise ``` -------------------------------- ### listLibrary Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Lists all available builds in the library. The list can be filtered by a specific style category. ```APIDOC ## listLibrary() ### Description List all builds in library, optionally filtered by style. ### Method async ### Parameters #### Path Parameters - **style** (string) - No - Filter to specific style category ### Returns Array of builds with metadata (id, style, bounds, partCount) ``` -------------------------------- ### Error Response - 408 Request Timeout Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/endpoints.md Example of a 408 Request Timeout error response. Indicates the plugin did not respond within the allowed time. ```json { "error": { "code": -32000, "message": "Request timeout" } } ``` -------------------------------- ### getServices Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Fetches a list of available Roblox services and their immediate children, or details for a specific service if a name is provided. This helps in understanding the available systems within Studio. ```APIDOC ## getServices() ### Description Get available Roblox services and their children. ### Method GET (assumed) ### Endpoint /getServices ### Parameters #### Query Parameters - **serviceName** (string) - Optional - Specific service name (e.g., 'Workspace', 'ReplicatedStorage'). ### Response #### Success Response (200) - **McpResponse** - Service list or specific service details. ``` -------------------------------- ### Error Response - 400 Bad Request Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/endpoints.md Example of a 400 Bad Request error response. Indicates an invalid request format or missing parameters. ```json { "error": { "code": -32600, "message": "Invalid Request" } } ``` -------------------------------- ### Configure OpenCloudClient with API Key and Timeout Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/configuration.md Create an instance of OpenCloudClient, optionally providing an API key and custom request timeout. The API key can be sourced from environment variables. ```typescript import { OpenCloudClient } from '@robloxstudio-mcp/core'; const client = new OpenCloudClient({ apiKey: process.env.ROBLOX_OPEN_CLOUD_API_KEY, timeout: 60000 }); ``` -------------------------------- ### simulateKeyboardInput() Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Simulates keyboard input events (press, release, hold) for specified keys. ```APIDOC ## simulateKeyboardInput() ### Description Simulates keyboard input events (press, release, hold) for specified keys. ### Method POST (Assumed, as it performs an action) ### Endpoint /simulateKeyboardInput ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body - **keyCode** (string) - Required - Key code (e.g., 'W', 'Return', 'Escape') - **action** (string) - Optional - Default: 'Press'. Action: Press, Release, Hold - **duration** (number) - Optional - Hold duration (ms) - **target** (string) - Optional - Default: 'edit'. Target: edit or play ### Request Example ```json { "keyCode": "W", "action": "Press", "duration": 100, "target": "play" } ``` ### Response #### Success Response (200) - **content** (array) - MCP-formatted response content - **type** (string) - 'text' or 'image' - **text** (string) - Confirmation message #### Response Example ```json { "content": [ { "type": "text", "text": "Keyboard input simulated successfully." } ] } ``` ``` -------------------------------- ### Set Environment Variables for Authentication Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/README.md Configure authentication for audio uploads by setting the ROBLOX_OPEN_CLOUD_API_KEY and ROBLOX_CREATOR_USER_ID environment variables. ```bash export ROBLOX_OPEN_CLOUD_API_KEY="..." export ROBLOX_CREATOR_USER_ID="..." ``` -------------------------------- ### Enable Debug Logging Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/configuration.md Enable Node.js debug output to get detailed logs for debugging purposes. This can be useful for troubleshooting issues with the MCP server. ```bash DEBUG=* npx robloxstudio-mcp@latest ``` -------------------------------- ### Server Configuration Interface Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioMCPServer.md Defines the structure for configuring the RobloxStudioMCPServer. It includes the server name, version, and an array of tool definitions. ```typescript interface ServerConfig { name: string; version: string; tools: ToolDefinition[]; } ``` -------------------------------- ### Get Build Metadata Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Loads build metadata and structure from the library using its ID. Returns build details but not the full parts array to conserve tokens. ```typescript async getBuild(id: string): Promise ``` -------------------------------- ### Creator Store API Configuration Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/README.md Set environment variables for the Creator Store API, including API key and creator identity. ```bash # Creator Store API export ROBLOX_OPEN_CLOUD_API_KEY="..." # Required for asset upload export ROBLOX_CREATOR_USER_ID="123456" # Asset creator identity export ROBLOX_CREATOR_GROUP_ID="789" # Or group creator ``` -------------------------------- ### Get Property Values from Multiple Instances Source: https://github.com/boshyxd/robloxstudio-mcp/blob/main/_autodocs/api-reference/RobloxStudioTools.md Use this method to retrieve the values of a specific property from multiple instances. The paths array and propertyName must be provided. ```typescript await tools.massGetProperty(paths, propertyName); ```