robloxstudio-mcp 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,8 +1,12 @@
1
1
  # Roblox Studio MCP Server
2
2
 
3
- A powerful MCP (Model Context Protocol) server that gives AI assistants comprehensive access to Roblox Studio projects. Explore game architecture, analyze scripts, debug issues, and understand complex Roblox projects through 18 specialized AI tools including mass operations for bulk editing.
3
+ MCP server for AI-powered Roblox Studio integration. 18 specialized tools for exploring projects, analyzing scripts, and performing bulk operations.
4
4
 
5
- ## ⚡ Quick Start (One Command)
5
+ <a href="https://glama.ai/mcp/servers/@boshyxd/robloxstudio-mcp">
6
+ <img width="380" height="200" src="https://glama.ai/mcp/servers/@boshyxd/robloxstudio-mcp/badge" alt="Roblox Studio Server MCP server" />
7
+ </a>
8
+
9
+ ## Quick Start
6
10
 
7
11
  **For Claude Code users:**
8
12
  ```bash
@@ -22,13 +26,13 @@ claude mcp add robloxstudio -- npx -y robloxstudio-mcp
22
26
  }
23
27
  ```
24
28
 
25
- ## 🔌 Studio Plugin Setup (Required)
29
+ ## Studio Plugin Setup (Required)
26
30
 
27
31
  The MCP server requires a companion Roblox Studio plugin:
28
32
 
29
- 1. **Roblox Creator Store** (Easiest ⭐):
30
- - Install from: https://create.roblox.com/store/asset/132985143757536
31
- - Click "Install" Opens in Studio automatically
33
+ 1. **Roblox Creator Store**:
34
+ - Install from: https://create.roblox.com/store/asset/75577477776988
35
+ - Click "Install" - Opens in Studio automatically
32
36
 
33
37
  2. **Manual download**:
