@el4cteo/rbx-studio-mcp 0.1.0 → 0.1.1
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/README.md +46 -4
- package/dist/bridge/api.js +25 -0
- package/dist/bridge/api.js.map +1 -0
- package/dist/bridge/remote.js +106 -0
- package/dist/bridge/remote.js.map +1 -0
- package/dist/bridge/rpc.js +24 -4
- package/dist/bridge/rpc.js.map +1 -1
- package/dist/bridge/server.js +84 -4
- package/dist/bridge/server.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/lib/errors.js +48 -3
- package/dist/lib/errors.js.map +1 -1
- package/dist/tools/input.js +13 -1
- package/dist/tools/input.js.map +1 -1
- package/dist/tools/playtest.js +3 -3
- package/dist/tools/playtest.js.map +1 -1
- package/dist/tools/screenshot.js +46 -11
- package/dist/tools/screenshot.js.map +1 -1
- package/dist/tools/session.js +10 -8
- package/dist/tools/session.js.map +1 -1
- package/package.json +62 -62
- package/plugin/src/Config.luau +59 -59
- package/plugin/src/handlers/Capture.luau +366 -187
- package/plugin/src/handlers/Debug.luau +2 -1
- package/plugin/src/handlers/Input.luau +166 -0
- package/scripts/prism.mjs +310 -0
package/README.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# Roblox Studio MCP
|
|
2
2
|
|
|
3
|
-
MCP server for Roblox Studio. 29 tools over a push-based bridge. MIT.
|
|
3
|
+
MCP server for Roblox Studio. 29 tools over a push-based bridge, every write batched and undoable in one step. MIT.
|
|
4
|
+
|
|
5
|
+

