roblox-mcp-pro 0.2.1 → 0.2.3

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 CHANGED
@@ -44,9 +44,9 @@ Two commands get you running:
44
44
 
45
45
  ```bash
46
46
  # 1) Register the server with your AI agent (Claude Code shown; see below for others)
47
- claude mcp add roblox-mcp-pro -- npx -y roblox-mcp-pro
47
+ claude mcp add roblox-mcp-pro -- npx -y roblox-mcp-pro@latest
48
48
  # 2) Install the Studio plugin
49
- npx roblox-mcp-pro install-plugin
49
+ npx roblox-mcp-pro@latest install-plugin
50
50
  ```
51
51
 
52
52
  Then open Roblox Studio, click the **MCP** button, and ask your agent to run `system_info`.
@@ -64,12 +64,16 @@ only *where* you write it down changes. The command is always:
64
64
 
65
65
  ```
66
66
  command: npx
67
- args: -y roblox-mcp-pro
67
+ args: -y roblox-mcp-pro@latest
68
68
  ```
69
69
 
70
- `npx` downloads and runs the published package on demand — no clone, no build. (Prefer a pinned
71
- copy? Run `npm i -g roblox-mcp-pro` once, then use `roblox-mcp-pro` as the command instead of
72
- `npx`.)
70
+ `npx` downloads and runs the published package on demand — no clone, no build. The `@latest` tag
71
+ means you **always get the newest version automatically** updates need zero effort on your part.
72
+
73
+ > **Updates are automatic.** Because the command uses `@latest`, each time your AI client starts
74
+ > the server it fetches the newest release. The Studio plugin also self-updates: the server copies
75
+ > the latest bundled plugin into your Plugins folder on startup (just restart Studio when it tells
76
+ > you a new plugin was installed). You never have to reinstall anything by hand.
73
77
 
74
78
  ### Part 1 — Install the MCP server
75
79
 
@@ -78,26 +82,26 @@ copy? Run `npm i -g roblox-mcp-pro` once, then use `roblox-mcp-pro` as the comma
78
82
  **Claude Code**
79
83
 
80
84
  ```bash
81
- claude mcp add roblox-mcp-pro -- npx -y roblox-mcp-pro
85
+ claude mcp add roblox-mcp-pro -- npx -y roblox-mcp-pro@latest
82
86
  ```
83
87
 
84
88
  **Codex**
85
89
 
86
90
  ```bash
87
- codex mcp add roblox-mcp-pro -- npx -y roblox-mcp-pro
91
+ codex mcp add roblox-mcp-pro -- npx -y roblox-mcp-pro@latest
88
92
  ```
89
93
 
90
94
  > If `codex mcp add` isn't available in your version, add this to `~/.codex/config.toml` instead:
91
95
  > ```toml
92
96
  > [mcp_servers.roblox-mcp-pro]
93
97
  > command = "npx"
94
- > args = ["-y", "roblox-mcp-pro"]
98
+ > args = ["-y", "roblox-mcp-pro@latest"]
95
99
  > ```
96
100
 
97
101
  **Antigravity / Gemini CLI**
98
102
 
99
103
  ```bash
100
- gemini mcp add roblox-mcp-pro npx -y roblox-mcp-pro
104
+ gemini mcp add roblox-mcp-pro npx -y roblox-mcp-pro@latest
101
105
  ```
102
106
 
103
107
  > If that doesn't work, add the JSON block below to `~/.gemini/config/mcp_config.json`.
@@ -111,7 +115,7 @@ These don't have a CLI command, so you paste the **same JSON** into the client's
111
115
  "mcpServers": {
112
116
  "roblox-mcp-pro": {
113
117
  "command": "npx",
114
- "args": ["-y", "roblox-mcp-pro"]
118
+ "args": ["-y", "roblox-mcp-pro@latest"]
115
119
  }
116
120
  }
117
121
  }
@@ -143,7 +147,7 @@ in that client's config file):
143
147
  "mcpServers": {
144
148
  "roblox-mcp-pro": {
145
149
  "command": "npx",
146
- "args": ["-y", "roblox-mcp-pro"],
150
+ "args": ["-y", "roblox-mcp-pro@latest"],
147
151
  "env": { "ROBLOX_MCP_LICENSE": "YOUR-LICENSE-KEY" }
148
152
  }
149
153
  }
