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,628 @@
1
+ import { StudioHttpClient } from './studio-client.js';
2
+ export class RobloxStudioTools {
3
+ client;
4
+ constructor(bridge) {
5
+ this.client = new StudioHttpClient(bridge);
6
+ }
7
+ // File System Tools
8
+ async getFileTree(path = '') {
9
+ const response = await this.client.request('/api/file-tree', { path });
10
+ return {
11
+ content: [
12
+ {
13
+ type: 'text',
14
+ text: JSON.stringify(response, null, 2)
15
+ }
16
+ ]
17
+ };
18
+ }
19
+ async searchFiles(query, searchType = 'name') {
20
+ const response = await this.client.request('/api/search-files', { query, searchType });
21
+ return {
22
+ content: [
23
+ {
24
+ type: 'text',
25
+ text: JSON.stringify(response, null, 2)
26
+ }
27
+ ]
28
+ };
29
+ }
30
+ // Studio Context Tools
31
+ async getPlaceInfo() {
32
+ const response = await this.client.request('/api/place-info', {});
33
+ return {
34
+ content: [
35
+ {
36
+ type: 'text',
37
+ text: JSON.stringify(response, null, 2)
38
+ }
39
+ ]
40
+ };
41
+ }
42
+ async getServices(serviceName) {
43
+ const response = await this.client.request('/api/services', { serviceName });
44
+ return {
45
+ content: [
46
+ {
47
+ type: 'text',
48
+ text: JSON.stringify(response, null, 2)
49
+ }
50
+ ]
51
+ };
52
+ }
53
+ async searchObjects(query, searchType = 'name', propertyName) {
54
+ const response = await this.client.request('/api/search-objects', {
55
+ query,
56
+ searchType,
57
+ propertyName
58
+ });
59
+ return {
60
+ content: [
61
+ {
62
+ type: 'text',
63
+ text: JSON.stringify(response, null, 2)
64
+ }
65
+ ]
66
+ };
67
+ }
68
+ // Property & Instance Tools
69
+ async getInstanceProperties(instancePath) {
70
+ if (!instancePath) {
71
+ throw new Error('Instance path is required for get_instance_properties');
72
+ }
73
+ const response = await this.client.request('/api/instance-properties', { instancePath });
74
+ return {
75
+ content: [
76
+ {
77
+ type: 'text',
78
+ text: JSON.stringify(response, null, 2)
79
+ }
80
+ ]
81
+ };
82
+ }
83
+ async getInstanceChildren(instancePath) {
84
+ if (!instancePath) {
85
+ throw new Error('Instance path is required for get_instance_children');
86
+ }
87
+ const response = await this.client.request('/api/instance-children', { instancePath });
88
+ return {
89
+ content: [
90
+ {
91
+ type: 'text',
92
+ text: JSON.stringify(response, null, 2)
93
+ }
94
+ ]
95
+ };
96
+ }
97
+ async searchByProperty(propertyName, propertyValue) {
98
+ if (!propertyName || !propertyValue) {
99
+ throw new Error('Property name and value are required for search_by_property');
100
+ }
101
+ const response = await this.client.request('/api/search-by-property', {
102
+ propertyName,
103
+ propertyValue
104
+ });
105
+ return {
106
+ content: [
107
+ {
108
+ type: 'text',
109
+ text: JSON.stringify(response, null, 2)
110
+ }
111
+ ]
112
+ };
113
+ }
114
+ async getClassInfo(className) {
115
+ if (!className) {
116
+ throw new Error('Class name is required for get_class_info');
117
+ }
118
+ const response = await this.client.request('/api/class-info', { className });
119
+ return {
120
+ content: [
121
+ {
122
+ type: 'text',
123
+ text: JSON.stringify(response, null, 2)
124
+ }
125
+ ]
126
+ };
127
+ }
128
+ // Project Tools
129
+ async getProjectStructure(path, maxDepth, scriptsOnly) {
130
+ const response = await this.client.request('/api/project-structure', {
131
+ path,
132
+ maxDepth,
133
+ scriptsOnly
134
+ });
135
+ return {
136
+ content: [
137
+ {
138
+ type: 'text',
139
+ text: JSON.stringify(response, null, 2)
140
+ }
141
+ ]
142
+ };
143
+ }
144
+ // Property Modification Tools
145
+ async setProperty(instancePath, propertyName, propertyValue) {
146
+ if (!instancePath || !propertyName) {
147
+ throw new Error('Instance path and property name are required for set_property');
148
+ }
149
+ const response = await this.client.request('/api/set-property', {
150
+ instancePath,
151
+ propertyName,
152
+ propertyValue
153
+ });
154
+ return {
155
+ content: [
156
+ {
157
+ type: 'text',
158
+ text: JSON.stringify(response, null, 2)
159
+ }
160
+ ]
161
+ };
162
+ }
163
+ async massSetProperty(paths, propertyName, propertyValue) {
164
+ if (!paths || paths.length === 0 || !propertyName) {
165
+ throw new Error('Paths array and property name are required for mass_set_property');
166
+ }
167
+ const response = await this.client.request('/api/mass-set-property', {
168
+ paths,
169
+ propertyName,
170
+ propertyValue
171
+ });
172
+ return {
173
+ content: [
174
+ {
175
+ type: 'text',
176
+ text: JSON.stringify(response, null, 2)
177
+ }
178
+ ]
179
+ };
180
+ }
181
+ async massGetProperty(paths, propertyName) {
182
+ if (!paths || paths.length === 0 || !propertyName) {
183
+ throw new Error('Paths array and property name are required for mass_get_property');
184
+ }
185
+ const response = await this.client.request('/api/mass-get-property', {
186
+ paths,
187
+ propertyName
188
+ });
189
+ return {
190
+ content: [
191
+ {
192
+ type: 'text',
193
+ text: JSON.stringify(response, null, 2)
194
+ }
195
+ ]
196
+ };
197
+ }
198
+ // Object Creation Tools
199
+ async createObject(className, parent, name) {
200
+ if (!className || !parent) {
201
+ throw new Error('Class name and parent are required for create_object');
202
+ }
203
+ const response = await this.client.request('/api/create-object', {
204
+ className,
205
+ parent,
206
+ name
207
+ });
208
+ return {
209
+ content: [
210
+ {
211
+ type: 'text',
212
+ text: JSON.stringify(response, null, 2)
213
+ }
214
+ ]
215
+ };
216
+ }
217
+ async createObjectWithProperties(className, parent, name, properties) {
218
+ if (!className || !parent) {
219
+ throw new Error('Class name and parent are required for create_object_with_properties');
220
+ }
221
+ const response = await this.client.request('/api/create-object', {
222
+ className,
223
+ parent,
224
+ name,
225
+ properties
226
+ });
227
+ return {
228
+ content: [
229
+ {
230
+ type: 'text',
231
+ text: JSON.stringify(response, null, 2)
232
+ }
233
+ ]
234
+ };
235
+ }
236
+ async massCreateObjects(objects) {
237
+ if (!objects || objects.length === 0) {
238
+ throw new Error('Objects array is required for mass_create_objects');
239
+ }
240
+ const response = await this.client.request('/api/mass-create-objects', { objects });
241
+ return {
242
+ content: [
243
+ {
244
+ type: 'text',
245
+ text: JSON.stringify(response, null, 2)
246
+ }
247
+ ]
248
+ };
249
+ }
250
+ async massCreateObjectsWithProperties(objects) {
251
+ if (!objects || objects.length === 0) {
252
+ throw new Error('Objects array is required for mass_create_objects_with_properties');
253
+ }
254
+ const response = await this.client.request('/api/mass-create-objects-with-properties', { objects });
255
+ return {
256
+ content: [
257
+ {
258
+ type: 'text',
259
+ text: JSON.stringify(response, null, 2)
260
+ }
261
+ ]
262
+ };
263
+ }
264
+ async deleteObject(instancePath) {
265
+ if (!instancePath) {
266
+ throw new Error('Instance path is required for delete_object');
267
+ }
268
+ const response = await this.client.request('/api/delete-object', { instancePath });
269
+ return {
270
+ content: [
271
+ {
272
+ type: 'text',
273
+ text: JSON.stringify(response, null, 2)
274
+ }
275
+ ]
276
+ };
277
+ }
278
+ // Smart Duplication Tools
279
+ async smartDuplicate(instancePath, count, options) {
280
+ if (!instancePath || count < 1) {
281
+ throw new Error('Instance path and count > 0 are required for smart_duplicate');
282
+ }
283
+ const response = await this.client.request('/api/smart-duplicate', {
284
+ instancePath,
285
+ count,
286
+ options
287
+ });
288
+ return {
289
+ content: [
290
+ {
291
+ type: 'text',
292
+ text: JSON.stringify(response, null, 2)
293
+ }
294
+ ]
295
+ };
296
+ }
297
+ async massDuplicate(duplications) {
298
+ if (!duplications || duplications.length === 0) {
299
+ throw new Error('Duplications array is required for mass_duplicate');
300
+ }
301
+ const response = await this.client.request('/api/mass-duplicate', { duplications });
302
+ return {
303
+ content: [
304
+ {
305
+ type: 'text',
306
+ text: JSON.stringify(response, null, 2)
307
+ }
308
+ ]
309
+ };
310
+ }
311
+ // Calculated Property Tools
312
+ async setCalculatedProperty(paths, propertyName, formula, variables) {
313
+ if (!paths || paths.length === 0 || !propertyName || !formula) {
314
+ throw new Error('Paths, property name, and formula are required for set_calculated_property');
315
+ }
316
+ const response = await this.client.request('/api/set-calculated-property', {
317
+ paths,
318
+ propertyName,
319
+ formula,
320
+ variables
321
+ });
322
+ return {
323
+ content: [
324
+ {
325
+ type: 'text',
326
+ text: JSON.stringify(response, null, 2)
327
+ }
328
+ ]
329
+ };
330
+ }
331
+ // Relative Property Tools
332
+ async setRelativeProperty(paths, propertyName, operation, value, component // For Vector3/UDim2 properties
333
+ ) {
334
+ if (!paths || paths.length === 0 || !propertyName || !operation || value === undefined) {
335
+ throw new Error('Paths, property name, operation, and value are required for set_relative_property');
336
+ }
337
+ const response = await this.client.request('/api/set-relative-property', {
338
+ paths,
339
+ propertyName,
340
+ operation,
341
+ value,
342
+ component
343
+ });
344
+ return {
345
+ content: [
346
+ {
347
+ type: 'text',
348
+ text: JSON.stringify(response, null, 2)
349
+ }
350
+ ]
351
+ };
352
+ }
353
+ // Script Management Tools
354
+ async getScriptSource(instancePath, startLine, endLine) {
355
+ if (!instancePath) {
356
+ throw new Error('Instance path is required for get_script_source');
357
+ }
358
+ const response = await this.client.request('/api/get-script-source', { instancePath, startLine, endLine });
359
+ return {
360
+ content: [
361
+ {
362
+ type: 'text',
363
+ text: JSON.stringify(response, null, 2)
364
+ }
365
+ ]
366
+ };
367
+ }
368
+ async setScriptSource(instancePath, source) {
369
+ if (!instancePath || typeof source !== 'string') {
370
+ throw new Error('Instance path and source code string are required for set_script_source');
371
+ }
372
+ const response = await this.client.request('/api/set-script-source', { instancePath, source });
373
+ return {
374
+ content: [
375
+ {
376
+ type: 'text',
377
+ text: JSON.stringify(response, null, 2)
378
+ }
379
+ ]
380
+ };
381
+ }
382
+ // Partial Script Editing Tools
383
+ async editScriptLines(instancePath, startLine, endLine, newContent) {
384
+ if (!instancePath || !startLine || !endLine || typeof newContent !== 'string') {
385
+ throw new Error('Instance path, startLine, endLine, and newContent are required for edit_script_lines');
386
+ }
387
+ const response = await this.client.request('/api/edit-script-lines', { instancePath, startLine, endLine, newContent });
388
+ return {
389
+ content: [
390
+ {
391
+ type: 'text',
392
+ text: JSON.stringify(response, null, 2)
393
+ }
394
+ ]
395
+ };
396
+ }
397
+ async insertScriptLines(instancePath, afterLine, newContent) {
398
+ if (!instancePath || typeof newContent !== 'string') {
399
+ throw new Error('Instance path and newContent are required for insert_script_lines');
400
+ }
401
+ const response = await this.client.request('/api/insert-script-lines', { instancePath, afterLine: afterLine || 0, newContent });
402
+ return {
403
+ content: [
404
+ {
405
+ type: 'text',
406
+ text: JSON.stringify(response, null, 2)
407
+ }
408
+ ]
409
+ };
410
+ }
411
+ async deleteScriptLines(instancePath, startLine, endLine) {
412
+ if (!instancePath || !startLine || !endLine) {
413
+ throw new Error('Instance path, startLine, and endLine are required for delete_script_lines');
414
+ }
415
+ const response = await this.client.request('/api/delete-script-lines', { instancePath, startLine, endLine });
416
+ return {
417
+ content: [
418
+ {
419
+ type: 'text',
420
+ text: JSON.stringify(response, null, 2)
421
+ }
422
+ ]
423
+ };
424
+ }
425
+ // Attribute Tools
426
+ async getAttribute(instancePath, attributeName) {
427
+ if (!instancePath || !attributeName) {
428
+ throw new Error('Instance path and attribute name are required for get_attribute');
429
+ }
430
+ const response = await this.client.request('/api/get-attribute', { instancePath, attributeName });
431
+ return {
432
+ content: [
433
+ {
434
+ type: 'text',
435
+ text: JSON.stringify(response, null, 2)
436
+ }
437
+ ]
438
+ };
439
+ }
440
+ async setAttribute(instancePath, attributeName, attributeValue, valueType) {
441
+ if (!instancePath || !attributeName) {
442
+ throw new Error('Instance path and attribute name are required for set_attribute');
443
+ }
444
+ const response = await this.client.request('/api/set-attribute', { instancePath, attributeName, attributeValue, valueType });
445
+ return {
446
+ content: [
447
+ {
448
+ type: 'text',
449
+ text: JSON.stringify(response, null, 2)
450
+ }
451
+ ]
452
+ };
453
+ }
454
+ async getAttributes(instancePath) {
455
+ if (!instancePath) {
456
+ throw new Error('Instance path is required for get_attributes');
457
+ }
458
+ const response = await this.client.request('/api/get-attributes', { instancePath });
459
+ return {
460
+ content: [
461
+ {
462
+ type: 'text',
463
+ text: JSON.stringify(response, null, 2)
464
+ }
465
+ ]
466
+ };
467
+ }
468
+ async deleteAttribute(instancePath, attributeName) {
469
+ if (!instancePath || !attributeName) {
470
+ throw new Error('Instance path and attribute name are required for delete_attribute');
471
+ }
472
+ const response = await this.client.request('/api/delete-attribute', { instancePath, attributeName });
473
+ return {
474
+ content: [
475
+ {
476
+ type: 'text',
477
+ text: JSON.stringify(response, null, 2)
478
+ }
479
+ ]
480
+ };
481
+ }
482
+ // Tag Tools (CollectionService)
483
+ async getTags(instancePath) {
484
+ if (!instancePath) {
485
+ throw new Error('Instance path is required for get_tags');
486
+ }
487
+ const response = await this.client.request('/api/get-tags', { instancePath });
488
+ return {
489
+ content: [
490
+ {
491
+ type: 'text',
492
+ text: JSON.stringify(response, null, 2)
493
+ }
494
+ ]
495
+ };
496
+ }
497
+ async addTag(instancePath, tagName) {
498
+ if (!instancePath || !tagName) {
499
+ throw new Error('Instance path and tag name are required for add_tag');
500
+ }
501
+ const response = await this.client.request('/api/add-tag', { instancePath, tagName });
502
+ return {
503
+ content: [
504
+ {
505
+ type: 'text',
506
+ text: JSON.stringify(response, null, 2)
507
+ }
508
+ ]
509
+ };
510
+ }
511
+ async removeTag(instancePath, tagName) {
512
+ if (!instancePath || !tagName) {
513
+ throw new Error('Instance path and tag name are required for remove_tag');
514
+ }
515
+ const response = await this.client.request('/api/remove-tag', { instancePath, tagName });
516
+ return {
517
+ content: [
518
+ {
519
+ type: 'text',
520
+ text: JSON.stringify(response, null, 2)
521
+ }
522
+ ]
523
+ };
524
+ }
525
+ async getTagged(tagName) {
526
+ if (!tagName) {
527
+ throw new Error('Tag name is required for get_tagged');
528
+ }
529
+ const response = await this.client.request('/api/get-tagged', { tagName });
530
+ return {
531
+ content: [
532
+ {
533
+ type: 'text',
534
+ text: JSON.stringify(response, null, 2)
535
+ }
536
+ ]
537
+ };
538
+ }
539
+ async getSelection() {
540
+ const response = await this.client.request('/api/get-selection', {});
541
+ return {
542
+ content: [
543
+ {
544
+ type: 'text',
545
+ text: JSON.stringify(response, null, 2)
546
+ }
547
+ ]
548
+ };
549
+ }
550
+ // ============================================
551
+ // OUTPUT CAPTURE TOOL
552
+ // ============================================
553
+ async getOutput(limit, since, messageTypes, clear) {
554
+ const response = await this.client.request('/api/get-output', {
555
+ limit,
556
+ since,
557
+ messageTypes,
558
+ clear
559
+ });
560
+ return {
561
+ content: [
562
+ {
563
+ type: 'text',
564
+ text: JSON.stringify(response, null, 2)
565
+ }
566
+ ]
567
+ };
568
+ }
569
+ // ============================================
570
+ // INSTANCE MANIPULATION TOOLS (clone, move)
571
+ // ============================================
572
+ async cloneInstance(sourcePath, targetParent, newName) {
573
+ if (!sourcePath || !targetParent) {
574
+ throw new Error('Source path and target parent are required for clone_instance');
575
+ }
576
+ const response = await this.client.request('/api/clone-instance', {
577
+ sourcePath,
578
+ targetParent,
579
+ newName
580
+ });
581
+ return {
582
+ content: [
583
+ {
584
+ type: 'text',
585
+ text: JSON.stringify(response, null, 2)
586
+ }
587
+ ]
588
+ };
589
+ }
590
+ async moveInstance(instancePath, newParent) {
591
+ if (!instancePath || !newParent) {
592
+ throw new Error('Instance path and new parent are required for move_instance');
593
+ }
594
+ const response = await this.client.request('/api/move-instance', {
595
+ instancePath,
596
+ newParent
597
+ });
598
+ return {
599
+ content: [
600
+ {
601
+ type: 'text',
602
+ text: JSON.stringify(response, null, 2)
603
+ }
604
+ ]
605
+ };
606
+ }
607
+ // ============================================
608
+ // SCRIPT VALIDATION TOOL
609
+ // ============================================
610
+ async validateScript(instancePath, source) {
611
+ if (!instancePath && !source) {
612
+ throw new Error('Either instance path or source code is required for validate_script');
613
+ }
614
+ const response = await this.client.request('/api/validate-script', {
615
+ instancePath,
616
+ source
617
+ });
618
+ return {
619
+ content: [
620
+ {
621
+ type: 'text',
622
+ text: JSON.stringify(response, null, 2)
623
+ }
624
+ ]
625
+ };
626
+ }
627
+ }
628
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { BridgeService } from '../bridge-service.js';
2
+ export declare class StudioHttpClient {
3
+ private bridge;
4
+ constructor(bridge: BridgeService);
5
+ request(endpoint: string, data: any): Promise<any>;
6
+ }
7
+ //# sourceMappingURL=studio-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"studio-client.d.ts","sourceRoot":"","sources":["../../src/tools/studio-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,aAAa;IAI3B,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;CAazD"}
@@ -0,0 +1,19 @@
1
+ export class StudioHttpClient {
2
+ bridge;
3
+ constructor(bridge) {
4
+ this.bridge = bridge;
5
+ }
6
+ async request(endpoint, data) {
7
+ try {
8
+ const response = await this.bridge.sendRequest(endpoint, data);
9
+ return response;
10
+ }
11
+ catch (error) {
12
+ if (error instanceof Error && error.message === 'Request timeout') {
13
+ throw new Error('Studio plugin connection timeout. Make sure the Roblox Studio plugin is running and activated.');
14
+ }
15
+ throw error;
16
+ }
17
+ }
18
+ }
19
+ //# sourceMappingURL=studio-client.js.map