@rishibhushan/jenkins-mcp-server 1.1.8 → 1.1.10

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 (2) hide show
  1. package/bin/jenkins-mcp.js +68 -70
  2. package/package.json +1 -1
@@ -28,83 +28,81 @@ const pythonPath = path.join(
28
28
  "python"
29
29
  );
30
30
 
31
- if (!fs.existsSync(pythonPath)) {
32
- console.error("[jenkins-mcp] Python venv not found, bootstrapping...");
33
-
34
- const bootstrap = spawn("python3", ["-m", "venv", ".venv"], {
35
- cwd: PACKAGE_ROOT,
36
- stdio: "inherit",
37
- });
38
-
39
- bootstrap.on("exit", (code) => {
40
- if (code !== 0) {
41
- console.error("[jenkins-mcp] Failed to create venv");
42
- process.exit(1);
43
- }
44
-
45
- const pip = path.join(PACKAGE_ROOT, ".venv", "bin", "pip");
46
-
47
- spawn(pip, ["install", "-r", "requirements.txt"], {
48
- cwd: PACKAGE_ROOT,
49
- stdio: "inherit",
50
- }).on("exit", (pipCode) => {
51
- if (pipCode !== 0) {
52
- console.error("[jenkins-mcp] Failed to install dependencies");
53
- process.exit(1);
54
- }
55
-
56
- // Re-exec self after bootstrap
57
- spawn(process.execPath, process.argv.slice(1), {
58
- stdio: "inherit",
59
- });
60
- });
31
+ async function run(cmd, args, cwd) {
32
+ return new Promise((resolve, reject) => {
33
+ const p = spawn(cmd, args, { cwd, stdio: "inherit" });
34
+ p.on("exit", (code) =>
35
+ code === 0 ? resolve() : reject(new Error(`${cmd} failed`))
36
+ );
61
37
  });
62
-
63
- return;
64
38
  }
65
39
 
66
- /**
67
- * Forward CLI arguments (e.g. --env-file ...)
68
- */
69
- const args = process.argv.slice(2);
40
+ async function ensureVenv() {
41
+ if (fs.existsSync(pythonPath)) {
42
+ return;
43
+ }
70
44
 
71
- /**
72
- * Final Python command:
73
- * python -m jenkins_mcp_server <args>
74
- */
75
- const pythonArgs = [
76
- "-m",
77
- "jenkins_mcp_server",
78
- ...args,
79
- ];
45
+ console.error("[jenkins-mcp] Python venv not found, bootstrapping...");
80
46
 
81
- console.error("[jenkins-mcp] Python:", pythonPath);
82
- console.error("[jenkins-mcp] Args:", pythonArgs.join(" "));
47
+ await run("python3", ["-m", "venv", ".venv"], PACKAGE_ROOT);
83
48
 
84
- /**
85
- * Spawn Python MCP server
86
- */
87
- const child = spawn(pythonPath, pythonArgs, {
88
- cwd: PACKAGE_ROOT, // 🔑 critical
89
- env: {
90
- ...process.env,
91
- PYTHONPATH: path.join(PACKAGE_ROOT, "src"), // 🔑 critical
92
- },
93
- stdio: ["inherit", "inherit", "inherit"], // MCP stdio
94
- });
49
+ const pip = path.join(PACKAGE_ROOT, ".venv", "bin", "pip");
50
+ await run(pip, ["install", "-r", "requirements.txt"], PACKAGE_ROOT);
95
51
 
96
- /**
97
- * Propagate exit code
98
- */
99
- child.on("exit", (code, signal) => {
100
- if (signal) {
101
- console.error("[jenkins-mcp] exited due to signal:", signal);
52
+ console.error("[jenkins-mcp] Bootstrap complete");
53
+ }
54
+
55
+ (async () => {
56
+ try {
57
+ await ensureVenv();
58
+ } catch (err) {
59
+ console.error("[jenkins-mcp] Bootstrap failed:", err);
102
60
  process.exit(1);
103
61
  }
104
- process.exit(code ?? 0);
105
- });
106
62
 
107
- child.on("error", (err) => {
108
- console.error("[jenkins-mcp] failed to start:", err);
109
- process.exit(1);
110
- });
63
+ /**
64
+ * Forward CLI arguments (e.g. --env-file ...)
65
+ */
66
+ const args = process.argv.slice(2);
67
+
68
+ /**
69
+ * Final Python command:
70
+ * python -m jenkins_mcp_server <args>
71
+ */
72
+ const pythonArgs = [
73
+ "-m",
74
+ "jenkins_mcp_server",
75
+ ...args,
76
+ ];
77
+
78
+ console.error("[jenkins-mcp] Python:", pythonPath);
79
+ console.error("[jenkins-mcp] Args:", pythonArgs.join(" "));
80
+
81
+ /**
82
+ * Spawn Python MCP server
83
+ */
84
+ const child = spawn(pythonPath, pythonArgs, {
85
+ cwd: PACKAGE_ROOT, // 🔑 critical
86
+ env: {
87
+ ...process.env,
88
+ PYTHONPATH: path.join(PACKAGE_ROOT, "src"), // 🔑 critical
89
+ },
90
+ stdio: ["inherit", "inherit", "inherit"], // MCP stdio
91
+ });
92
+
93
+ /**
94
+ * Propagate exit code
95
+ */
96
+ child.on("exit", (code, signal) => {
97
+ if (signal) {
98
+ console.error("[jenkins-mcp] exited due to signal:", signal);
99
+ process.exit(1);
100
+ }
101
+ process.exit(code ?? 0);
102
+ });
103
+
104
+ child.on("error", (err) => {
105
+ console.error("[jenkins-mcp] failed to start:", err);
106
+ process.exit(1);
107
+ });
108
+ })();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rishibhushan/jenkins-mcp-server",
3
- "version": "1.1.8",
3
+ "version": "1.1.10",
4
4
  "description": "AI-enabled Jenkins automation via Model Context Protocol (MCP)",
5
5
  "main": "bin/jenkins-mcp.js",
6
6
  "bin": {