staff-mcp 1.2.0 → 2.0.0

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 (133) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +178 -49
  3. package/README_zh.md +176 -47
  4. package/dist/src/data/HttpDataSession.d.ts +22 -0
  5. package/dist/src/data/HttpDataSession.js +925 -0
  6. package/dist/src/data/HttpDataSession.js.map +1 -0
  7. package/dist/src/data/node.d.ts +4 -0
  8. package/dist/src/data/node.js +93 -0
  9. package/dist/src/data/node.js.map +1 -0
  10. package/dist/src/data/types.d.ts +54 -0
  11. package/dist/src/data/types.js +2 -0
  12. package/dist/src/data/types.js.map +1 -0
  13. package/dist/src/data-stdio-docker.d.ts +10 -0
  14. package/dist/src/data-stdio-docker.js +140 -0
  15. package/dist/src/data-stdio-docker.js.map +1 -0
  16. package/dist/src/docker-proxy.d.ts +6 -1
  17. package/dist/src/docker-proxy.js +324 -147
  18. package/dist/src/docker-proxy.js.map +1 -1
  19. package/dist/src/extensions/apps.d.ts +12 -0
  20. package/dist/src/extensions/apps.js +85 -0
  21. package/dist/src/extensions/apps.js.map +1 -0
  22. package/dist/src/extensions/config.d.ts +27 -0
  23. package/dist/src/extensions/config.js +91 -0
  24. package/dist/src/extensions/config.js.map +1 -0
  25. package/dist/src/extensions/protocol.d.ts +35 -0
  26. package/dist/src/extensions/protocol.js +47 -0
  27. package/dist/src/extensions/protocol.js.map +1 -0
  28. package/dist/src/extensions/runtime.d.ts +16 -0
  29. package/dist/src/extensions/runtime.js +266 -0
  30. package/dist/src/extensions/runtime.js.map +1 -0
  31. package/dist/src/file-manager/extension.d.ts +21 -0
  32. package/dist/src/file-manager/extension.js +514 -0
  33. package/dist/src/file-manager/extension.js.map +1 -0
  34. package/dist/src/file-manager/file-core.d.ts +128 -0
  35. package/dist/src/file-manager/file-core.js +750 -0
  36. package/dist/src/file-manager/file-core.js.map +1 -0
  37. package/dist/src/file-manager/transfers.d.ts +423 -0
  38. package/dist/src/file-manager/transfers.js +540 -0
  39. package/dist/src/file-manager/transfers.js.map +1 -0
  40. package/dist/src/file-manager/ui/index.html +81 -0
  41. package/dist/src/index.js +289 -128
  42. package/dist/src/index.js.map +1 -1
  43. package/dist/src/lsp/manager.d.ts +2 -0
  44. package/dist/src/lsp/manager.js +22 -10
  45. package/dist/src/lsp/manager.js.map +1 -1
  46. package/dist/src/reverse/SseTransport.d.ts +34 -0
  47. package/dist/src/reverse/SseTransport.js +215 -0
  48. package/dist/src/reverse/SseTransport.js.map +1 -0
  49. package/dist/src/reverse/http.d.ts +7 -0
  50. package/dist/src/reverse/http.js +85 -0
  51. package/dist/src/reverse/http.js.map +1 -0
  52. package/dist/src/server.d.ts +4 -2
  53. package/dist/src/server.js +80 -18
  54. package/dist/src/server.js.map +1 -1
  55. package/dist/src/terminal/extension.d.ts +4 -0
  56. package/dist/src/terminal/extension.js +108 -0
  57. package/dist/src/terminal/extension.js.map +1 -0
  58. package/dist/src/terminal/pty.d.ts +14 -0
  59. package/dist/src/terminal/pty.js +121 -0
  60. package/dist/src/terminal/pty.js.map +1 -0
  61. package/dist/src/terminal/session.d.ts +136 -0
  62. package/dist/src/terminal/session.js +422 -0
  63. package/dist/src/terminal/session.js.map +1 -0
  64. package/dist/src/terminal/ui/index.html +183 -0
  65. package/dist/src/tools/file-tools.d.ts +2 -1
  66. package/dist/src/tools/file-tools.js +19 -7
  67. package/dist/src/tools/file-tools.js.map +1 -1
  68. package/dist/src/tools/mcp-client-tools.js +244 -104
  69. package/dist/src/tools/mcp-client-tools.js.map +1 -1
  70. package/dist/src/tools/shell-tools.js +1 -1
  71. package/dist/src/tools/shell-tools.js.map +1 -1
  72. package/dist/src/tools/skills.js +26 -1
  73. package/dist/src/tools/skills.js.map +1 -1
  74. package/dist/src/tools/system-tools.d.ts +9 -3
  75. package/dist/src/tools/system-tools.js +31 -48
  76. package/dist/src/tools/system-tools.js.map +1 -1
  77. package/dist/src/transports/http.d.ts +16 -2
  78. package/dist/src/transports/http.js +261 -59
  79. package/dist/src/transports/http.js.map +1 -1
  80. package/dist/src/transports/reverse.d.ts +23 -19
  81. package/dist/src/transports/reverse.js +130 -74
  82. package/dist/src/transports/reverse.js.map +1 -1
  83. package/dist/src/transports/stdio.d.ts +6 -2
  84. package/dist/src/transports/stdio.js +131 -19
  85. package/dist/src/transports/stdio.js.map +1 -1
  86. package/dist/src/utils/proxy.d.ts +3 -3
  87. package/dist/src/utils/proxy.js +84 -62
  88. package/dist/src/utils/proxy.js.map +1 -1
  89. package/dist/src/utils/server-activity.d.ts +6 -0
  90. package/dist/src/utils/server-activity.js +46 -0
  91. package/dist/src/utils/server-activity.js.map +1 -0
  92. package/dist/src/utils/server-lifecycle.d.ts +5 -0
  93. package/dist/src/utils/server-lifecycle.js +51 -0
  94. package/dist/src/utils/server-lifecycle.js.map +1 -0
  95. package/docs/file-manager.md +179 -0
  96. package/docs/terminal.md +66 -0
  97. package/package.json +40 -19
  98. package/dist/src/transports/fte-lifecycle.d.ts +0 -13
  99. package/dist/src/transports/fte-lifecycle.js +0 -76
  100. package/dist/src/transports/fte-lifecycle.js.map +0 -1
  101. package/dist/tests/docker-proxy.test.d.ts +0 -1
  102. package/dist/tests/docker-proxy.test.js +0 -395
  103. package/dist/tests/docker-proxy.test.js.map +0 -1
  104. package/dist/tests/file-write-queue.test.d.ts +0 -1
  105. package/dist/tests/file-write-queue.test.js +0 -105
  106. package/dist/tests/file-write-queue.test.js.map +0 -1
  107. package/dist/tests/fte-lifecycle.test.d.ts +0 -1
  108. package/dist/tests/fte-lifecycle.test.js +0 -118
  109. package/dist/tests/fte-lifecycle.test.js.map +0 -1
  110. package/dist/tests/lsp-client.test.d.ts +0 -1
  111. package/dist/tests/lsp-client.test.js +0 -52
  112. package/dist/tests/lsp-client.test.js.map +0 -1
  113. package/dist/tests/package-info.test.d.ts +0 -1
  114. package/dist/tests/package-info.test.js +0 -54
  115. package/dist/tests/package-info.test.js.map +0 -1
  116. package/dist/tests/proxy-no-proxy.test.d.ts +0 -1
  117. package/dist/tests/proxy-no-proxy.test.js +0 -156
  118. package/dist/tests/proxy-no-proxy.test.js.map +0 -1
  119. package/dist/tests/proxy.test.d.ts +0 -1
  120. package/dist/tests/proxy.test.js +0 -89
  121. package/dist/tests/proxy.test.js.map +0 -1
  122. package/dist/tests/reverse-reconnect.test.d.ts +0 -1
  123. package/dist/tests/reverse-reconnect.test.js +0 -89
  124. package/dist/tests/reverse-reconnect.test.js.map +0 -1
  125. package/dist/tests/security.test.d.ts +0 -1
  126. package/dist/tests/security.test.js +0 -21
  127. package/dist/tests/security.test.js.map +0 -1
  128. package/dist/tests/shell-tools.test.d.ts +0 -1
  129. package/dist/tests/shell-tools.test.js +0 -113
  130. package/dist/tests/shell-tools.test.js.map +0 -1
  131. package/dist/tests/test_files/test.d.ts +0 -1
  132. package/dist/tests/test_files/test.js +0 -4
  133. package/dist/tests/test_files/test.js.map +0 -1
