rbxstudio-mcp 1.9.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.
Files changed (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +319 -0
  3. package/dist/__tests__/bridge-service.test.d.ts +2 -0
  4. package/dist/__tests__/bridge-service.test.d.ts.map +1 -0
  5. package/dist/__tests__/bridge-service.test.js +109 -0
  6. package/dist/__tests__/bridge-service.test.js.map +1 -0
  7. package/dist/__tests__/http-server.test.d.ts +2 -0
  8. package/dist/__tests__/http-server.test.d.ts.map +1 -0
  9. package/dist/__tests__/http-server.test.js +193 -0
  10. package/dist/__tests__/http-server.test.js.map +1 -0
  11. package/dist/__tests__/integration.test.d.ts +2 -0
  12. package/dist/__tests__/integration.test.d.ts.map +1 -0
  13. package/dist/__tests__/integration.test.js +182 -0
  14. package/dist/__tests__/integration.test.js.map +1 -0
  15. package/dist/__tests__/smoke.test.d.ts +2 -0
  16. package/dist/__tests__/smoke.test.d.ts.map +1 -0
  17. package/dist/__tests__/smoke.test.js +63 -0
  18. package/dist/__tests__/smoke.test.js.map +1 -0
  19. package/dist/bridge-service.d.ts +17 -0
  20. package/dist/bridge-service.d.ts.map +1 -0
  21. package/dist/bridge-service.js +77 -0
  22. package/dist/bridge-service.js.map +1 -0
  23. package/dist/http-server.d.ts +4 -0
  24. package/dist/http-server.d.ts.map +1 -0
  25. package/dist/http-server.js +290 -0
  26. package/dist/http-server.js.map +1 -0
  27. package/dist/index.d.ts +18 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +1102 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/tools/index.d.ts +273 -0
  32. package/dist/tools/index.d.ts.map +1 -0
  33. package/dist/tools/index.js +628 -0
  34. package/dist/tools/index.js.map +1 -0
  35. package/dist/tools/studio-client.d.ts +7 -0
  36. package/dist/tools/studio-client.d.ts.map +1 -0
  37. package/dist/tools/studio-client.js +19 -0
  38. package/dist/tools/studio-client.js.map +1 -0
  39. package/package.json +69 -0
  40. package/studio-plugin/INSTALLATION.md +150 -0
  41. package/studio-plugin/MCPPlugin.rbxmx +3253 -0
  42. package/studio-plugin/plugin.json +10 -0
  43. package/studio-plugin/plugin.luau +3584 -0
@@ -0,0 +1,290 @@
1
+ import express from 'express';
2
+ import cors from 'cors';
3
+ export function createHttpServer(tools, bridge) {
4
+ const app = express();
5
+ let pluginConnected = false;
6
+ let mcpServerActive = false;
7
+ let lastMCPActivity = 0;
8
+ let mcpServerStartTime = 0;
9
+ let lastPluginActivity = 0;
10
+ // Track MCP server lifecycle
11
+ const setMCPServerActive = (active) => {
12
+ mcpServerActive = active;
13
+ if (active) {
14
+ mcpServerStartTime = Date.now();
15
+ lastMCPActivity = Date.now();
16
+ }
17
+ else {
18
+ mcpServerStartTime = 0;
19
+ lastMCPActivity = 0;
20
+ }
21
+ };
22
+ const trackMCPActivity = () => {
23
+ if (mcpServerActive) {
24
+ lastMCPActivity = Date.now();
25
+ }
26
+ };
27
+ const isMCPServerActive = () => {
28
+ return mcpServerActive && (Date.now() - lastMCPActivity < 15000); // 15 second timeout
29
+ };
30
+ const isPluginConnected = () => {
31
+ // Consider plugin disconnected if no activity for 10 seconds
32
+ return pluginConnected && (Date.now() - lastPluginActivity < 10000);
33
+ };
34
+ app.use(cors());
35
+ app.use(express.json({ limit: '50mb' }));
36
+ app.use(express.urlencoded({ limit: '50mb', extended: true }));
37
+ // Health check endpoint
38
+ app.get('/health', (req, res) => {
39
+ res.json({
40
+ status: 'ok',
41
+ service: 'robloxstudio-mcp',
42
+ pluginConnected,
43
+ mcpServerActive: isMCPServerActive(),
44
+ uptime: mcpServerActive ? Date.now() - mcpServerStartTime : 0
45
+ });
46
+ });
47
+ // Plugin readiness endpoint
48
+ app.post('/ready', (req, res) => {
49
+ pluginConnected = true;
50
+ lastPluginActivity = Date.now();
51
+ res.json({ success: true });
52
+ });
53
+ // Plugin disconnect endpoint
54
+ app.post('/disconnect', (req, res) => {
55
+ pluginConnected = false;
56
+ // Clear any pending requests when plugin disconnects
57
+ bridge.clearAllPendingRequests();
58
+ res.json({ success: true });
59
+ });
60
+ // Enhanced status endpoint
61
+ app.get('/status', (req, res) => {
62
+ res.json({
63
+ pluginConnected,
64
+ mcpServerActive: isMCPServerActive(),
65
+ lastMCPActivity,
66
+ uptime: mcpServerActive ? Date.now() - mcpServerStartTime : 0
67
+ });
68
+ });
69
+ // Enhanced polling endpoint for Studio plugin
70
+ app.get('/poll', (req, res) => {
71
+ // Always track that plugin is polling (shows it's trying to connect)
72
+ if (!pluginConnected) {
73
+ pluginConnected = true;
74
+ }
75
+ lastPluginActivity = Date.now();
76
+ if (!isMCPServerActive()) {
77
+ res.status(503).json({
78
+ error: 'MCP server not connected',
79
+ pluginConnected: true,
80
+ mcpConnected: false,
81
+ request: null
82
+ });
83
+ return;
84
+ }
85
+ trackMCPActivity();
86
+ const pendingRequest = bridge.getPendingRequest();
87
+ if (pendingRequest) {
88
+ res.json({
89
+ request: pendingRequest.request,
90
+ requestId: pendingRequest.requestId,
91
+ mcpConnected: true,
92
+ pluginConnected: true
93
+ });
94
+ }
95
+ else {
96
+ res.json({
97
+ request: null,
98
+ mcpConnected: true,
99
+ pluginConnected: true
100
+ });
101
+ }
102
+ });
103
+ // Response endpoint for Studio plugin
104
+ app.post('/response', (req, res) => {
105
+ const { requestId, response, error } = req.body;
106
+ if (error) {
107
+ bridge.rejectRequest(requestId, error);
108
+ }
109
+ else {
110
+ bridge.resolveRequest(requestId, response);
111
+ }
112
+ res.json({ success: true });
113
+ });
114
+ // Middleware to track MCP activity for all MCP endpoints
115
+ app.use('/mcp/*', (req, res, next) => {
116
+ trackMCPActivity();
117
+ next();
118
+ });
119
+ // MCP tool proxy endpoints - these will be called by AI tools
120
+ app.post('/mcp/get_file_tree', async (req, res) => {
121
+ try {
122
+ const result = await tools.getFileTree(req.body.path);
123
+ res.json(result);
124
+ }
125
+ catch (error) {
126
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
127
+ }
128
+ });
129
+ app.post('/mcp/search_files', async (req, res) => {
130
+ try {
131
+ const result = await tools.searchFiles(req.body.query, req.body.searchType);
132
+ res.json(result);
133
+ }
134
+ catch (error) {
135
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
136
+ }
137
+ });
138
+ app.post('/mcp/get_place_info', async (req, res) => {
139
+ try {
140
+ const result = await tools.getPlaceInfo();
141
+ res.json(result);
142
+ }
143
+ catch (error) {
144
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
145
+ }
146
+ });
147
+ app.post('/mcp/get_services', async (req, res) => {
148
+ try {
149
+ const result = await tools.getServices(req.body.serviceName);
150
+ res.json(result);
151
+ }
152
+ catch (error) {
153
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
154
+ }
155
+ });
156
+ app.post('/mcp/search_objects', async (req, res) => {
157
+ try {
158
+ const result = await tools.searchObjects(req.body.query, req.body.searchType, req.body.propertyName);
159
+ res.json(result);
160
+ }
161
+ catch (error) {
162
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
163
+ }
164
+ });
165
+ app.post('/mcp/get_instance_properties', async (req, res) => {
166
+ try {
167
+ const result = await tools.getInstanceProperties(req.body.instancePath);
168
+ res.json(result);
169
+ }
170
+ catch (error) {
171
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
172
+ }
173
+ });
174
+ app.post('/mcp/get_instance_children', async (req, res) => {
175
+ try {
176
+ const result = await tools.getInstanceChildren(req.body.instancePath);
177
+ res.json(result);
178
+ }
179
+ catch (error) {
180
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
181
+ }
182
+ });
183
+ app.post('/mcp/search_by_property', async (req, res) => {
184
+ try {
185
+ const result = await tools.searchByProperty(req.body.propertyName, req.body.propertyValue);
186
+ res.json(result);
187
+ }
188
+ catch (error) {
189
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
190
+ }
191
+ });
192
+ app.post('/mcp/get_class_info', async (req, res) => {
193
+ try {
194
+ const result = await tools.getClassInfo(req.body.className);
195
+ res.json(result);
196
+ }
197
+ catch (error) {
198
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
199
+ }
200
+ });
201
+ app.post('/mcp/mass_set_property', async (req, res) => {
202
+ try {
203
+ const result = await tools.massSetProperty(req.body.paths, req.body.propertyName, req.body.propertyValue);
204
+ res.json(result);
205
+ }
206
+ catch (error) {
207
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
208
+ }
209
+ });
210
+ app.post('/mcp/mass_get_property', async (req, res) => {
211
+ try {
212
+ const result = await tools.massGetProperty(req.body.paths, req.body.propertyName);
213
+ res.json(result);
214
+ }
215
+ catch (error) {
216
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
217
+ }
218
+ });
219
+ app.post('/mcp/create_object_with_properties', async (req, res) => {
220
+ try {
221
+ const result = await tools.createObjectWithProperties(req.body.className, req.body.parent, req.body.name, req.body.properties);
222
+ res.json(result);
223
+ }
224
+ catch (error) {
225
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
226
+ }
227
+ });
228
+ app.post('/mcp/mass_create_objects', async (req, res) => {
229
+ try {
230
+ const result = await tools.massCreateObjects(req.body.objects);
231
+ res.json(result);
232
+ }
233
+ catch (error) {
234
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
235
+ }
236
+ });
237
+ app.post('/mcp/mass_create_objects_with_properties', async (req, res) => {
238
+ try {
239
+ const result = await tools.massCreateObjectsWithProperties(req.body.objects);
240
+ res.json(result);
241
+ }
242
+ catch (error) {
243
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
244
+ }
245
+ });
246
+ app.post('/mcp/get_project_structure', async (req, res) => {
247
+ try {
248
+ const result = await tools.getProjectStructure(req.body.path, req.body.maxDepth, req.body.scriptsOnly);
249
+ res.json(result);
250
+ }
251
+ catch (error) {
252
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
253
+ }
254
+ });
255
+ // Script management endpoints (parity with tools)
256
+ app.post('/mcp/get_script_source', async (req, res) => {
257
+ try {
258
+ const result = await tools.getScriptSource(req.body.instancePath);
259
+ res.json(result);
260
+ }
261
+ catch (error) {
262
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
263
+ }
264
+ });
265
+ app.post('/mcp/set_script_source', async (req, res) => {
266
+ try {
267
+ const result = await tools.setScriptSource(req.body.instancePath, req.body.source);
268
+ res.json(result);
269
+ }
270
+ catch (error) {
271
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
272
+ }
273
+ });
274
+ app.post('/mcp/get_selection', async (req, res) => {
275
+ try {
276
+ const result = await tools.getSelection();
277
+ res.json(result);
278
+ }
279
+ catch (error) {
280
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
281
+ }
282
+ });
283
+ // Add methods to control and check server status
284
+ app.isPluginConnected = isPluginConnected;
285
+ app.setMCPServerActive = setMCPServerActive;
286
+ app.isMCPServerActive = isMCPServerActive;
287
+ app.trackMCPActivity = trackMCPActivity;
288
+ return app;
289
+ }
290
+ //# sourceMappingURL=http-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Roblox Studio MCP Server
4
+ *
5
+ * This server provides Model Context Protocol (MCP) tools for interacting with Roblox Studio.
6
+ * It allows AI assistants to access Studio data, scripts, and objects through a bridge plugin.
7
+ *
8
+ * Usage:
9
+ * npx robloxstudio-mcp
10
+ *
11
+ * Or add to your MCP configuration:
12
+ * "robloxstudio": {
13
+ * "command": "npx",
14
+ * "args": ["-y", "robloxstudio-mcp"]
15
+ * }
16
+ */
17
+ export {};
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;GAcG"}