|
@@ -26,6 +26,7 @@ import open from "open"
|
|
|
|
|
|
|
|
export namespace MCP {
|
|
export namespace MCP {
|
|
|
const log = Log.create({ service: "mcp" })
|
|
const log = Log.create({ service: "mcp" })
|
|
|
|
|
+ const DEFAULT_TIMEOUT = 5000
|
|
|
|
|
|
|
|
export const ToolsChanged = BusEvent.define(
|
|
export const ToolsChanged = BusEvent.define(
|
|
|
"mcp.tools.changed",
|
|
"mcp.tools.changed",
|
|
@@ -294,13 +295,14 @@ export namespace MCP {
|
|
|
]
|
|
]
|
|
|
|
|
|
|
|
let lastError: Error | undefined
|
|
let lastError: Error | undefined
|
|
|
|
|
+ const connectTimeout = mcp.timeout ?? DEFAULT_TIMEOUT
|
|
|
for (const { name, transport } of transports) {
|
|
for (const { name, transport } of transports) {
|
|
|
try {
|
|
try {
|
|
|
const client = new Client({
|
|
const client = new Client({
|
|
|
name: "opencode",
|
|
name: "opencode",
|
|
|
version: Installation.VERSION,
|
|
version: Installation.VERSION,
|
|
|
})
|
|
})
|
|
|
- await client.connect(transport)
|
|
|
|
|
|
|
+ await withTimeout(client.connect(transport), connectTimeout)
|
|
|
registerNotificationHandlers(client, key)
|
|
registerNotificationHandlers(client, key)
|
|
|
mcpClient = client
|
|
mcpClient = client
|
|
|
log.info("connected", { key, transport: name })
|
|
log.info("connected", { key, transport: name })
|
|
@@ -370,12 +372,13 @@ export namespace MCP {
|
|
|
},
|
|
},
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
|
|
+ const connectTimeout = mcp.timeout ?? DEFAULT_TIMEOUT
|
|
|
try {
|
|
try {
|
|
|
const client = new Client({
|
|
const client = new Client({
|
|
|
name: "opencode",
|
|
name: "opencode",
|
|
|
version: Installation.VERSION,
|
|
version: Installation.VERSION,
|
|
|
})
|
|
})
|
|
|
- await client.connect(transport)
|
|
|
|
|
|
|
+ await withTimeout(client.connect(transport), connectTimeout)
|
|
|
registerNotificationHandlers(client, key)
|
|
registerNotificationHandlers(client, key)
|
|
|
mcpClient = client
|
|
mcpClient = client
|
|
|
status = {
|
|
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 })
|
|
log.error("failed to get tools from client", { key, error: err })
|
|
|
return undefined
|
|
return undefined
|
|
|
})
|
|
})
|