@@ -1,24 +1,151 @@
1
1
  import { z } from "zod";
2
2
  import { spawn } from "child_process";
3
+ import { setTimeout as delay } from "node:timers/promises";
3
4
  import { Client } from "@modelcontextprotocol/sdk/client/index.js";
5
+ import { ListToolsResultSchema } from "@modelcontextprotocol/sdk/types.js";
4
6
  import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
5
7
  import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
6
8
  import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
7
9
  import { STAFF_MCP_VERSION } from "../package-info.js";
8
10
  const sessions = new Map();
11
+ function assertStarting(session) {
12
+ if (sessions.get(session.sessionId) !== session || session.startController.signal.aborted || session.status !== "starting") {
13
+ throw new Error(session.error || `MCP session '${session.sessionId}' startup was cancelled.`);
14
+ }
15
+ }
16
+ function watchClientClose(session) {
17
+ const client = session.client;
18
+ client.onclose = () => {
19
+ if (sessions.get(session.sessionId) === session && session.client === client && session.status === "ready") {
20
+ session.status = "exited";
21
+ session.error = "MCP connection closed.";
22
+ }
23
+ };
24
+ }
25
+ async function closeSessionConnection(session) {
26
+ const errors = [];
27
+ try {
28
+ await session.client.close();
29
+ }
30
+ catch (err) {
31
+ errors.push(`Client close failed: ${String(err)}`);
32
+ // The transport may still own resources when Client.close rejects (including stdio children).
33
+ try {
34
+ await session.transport?.close();
35
+ }
36
+ catch (transportError) {
37
+ errors.push(`Transport close failed: ${String(transportError)}`);
38
+ }
39
+ }
40
+ return errors;
41
+ }
42
+ async function cleanupSession(session) {
43
+ if (session.cleanup)
44
+ return session.cleanup;
45
+ const cleanup = (async () => {
46
+ const errors = await closeSessionConnection(session);
47
+ // HTTP children are detached: kill the owned group, even if the leader has exited.
48
+ // This must not be skipped when closing the MCP connection fails.
49
+ if (session.process?.pid) {
50
+ try {
51
+ process.kill(process.platform === "win32" ? session.process.pid : -session.process.pid, "SIGKILL");
52
+ }
53
+ catch (err) {
54
+ if (err.code !== "ESRCH") {
55
+ errors.push(`HTTP process cleanup failed: ${String(err)}`);
56
+ }
57
+ }
58
+ }
59
+ return errors;
60
+ })();
61
+ session.cleanup = cleanup;
62
+ try {
63
+ return await cleanup;
64
+ }
65
+ finally {
66
+ // A connect which completes after stop needs another close, not a cached cleanup result.
67
+ if (session.cleanup === cleanup)
68
+ session.cleanup = undefined;
69
+ }
70
+ }
71
+ async function connectSession(session) {
72
+ assertStarting(session);
73
+ const { signal } = session.startController;
74
+ let onAbort;
75
+ const cancelled = new Promise((_resolve, reject) => {
76
+ onAbort = () => reject(signal.reason);
77
+ signal.addEventListener("abort", onAbort, { once: true });
78
+ });
79
+ // SDK connect's signal only covers protocol requests, not transport.start().
80
+ // SSE start can remain pending even after EventSource.close(), so stop must
81
+ // settle our wait without waiting for the underlying connect to finish.
82
+ const connecting = (async () => {
83
+ try {
84
+ await session.client.connect(session.transport, { signal });
85
+ }
86
+ finally {
87
+ if (signal.aborted) {
88
+ // A late success or failure may leave resources after the earlier stop.
89
+ // Wait for any in-flight close, then perform a fresh cleanup of this
90
+ // session only; never reinsert it or touch a replacement with the same ID.
91
+ const previousErrors = session.cleanup ? await session.cleanup : [];
92
+ const errors = [...previousErrors, ...(await cleanupSession(session))];
93
+ if (sessions.get(session.sessionId) === session && errors.length > 0) {
94
+ session.status = "error";
95
+ session.error = [session.error, ...errors].filter(Boolean).join("; ");
96
+ }
97
+ }
98
+ }
99
+ })();
100
+ try {
101
+ // Promise.race also observes a late rejection, avoiding unhandled failures.
102
+ await Promise.race([connecting, cancelled]);
103
+ }
104
+ finally {
105
+ signal.removeEventListener("abort", onAbort);
106
+ }
107
+ }
9
108
  /**
10
109
  * Ensures a session exists and is ready
11
110
  */