@@ -155,7 +159,7 @@ For **Codex** (TOML), add the env under the server block:
155
159
  ```toml
156
160
  [mcp_servers.roblox-mcp-pro]
157
161
  command = "npx"
158
- args = ["-y", "roblox-mcp-pro"]
162
+ args = ["-y", "roblox-mcp-pro@latest"]
159
163
  env = { ROBLOX_MCP_LICENSE = "YOUR-LICENSE-KEY" }
160
164
  ```
161
165
 
@@ -173,13 +177,18 @@ Don't want it in a config file? Save the key to **`%USERPROFILE%\.roblox-mcp-pro
173
177
 
174
178
  ### Part 2 — Install the Studio plugin
175
179
 
176
- The plugin ships **inside the npm package**. One command copies it into your Roblox Plugins folder:
180
+ **Usually automatic** the first time your AI client starts the server, it copies the plugin into
181
+ your Roblox Plugins folder for you (and keeps it updated on every launch). In most cases you can
182
+ skip straight to Part 3.
183
+
184
+ Want to install it right now without starting a client? Run:
177
185
 
178
186
  ```bash
179
- npx roblox-mcp-pro install-plugin
187
+ npx roblox-mcp-pro@latest install-plugin
180
188
  ```
181
189
 
182
- That's it — it works on Windows and macOS and tells you where it put the file.
190
+ It works on Windows and macOS and tells you where it put the file. (To disable the automatic
191
+ behavior, set the env var `ROBLOX_MCP_NO_PLUGIN_AUTOINSTALL=1`.)
183
192
 
184
193
  **Prefer to do it by hand?** The file lives in the installed package at
185
194
  `node_modules/roblox-mcp-pro/plugin/RobloxMcpPro.rbxmx` — copy it into:
package/dist/index.js CHANGED
@@ -15,7 +15,8 @@ import { ensureBroker, register, identify, deregister } from "./client/transport
15
15
  import { BRIDGE_HOST, BRIDGE_PORT } from "./constants.js";
16
16
  import { resolveLicense } from "./licensing/license.js";
17
17
  import { installLicenseGate } from "./licensing/gate.js";
18
- import { installPlugin } from "./install-plugin.js";
18
+ import { installPlugin, ensurePluginInstalled } from "./install-plugin.js";
19
+ import { VERSION } from "./version.js";
19
20
  function log(message) {
20
21
  process.stderr.write(`[roblox-mcp-pro] ${message}\n`);
21
22
  }
@@ -25,6 +26,23 @@ async function main() {
25
26
  await installPlugin();
26
27
  return;
27
28
  }
