minecraft-mcp-rs 1.3.1 → 1.3.2

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
@@ -35,7 +35,7 @@ For Claude Desktop / Cursor, add to your MCP client config:
35
35
  > `-y` flag (bunx installs on demand without prompting).
36
36
 
37
37
  See the [root README](https://github.com/halfoffive/minecraft-mcp-rs#readme) for
38
- the full documentation (config file, MCP tools, CLI flags).
38
+ the full documentation (environment variables, MCP tools, CLI flags).
39
39
 
40
40
  ## Platform packages
41
41
 
@@ -14,6 +14,7 @@
14
14
  // and exit 1 instead of crashing with an unhelpful stack trace.
15
15
 
16
16
  const { spawnSync } = require("node:child_process");
17
+ const fs = require("node:fs");
17
18
 
18
19
  // Map of `${process.platform}-${process.arch}` to [packageName, binaryName].
19
20
  // The binary names match what the CI npm-publish job stages into each
@@ -54,5 +55,33 @@ try {
54
55
  process.exit(1);
55
56
  }
56
57
 
57
- const result = spawnSync(binPath, process.argv.slice(2), { stdio: "inherit" });
58
+ // Spawn options shared by both attempts below. `windowsHide` keeps a console
59
+ // window from flashing when the shim is launched from an MCP client host on
60
+ // Windows; stdio stays inherited either way (in --stdio mode stdout IS the
61
+ // MCP JSON-RPC transport and must reach the parent untouched).
62
+ const spawnOptions = { stdio: "inherit", windowsHide: true };
63
+
64
+ let result = spawnSync(binPath, process.argv.slice(2), spawnOptions);
65
+
66
+ // npx/bunx cache extraction can lose the executable bit on POSIX systems
67
+ // (tarball mode bits are not always preserved through the cache). A spawn
68
+ // that fails with EACCES/ENOEXEC is retried once after restoring +x, so
69
+ // `npx -y minecraft-mcp-rs` self-heals instead of dead-ending.
70
+ if (
71
+ result.error &&
72
+ process.platform !== "win32" &&
73
+ (result.error.code === "EACCES" || result.error.code === "ENOEXEC")
74
+ ) {
75
+ try {
76
+ fs.chmodSync(binPath, 0o755);
77
+ result = spawnSync(binPath, process.argv.slice(2), spawnOptions);
78
+ } catch {
79
+ // chmod failed (read-only store, etc.) — fall through to the error exit.
80
+ }
81
+ }
82
+
83
+ if (result.error) {
84
+ console.error(`Failed to launch ${binPath}: ${result.error.message}`);
85
+ process.exit(1);
86
+ }
58
87
  process.exit(result.status === null ? 1 : result.status);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "minecraft-mcp-rs",
3
- "version": "1.3.1",
3
+ "version": "1.3.2",
4
4
  "description": "MCP server that controls a Minecraft bot (azalea) — prebuilt binaries",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -20,10 +20,10 @@
20
20
  "node": ">=18"
21
21
  },
22
22
  "optionalDependencies": {
23
- "@minecraft-mcp-rs/minecraft-mcp-rs-windows-x64": "1.3.1",
24
- "@minecraft-mcp-rs/minecraft-mcp-rs-windows-arm64": "1.3.1",
25
- "@minecraft-mcp-rs/minecraft-mcp-rs-darwin-arm64": "1.3.1",
26
- "@minecraft-mcp-rs/minecraft-mcp-rs-linux-x64": "1.3.1",
27
- "@minecraft-mcp-rs/minecraft-mcp-rs-linux-arm64": "1.3.1"
23
+ "@minecraft-mcp-rs/minecraft-mcp-rs-windows-x64": "1.3.2",
24
+ "@minecraft-mcp-rs/minecraft-mcp-rs-windows-arm64": "1.3.2",
25
+ "@minecraft-mcp-rs/minecraft-mcp-rs-darwin-arm64": "1.3.2",
26
+ "@minecraft-mcp-rs/minecraft-mcp-rs-linux-x64": "1.3.2",
27
+ "@minecraft-mcp-rs/minecraft-mcp-rs-linux-arm64": "1.3.2"
28
28
  }
29
29
  }