@justanothermldude/mcp-exec 1.3.2 → 1.3.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/dist/bridge/index.d.ts +1 -1
- package/dist/bridge/index.d.ts.map +1 -1
- package/dist/bridge/index.js +1 -1
- package/dist/bridge/index.js.map +1 -1
- package/dist/bridge/port-cleanup.d.ts +0 -7
- package/dist/bridge/port-cleanup.d.ts.map +1 -1
- package/dist/bridge/port-cleanup.js +3 -57
- package/dist/bridge/port-cleanup.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -42
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/bridge/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { MCPBridge } from './server.js';
|
|
2
2
|
export type { CallRequest, CallResponse, MCPBridgeConfig } from './server.js';
|
|
3
|
-
export { cleanupStaleProcess,
|
|
3
|
+
export { cleanupStaleProcess, isPortInUse } from './port-cleanup.js';
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bridge/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bridge/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/bridge/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// MCP Bridge HTTP server exports
|
|
2
2
|
export { MCPBridge } from './server.js';
|
|
3
|
-
export { cleanupStaleProcess,
|
|
3
|
+
export { cleanupStaleProcess, isPortInUse } from './port-cleanup.js';
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
package/dist/bridge/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bridge/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bridge/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -6,13 +6,6 @@
|
|
|
6
6
|
* @returns true if any processes were killed, false otherwise
|
|
7
7
|
*/
|
|
8
8
|
export declare function cleanupStaleProcess(port: number): Promise<boolean>;
|
|
9
|
-
/**
|
|
10
|
-
* Kill all orphaned mcp-exec processes (PPID=1) system-wide.
|
|
11
|
-
* Should be called at startup to clean up leftovers from crashed/closed parent sessions.
|
|
12
|
-
*
|
|
13
|
-
* @returns number of processes killed
|
|
14
|
-
*/
|
|
15
|
-
export declare function cleanupOrphanedProcesses(): Promise<number>;
|
|
16
9
|
/**
|
|
17
10
|
* Check if a port is currently in use
|
|
18
11
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"port-cleanup.d.ts","sourceRoot":"","sources":["../../src/bridge/port-cleanup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"port-cleanup.d.ts","sourceRoot":"","sources":["../../src/bridge/port-cleanup.ts"],"names":[],"mappings":"AAoCA;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAsBxE;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Port cleanup utilities for handling stale mcp-exec processes
|
|
2
|
+
* Port cleanup utilities for handling stale mcp-exec processes on the bridge port.
|
|
3
|
+
* Orphan process cleanup (PPID=1) is handled by cleanupOrphanedProcesses in core.
|
|
3
4
|
*/
|
|
4
5
|
import { execSync } from 'child_process';
|
|
6
|
+
import { isOrphanedProcess } from '@justanothermldude/meta-mcp-core';
|
|
5
7
|
/**
|
|
6
8
|
* Check if a process is an mcp-exec process by examining its command line
|
|
7
9
|
*/
|
|
@@ -14,18 +16,6 @@ function isMcpExecProcess(pid) {
|
|
|
14
16
|
return false;
|
|
15
17
|
}
|
|
16
18
|
}
|
|
17
|
-
/**
|
|
18
|
-
* Check if a process is orphaned (parent is init/launchd, PID 1)
|
|
19
|
-
*/
|
|
20
|
-
function isOrphanedProcess(pid) {
|
|
21
|
-
try {
|
|
22
|
-
const ppid = execSync(`ps -p ${pid} -o ppid=`, { encoding: 'utf8' }).trim();
|
|
23
|
-
return parseInt(ppid, 10) === 1;
|
|
24
|
-
}
|
|
25
|
-
catch {
|
|
26
|
-
return false;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
19
|
/**
|
|
30
20
|
* Get PIDs of processes listening on a specific port
|
|
31
21
|
*/
|
|
@@ -44,24 +34,6 @@ function getProcessesOnPort(port) {
|
|
|
44
34
|
return [];
|
|
45
35
|
}
|
|
46
36
|
}
|
|
47
|
-
/**
|
|
48
|
-
* Find all mcp-exec process PIDs system-wide, excluding the current process
|
|
49
|
-
*/
|
|
50
|
-
function getAllMcpExecPids() {
|
|
51
|
-
try {
|
|
52
|
-
const result = execSync(`pgrep -f 'mcp-exec'`, { encoding: 'utf8' }).trim();
|
|
53
|
-
if (!result)
|
|
54
|
-
return [];
|
|
55
|
-
return result
|
|
56
|
-
.split('\n')
|
|
57
|
-
.filter(Boolean)
|
|
58
|
-
.map((pid) => parseInt(pid, 10))
|
|
59
|
-
.filter((pid) => !isNaN(pid) && pid !== process.pid);
|
|
60
|
-
}
|
|
61
|
-
catch {
|
|
62
|
-
return [];
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
37
|
/**
|
|
66
38
|
* Attempt to clean up stale mcp-exec processes on a specific port.
|
|
67
39
|
* Kills processes that match mcp-exec/meta-mcp in their command line OR are orphaned (PPID=1).
|
|
@@ -86,36 +58,10 @@ export async function cleanupStaleProcess(port) {
|
|
|
86
58
|
}
|
|
87
59
|
}
|
|
88
60
|
if (killedAny) {
|
|
89
|
-
// Give processes time to terminate
|
|
90
61
|
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
91
62
|
}
|
|
92
63
|
return killedAny;
|
|
93
64
|
}
|
|
94
|
-
/**
|
|
95
|
-
* Kill all orphaned mcp-exec processes (PPID=1) system-wide.
|
|
96
|
-
* Should be called at startup to clean up leftovers from crashed/closed parent sessions.
|
|
97
|
-
*
|
|
98
|
-
* @returns number of processes killed
|
|
99
|
-
*/
|
|
100
|
-
export async function cleanupOrphanedProcesses() {
|
|
101
|
-
const pids = getAllMcpExecPids();
|
|
102
|
-
let killed = 0;
|
|
103
|
-
for (const pid of pids) {
|
|
104
|
-
if (isOrphanedProcess(pid)) {
|
|
105
|
-
try {
|
|
106
|
-
process.kill(pid, 'SIGTERM');
|
|
107
|
-
killed++;
|
|
108
|
-
}
|
|
109
|
-
catch {
|
|
110
|
-
// Process may have already exited
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
if (killed > 0) {
|
|
115
|
-
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
116
|
-
}
|
|
117
|
-
return killed;
|
|
118
|
-
}
|
|
119
65
|
/**
|
|
120
66
|
* Check if a port is currently in use
|
|
121
67
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"port-cleanup.js","sourceRoot":"","sources":["../../src/bridge/port-cleanup.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"port-cleanup.js","sourceRoot":"","sources":["../../src/bridge/port-cleanup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE;;GAEG;AACH,SAAS,gBAAgB,CAAC,GAAW;IACnC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,GAAG,cAAc,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAClF,OAAO,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,IAAY;IACtC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1E,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QACvB,OAAO,MAAM;aACV,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,OAAO,CAAC;aACf,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;aAC/B,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAY;IACpD,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAEpC,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBAC7B,SAAS,GAAG,IAAI,CAAC;YACnB,CAAC;YAAC,MAAM,CAAC;gBACP,kCAAkC;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7C,CAAC"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAWA,cAAc,kBAAkB,CAAC;AAGjC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAG5E,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEjF,eAAO,MAAM,QAAQ,aAAa,CAAC;AACnC,eAAO,MAAM,OAAO,yBAAyB,CAAC;AAe9C;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAInF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,eAAe,CAE9E"}
|
package/dist/index.js
CHANGED
|
@@ -870,6 +870,7 @@ import { getServerConfig, listServers as listServers2 } from "@justanothermldude
|
|
|
870
870
|
|
|
871
871
|
// dist/bridge/port-cleanup.js
|
|
872
872
|
import { execSync } from "child_process";
|
|
873
|
+
import { isOrphanedProcess } from "@justanothermldude/meta-mcp-core";
|
|
873
874
|
function isMcpExecProcess(pid) {
|
|
874
875
|
try {
|
|
875
876
|
const cmdline = execSync(`ps -p ${pid} -o command=`, { encoding: "utf8" }).trim();
|
|
@@ -879,15 +880,6 @@ function isMcpExecProcess(pid) {
|
|
|
879
880
|
}
|
|
880
881
|
}
|
|
881
882
|
__name(isMcpExecProcess, "isMcpExecProcess");
|
|
882
|
-
function isOrphanedProcess(pid) {
|
|
883
|
-
try {
|
|
884
|
-
const ppid = execSync(`ps -p ${pid} -o ppid=`, { encoding: "utf8" }).trim();
|
|
885
|
-
return parseInt(ppid, 10) === 1;
|
|
886
|
-
} catch {
|
|
887
|
-
return false;
|
|
888
|
-
}
|
|
889
|
-
}
|
|
890
|
-
__name(isOrphanedProcess, "isOrphanedProcess");
|
|
891
883
|
function getProcessesOnPort(port) {
|
|
892
884
|
try {
|
|
893
885
|
const result = execSync(`lsof -ti :${port}`, { encoding: "utf8" }).trim();
|
|
@@ -899,17 +891,6 @@ function getProcessesOnPort(port) {
|
|
|
899
891
|
}
|
|
900
892
|
}
|
|
901
893
|
__name(getProcessesOnPort, "getProcessesOnPort");
|
|
902
|
-
function getAllMcpExecPids() {
|
|
903
|
-
try {
|
|
904
|
-
const result = execSync(`pgrep -f 'mcp-exec'`, { encoding: "utf8" }).trim();
|
|
905
|
-
if (!result)
|
|
906
|
-
return [];
|
|
907
|
-
return result.split("\n").filter(Boolean).map((pid) => parseInt(pid, 10)).filter((pid) => !isNaN(pid) && pid !== process.pid);
|
|
908
|
-
} catch {
|
|
909
|
-
return [];
|
|
910
|
-
}
|
|
911
|
-
}
|
|
912
|
-
__name(getAllMcpExecPids, "getAllMcpExecPids");
|
|
913
894
|
async function cleanupStaleProcess(port) {
|
|
914
895
|
const pids = getProcessesOnPort(port);
|
|
915
896
|
if (pids.length === 0)
|
|
@@ -930,24 +911,6 @@ async function cleanupStaleProcess(port) {
|
|
|
930
911
|
return killedAny;
|
|
931
912
|
}
|
|
932
913
|
__name(cleanupStaleProcess, "cleanupStaleProcess");
|
|
933
|
-
async function cleanupOrphanedProcesses() {
|
|
934
|
-
const pids = getAllMcpExecPids();
|
|
935
|
-
let killed = 0;
|
|
936
|
-
for (const pid of pids) {
|
|
937
|
-
if (isOrphanedProcess(pid)) {
|
|
938
|
-
try {
|
|
939
|
-
process.kill(pid, "SIGTERM");
|
|
940
|
-
killed++;
|
|
941
|
-
} catch {
|
|
942
|
-
}
|
|
943
|
-
}
|
|
944
|
-
}
|
|
945
|
-
if (killed > 0) {
|
|
946
|
-
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
947
|
-
}
|
|
948
|
-
return killed;
|
|
949
|
-
}
|
|
950
|
-
__name(cleanupOrphanedProcesses, "cleanupOrphanedProcesses");
|
|
951
914
|
function isPortInUse(port) {
|
|
952
915
|
return getProcessesOnPort(port).length > 0;
|
|
953
916
|
}
|
|
@@ -1582,9 +1545,9 @@ function createMcpExecServer(pool, config = {}) {
|
|
|
1582
1545
|
__name(createMcpExecServer, "createMcpExecServer");
|
|
1583
1546
|
|
|
1584
1547
|
// dist/index.js
|
|
1585
|
-
import { ServerPool, createConnection, getServerConfig as getServerConfig2, loadServerManifest as loadServerManifest2 } from "@justanothermldude/meta-mcp-core";
|
|
1548
|
+
import { ServerPool, createConnection, getServerConfig as getServerConfig2, loadServerManifest as loadServerManifest2, cleanupOrphanedProcesses } from "@justanothermldude/meta-mcp-core";
|
|
1586
1549
|
var APP_NAME = "mcp-exec";
|
|
1587
|
-
var VERSION2 = "1.3.
|
|
1550
|
+
var VERSION2 = "1.3.3";
|
|
1588
1551
|
var defaultExecutor = null;
|
|
1589
1552
|
function getDefaultExecutor() {
|
|
1590
1553
|
if (!defaultExecutor) {
|
|
@@ -1626,7 +1589,7 @@ Environment:
|
|
|
1626
1589
|
process.exit(0);
|
|
1627
1590
|
}
|
|
1628
1591
|
async function main() {
|
|
1629
|
-
const killed = await cleanupOrphanedProcesses();
|
|
1592
|
+
const killed = await cleanupOrphanedProcesses("mcp-exec");
|
|
1630
1593
|
if (killed > 0) {
|
|
1631
1594
|
process.stderr.write(`Cleaned up ${killed} orphaned mcp-exec process(es)
|
|
1632
1595
|
`);
|
|
@@ -1683,7 +1646,6 @@ export {
|
|
|
1683
1646
|
SandboxExecutor,
|
|
1684
1647
|
VERSION2 as VERSION,
|
|
1685
1648
|
VirtualModuleResolver,
|
|
1686
|
-
cleanupOrphanedProcesses,
|
|
1687
1649
|
cleanupStaleProcess,
|
|
1688
1650
|
createDefaultFilesystemConfig,
|
|
1689
1651
|
createDefaultNetworkConfig,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;GAIG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,eAAe,EAAE,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|