29
+ if (process.argv[2] === "--version" || process.argv[2] === "-v") {
30
+ process.stdout.write(`${VERSION}\n`);
31
+ return;
32
+ }
33
+ log(`roblox-mcp-pro v${VERSION}`);
34
+ // Keep the Studio plugin up to date automatically — copy the bundled plugin
35
+ // into the Roblox Plugins folder when it's missing or out of date, so a server
36
+ // update also updates the plugin with no action from the user.
37
+ if (process.env.ROBLOX_MCP_NO_PLUGIN_AUTOINSTALL !== "1") {
38
+ const sync = await ensurePluginInstalled();
39
+ if (sync.status === "installed") {
40
+ log(`installed Studio plugin → ${sync.dest} (open Studio and click MCP)`);
41
+ }
42
+ else if (sync.status === "updated") {
43
+ log(`updated Studio plugin → restart Roblox Studio to load the new version`);
44
+ }
45
+ }
28
46
  const server = new McpServer({
29
47
  name: "roblox-studio-mcp-server",
30
48
  version: "0.1.0",
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,23 @@
1
1
  /**
2
- * `roblox-mcp-pro install-plugin` copies the bundled Studio plugin
3
- * (RobloxMcpPro.rbxmx, shipped inside this npm package) into the local Roblox
4
- * Plugins folder. This is how customers get the plugin without needing access to
5
- * the (private) source repo or a GitHub Release.
2
+ * Studio plugin distribution. The plugin (RobloxMcpPro.rbxmx) ships inside this
3
+ * npm package, so customers never touch a GitHub release.
6
4
  *
7
- * Runs as a one-shot CLI command, so it logs to stdout/stderr normally (it is
8
- * NOT the MCP stdio server see index.ts for the argv dispatch).
5
+ * - `ensurePluginInstalled()` runs automatically on server startup and copies the
6
+ * bundled plugin into the Roblox Plugins folder *only when it's missing or
7
+ * different* — so plugin updates happen with zero customer effort.
8
+ * - `installPlugin()` is the explicit `roblox-mcp-pro install-plugin` CLI command
9
+ * (manual install / repair), logging to stdout/stderr.
9
10
  */
11
+ export type PluginSyncStatus = "installed" | "updated" | "current" | "unsupported" | "error";
12
+ export interface PluginSyncResult {
13
+ status: PluginSyncStatus;
14
+ dest?: string;
15
+ }
16
+ /**
17
+ * Copy the bundled plugin into the Roblox Plugins folder if it's missing or
18
+ * differs from what's installed. Best-effort: never throws.
19
+ */
20
+ export declare function ensurePluginInstalled(): Promise<PluginSyncResult>;
21
+ /** Explicit CLI command: install/repair the plugin with human-readable output. */
10
22
  export declare function installPlugin(): Promise<void>;
11
23
  //# sourceMappingURL=install-plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"install-plugin.d.ts","sourceRoot":"","sources":["../src/install-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAoBH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAmCnD"}
1
+ {"version":3,"file":"install-plugin.d.ts","sourceRoot":"","sources":["../src/install-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA0BH,MAAM,MAAM,gBAAgB,GACxB,WAAW,GACX,SAAS,GACT,SAAS,GACT,aAAa,GACb,OAAO,CAAC;AAEZ,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,gBAAgB,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAqBvE;AAED,kFAAkF;AAClF,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAyBnD"}
@@ -1,16 +1,22 @@
1
1
  /**
2
- * `roblox-mcp-pro install-plugin` copies the bundled Studio plugin
3
- * (RobloxMcpPro.rbxmx, shipped inside this npm package) into the local Roblox
4
- * Plugins folder. This is how customers get the plugin without needing access to
5
- * the (private) source repo or a GitHub Release.
2
+ * Studio plugin distribution. The plugin (RobloxMcpPro.rbxmx) ships inside this
3
+ * npm package, so customers never touch a GitHub release.
6
4
  *
7
- * Runs as a one-shot CLI command, so it logs to stdout/stderr normally (it is
8
- * NOT the MCP stdio server see index.ts for the argv dispatch).
5
+ * - `ensurePluginInstalled()` runs automatically on server startup and copies the
6
+ * bundled plugin into the Roblox Plugins folder *only when it's missing or
7
+ * different* — so plugin updates happen with zero customer effort.
8
+ * - `installPlugin()` is the explicit `roblox-mcp-pro install-plugin` CLI command
9
+ * (manual install / repair), logging to stdout/stderr.
9
10
  */
10
11
  import os from "node:os";
11
12
  import path from "node:path";
12
13
  import { fileURLToPath } from "node:url";
13
14
  import { promises as fs } from "node:fs";
15
+ /** Absolute path to the plugin file bundled in this package. */
16
+ function bundledPluginPath() {
17
+ const here = path.dirname(fileURLToPath(import.meta.url));
18
+ return path.join(here, "..", "plugin", "RobloxMcpPro.rbxmx");
19
+ }
14
20
  /** The local Roblox Studio plugins folder for this OS, or null if unsupported. */
15
21
  function pluginsDir() {
16
22
  const platform = os.platform();
@@ -23,30 +29,52 @@ function pluginsDir() {
23
29
  }
24
30
  return null;
25
31
  }
32
+ /**
33
+ * Copy the bundled plugin into the Roblox Plugins folder if it's missing or
34
+ * differs from what's installed. Best-effort: never throws.
35
+ */
36
+ export async function ensurePluginInstalled() {
37
+ try {
38
+ const dir = pluginsDir();
39
+ if (!dir)
40
+ return { status: "unsupported" };
41
+ const dest = path.join(dir, "RobloxMcpPro.rbxmx");
42
+ const source = await fs.readFile(bundledPluginPath());
43
+ let existing = null;
44
+ try {
45
+ existing = await fs.readFile(dest);
46
+ }
47
+ catch {
48
+ existing = null;
49
+ }
50
+ if (existing && existing.equals(source))
51
+ return { status: "current", dest };
52
+ await fs.mkdir(dir, { recursive: true });
53
+ await fs.writeFile(dest, source);
54
+ return { status: existing ? "updated" : "installed", dest };
55
+ }
56
+ catch {
57
+ return { status: "error" };
58
+ }
59
+ }
60
+ /** Explicit CLI command: install/repair the plugin with human-readable output. */
26
61
  export async function installPlugin() {
27
- const here = path.dirname(fileURLToPath(import.meta.url));
28
- const source = path.join(here, "..", "plugin", "RobloxMcpPro.rbxmx");
29
62
  const dir = pluginsDir();
30
63
  if (!dir) {
31
64
  console.error("Auto-install isn't supported on this OS. Copy the plugin file into your\n" +
32
65
  "Roblox Studio plugins folder manually. File location:\n " +
33
- source);
66
+ bundledPluginPath());
34
67
  process.exitCode = 1;
35
68
  return;
36
69
  }
37
- try {
38
- await fs.access(source);
39
- }
40
- catch {
41
- console.error(`Bundled plugin not found at:\n ${source}\n` +
42
- "Reinstall the package (npm i -g roblox-mcp-pro) and try again.");
70
+ const result = await ensurePluginInstalled();
71
+ if (result.status === "error") {
72
+ console.error("Failed to install the plugin. Try again or copy it manually from:\n " + bundledPluginPath());
43
73
  process.exitCode = 1;
44
74
  return;
45
75
  }
46
- const dest = path.join(dir, "RobloxMcpPro.rbxmx");
47
- await fs.mkdir(dir, { recursive: true });
48
- await fs.copyFile(source, dest);
49
- console.log(`✅ Installed the Roblox MCP Pro plugin to:\n ${dest}\n`);
76
+ const dest = result.dest ?? path.join(dir, "RobloxMcpPro.rbxmx");
77
+ console.log(`✅ Roblox MCP Pro plugin is installed at:\n ${dest}\n`);
50
78
  console.log("Next: open Roblox Studio and click the MCP toolbar button to connect.\n" +
51
79
  "(If Studio was already open, restart it so the plugin loads.)");
52
80
  }
@@ -1 +1 @@
1
- {"version":3,"file":"install-plugin.js","sourceRoot":"","sources":["../src/install-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAEzC,kFAAkF;AAClF,SAAS,UAAU;IACjB,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC/B,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACrF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,oBAAoB,CAAC,CAAC;IAErE,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CACX,2EAA2E;YACzE,2DAA2D;YAC3D,MAAM,CACT,CAAC;QACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CACX,mCAAmC,MAAM,IAAI;YAC3C,gEAAgE,CACnE,CAAC;QACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;IAClD,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAEhC,OAAO,CAAC,GAAG,CAAC,gDAAgD,IAAI,IAAI,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CACT,yEAAyE;QACvE,+DAA+D,CAClE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"install-plugin.js","sourceRoot":"","sources":["../src/install-plugin.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/tools/system.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgBzE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmD3D"}
1
+ {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/tools/system.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiBzE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoD3D"}
@@ -6,6 +6,7 @@ import { callStudio } from "../services/studio.js";
6
6
  import { status as brokerStatus } from "../client/transport.js";
7
7
  import { ok } from "../services/format.js";
8
8
  import { currentLicense } from "../licensing/license.js";
9
+ import { VERSION } from "../version.js";
9
10
  const InputSchema = z.object({}).strict();
10
11
  export function registerSystemTools(server) {
11
12
  server.registerTool("system_info", {
@@ -23,10 +24,11 @@ export function registerSystemTools(server) {
23
24
  }, async () => {
24
25
  const status = await brokerStatus();
25
26
  const license = currentLicense();
26
- const out = { bridge: status, license };
27
+ const out = { version: VERSION, bridge: status, license };
27
28
  let text = [
28
29
  "# Roblox MCP — System Info",
29
30
  "",
31
+ `- Version: ${VERSION}`,
30
32
  `- License: ${license.status} — ${license.message}`,
31
33
  `- Plugin connected: ${status.pluginConnected ? "yes ✅" : "no ❌"}`,
32
34
  `- Queued commands: ${status.queued}`,
@@ -1 +1 @@
1
- {"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/tools/system.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAS1C,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EACT,sGAAsG;YACtG,iFAAiF;YACjF,4GAA4G;QAC9G,WAAW,EAAE,WAAW,CAAC,KAAK;QAC9B,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,IAAI,EAAE;QACT,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;QACjC,MAAM,GAAG,GAA4B,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QACjE,IAAI,IAAI,GAAG;YACT,4BAA4B;YAC5B,EAAE;YACF,cAAc,OAAO,CAAC,MAAM,MAAM,OAAO,CAAC,OAAO,EAAE;YACnD,uBAAuB,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE;YAClE,sBAAsB,MAAM,CAAC,MAAM,EAAE;YACrC,yBAAyB,MAAM,CAAC,QAAQ,EAAE;SAC3C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAa,aAAa,EAAE,EAAE,CAAC,CAAC;gBAC/D,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;gBACpB,IAAI;oBACF,cAAc,MAAM,CAAC,SAAS,IAAI,GAAG,QAAQ,MAAM,CAAC,OAAO,IAAI,GAAG,GAAG;wBACrE,uBAAuB,MAAM,CAAC,aAAa,IAAI,GAAG,EAAE;wBACpD,6BAA6B,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACnE,CAAC;YAAC,MAAM,CAAC;gBACP,0EAA0E;gBAC1E,IAAI,IAAI,2DAA2D,CAAC;YACtE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI;gBACF,8EAA8E;oBAC9E,6CAA6C,CAAC;QAClD,CAAC;QAED,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACvB,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/tools/system.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAS1C,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EACT,sGAAsG;YACtG,iFAAiF;YACjF,4GAA4G;QAC9G,WAAW,EAAE,WAAW,CAAC,KAAK;QAC9B,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,IAAI,EAAE;QACT,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;QACjC,MAAM,GAAG,GAA4B,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QACnF,IAAI,IAAI,GAAG;YACT,4BAA4B;YAC5B,EAAE;YACF,cAAc,OAAO,EAAE;YACvB,cAAc,OAAO,CAAC,MAAM,MAAM,OAAO,CAAC,OAAO,EAAE;YACnD,uBAAuB,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE;YAClE,sBAAsB,MAAM,CAAC,MAAM,EAAE;YACrC,yBAAyB,MAAM,CAAC,QAAQ,EAAE;SAC3C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAa,aAAa,EAAE,EAAE,CAAC,CAAC;gBAC/D,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;gBACpB,IAAI;oBACF,cAAc,MAAM,CAAC,SAAS,IAAI,GAAG,QAAQ,MAAM,CAAC,OAAO,IAAI,GAAG,GAAG;wBACrE,uBAAuB,MAAM,CAAC,aAAa,IAAI,GAAG,EAAE;wBACpD,6BAA6B,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACnE,CAAC;YAAC,MAAM,CAAC;gBACP,0EAA0E;gBAC1E,IAAI,IAAI,2DAA2D,CAAC;YACtE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI;gBACF,8EAA8E;oBAC9E,6CAA6C,CAAC;QAClD,CAAC;QAED,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACvB,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const VERSION: string;
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,OAAO,QAAU,CAAC"}
@@ -0,0 +1,14 @@
1
+ /** The running package version, read from package.json at the package root. */
2
+ import { readFileSync } from "node:fs";
3
+ let version = "unknown";
4
+ try {
5
+ // dist/version.js -> ../package.json (package root; always shipped by npm).
6
+ const pkg = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8"));
7
+ if (pkg.version)
8
+ version = pkg.version;
9
+ }
10
+ catch {
11
+ // Leave "unknown" if package.json can't be read.
12
+ }
13
+ export const VERSION = version;
14
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,IAAI,OAAO,GAAG,SAAS,CAAC;AACxB,IAAI,CAAC;IACH,4EAA4E;IAC5E,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAC1C,CAAC;IAC1B,IAAI,GAAG,CAAC,OAAO;QAAE,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;AACzC,CAAC;AAAC,MAAM,CAAC;IACP,iDAAiD;AACnD,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "roblox-mcp-pro",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "MCP server that lets AI agents control Roblox Studio: live Luau execution, instance query/mutate, UI/terrain/lighting, and bidirectional Studio<->local sync. Paid subscription with a free trial.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "author": "Peerapol",