34
38
  - Download [MCPPlugin.rbxmx](https://github.com/boshyxd/robloxstudio-mcp/releases/latest/download/MCPPlugin.rbxmx)
@@ -38,38 +42,38 @@ The MCP server requires a companion Roblox Studio plugin:
38
42
  - See [studio-plugin/INSTALLATION.md](studio-plugin/INSTALLATION.md) for other methods
39
43
 
40
44
  **After installation:**
41
- - Enable "Allow HTTP Requests" in Game Settings Security
42
- - 🔘 Click the "MCP Server" button in the Plugins toolbar
43
- - 🟢 Status should show "Connected" when working
45
+ - Enable "Allow HTTP Requests" in Game Settings > Security
46
+ - Click the "MCP Server" button in the Plugins toolbar
47
+ - Status should show "Connected" when working
44
48
 
45
- ## 🏗️ Architecture Overview
49
+ ## Architecture Overview
46
50
 
47
- This is a **dual-component system** bridging Roblox Studio with AI assistants:
51
+ Dual-component system bridging Roblox Studio with AI assistants:
48
52
 
49
53
  ```mermaid
50
54
  %%{init: {'theme':'dark', 'themeVariables': {'primaryColor':'#2d3748', 'primaryTextColor':'#ffffff', 'primaryBorderColor':'#4a5568', 'lineColor':'#718096', 'sectionBkgColor':'#1a202c', 'altSectionBkgColor':'#2d3748', 'gridColor':'#4a5568', 'secondaryColor':'#2b6cb0', 'tertiaryColor':'#319795'}}}%%
51
55
  graph TB
52
- subgraph AI_ENV ["🤖 AI Environment"]
53
- AI["🤖 AI Assistant<br/>Claude Code/Desktop"]
54
- MCP["📡 MCP Server<br/>Node.js + TypeScript"]
56
+ subgraph AI_ENV ["AI Environment"]
57
+ AI["AI Assistant<br/>Claude Code/Desktop"]
58
+ MCP["MCP Server<br/>Node.js + TypeScript"]
55
59
  end
56
60
 
57
- subgraph COMM_LAYER ["🔗 Communication Layer"]
58
- HTTP["🌐 HTTP Bridge<br/>localhost:3002"]
59
- QUEUE["📋 Request Queue<br/>UUID tracking"]
61
+ subgraph COMM_LAYER ["Communication Layer"]
62
+ HTTP["HTTP Bridge<br/>localhost:3002"]
63
+ QUEUE["Request Queue<br/>UUID tracking"]
60
64
  end
61
65
 
62
- subgraph STUDIO_ENV ["🎮 Roblox Studio Environment"]
63
- PLUGIN["🎮 Studio Plugin<br/>Luau Script"]
64
- STUDIO["🎯 Roblox Studio<br/>APIs & Data"]
66
+ subgraph STUDIO_ENV ["Roblox Studio Environment"]
67
+ PLUGIN["Studio Plugin<br/>Luau Script"]
68
+ STUDIO["Roblox Studio<br/>APIs & Data"]
65
69
  end
66
70
 
67
- subgraph TOOLS ["🛠️ 18 AI Tools"]
68
- FILE["📁 File System<br/>Trees, Search"]
69
- CONTEXT["🎯 Studio Context<br/>Services, Objects"]
70
- PROPS["🔍 Properties<br/>Get, Set, Mass Ops"]
71
- CREATE["🏗️ Object Creation<br/>Single, Mass, Properties"]
72
- PROJECT["🏢 Project Analysis<br/>Smart Structure"]
71
+ subgraph TOOLS ["18 AI Tools"]
72
+ FILE["File System<br/>Trees, Search"]
73
+ CONTEXT["Studio Context<br/>Services, Objects"]
74
+ PROPS["Properties<br/>Get, Set, Mass Ops"]
75
+ CREATE["Object Creation<br/>Single, Mass, Properties"]
76
+ PROJECT["Project Analysis<br/>Smart Structure"]
73
77
  end
74
78
 
75
79
  AI -->|stdio| MCP
@@ -104,81 +108,74 @@ graph TB
104
108
  class FILE,CONTEXT,PROPS,CREATE,PROJECT toolStyle
105
109
  ```
106
110
 
107
- ### **Key Components:**
108
- - **🧠 MCP Server** (Node.js/TypeScript) - Exposes 18 tools via stdio for AI integration
109
- - **🔗 HTTP Bridge** - Request/response queue on localhost:3002 with 30s timeouts
110
- - **🎮 Studio Plugin** (Luau) - Polls every 500ms, executes Studio API calls, handles errors
111
- - **📊 Smart Caching** - Efficient data transfer with intelligent response limiting
111
+ ### Key Components:
112
+ - MCP Server (Node.js/TypeScript) - Exposes 18 tools via stdio
113
+ - HTTP Bridge - Request/response queue on localhost:3002
114
+ - Studio Plugin (Luau) - Polls server and executes API calls
115
+ - Smart Caching - Efficient data transfer
112
116
 
113
- ## 🛠️ 18 Powerful AI Tools
117
+ ## 18 AI Tools
114
118
 
115
- ### 📁 **File System Tools**
116
- - **`get_file_tree`** - Complete project hierarchy with scripts, models, folders
117
- - **`search_files`** - Find files by name, type, or content patterns
119
+ ### File System Tools
120
+ - `get_file_tree` - Complete project hierarchy with scripts, models, folders
121
+ - `search_files` - Find files by name, type, or content patterns
118
122
 
119
- ### 🎯 **Studio Context Tools**
120
- - **`get_place_info`** - Place ID, name, game settings, workspace info
121
- - **`get_services`** - All Roblox services and their child counts
122
- - **`search_objects`** - Find instances by name, class, or properties
123
+ ### Studio Context Tools
124
+ - `get_place_info` - Place ID, name, game settings, workspace info
125
+ - `get_services` - All Roblox services and their child counts
126
+ - `search_objects` - Find instances by name, class, or properties
123
127
 
124
- ### 🔍 **Instance & Property Tools**
125
- - **`get_instance_properties`** - Complete property dump for any object
126
- - **`get_instance_children`** - Child objects with metadata (scripts, GUI types, etc.)
127
- - **`search_by_property`** - Find objects with specific property values
128
- - **`get_class_info`** - Available properties/methods for Roblox classes
128
+ ### Instance & Property Tools
129
+ - `get_instance_properties` - Complete property dump for any object
130
+ - `get_instance_children` - Child objects with metadata
131
+ - `search_by_property` - Find objects with specific property values
132
+ - `get_class_info` - Available properties/methods for Roblox classes
129
133
 
130
- ### ⚡ **Property Modification Tools**
131
- - **`set_property`** - Set a property on any Roblox instance
132
- - **`mass_set_property`** - **🆕 NEW!** Set the same property on multiple instances at once
133
- - **`mass_get_property`** - **🆕 NEW!** Get the same property from multiple instances at once
134
+ ### Property Modification Tools
135
+ - `set_property` - Set a property on any Roblox instance
136
+ - `mass_set_property` - Set the same property on multiple instances
137
+ - `mass_get_property` - Get the same property from multiple instances
134
138
 
135
- ### 🏗️ **Object Creation Tools**
136
- - **`create_object`** - Create a new Roblox object instance (basic)
137
- - **`create_object_with_properties`** - **🆕 NEW!** Create objects with initial properties
138
- - **`mass_create_objects`** - **🆕 NEW!** Create multiple objects at once (basic)
139
- - **`mass_create_objects_with_properties`** - **🆕 NEW!** Create multiple objects with properties
140
- - **`delete_object`** - Delete a Roblox object instance
139
+ ### Object Creation Tools
140
+ - `create_object` - Create a new Roblox object instance
141
+ - `create_object_with_properties` - Create objects with initial properties
142
+ - `mass_create_objects` - Create multiple objects at once
143
+ - `mass_create_objects_with_properties` - Create multiple objects with properties
144
+ - `delete_object` - Delete a Roblox object instance
141
145
 
142
- ### 🏢 **Project Analysis Tools**
143
- - **`get_project_structure`** - **🔥 ENHANCED!** Smart hierarchy with improved depth control (recommended: depth 5-10)
146
+ ### Project Analysis Tools
147
+ - `get_project_structure` - Smart hierarchy with depth control (recommended: 5-10)
144
148
 
145
- > **⚠️ Note:** Previous tools like `get_file_content`, `get_file_properties`, `get_selection`, `get_dependencies`, and `validate_references` have been removed. Use Rojo/Argon workflows or file system reading for better performance.
149
+ > Note: Previous tools removed: `get_file_content`, `get_file_properties`, `get_selection`, `get_dependencies`, `validate_references`. Use Rojo/Argon workflows instead.
146
150
 
147
- ## 🧠 AI-Optimized Features
151
+ ## AI-Optimized Features
148
152
 
149
- ### **🚀 Mass Operations (NEW in v1.3.0)**
150
- - **Bulk Property Editing**: Set the same property on hundreds of instances instantly
151
- - **Mass Object Creation**: Create complex object hierarchies with one call
152
- - **Batch Property Reading**: Get properties from multiple objects efficiently
153
- - **Atomic Operations**: All mass operations are grouped into single undo/redo waypoints
153
+ ### Mass Operations (v1.3.0)
154
+ - Bulk property editing
155
+ - Mass object creation
156
+ - Batch property reading
157
+ - Atomic undo/redo operations
154
158
 
155
- **Example Use Cases:**
156
159
  ```typescript
157
- // Set all parts in workspace to red
160
+ // Example: Set multiple parts to red
158
161
  mass_set_property(["game.Workspace.Part1", "game.Workspace.Part2"], "BrickColor", "Really red")
159
-
160
- // Create 10 parts with properties
161
- mass_create_objects_with_properties([
162
- {className: "Part", parent: "game.Workspace", name: "RedPart", properties: {BrickColor: "Really red"}},
163
- {className: "Part", parent: "game.Workspace", name: "BluePart", properties: {BrickColor: "Really blue"}}
164
- ])
165
162
  ```
166
163
 
167
- ### **Smart Project Structure**
168
- - **Service Overview Mode**: Clean service list with child counts
169
- - **Path-based Exploration**: `get_project_structure("game.ServerStorage", maxDepth=5)`
170
- - **Script-only Filtering**: `scriptsOnly=true` for code analysis
171
- - **Intelligent Grouping**: Large folders auto-group by class type
172
- - **Enhanced Depth Control**: **Recommended maxDepth=5-10** for comprehensive exploration
164
+ ### Smart Project Structure
165
+ - Service overview with child counts
166
+ - Path-based exploration: `get_project_structure("game.ServerStorage", maxDepth=5)`
167
+ - Script-only filtering for code analysis
168
+ - Intelligent grouping for large folders
169
+ - Recommended maxDepth=5-10
173
170
 
174
- ### **Rich Metadata**
175
- - **Script Status**: Enabled/disabled, source detection, script types
176
- - **GUI Intelligence**: Text content, visibility, container vs interactive
177
- - **Performance Optimized**: Removed redundant tools for faster operation
171
+ ### Rich Metadata
172
+ - Script status tracking
173
+ - GUI intelligence
174
+ - Performance optimized
178
175
 
179
- ## 🚀 Development & Testing
176
+ ## Development & Testing
180
177
 
181
- ### **Commands**
178
+ ### Commands
182
179
  ```bash
183
180
  npm run dev # Development server with hot reload
184
181
  npm run build # Production build
@@ -187,63 +184,63 @@ npm run lint # ESLint code quality
187
184
  npm run typecheck # TypeScript validation
188
185
  ```
189
186
 
190
- ### **Plugin Development**
191
- - **Live reload**: Plugin updates automatically detect server changes
192
- - **Error handling**: Robust timeout and retry mechanisms
193
- - **Debug mode**: Detailed logging in Studio Output window
194
- - **Connection status**: Visual indicators in plugin UI
187
+ ### Plugin Development
188
+ - Live reload
189
+ - Robust error handling
190
+ - Debug logging
191
+ - Visual status indicators
195
192
 
196
- ## 📊 Communication Protocol
193
+ ## Communication Protocol
197
194
 
198
195
  ```mermaid
199
196
  %%{init: {'theme':'dark', 'themeVariables': {'primaryColor':'#2d3748', 'primaryTextColor':'#ffffff', 'primaryBorderColor':'#4a5568', 'lineColor':'#10b981', 'sectionBkgColor':'#1a202c', 'altSectionBkgColor':'#2d3748', 'gridColor':'#4a5568', 'secondaryColor':'#3b82f6', 'tertiaryColor':'#8b5cf6', 'background':'#1a202c', 'mainBkg':'#2d3748', 'secondBkg':'#374151', 'tertiaryColor':'#6366f1'}}}%%
200
197
  sequenceDiagram
201
- participant AI as 🤖 AI Assistant
202
- participant MCP as 📡 MCP Server
203
- participant HTTP as 🌐 HTTP Bridge
204
- participant PLUGIN as 🎮 Studio Plugin
205
- participant STUDIO as 🎯 Roblox Studio
198
+ participant AI as AI Assistant
199
+ participant MCP as MCP Server
200
+ participant HTTP as HTTP Bridge
201
+ participant PLUGIN as Studio Plugin
202
+ participant STUDIO as Roblox Studio
206
203
 
207
- Note over AI,STUDIO: 🚀 Tool Request Flow
204
+ Note over AI,STUDIO: Tool Request Flow
208
205
 
209
206
  AI->>+MCP: Call tool (e.g., get_file_tree)
210
207
  MCP->>+HTTP: Queue request with UUID
211
208
  HTTP->>HTTP: Store in pending requests map
212
- HTTP-->>-MCP: Request queued
209
+ HTTP-->>-MCP: Request queued
213
210
 
214
- Note over PLUGIN: 🔄 Polling every 500ms
211
+ Note over PLUGIN: Polling every 500ms
215
212
  PLUGIN->>+HTTP: GET /poll
216
213
  HTTP->>-PLUGIN: Return pending request + UUID
217
214
 
218
215
  PLUGIN->>+STUDIO: Execute Studio APIs
219
- Note over STUDIO: 🎯 game.ServerStorage<br/>📋 Selection:Get()<br/>🔍 Instance properties
220
- STUDIO->>-PLUGIN: Return Studio data 📊
216
+ Note over STUDIO: game.ServerStorage<br/>Selection:Get()<br/>Instance properties
217
+ STUDIO->>-PLUGIN: Return Studio data
221
218
 
222
219
  PLUGIN->>+HTTP: POST /response with UUID + data
223
220
  HTTP->>-MCP: Resolve promise with data
224
- MCP->>-AI: Return tool result 🎉
221
+ MCP->>-AI: Return tool result
225
222
 
226
- Note over AI,STUDIO: ⚠️ Error Handling
223
+ Note over AI,STUDIO: Error Handling
227
224
 
228
225
  alt Request Timeout (30s)
229
- HTTP->>MCP: Reject promise with timeout
230
- MCP->>AI: Return error message
226
+ HTTP->>MCP: Reject promise with timeout
227
+ MCP->>AI: Return error message
231
228
  end
232
229
 
233
230
  alt Plugin Disconnected
234
- PLUGIN->>HTTP: Connection lost 🔌
235
- HTTP->>HTTP: Exponential backoff retry 🔄
236
- Note over PLUGIN: Status: "Waiting for server..."
231
+ PLUGIN->>HTTP: Connection lost
232
+ HTTP->>HTTP: Exponential backoff retry
233
+ Note over PLUGIN: Status: "Waiting for server..."
237
234
  end
238
235
  ```
239
236
 
240
237
  **Features:**
241
- - **🕐 30-second timeouts** with exponential backoff
242
- - **🔄 Automatic retries** for network issues
243
- - **📏 Response limiting** prevents context overflow
244
- - **🎯 Request deduplication** for efficiency
238
+ - 30-second timeouts with exponential backoff
239
+ - Automatic retries
240
+ - Response limiting
241
+ - Request deduplication
245
242
 
246
- ## 🎯 Example Usage
243
+ ## Example Usage
247
244
 
248
245
  ```javascript
249
246
  // Get service overview
@@ -265,7 +262,7 @@ validate_references()
265
262
  get_instance_properties("game.StarterGui.MainMenu.SettingsFrame")
266
263
  ```
267
264
 
268
- ## 🔧 Configuration
265
+ ## Configuration
269
266
 
270
267
  **Environment Variables:**
271
268
  - `MCP_SERVER_PORT` - MCP server port (default: stdio)
@@ -274,32 +271,10 @@ get_instance_properties("game.StarterGui.MainMenu.SettingsFrame")
274
271
  - `REQUEST_TIMEOUT` - Request timeout (default: 30000ms)
275
272
 
276
273
  **Studio Settings:**
277
- - **Allow HTTP Requests** (Game Settings Security)
278
- - 🌐 **HttpService.HttpEnabled = true**
279
- - 🔌 **Plugin activated** via toolbar button
280
-
281
- ## 📋 Changelog
282
-
283
- ### **v1.3.0** - Mass Operations Update (Latest)
284
- - ➕ **NEW**: `mass_set_property` - Bulk property modification
285
- - ➕ **NEW**: `mass_get_property` - Batch property reading
286
- - ➕ **NEW**: `create_object_with_properties` - Object creation with initial properties
287
- - ➕ **NEW**: `mass_create_objects` - Bulk object creation
288
- - ➕ **NEW**: `mass_create_objects_with_properties` - Bulk creation with properties
289
- - 🔥 **ENHANCED**: `get_project_structure` with improved depth parameter documentation
290
- - 🗑️ **REMOVED**: `get_file_content`, `get_file_properties`, `get_selection`, `get_dependencies`, `validate_references` (use Rojo/Argon workflows instead)
291
- - ⚡ **PERFORMANCE**: Streamlined API with 18 focused tools vs 15 mixed-purpose tools
292
-
293
- ### **v1.2.0** - Property Modification
294
- - ➕ Added `set_property` tool for instance modification
295
- - ➕ Added `create_object` and `delete_object` tools
296
- - 🔧 Enhanced error handling and validation
297
-
298
- ### **v1.1.0** - Enhanced Discovery
299
- - 🔍 Improved project structure analysis
300
- - 📊 Better metadata extraction
301
- - 🎯 Script and GUI intelligence
302
-
303
- ## 📄 License
304
-
305
- MIT License - Feel free to use in commercial and personal projects!
274
+ - **Allow HTTP Requests** (Game Settings > Security)
275
+ - **HttpService.HttpEnabled = true**
276
+ - **Plugin activated** via toolbar button
277
+
278
+ ## License
279
+
280
+ MIT License - Feel free to use in commercial and personal projects!
@@ -1 +1 @@
1
- {"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,aAAa,+CAgM/E"}
1
+ {"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,aAAa,+CAkQ/E"}
@@ -3,30 +3,83 @@ import cors from 'cors';
3
3
  export function createHttpServer(tools, bridge) {
4
4
  const app = express();
5
5
  let pluginConnected = false;
6
+ let mcpServerActive = false;
7
+ let lastMCPActivity = 0;
8
+ let mcpServerStartTime = 0;
9
+ // Track MCP server lifecycle
10
+ const setMCPServerActive = (active) => {
11
+ mcpServerActive = active;
12
+ if (active) {
13
+ mcpServerStartTime = Date.now();
14
+ lastMCPActivity = Date.now();
15
+ }
16
+ else {
17
+ mcpServerStartTime = 0;
18
+ lastMCPActivity = 0;
19
+ }
20
+ };
21
+ const trackMCPActivity = () => {
22
+ if (mcpServerActive) {
23
+ lastMCPActivity = Date.now();
24
+ }
25
+ };
26
+ const isMCPServerActive = () => {
27
+ return mcpServerActive && (Date.now() - lastMCPActivity < 15000); // 15 second timeout
28
+ };
6
29
  app.use(cors());
7
30
  app.use(express.json({ limit: '50mb' }));
8
31
  app.use(express.urlencoded({ limit: '50mb', extended: true }));
9
32
  // Health check endpoint
10
33
  app.get('/health', (req, res) => {
11
- res.json({ status: 'ok', service: 'robloxstudio-mcp' });
34
+ res.json({
35
+ status: 'ok',
36
+ service: 'robloxstudio-mcp',
37
+ pluginConnected,
38
+ mcpServerActive: isMCPServerActive(),
39
+ uptime: mcpServerActive ? Date.now() - mcpServerStartTime : 0
40
+ });
12
41
  });
13
42
  // Plugin readiness endpoint
14
43
  app.post('/ready', (req, res) => {
15
44
  pluginConnected = true;
16
45
  res.json({ success: true });
17
46
  });
18
- // Check if plugin is connected
47
+ // Enhanced status endpoint
19
48
  app.get('/status', (req, res) => {
20
- res.json({ pluginConnected });
21
- });
22
- // Polling endpoint for Studio plugin
49
+ res.json({
50
+ pluginConnected,
51
+ mcpServerActive: isMCPServerActive(),
52
+ lastMCPActivity,
53
+ uptime: mcpServerActive ? Date.now() - mcpServerStartTime : 0
54
+ });
55
+ });
56
+ // Enhanced polling endpoint for Studio plugin
23
57
  app.get('/poll', (req, res) => {
58
+ if (!isMCPServerActive()) {
59
+ res.status(503).json({
60
+ error: 'MCP server not connected',
61
+ pluginConnected: true,
62
+ mcpConnected: false,
63
+ request: null
64
+ });
65
+ return;
66
+ }
67
+ trackMCPActivity();
24
68
  const pendingRequest = bridge.getPendingRequest();
25
69
  if (pendingRequest) {
26
- res.json({ request: pendingRequest.request, requestId: pendingRequest.requestId });
70
+ res.json({
71
+ request: pendingRequest.request,
72
+ requestId: pendingRequest.requestId,
73
+ mcpConnected: true,
74
+ pluginConnected: true
75
+ });
27
76
  }
28
77
  else {
29
- res.json({ request: null });
78
+ res.json({
79
+ request: null,
80
+ mcpConnected: true,
81
+ pluginConnected: true
82
+ });
30
83
  }
31
84
  });
