summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDaniel Sauer <[email protected]>2026-01-13 19:38:34 +0100
committerFrank <[email protected]>2026-01-13 19:50:49 -0500
commit4dc72669e57979b5b8840e674f25ad6b7c23e215 (patch)
tree26ce4838d28237c38cd4a569601a6f445f384883
parentdfa59dd21d68e723d35fb56978024ca0335ed334 (diff)
downloadopencode-4dc72669e57979b5b8840e674f25ad6b7c23e215.tar.gz
opencode-4dc72669e57979b5b8840e674f25ad6b7c23e215.zip
fix(mcp): close existing client before reassignment to prevent leaks (#8253)
-rw-r--r--packages/opencode/src/mcp/index.ts14
1 files changed, 14 insertions, 0 deletions
diff --git a/packages/opencode/src/mcp/index.ts b/packages/opencode/src/mcp/index.ts
index aca0c6631..4e0968391 100644
--- a/packages/opencode/src/mcp/index.ts
+++ b/packages/opencode/src/mcp/index.ts
@@ -266,6 +266,13 @@ export namespace MCP {
status: s.status,
}
}
+ // Close existing client if present to prevent memory leaks
+ const existingClient = s.clients[name]
+ if (existingClient) {
+ await existingClient.close().catch((error) => {
+ log.error("Failed to close existing MCP client", { name, error })
+ })
+ }
s.clients[name] = result.mcpClient
s.status[name] = result.status
@@ -523,6 +530,13 @@ export namespace MCP {
const s = await state()
s.status[name] = result.status
if (result.mcpClient) {
+ // Close existing client if present to prevent memory leaks
+ const existingClient = s.clients[name]
+ if (existingClient) {
+ await existingClient.close().catch((error) => {
+ log.error("Failed to close existing MCP client", { name, error })
+ })
+ }
s.clients[name] = result.mcpClient
}
}