12
111
  function getReadySession(sessionId) {
13
112
  const session = sessions.get(sessionId);
14
113
  if (!session) {
15
- throw new Error(`MCP Session '${sessionId}' not found. Please use 'list_mcp_sessions' to check active sessions or start it first.`);
114
+ throw new Error(`MCP Session '${sessionId}' not found. Please use 'manage_mcp_session' with action: "list" to check active sessions or start it first.`);
16
115
  }
17
116
  if (session.status !== "ready") {
18
117
  throw new Error(`MCP Session '${sessionId}' is not in ready state. Current status: ${session.status}. It might have failed to start or crashed. Check logs if necessary.`);
19
118
  }
20
119
  return session;
21
120
  }
121
+ async function listAllTools(client, signal) {
122
+ const tools = [];
123
+ const seenCursors = new Set();
124
+ let cursor;
125
+ do {
126
+ // Use the protocol request rather than Client.listTools(): SDK v1 replaces
127
+ // its output-schema/task metadata cache on *every page*, which can affect
128
+ // concurrent tool calls while discovery is still in progress.
129
+ const page = await client.request({ method: "tools/list", ...(cursor === undefined ? {} : { params: { cursor } }) }, ListToolsResultSchema, { signal });
130
+ for (const tool of page.tools) {
131
+ tools.push(tool);
132
+ }
133
+ cursor = page.nextCursor;
134
+ if (cursor !== undefined) {
135
+ if (seenCursors.has(cursor)) {
136
+ throw new Error(`Cannot retrieve a complete tool list: repeated pagination cursor '${cursor}'.`);
137
+ }
138
+ seenCursors.add(cursor);
139
+ }
140
+ } while (cursor !== undefined);
141
+ // SDK v1's listTools() ordinarily installs per-tool output validators and
142
+ // task metadata, but only for its last page. Install the complete snapshot
143
+ // once after a successful traversal. Do not clear metadata on partial reads.
144
+ // This SDK method is private in TypeScript; keep the compatibility access
145
+ // centralized until the SDK exposes a public full-list metadata API.
146
+ client.cacheToolMetadata(tools);
147
+ return tools;
148
+ }
22
149
  export function registerMcpClientTools(server, options = { maxSessions: 5 }) {
23
150
  // 1. manage_mcp_session (combines start, stop, list)
24
151
  server.registerTool("manage_mcp_session", {
@@ -28,7 +155,7 @@ export function registerMcpClientTools(server, options = { maxSessions: 5 }) {
28
155
  sessionId: z.string().optional().describe("A unique identifier for this session. Required for 'start' and 'stop'."),
29
156
  command: z.string().optional().describe("Required for 'start'. The executable command to run the server."),
30
157
  args: z.array(z.string()).optional().describe("Required for 'start'. Arguments to pass to the command."),
31
- env: z.record(z.string()).optional().describe("Optional for 'start'. Additional environment variables to pass to the command. They will be merged with the system environment."),
158
+ env: z.record(z.string(), z.string()).optional().describe("Optional for 'start'. Additional environment variables to pass to the command. They will be merged with the system environment."),
32
159
  transportType: z.enum(["stdio", "http"]).optional().describe("Optional for 'start'. Transport type. Default is 'stdio'. Use 'http' for HTTP/SSE based MCP servers."),
33
160
  port: z.number().optional().describe("Required for 'start' if transportType is 'http'. The port number the server is listening on.")
34
161
  }).strict(),
@@ -74,70 +201,97 @@ export function registerMcpClientTools(server, options = { maxSessions: 5 }) {
74
201
  isError: true
75
202
  };
76
203
  }
204
+ if (effectiveTransport === "http" && !effectivePort) {
205
+ return { content: [{ type: "text", text: `port is required when transportType is 'http'` }], isError: true };
206
+ }
207
+ const session = {
208
+ sessionId, command, args, process: null,
209
+ client: new Client({ name: "staff-mcp-proxy", version: STAFF_MCP_VERSION }, { capabilities: {} }),
210
+ transport: null, status: "starting", startedAt: new Date(),
211
+ startController: new AbortController(),
212
+ };
213
+ // Reserve both the ID and quota before spawning or yielding, for every transport.
214
+ sessions.set(sessionId, session);
215
+ watchClientClose(session);
77
216
  try {
78
- const client = new Client({ name: "staff-mcp-proxy", version: STAFF_MCP_VERSION }, { capabilities: {} });
79
- let transport;
80
- let sessionProcess = null;
217
+ const mergedEnv = { ...process.env, ...env };
81
218
  if (effectiveTransport === "http") {
82
- if (!effectivePort) {
83
- return { content: [{ type: "text", text: `port is required when transportType is 'http'` }], isError: true };
84
- }
85
- const mergedEnv = { ...process.env, ...env };
86
- sessionProcess = spawn(command, args, { stdio: 'ignore', detached: true, env: mergedEnv });
87
- sessionProcess.unref();
88
- // Wait for server to boot up
89
- await new Promise(resolve => setTimeout(resolve, 3000));
90
- let connected = false;
91
- let lastErr;
92
- // 1. Try streamable-http first
219
+ const child = spawn(command, args, { stdio: "ignore", detached: true, env: mergedEnv });
220
+ session.process = child;
221
+ child.unref();
222
+ child.once("error", (err) => {
223
+ if (sessions.get(sessionId) !== session || session.startController.signal.aborted)
224
+ return;
225
+ session.status = "error";
226
+ session.error = `HTTP process failed: ${err.message}`;
227
+ session.startController.abort(err);
228
+ });
229
+ child.once("exit", (code, signal) => {
230
+ if (sessions.get(sessionId) !== session || session.startController.signal.aborted)
231
+ return;
232
+ session.status = "exited";
233
+ session.error = `HTTP process exited (code: ${code}, signal: ${signal}).`;
234
+ session.startController.abort(new Error(session.error));
235
+ // Do not let the HTTP client reconnect after its owned child exits.
236
+ void closeSessionConnection(session).then((errors) => {
237
+ if (sessions.get(sessionId) === session && errors.length > 0) {
238
+ session.status = "error";
239
+ session.error += ` ${errors.join("; ")}`;
240
+ }
241
+ });
242
+ });
243
+ await delay(3000, undefined, { signal: session.startController.signal });
244
+ assertStarting(session);
245
+ session.transport = new StreamableHTTPClientTransport(new URL(`http://127.0.0.1:${effectivePort}/mcp`));
93
246
  try {
94
- transport = new StreamableHTTPClientTransport(new URL(`http://127.0.0.1:${effectivePort}/mcp`));
95
- await client.connect(transport);
96
- connected = true;
247
+ await connectSession(session);
97
248
  }
98
- catch (e) {
99
- lastErr = e;
100
- // 2. Fallback to sse
249
+ catch (err) {
250
+ assertStarting(session);
251
+ const errors = await closeSessionConnection(session);
252
+ assertStarting(session);
253
+ if (errors.length > 0)
254
+ throw new Error(errors.join("; "));
255
+ // Use a fresh client: callbacks from a failed HTTP candidate must not close the SSE connection.
256
+ session.client = new Client({ name: "staff-mcp-proxy", version: STAFF_MCP_VERSION }, { capabilities: {} });
257
+ watchClientClose(session);
258
+ session.transport = new SSEClientTransport(new URL(`http://127.0.0.1:${effectivePort}/sse`));
101
259
  try {
102
- // Note: We might need to close the first transport before retrying, but SDK connect typically handles it.
103
- transport = new SSEClientTransport(new URL(`http://127.0.0.1:${effectivePort}/sse`));
104
- await client.connect(transport);
105
- connected = true;
260
+ await connectSession(session);
106
261
  }
107
- catch (e2) {
108
- lastErr = e2;
109
- }
110
- }
111
- if (!connected) {
112
- if (sessionProcess.pid) {
113
- try {
114
- process.kill(sessionProcess.pid, 'SIGKILL');
115
- }
116
- catch (e) { }
262
+ catch (sseError) {
263
+ throw new Error(`Failed to connect using 'http' transport (tried streamable-http and sse on port ${effectivePort}): ${String(sseError)} (streamable-http: ${String(err)})`);
117
264
  }
118
- throw new Error(`Failed to connect using 'http' transport (tried streamable-http and sse on port ${effectivePort}): ${lastErr?.message || 'Unknown error'}`);
119
265
  }
120
- sessions.set(sessionId, {
121
- sessionId, command, args, process: sessionProcess, client, transport,
122
- status: "ready", startedAt: new Date()
123
- });
124
- return { content: [{ type: "text", text: `Successfully started and connected to MCP session '${sessionId}' via http transport. (Active sessions: ${sessions.size}/${options.maxSessions})\nUse 'explore_mcp_session' to discover available tools.` }] };
125
266
  }
126
267
  else {
127
- const mergedEnv = { ...process.env, ...env };
128
- transport = new StdioClientTransport({ command, args, env: mergedEnv });
129
- sessions.set(sessionId, {
130
- sessionId, command, args, process: sessionProcess, client, transport,
131
- status: "starting", startedAt: new Date()
132
- });
133
- await client.connect(transport);
134
- sessions.get(sessionId).status = "ready";
135
- return { content: [{ type: "text", text: `Successfully started and connected to MCP session '${sessionId}' via stdio. (Active sessions: ${sessions.size}/${options.maxSessions})\nUse 'explore_mcp_session' to discover available tools.` }] };
268
+ session.transport = new StdioClientTransport({ command, args, env: mergedEnv });
269
+ await connectSession(session);
136
270
  }
271
+ assertStarting(session);
272
+ if (!session.client.transport)
273
+ throw new Error("MCP connection closed during startup.");
274
+ session.status = "ready";
275
+ const via = effectiveTransport === "http" ? "http transport" : "stdio";
276
+ return { content: [{ type: "text", text: `Successfully started and connected to MCP session '${sessionId}' via ${via}. (Active sessions: ${sessions.size}/${options.maxSessions})\nUse 'explore_mcp_session' to discover available tools.` }] };
137
277
  }
138
278
  catch (err) {
139
- sessions.delete(sessionId);
140
- return { content: [{ type: "text", text: `Failed to start MCP session '${sessionId}': ${err.message}` }], isError: true };
279
+ const failure = session.error || String(err);
280
+ session.startController.abort(err);
281
+ // Finish any in-flight stop cleanup before reporting the failed start.
282
+ // connectSession also cleans up if the underlying connect settles later.
283
+ const previousErrors = session.cleanup ? await session.cleanup : [];
284
+ const errors = [...previousErrors, ...(await cleanupSession(session))];
285
+ if (sessions.get(sessionId) === session) {
286
+ if (errors.length > 0) {
287
+ session.status = "error";
288
+ session.error = `${failure}; ${errors.join("; ")}`;
289
+ }
290
+ else {
291
+ sessions.delete(sessionId);
292
+ }
293
+ }
294
+ return { content: [{ type: "text", text: `Failed to start MCP session '${sessionId}': ${failure}${errors.length > 0 ? `; ${errors.join("; ")}` : ""}` }], isError: true };
141
295
  }
142
296
  }
143
297
  else if (action === "stop") {
@@ -148,18 +302,20 @@ export function registerMcpClientTools(server, options = { maxSessions: 5 }) {
148
302
  if (!session) {
149
303
  return { content: [{ type: "text", text: `Session '${sessionId}' not found.` }] };
150
304
  }
151
- try {
152
- await session.client.close();
153
- if (session.process && session.process.pid) {
154
- try {
155
- process.kill(session.process.pid, 'SIGKILL');
156
- }
157
- catch (e) { }
305
+ session.status = "stopping";
306
+ session.startController.abort(new Error(`MCP session '${sessionId}' was stopped.`));
307
+ const errors = await cleanupSession(session);
308
+ if (sessions.get(sessionId) === session) {
309
+ if (errors.length > 0) {
310
+ session.status = "error";
311
+ session.error = errors.join("; ");
312
+ }
313
+ else {
314
+ sessions.delete(sessionId);
158
315
  }
159
316
  }
160
- catch (e) { }
161
- finally {
162
- sessions.delete(sessionId);
317
+ if (errors.length > 0) {
318
+ return { content: [{ type: "text", text: `Failed to fully stop MCP session '${sessionId}': ${errors.join("; ")}. Session retained for cleanup retry.` }], isError: true };
163
319
  }
164
320
  return { content: [{ type: "text", text: `Session '${sessionId}' successfully stopped. (Active sessions: ${sessions.size}/${options.maxSessions})` }] };
165
321
  }
@@ -169,7 +325,7 @@ export function registerMcpClientTools(server, options = { maxSessions: 5 }) {
169
325
  }
170
326
  let output = `Active MCP Sessions (${sessions.size}/${options.maxSessions}):\n`;
171
327
  for (const [id, session] of sessions.entries()) {
172
- output += `- [${id}] Status: ${session.status}, Command: ${session.command} ${session.args.join(" ")}\n`;
328
+ output += `- [${id}] Status: ${session.status}, Command: ${session.command} ${session.args.join(" ")}${session.error ? `, Error: ${session.error}` : ""}\n`;
173
329
  }
174
330
  return { content: [{ type: "text", text: output }] };
175
331
  }
@@ -182,17 +338,25 @@ export function registerMcpClientTools(server, options = { maxSessions: 5 }) {
182
338
  sessionId: z.string().describe("The session ID to explore"),
183
339
  toolName: z.string().optional().describe("Optional. The specific tool name to get detailed argument schema for"),
184
340
  }).strict(),
185
- }, async ({ sessionId, toolName }) => {
341
+ }, async ({ sessionId, toolName }, extra) => {
186
342
  try {
187
343
  const session = getReadySession(sessionId);
188
- // Fetch tools list first (always needed)
189
- const toolsResult = await session.client.listTools();
344
+ // Fetch every page before displaying or searching the current tools.
345
+ const tools = await listAllTools(session.client, extra?.signal);
190
346
  if (toolName) {
191
347
  // --- Detailed view: full schema for ONE specific tool ---
192
- const tool = toolsResult.tools.find((t) => t.name === toolName);
348
+ const tool = tools.find((t) => t.name === toolName);
193
349
  if (!tool) {
350
+ let output = `Tool '${toolName}' not found in session '${sessionId}'.\nAvailable Tools (${tools.length} total):\n`;
351
+ if (tools.length === 0) {
352
+ output += "No available tools.\n";
353
+ }
354
+ for (const availableTool of tools) {
355
+ output += `\n[${availableTool.name}]\n${availableTool.description ?? "N/A"}\n`;
356
+ }
357
+ output += `\nTip: Use explore_mcp_session with "toolName" to inspect a specific tool's full schema.`;
194
358
  return {
195
- content: [{ type: "text", text: `Tool '${toolName}' not found in session '${sessionId}'. Available tools: ${toolsResult.tools.map(t => t.name).join(", ")}` }],
359
+ content: [{ type: "text", text: output }],
196
360
  isError: true
197
361
  };
198
362
  }
@@ -227,8 +391,8 @@ export function registerMcpClientTools(server, options = { maxSessions: 5 }) {
227
391
  // Some MCP servers don't implement getInstructions, skip silently
228
392
  }
229
393
  // List ALL tools with compact info (NO full schemas - those are expensive)
230
- output += `Available Tools (${toolsResult.tools.length} total):\n`;
231
- for (const t of toolsResult.tools) {
394
+ output += `Available Tools (${tools.length} total):\n`;
395
+ for (const t of tools) {
232
396
  const props = t.inputSchema?.properties;
233
397
  const argCount = props ? Object.keys(props).length : 0;
234
398
  const required = t.inputSchema?.required || [];
@@ -246,19 +410,6 @@ export function registerMcpClientTools(server, options = { maxSessions: 5 }) {
246
410
  output += `\n Args: none`;
247
411
  }
248
412
  }
249
- // Prompts (if server provides them)
250
- try {
251
- const promptsResult = await session.client.listPrompts();
252
- if (promptsResult?.prompts?.length > 0) {
253
- output += `\n\nAvailable Prompts (${promptsResult.prompts.length} total):\n`;
254
- for (const p of promptsResult.prompts) {
255
- output += ` [${p.name}] ${p.description || ""}\n`;
256
- }
257
- }
258
- }
259
- catch (e) {
260
- // MCP server may not support prompts
261
- }
262
413
  output += `\n💡 Tip: Use explore_mcp_session with "toolName" to inspect a specific tool's full schema before calling it.`;
263
414
  return { content: [{ type: "text", text: output }] };
264
415
  }
@@ -281,11 +432,11 @@ export function registerMcpClientTools(server, options = { maxSessions: 5 }) {
281
432
  }, async ({ sessionId, method, params }, extra) => {
282
433
  try {
283
434
  const session = getReadySession(sessionId);
284
- // Pre-fetch tools to validate the tool exists and fetch its schema
285
- const toolsResult = await session.client.listTools();
286
- const tool = toolsResult.tools.find(t => t.name === method);
435
+ // Validate against the complete list, including tools on later pages.
436
+ const tools = await listAllTools(session.client, extra?.signal);
437
+ const tool = tools.find(t => t.name === method);
287
438
  if (!tool) {
288
- const availableTools = toolsResult.tools.map(t => t.name).join(", ");
439
+ const availableTools = tools.map(t => t.name).join(", ");
289
440
  return {
290
441
  content: [{ type: "text", text: `Tool '${method}' not found in session '${sessionId}'. Available tools: ${availableTools}` }],
291
442
  isError: true
@@ -304,6 +455,8 @@ export function registerMcpClientTools(server, options = { maxSessions: 5 }) {
304
455
  };
305
456
  }
306
457
  try {
458
+ // The default CallToolResultSchema validates this boundary. The SDK's
459
+ // return type also includes the legacy toolResult schema even when unused.
307
460
  const result = await session.client.callTool({
308
461
  name: method,
309
462
  arguments: parsedParams,
@@ -312,28 +465,15 @@ export function registerMcpClientTools(server, options = { maxSessions: 5 }) {
312
465
  // tools manage their own lifecycle; a short cap here orphans their work.
313
466
  signal: extra?.signal, // propagate caller cancellation (e.g. user stop) to the nested call
314
467
  });
315
- // Process and return result
316
- let isErrorResult = false;
317
- let contentArray = [];
318
- if (result && Array.isArray(result.content)) {
319
- contentArray = result.content.map((c) => {
320
- if (c.type === "text" && "text" in c) {
321
- return { type: "text", text: String(c.text) };
322
- }
323
- else {
324
- return { type: "text", text: `[${c.type} content omitted or unsupported]` };
325
- }
326
- });
327
- }
328
- if (result && result.isError) {
329
- isErrorResult = true;
468
+ const contentArray = [...result.content];
469
+ if (result.isError) {
330
470
  // If it's an error (likely validation or execution), append the schema to help the model correct itself
331
471
  contentArray.push({
332
472
  type: "text",
333
473
  text: `\n\nTool '${method}' execution failed. Please check the required parameters for this tool. Here is the tool schema:\n${JSON.stringify(tool.inputSchema, null, 2)}`
334
474
  });
335
475
  }
336
- return { content: contentArray, isError: isErrorResult };
476
+ return { ...result, content: contentArray, isError: result.isError ?? false };
337
477
  }
338
478
  catch (callError) {
339
479
  // Provide detailed error with schema
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-client-tools.js","sourceRoot":"","sources":["../../../src/tools/mcp-client-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-client-tools.js","sourceRoot":"","sources":["../../../src/tools/mcp-client-tools.ts"],"names":[],"mappings":"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"}
@@ -356,7 +356,7 @@ export async function stopTaskCore(taskId) {
356
356
  */
357
357
  export function registerShellTools(server, security) {
358
358
  server.registerTool("execute_command", {
359
- description: "Execute a shell command in a specified directory (sandboxed). Single entry point for ALL command execution: quick commands, builds, tests, and long-running processes (dev servers, watchers). If the command finishes within the timeout, returns its exit code and output. If it is still running when the timeout elapses, the process is NOT killed — it keeps running in the background and the call returns a task ID plus recent output; follow up with manage_background_task (actions: logs/stop/list).",
359
+ description: "Execute a shell command with the staff host/container process permissions. The starting cwd is validated, but this is not an OS sandbox; shell filesystem and network effects are not restricted by file-tool path checks. Single entry point for ALL command execution: quick commands, builds, tests, and long-running processes (dev servers, watchers). If the command finishes within the timeout, returns its exit code and output. If it is still running when the timeout elapses, the process is NOT killed — it keeps running in the background and the call returns a task ID plus recent output; follow up with manage_background_task (actions: logs/stop/list).",
360
360
  inputSchema: z.object({
361
361
  command: z.string().describe("The shell command to execute."),
362
362
  cwd: z.string().optional().describe("Directory to execute command from (must be allowed). Defaults to the workspace root."),