32
85
  // Response endpoint for Studio plugin
@@ -40,6 +93,11 @@ export function createHttpServer(tools, bridge) {
40
93
  }
41
94
  res.json({ success: true });
42
95
  });
96
+ // Middleware to track MCP activity for all MCP endpoints
97
+ app.use('/mcp/*', (req, res, next) => {
98
+ trackMCPActivity();
99
+ next();
100
+ });
43
101
  // MCP tool proxy endpoints - these will be called by AI tools
44
102
  app.post('/mcp/get_file_tree', async (req, res) => {
45
103
  try {
@@ -176,8 +234,11 @@ export function createHttpServer(tools, bridge) {
176
234
  res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
177
235
  }
178
236
  });
179
- // Add method to check if plugin is connected
237
+ // Add methods to control and check server status
180
238
  app.isPluginConnected = () => pluginConnected;
239
+ app.setMCPServerActive = setMCPServerActive;
240
+ app.isMCPServerActive = isMCPServerActive;
241
+ app.trackMCPActivity = trackMCPActivity;
181
242
  return app;
182
243
  }
183
244
  //# sourceMappingURL=http-server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -27,7 +27,7 @@ class RobloxStudioMCPServer {
27
27
  constructor() {
28
28
  this.server = new Server({
29
29
  name: 'robloxstudio-mcp',
30
- version: '1.4.0',
30
+ version: '1.5.0',
31
31
  }, {
32
32
  capabilities: {
33
33
  tools: {},
@@ -587,6 +587,39 @@ class RobloxStudioMCPServer {
587
587
  },
588
588
  required: ['paths', 'propertyName', 'operation', 'value']
589
589
  }
590
+ },
591
+ // Script Management Tools
592
+ {
593
+ name: 'get_script_source',
594
+ description: 'Get the source code of a script object (LocalScript, Script, or ModuleScript)',
595
+ inputSchema: {
596
+ type: 'object',
597
+ properties: {
598
+ instancePath: {
599
+ type: 'string',
600
+ description: 'Path to the script instance (e.g., "game.ServerScriptService.MainScript")'
601
+ }
602
+ },
603
+ required: ['instancePath']
604
+ }
605
+ },
606
+ {
607
+ name: 'set_script_source',
608
+ description: 'Safely set the source code of a script object without using loadstring (Studio only)',
609
+ inputSchema: {
610
+ type: 'object',
611
+ properties: {
612
+ instancePath: {
613
+ type: 'string',
614
+ description: 'Path to the script instance (e.g., "game.ServerScriptService.MainScript")'
615
+ },
616
+ source: {
617
+ type: 'string',
618
+ description: 'New source code for the script'
619
+ }
620
+ },
621
+ required: ['instancePath', 'source']
622
+ }
590
623
  }
591
624
  ]
592
625
  };