|
|
4
6
|
|
|
5
7
|
## Install
|
|
6
8
|
|
|
@@ -10,7 +12,7 @@ MCP server for Roblox Studio. 29 tools over a push-based bridge. MIT.
|
|
|
10
12
|
npx -y @el4cteo/rbx-studio-mcp --install-plugin
|
|
11
13
|
```
|
|
12
14
|
|
|
13
|
-
Or download `StudioMCP.rbxmx` from [Releases](https://github.com/EL4CTEO/
|
|
15
|
+
Or download `StudioMCP.rbxmx` from [Releases](https://github.com/EL4CTEO/rbx-studio-mcp/releases) into your Studio plugins folder.
|
|
14
16
|
|
|
15
17
|
**2. The server**, in whichever client you use:
|
|
16
18
|
|
|
@@ -145,8 +147,14 @@ args = ["-y", "@el4cteo/rbx-studio-mcp"]
|
|
|
145
147
|
|
|
146
148
|
**3.** Open Studio, accept the `127.0.0.1` prompt, check the **Studio MCP** toolbar button. Verify with `studio_status`.
|
|
147
149
|
|
|
150
|
+
**4. For `debug`**, turn on **Debugger Luau API** in File → Beta Features, then restart Studio. Everything else works without it; breakpoints do not, because `ScriptDebuggerService` is not registered until this is enabled.
|
|
151
|
+
|
|
152
|
+

|
|
153
|
+
|
|
148
154
|
Port defaults to **44755** — `--port` or `ROBLOX_STUDIO_MCP_PORT`, matched in the plugin widget. Loopback only.
|
|
149
155
|
|
|
156
|
+
**Several agents at once work.** Register this in as many clients as you like — two Claude sessions, Claude plus Cursor, whatever. The plugin connects out to one port, so the first server to start owns it and the rest proxy through it automatically. Nothing to configure, and no second connection to Studio.
|
|
157
|
+
|
|
150
158
|
## Tools
|
|
151
159
|
|
|
152
160
|
| | |
|
|
@@ -159,7 +167,41 @@ Port defaults to **44755** — `--port` or `ROBLOX_STUDIO_MCP_PORT`, matched in
|
|
|
159
167
|
| **Look** | `screenshot` `viewport` `device` |
|
|
160
168
|
| **Session** | `list_studios` `set_active_studio` |
|
|
161
169
|
|
|
162
|
-
Gotchas: `
|
|
170
|
+
Gotchas: `debug` needs **API debugger Luau** in `File → Beta Features`. `device` emulation persists until `device op="stop"`. During a playtest two sessions connect — pass `studioId` explicitly, using the edit session for anything that must persist.
|
|
171
|
+
|
|
172
|
+
## Batching
|
|
173
|
+
|
|
174
|
+
Every write tool takes an array. Editing ten scripts, deleting two hundred
|
|
175
|
+
parts or anchoring a whole map is **one call**, not a loop.
|
|
176
|
+
|
|
177
|
+
| tool | takes | cap |
|
|
178
|
+
|---|---|---|
|
|
179
|
+
| `create` | instances, each nesting `children` to any depth | 100 |
|
|
180
|
+
| `modify` | entries, each with an unlimited list of `paths` | 100 entries |
|
|
181
|
+
| `delete` | paths | 200 |
|
|
182
|
+
| `move` | moves | 200 |
|
|
183
|
+
| `script_edit` | edits, across any number of scripts | 50 |
|
|
184
|
+
| `script_create` | scripts | 50 |
|
|
185
|
+
| `inspect` | paths | 50 |
|
|
186
|
+
| `input` | input steps, delivered in order | 40 |
|
|
187
|
+
|
|
188
|
+
The cap on `modify` is on *entries*, not targets — one entry can anchor five
|
|
189
|
+
hundred parts, so pair it with `find` and change a whole place in a single call.
|
|
190
|
+
|
|
191
|
+
What that buys beyond speed:
|
|
192
|
+
|
|
193
|
+
- **One Ctrl+Z.** The batch runs inside a single `ChangeHistoryService`
|
|
194
|
+
recording named after the tool. Ten script edits undo as one step, not ten.
|
|
195
|
+
- **All-or-nothing.** Everything is read and transformed in memory before
|
|
196
|
+
anything is written, so a find that matches nothing — or matches twice —
|
|
197
|
+
fails with the place untouched instead of half-edited.
|
|
198
|
+
- **Nesting.** `create` takes `children`, so a whole model arrives in one call.
|
|
199
|
+
A new instance's path is not knowable until it exists, and same-named siblings
|
|
200
|
+
make guessing it unreliable.
|
|
201
|
+
|
|
202
|
+
Parallel tool calls work too — responses are keyed by request id, so several
|
|
203
|
+
calls in one turn run concurrently. Prefer a batch where one exists: parallel
|
|
204
|
+
calls are N round trips and N undo steps, a batch is one of each.
|
|
163
205
|
|
|
164
206
|
## Compared to what else exists
|
|
165
207
|
|
|
@@ -173,7 +215,7 @@ Gotchas: `screenshot` doesn't work mid-playtest. `debug` needs **API debugger Lu
|
|
|
173
215
|
| [Roblox/studio-rust-mcp-server](https://github.com/Roblox/studio-rust-mcp-server) | 2 | HTTP | no | no | no | MIT (superseded) |
|
|
174
216
|
|
|
175
217
|
- **Push, not poll.** SSE stream instead of a 500 ms poll. 50 sequential round trips: **13.6 ms** mean vs 25.8 ms, **12.8 ms** median vs 29.9 ms. Reproduce with `node scripts/latency.mjs --count 50 --compare`.
|
|
176
|
-
- **Safe script edits.** `ScriptEditorService:UpdateSourceAsync`, not `script.Source` — your unsaved editor buffer survives.
|
|
218
|
+
- **Safe script edits.** `ScriptEditorService:UpdateSourceAsync`, not `script.Source` — your unsaved editor buffer survives.
|
|
177
219
|
- **One Ctrl+Z per action**, via `ChangeHistoryService`.
|
|
178
220
|
- **29 tools, ~16k tokens of schema**, against 43–51 elsewhere. Cursor-paged, capped, with `detail: concise | standard | full`.
|
|
179
221
|
- **Live API dump** for property validation, so typos get suggestions (`Anchorred` → `Anchored`).
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** The bridge as seen from the process that actually holds the port. */
|
|
2
|
+
export class LocalBridge {
|
|
3
|
+
inner;
|
|
4
|
+
isOwner = true;
|
|
5
|
+
constructor(inner) {
|
|
6
|
+
this.inner = inner;
|
|
7
|
+
}
|
|
8
|
+
call(op, params = {}, options = {}) {
|
|
9
|
+
return this.inner.call(op, params, options);
|
|
10
|
+
}
|
|
11
|
+
async sessions() {
|
|
12
|
+
return {
|
|
13
|
+
list: this.inner.list(),
|
|
14
|
+
activeId: this.inner.activeId,
|
|
15
|
+
activeIsChosen: this.inner.activeIsChosen,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
async setActive(studioId) {
|
|
19
|
+
this.inner.setActive(studioId);
|
|
20
|
+
}
|
|
21
|
+
async notePlaceName(studioId, placeName, context) {
|
|
22
|
+
this.inner.notePlaceName(studioId, placeName, context);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/bridge/api.ts"],"names":[],"mappings":"AA0CA,wEAAwE;AACxE,MAAM,OAAO,WAAW;IAGO,KAAK;IAFzB,OAAO,GAAG,IAAI,CAAC;IAExB,YAA6B,KAAa;qBAAb,KAAK;IAAW,CAAC;IAE9C,IAAI,CACF,EAAU,EACV,MAAM,GAA4B,EAAE,EACpC,OAAO,GAA8C,EAAE;QAEvD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAI,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;YACvB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;YAC7B,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc;SAC1C,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAgB;QAC9B,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAgB,EAAE,SAAiB,EAAE,OAAgB;QACvE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;CACF"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { CLIENT_HEADER, PROTOCOL_VERSION } from "../lib/protocol.js";
|
|
2
|
+
import { ToolError } from "../lib/errors.js";
|
|
3
|
+
const HEADERS = { [CLIENT_HEADER]: "peer", "Content-Type": "application/json" };
|
|
4
|
+
/**
|
|
5
|
+
* Asks whatever holds `port` whether it is another copy of this server.
|
|
6
|
+
*
|
|
7
|
+
* Deliberately narrow. Something else on 44755 is a reason to fail with the
|
|
8
|
+
* old "port is in use" message, not to start posting Luau at it, so this
|
|
9
|
+
* returns null on anything that is not an exact match — wrong shape, wrong
|
|
10
|
+
* protocol version, no answer at all.
|
|
11
|
+
*/
|
|
12
|
+
export async function probeOwner(port) {
|
|
13
|
+
try {
|
|
14
|
+
const response = await fetch(`http://127.0.0.1:${port}/identity`, {
|
|
15
|
+
headers: { [CLIENT_HEADER]: "peer" },
|
|
16
|
+
signal: AbortSignal.timeout(2_000),
|
|
17
|
+
});
|
|
18
|
+
if (!response.ok)
|
|
19
|
+
return null;
|
|
20
|
+
const body = (await response.json());
|
|
21
|
+
if (body.server !== "roblox-studio-mcp")
|
|
22
|
+
return null;
|
|
23
|
+
if (body.protocolVersion !== PROTOCOL_VERSION)
|
|
24
|
+
return null;
|
|
25
|
+
return body;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* A bridge that forwards everything to the process holding the port.
|
|
33
|
+
*
|
|
34
|
+
* There is no second connection to Studio and no second copy of the in-flight
|
|
35
|
+
* table: the owner does the work and this waits for the answer, so two agents
|
|
36
|
+
* calling at once are simply two commands on the owner's queue, and the undo
|
|
37
|
+
* recording each one opens still belongs to whichever tool made it.
|
|
38
|
+
*/
|
|
39
|
+
export class RemoteBridge {
|
|
40
|
+
port;
|
|
41
|
+
owner;
|
|
42
|
+
isOwner = false;
|
|
43
|
+
constructor(port, owner) {
|
|
44
|
+
this.port = port;
|
|
45
|
+
this.owner = owner;
|
|
46
|
+
}
|
|
47
|
+
get base() {
|
|
48
|
+
return `http://127.0.0.1:${this.port}`;
|
|
49
|
+
}
|
|
50
|
+
async post(path, body, timeoutMs) {
|
|
51
|
+
let response;
|
|
52
|
+
try {
|
|
53
|
+
response = await fetch(`${this.base}${path}`, {
|
|
54
|
+
method: "POST",
|
|
55
|
+
headers: HEADERS,
|
|
56
|
+
body: JSON.stringify(body),
|
|
57
|
+
// Padded past the command's own deadline so the owner's timeout wins and
|
|
58
|
+
// its diagnosis reaches the caller, rather than being cut off by ours.
|
|
59
|
+
signal: AbortSignal.timeout(timeoutMs + 10_000),
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
catch (cause) {
|
|
63
|
+
throw this.unreachable(cause);
|
|
64
|
+
}
|
|
65
|
+
const payload = (await response.json());
|
|
66
|
+
if (!payload.ok) {
|
|
67
|
+
const error = payload.error ?? { code: "PEER_ERROR", message: "the bridge owner refused" };
|
|
68
|
+
throw new ToolError(error.code, error.message);
|
|
69
|
+
}
|
|
70
|
+
return payload.data;
|
|
71
|
+
}
|
|
72
|
+
unreachable(cause) {
|
|
73
|
+
return new ToolError("OWNER_GONE", `The roblox-studio-mcp instance holding port ${this.port} (pid ${this.owner.pid}) ` +
|
|
74
|
+
`stopped answering: ${cause instanceof Error ? cause.message : String(cause)}`, "That process owns the Studio connection and this one borrows it. It has most " +
|
|
75
|
+
"likely exited — restart this MCP server and it will take the port itself.");
|
|
76
|
+
}
|
|
77
|
+
call(op, params = {}, options = {}) {
|
|
78
|
+
return this.post("/call", { op, params, ...options }, options.timeoutMs ?? 15_000);
|
|
79
|
+
}
|
|
80
|
+
async sessions() {
|
|
81
|
+
try {
|
|
82
|
+
const response = await fetch(`${this.base}/sessions`, {
|
|
83
|
+
headers: { [CLIENT_HEADER]: "peer" },
|
|
84
|
+
signal: AbortSignal.timeout(5_000),
|
|
85
|
+
});
|
|
86
|
+
return (await response.json());
|
|
87
|
+
}
|
|
88
|
+
catch (cause) {
|
|
89
|
+
throw this.unreachable(cause);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
async setActive(studioId) {
|
|
93
|
+
await this.post("/active", { studioId }, 5_000);
|
|
94
|
+
}
|
|
95
|
+
async notePlaceName(studioId, placeName, context) {
|
|
96
|
+
// Best effort: this only refreshes a display name on the owner, and losing
|
|
97
|
+
// it should never fail the call that happened to learn it.
|
|
98
|
+
try {
|
|
99
|
+
await this.post("/place-name", { studioId, placeName, context }, 5_000);
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
/* ignored */
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=remote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote.js","sourceRoot":"","sources":["../../src/bridge/remote.ts"],"names":[],"mappings":"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"}
|
package/dist/bridge/rpc.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
|
-
import { AMBIGUOUS_STUDIO, DISCONNECTED, NO_STUDIO, TIMEOUT, ToolError, } from "../lib/errors.js";
|
|
2
|
+
import { AMBIGUOUS_STUDIO, DISCONNECTED, NO_STUDIO, SAME_PLACE_STUDIO, TIMEOUT, ToolError, } from "../lib/errors.js";
|
|
3
3
|
/** Default per-command deadline. Studio round trips are single-digit ms over SSE. */
|
|
4
4
|
export const DEFAULT_TIMEOUT_MS = 15_000;
|
|
5
5
|
/** How long a long-poll request is parked before we answer "idle". */
|
|
@@ -137,7 +137,17 @@ export class Bridge {
|
|
|
137
137
|
return new Promise((resolve, reject) => {
|
|
138
138
|
const timer = setTimeout(() => {
|
|
139
139
|
session.pending.delete(command.id);
|
|
140
|
-
|
|
140
|
+
// A bare "it timed out" leaves nowhere to go, and the interesting part
|
|
141
|
+
// is knowable here: whether the command ever left this process, and
|
|
142
|
+
// whether the plugin has said anything since. A command still sitting in
|
|
143
|
+
// the queue was never seen by Studio, which is a different fault from
|
|
144
|
+
// one Studio took and did not finish.
|
|
145
|
+
reject(TIMEOUT(op, timeoutMs, {
|
|
146
|
+
delivered: session.queue.every((queued) => queued.id !== command.id),
|
|
147
|
+
silentForMs: Date.now() - session.lastSeenAt,
|
|
148
|
+
alsoInFlight: session.pending.size,
|
|
149
|
+
transport: session.stream ? "sse" : "poll",
|
|
150
|
+
}));
|
|
141
151
|
}, timeoutMs);
|
|
142
152
|
session.pending.set(command.id, {
|
|
143
153
|
resolve: resolve,
|
|
@@ -214,11 +224,21 @@ export class Bridge {
|
|
|
214
224
|
if (session)
|
|
215
225
|
return session;
|
|
216
226
|
}
|
|
217
|
-
|
|
227
|
+
const connected = this.list();
|
|
218
228
|
// The context is the part that decides it. Two rows reading "Untitled
|
|
219
229
|
// Experience" are indistinguishable, and picking the playtest means work
|
|
220
230
|
// that disappears when it stops.
|
|
221
|
-
|
|
231
|
+
const rows = connected.map((session) => `${session.studioId} (${session.placeName}${session.context ? `, ${session.context}` : ""})`);
|
|
232
|
+
// A playtest is not a second place. Starting one connects a second session
|
|
233
|
+
// on the same placeId, and telling the agent to go and ask which place the
|
|
234
|
+
// user means is then a question with no answer -- there is one place, in two
|
|
235
|
+
// states, and which to use follows from what is being asked rather than from
|
|
236
|
+
// anything the user knows.
|
|
237
|
+
const places = new Set(connected.map((session) => session.placeId));
|
|
238
|
+
if (places.size === 1 && connected.length > 1) {
|
|
239
|
+
throw SAME_PLACE_STUDIO(rows);
|
|
240
|
+
}
|
|
241
|
+
throw AMBIGUOUS_STUDIO(rows);
|
|
222
242
|
}
|
|
223
243
|
deliver(session, command) {
|
|
224
244
|
if (session.stream && !session.stream.writableEnded) {
|
package/dist/bridge/rpc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc.js","sourceRoot":"","sources":["../../src/bridge/rpc.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"rpc.js","sourceRoot":"","sources":["../../src/bridge/rpc.ts"],"names":[],"mappings":"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"}
|
package/dist/bridge/server.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { createServer } from "node:http";
|
|
2
2
|
import { CLIENT_HEADER, PROTOCOL_VERSION } from "../lib/protocol.js";
|
|
3
|
+
import { toToolError } from "../lib/errors.js";
|
|
3
4
|
import { Bridge } from "./rpc.js";
|
|
5
|
+
import { LocalBridge } from "./api.js";
|
|
6
|
+
import { probeOwner, RemoteBridge } from "./remote.js";
|
|
4
7
|
/** Default loopback port. Deliberately not 58741 — that is drgost1's server. */
|
|
5
8
|
export const DEFAULT_PORT = 44755;
|
|
6
9
|
/** SSE comment cadence. Keeps intermediaries and Studio from reaping an idle stream. */
|
|
@@ -38,9 +41,25 @@ export function startBridgeServer(options = {}) {
|
|
|
38
41
|
// fight over the plugin's connection, so say so plainly instead of
|
|
39
42
|
// surfacing a bare EADDRINUSE.
|
|
40
43
|
if (cause.code === "EADDRINUSE") {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
+
// Almost always another copy of this server, which is not a failure:
|
|
45
|
+
// the plugin can only connect to one port, so the right answer is to
|
|
46
|
+
// share that one connection rather than fight for it. Any number of MCP
|
|
47
|
+
// clients can then drive one Studio.
|
|
48
|
+
void probeOwner(port).then((existing) => {
|
|
49
|
+
if (existing) {
|
|
50
|
+
clearInterval(reaper);
|
|
51
|
+
resolve({
|
|
52
|
+
bridge: new RemoteBridge(port, existing),
|
|
53
|
+
port,
|
|
54
|
+
owner: false,
|
|
55
|
+
close: async () => clearInterval(reaper),
|
|
56
|
+
});
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
reject(new Error(`Port ${port} is in use by something that is not roblox-studio-mcp. ` +
|
|
60
|
+
`Stop it, or start this one with --port <other> and set the matching ` +
|
|
61
|
+
`port in the Studio plugin widget.`));
|
|
62
|
+
});
|
|
44
63
|
return;
|
|
45
64
|
}
|
|
46
65
|
reject(cause);
|
|
@@ -49,8 +68,9 @@ export function startBridgeServer(options = {}) {
|
|
|
49
68
|
server.listen(port, "127.0.0.1", () => {
|
|
50
69
|
server.removeListener("error", reject);
|
|
51
70
|
resolve({
|
|
52
|
-
bridge,
|
|
71
|
+
bridge: new LocalBridge(bridge),
|
|
53
72
|
port,
|
|
73
|
+
owner: true,
|
|
54
74
|
close: () => closeServer(server, reaper),
|
|
55
75
|
});
|
|
56
76
|
});
|
|
@@ -87,6 +107,26 @@ async function handle(bridge, req, res) {
|
|
|
87
107
|
return await handleLatency(bridge, url, res);
|
|
88
108
|
case "POST /transport":
|
|
89
109
|
return await handleTransport(bridge, url, res);
|
|
110
|
+
case "GET /identity":
|
|
111
|
+
// Answered so a second instance can tell us apart from whatever else
|
|
112
|
+
// might be squatting on the port. See probeOwner.
|
|
113
|
+
return send(res, 200, {
|
|
114
|
+
server: "roblox-studio-mcp",
|
|
115
|
+
protocolVersion: PROTOCOL_VERSION,
|
|
116
|
+
pid: process.pid,
|
|
117
|
+
});
|
|
118
|
+
case "POST /call":
|
|
119
|
+
return await handlePeerCall(bridge, req, res);
|
|
120
|
+
case "GET /sessions":
|
|
121
|
+
return send(res, 200, {
|
|
122
|
+
list: bridge.list(),
|
|
123
|
+
activeId: bridge.activeId,
|
|
124
|
+
activeIsChosen: bridge.activeIsChosen,
|
|
125
|
+
});
|
|
126
|
+
case "POST /active":
|
|
127
|
+
return await handlePeerActive(bridge, req, res);
|
|
128
|
+
case "POST /place-name":
|
|
129
|
+
return await handlePeerPlaceName(bridge, req, res);
|
|
90
130
|
case "POST /bye":
|
|
91
131
|
bridge.detach(url.searchParams.get("studioId") ?? "");
|
|
92
132
|
return send(res, 200, { ok: true });
|
|
@@ -278,4 +318,44 @@ function send(res, status, body) {
|
|
|
278
318
|
});
|
|
279
319
|
res.end(payload);
|
|
280
320
|
}
|
|
321
|
+
/**
|
|
322
|
+
* Runs a command on behalf of another instance of this server.
|
|
323
|
+
*
|
|
324
|
+
* The failure is returned as a body rather than an HTTP status, because the
|
|
325
|
+
* code and hint are the useful part and a 500 would throw them away — the peer
|
|
326
|
+
* rebuilds a ToolError from this and the agent sees the same text it would have
|
|
327
|
+
* seen had this process been the one it was talking to.
|
|
328
|
+
*/
|
|
329
|
+
async function handlePeerCall(bridge, req, res) {
|
|
330
|
+
const body = JSON.parse(await readBody(req));
|
|
331
|
+
if (typeof body.op !== "string")
|
|
332
|
+
return send(res, 400, { ok: false, error: { code: "BAD_PEER_CALL", message: "no op" } });
|
|
333
|
+
try {
|
|
334
|
+
const data = await bridge.call(body.op, body.params ?? {}, {
|
|
335
|
+
studioId: body.studioId,
|
|
336
|
+
timeoutMs: body.timeoutMs,
|
|
337
|
+
});
|
|
338
|
+
return send(res, 200, { ok: true, data });
|
|
339
|
+
}
|
|
340
|
+
catch (cause) {
|
|
341
|
+
const error = toToolError(cause);
|
|
342
|
+
return send(res, 200, { ok: false, error: { code: error.code, message: error.message } });
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
async function handlePeerActive(bridge, req, res) {
|
|
346
|
+
const body = JSON.parse(await readBody(req));
|
|
347
|
+
try {
|
|
348
|
+
bridge.setActive(String(body.studioId ?? ""));
|
|
349
|
+
return send(res, 200, { ok: true });
|
|
350
|
+
}
|
|
351
|
+
catch (cause) {
|
|
352
|
+
const error = toToolError(cause);
|
|
353
|
+
return send(res, 200, { ok: false, error: { code: error.code, message: error.message } });
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
async function handlePeerPlaceName(bridge, req, res) {
|
|
357
|
+
const body = JSON.parse(await readBody(req));
|
|
358
|
+
bridge.notePlaceName(String(body.studioId ?? ""), String(body.placeName ?? ""), body.context);
|
|
359
|
+
return send(res, 200, { ok: true });
|
|
360
|
+
}
|
|
281
361
|
//# sourceMappingURL=server.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/bridge/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/bridge/server.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -20,7 +20,7 @@ import { registerInputTools } from "./tools/input.js";
|
|
|
20
20
|
import { registerDeviceTools } from "./tools/device.js";
|
|
21
21
|
import { registerApiTools } from "./tools/api.js";
|
|
22
22
|
import { registerResources } from "./resources.js";
|
|
23
|
-
const VERSION = "0.1.
|
|
23
|
+
const VERSION = "0.1.1";
|
|
24
24
|
function parsePort(argv) {
|
|
25
25
|
const flag = argv.indexOf("--port");
|
|
26
26
|
const raw = flag !== -1 ? argv[flag + 1] : process.env["ROBLOX_STUDIO_MCP_PORT"];
|
package/dist/lib/errors.js
CHANGED
|
@@ -23,9 +23,54 @@ export const AMBIGUOUS_STUDIO = (names) => new ToolError("AMBIGUOUS_STUDIO", `${
|
|
|
23
23
|
"which one to work in.", "Ask the user which place they mean, then call set_active_studio with its " +
|
|
24
24
|
`studioId. Connected now: ${names.join("; ")}. To act on one place without ` +
|
|
25
25
|
"changing the default, pass `studioId` to the tool directly.");
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
/**
|
|
27
|
+
* One place, two sessions — which is what a running playtest looks like.
|
|
28
|
+
*
|
|
29
|
+
* Worth its own error because the generic one sends the agent to ask the user
|
|
30
|
+
* which place they mean, and there is only one place. The choice is not the
|
|
31
|
+
* user's to make: it follows from what the call does. Anything meant to persist
|
|
32
|
+
* belongs in the edit session, because the playtest's data model is thrown away
|
|
33
|
+
* when it stops; anything about the game as it runs is only true in the playtest.
|
|
34
|
+
*/
|
|
35
|
+
export const SAME_PLACE_STUDIO = (rows) => new ToolError("AMBIGUOUS_STUDIO", "One place is open with a playtest running, so two sessions are connected " +
|
|
36
|
+
"and neither is the default.", "Pass `studioId` explicitly — do not ask the user, this is not two places. " +
|
|
37
|
+
"Use the *edit* session for anything that must survive the playtest: " +
|
|
38
|
+
"creating or modifying instances, script edits, geometry. Use the " +
|
|
39
|
+
"*playtest* session for anything about the running game: character, input, " +
|
|
40
|
+
"console, debug, performance. Edits made against the playtest are " +
|
|
41
|
+
`discarded when it stops. Connected now: ${rows.join("; ")}.`);
|
|
42
|
+
/**
|
|
43
|
+
* Timed out — with what the bridge knew when it gave up.
|
|
44
|
+
*
|
|
45
|
+
* This used to say only "Studio did not answer", which is the least useful true
|
|
46
|
+
* statement available: a trivial string operation timing out at 60s reads as a
|
|
47
|
+
* broken tool, and the caller has no way to tell a wedged plugin from a command
|
|
48
|
+
* that was never picked up. All of it is knowable here, so all of it is said.
|
|
49
|
+
*/
|
|
50
|
+
export const TIMEOUT = (op, ms, state) => {
|
|
51
|
+
if (!state) {
|
|
52
|
+
return new ToolError("TIMEOUT", `Studio did not answer "${op}" within ${ms}ms.`, "Call studio_status to check, then retry.");
|
|
53
|
+
}
|
|
54
|
+
const silence = Math.round(state.silentForMs / 1000);
|
|
55
|
+
const facts = [
|
|
56
|
+
state.delivered
|
|
57
|
+
? "The command reached Studio and Studio did not finish it."
|
|
58
|
+
: "The command never reached Studio — it was still queued when the deadline passed.",
|
|
59
|
+
`Last heard from the plugin ${silence}s ago, over ${state.transport}.`,
|
|
60
|
+
state.alsoInFlight > 0
|
|
61
|
+
? `${state.alsoInFlight} other call${state.alsoInFlight === 1 ? " is" : "s are"} still outstanding on this session.`
|
|
62
|
+
: "Nothing else was in flight.",
|
|
63
|
+
];
|
|
64
|
+
// The two shapes point in opposite directions, so the advice does too.
|
|
65
|
+
const hint = state.delivered
|
|
66
|
+
? "Studio is usually compiling, mid-playtest transition, or blocked on a modal " +
|
|
67
|
+
"dialog. It often clears on its own — retry once before treating it as broken. " +
|
|
68
|
+
"If the work is genuinely long, run it through execute_luau in your own coroutine."
|
|
69
|
+
: "The plugin has stopped collecting commands, which normally means Studio is " +
|
|
70
|
+
"starting or stopping a playtest, or the window lost its connection. Call " +
|
|
71
|
+
"list_studios to see which sessions are live, and address the call at one of them.";
|
|
72
|
+
return new ToolError("TIMEOUT", `Studio did not answer "${op}" within ${ms}ms. ${facts.join(" ")}`, hint);
|
|
73
|
+
};
|
|
29
74
|
export const DISCONNECTED = () => new ToolError("DISCONNECTED", "The Studio connection dropped while the request was in flight.", "Studio was closed, the place was switched, or the plugin was disabled. " +
|
|
30
75
|
"Call studio_status to confirm a live connection, then retry the request.");
|
|
31
76
|
/** Wraps unknown throwables so every tool boundary reports the same shape. */
|
package/dist/lib/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,OAAO,SAAU,SAAQ,KAAK;IACzB,IAAI,CAAS;IACb,IAAI,CAAqB;IAElC,YAAY,IAAY,EAAE,OAAe,EAAE,IAAa;QACtD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,KAAmB;QACzC,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9D,CAAC;CACF;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,GAAc,EAAE,CACvC,IAAI,SAAS,CACX,WAAW,EACX,4DAA4D,EAC5D,gFAAgF;IAC9E,+EAA+E;IAC/E,yCAAyC,CAC5C,CAAC;AAEJ,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAe,EAAa,EAAE,CAC7D,IAAI,SAAS,CACX,kBAAkB,EAClB,GAAG,KAAK,CAAC,MAAM,4DAA4D;IACzE,uBAAuB,EACzB,2EAA2E;IACzE,4BAA4B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gCAAgC;IAC5E,6DAA6D,CAChE,CAAC;AAEJ,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,EAAU,EAAE,EAAU,EAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/input.js
CHANGED
|
@@ -19,6 +19,9 @@ export function registerInputTools(context) {
|
|
|
19
19
|
"second is a different test from a tapped one.\n\n" +
|
|
20
20
|
"REQUIRES A RUNNING PLAYTEST, and must be addressed to the playtest's " +
|
|
21
21
|
"studioId from `list_studios`, not the editor's.\n\n" +
|
|
22
|
+
"A pointer is drawn on screen and travels to each target before the " +
|
|
23
|
+
"click, so the user can see what you are aiming at. Turn it off with " +
|
|
24
|
+
"`cursor: false`.\n\n" +
|
|
22
25
|
"How it works, because it explains the one thing that will surprise " +
|
|
23
26
|
"you: input belongs to the data model that creates it, and the " +
|
|
24
27
|
"character is driven by the CLIENT. Sending from the playtest's server " +
|
|
@@ -78,6 +81,15 @@ export function registerInputTools(context) {
|
|
|
78
81
|
.string()
|
|
79
82
|
.optional()
|
|
80
83
|
.describe("Which player, by name. Omit for the only one; needed in a multiplayer test."),
|
|
84
|
+
cursor: z
|
|
85
|
+
.boolean()
|
|
86
|
+
.default(true)
|
|
87
|
+
.describe("Draw a pointer on screen that travels to each target before the " +
|
|
88
|
+
"click, with a ripple where it lands. On by default: synthetic " +
|
|
89
|
+
"input is otherwise invisible, so the user watching sees effects " +
|
|
90
|
+
"with no cause, and a click that misses looks identical to one " +
|
|
91
|
+
"that hit. Turn it off only when recording something where the " +
|
|
92
|
+
"pointer would be in the way."),
|
|
81
93
|
studioId: z
|
|
82
94
|
.string()
|
|
83
95
|
.optional()
|
|
@@ -86,7 +98,7 @@ export function registerInputTools(context) {
|
|
|
86
98
|
readOnly: false,
|
|
87
99
|
destructive: false,
|
|
88
100
|
}, async (args) => {
|
|
89
|
-
const response = await bridge.call("input.send", { steps: args.steps, player: args.player },
|
|
101
|
+
const response = await bridge.call("input.send", { steps: args.steps, player: args.player, cursor: args.cursor },
|
|
90
102
|
// The plugin waits for the client's acknowledgement, and the steps
|
|
91
103
|
// themselves can hold keys for seconds, so the deadline must outlast both.
|
|
92
104
|
{ studioId: args.studioId, timeoutMs: 90_000 });
|
package/dist/tools/input.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/tools/input.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/tools/input.ts"],"names":[],"mappings":"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"}
|