Clarify remote mcp error (#1729)

Co-authored-by: opencode <noreply@opencode.ai>
This commit is contained in:
rmoriz
2025-08-09 02:04:26 +02:00
committed by GitHub
parent 7af2771a7e
commit 83f4e8e156

View File

@@ -35,35 +35,58 @@ export namespace MCP {
log.info("found", { key, type: mcp.type }) log.info("found", { key, type: mcp.type })
if (mcp.type === "remote") { if (mcp.type === "remote") {
const transports = [ const transports = [
new StreamableHTTPClientTransport(new URL(mcp.url), { {
requestInit: { name: "StreamableHTTP",
headers: mcp.headers, transport: new StreamableHTTPClientTransport(new URL(mcp.url), {
}, requestInit: {
}), headers: mcp.headers,
new SSEClientTransport(new URL(mcp.url), { },
requestInit: { }),
headers: mcp.headers, },
}, {
}), name: "SSE",
transport: new SSEClientTransport(new URL(mcp.url), {
requestInit: {
headers: mcp.headers,
},
}),
},
] ]
for (const transport of transports) { let lastError: Error | undefined
for (const { name, transport } of transports) {
const client = await experimental_createMCPClient({ const client = await experimental_createMCPClient({
name: key, name: key,
transport, transport,
}).catch(() => {}) }).catch((error) => {
if (!client) continue lastError = error instanceof Error ? error : new Error(String(error))
clients[key] = client log.debug("transport connection failed", {
break key,
transport: name,
url: mcp.url,
error: lastError.message,
})
return null
})
if (client) {
log.debug("transport connection succeeded", { key, transport: name })
clients[key] = client
break
}
} }
if (!clients[key]) if (!clients[key]) {
const errorMessage = lastError
? `MCP server ${key} failed to connect: ${lastError.message}`
: `MCP server ${key} failed to connect to ${mcp.url}`
log.error("remote mcp connection failed", { key, url: mcp.url, error: lastError?.message })
Bus.publish(Session.Event.Error, { Bus.publish(Session.Event.Error, {
error: { error: {
name: "UnknownError", name: "UnknownError",
data: { data: {
message: `MCP server ${key} failed to start`, message: errorMessage,
}, },
}, },
}) })
}
} }
if (mcp.type === "local") { if (mcp.type === "local") {
@@ -80,19 +103,29 @@ export namespace MCP {
...mcp.environment, ...mcp.environment,
}, },
}), }),
}).catch(() => {}) }).catch((error) => {
if (!client) { const errorMessage =
error instanceof Error
? `MCP server ${key} failed to start: ${error.message}`
: `MCP server ${key} failed to start`
log.error("local mcp startup failed", {
key,
command: mcp.command,
error: error instanceof Error ? error.message : String(error),
})
Bus.publish(Session.Event.Error, { Bus.publish(Session.Event.Error, {
error: { error: {
name: "UnknownError", name: "UnknownError",
data: { data: {
message: `MCP server ${key} failed to start`, message: errorMessage,
}, },
}, },
}) })
continue return null
})
if (client) {
clients[key] = client
} }
clients[key] = client
} }
} }