summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--packages/opencode/src/mcp/index.ts9
1 files changed, 6 insertions, 3 deletions
diff --git a/packages/opencode/src/mcp/index.ts b/packages/opencode/src/mcp/index.ts
index 322761c55..4aa981727 100644
--- a/packages/opencode/src/mcp/index.ts
+++ b/packages/opencode/src/mcp/index.ts
@@ -26,6 +26,7 @@ import open from "open"
export namespace MCP {
const log = Log.create({ service: "mcp" })
+ const DEFAULT_TIMEOUT = 5000
export const ToolsChanged = BusEvent.define(
"mcp.tools.changed",
@@ -294,13 +295,14 @@ export namespace MCP {
]
let lastError: Error | undefined
+ const connectTimeout = mcp.timeout ?? DEFAULT_TIMEOUT
for (const { name, transport } of transports) {
try {
const client = new Client({
name: "opencode",
version: Installation.VERSION,
})
- await client.connect(transport)
+ await withTimeout(client.connect(transport), connectTimeout)
registerNotificationHandlers(client, key)
mcpClient = client
log.info("connected", { key, transport: name })
@@ -370,12 +372,13 @@ export namespace MCP {
},
})
+ const connectTimeout = mcp.timeout ?? DEFAULT_TIMEOUT
try {
const client = new Client({
name: "opencode",
version: Installation.VERSION,
})
- await client.connect(transport)
+ await withTimeout(client.connect(transport), connectTimeout)
registerNotificationHandlers(client, key)
mcpClient = client
status = {
@@ -409,7 +412,7 @@ export namespace MCP {
}
}
- const result = await withTimeout(mcpClient.listTools(), mcp.timeout ?? 5000).catch((err) => {
+ const result = await withTimeout(mcpClient.listTools(), mcp.timeout ?? DEFAULT_TIMEOUT).catch((err) => {
log.error("failed to get tools from client", { key, error: err })
return undefined
})