@@ -649,6 +682,11 @@ class RobloxStudioMCPServer {
649
682
  // Relative Property Tools
650
683
  case 'set_relative_property':
651
684
  return await this.tools.setRelativeProperty(args?.paths, args?.propertyName, args?.operation, args?.value, args?.component);
685
+ // Script Management Tools
686
+ case 'get_script_source':
687
+ return await this.tools.getScriptSource(args?.instancePath);
688
+ case 'set_script_source':
689
+ return await this.tools.setScriptSource(args?.instancePath, args?.source);
652
690
  default:
653
691
  throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
654
692
  }
@@ -672,13 +710,27 @@ class RobloxStudioMCPServer {
672
710
  const transport = new StdioServerTransport();
673
711
  await this.server.connect(transport);
674
712
  console.error('Roblox Studio MCP server running on stdio');
675
- // Monitor plugin connection in background
713
+ // Mark MCP server as active
714
+ httpServer.setMCPServerActive(true);
715
+ console.error('MCP server marked as active');
716
+ // Monitor plugin and MCP server connection status
676
717
  console.error('Waiting for Studio plugin to connect...');
677
718
  setInterval(() => {
678
- if (httpServer.isPluginConnected()) {
679
- console.error('Studio plugin connected!');
719
+ const pluginConnected = httpServer.isPluginConnected();
720
+ const mcpActive = httpServer.isMCPServerActive();
721
+ if (pluginConnected && mcpActive) {
722
+ // Both connected - no need to spam logs
723
+ }
724
+ else if (pluginConnected && !mcpActive) {
725
+ console.error('Studio plugin connected, but MCP server inactive');
726
+ }
727
+ else if (!pluginConnected && mcpActive) {
728
+ console.error('MCP server active, waiting for Studio plugin...');
729
+ }
730
+ else {
731
+ console.error('Waiting for connections...');
680
732
  }
681
- }, 1000);
733
+ }, 5000); // Reduced frequency to avoid spam
682
734
  // Periodic cleanup of old requests
683
735
  setInterval(() => {
684
736
  this.bridge.cleanupOldRequests();