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 })
if (mcp.type === "remote") {
const transports = [
new StreamableHTTPClientTransport(new URL(mcp.url), {
requestInit: {
headers: mcp.headers,
},
}),
new SSEClientTransport(new URL(mcp.url), {
requestInit: {
headers: mcp.headers,
},
}),
{
name: "StreamableHTTP",
transport: new StreamableHTTPClientTransport(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({
name: key,
transport,
}).catch(() => {})
if (!client) continue
clients[key] = client
break
}).catch((error) => {
lastError = error instanceof Error ? error : new Error(String(error))
log.debug("transport connection failed", {
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, {
error: {
name: "UnknownError",
data: {
message: `MCP server ${key} failed to start`,
message: errorMessage,
},
},
})
}
}
if (mcp.type === "local") {
@@ -80,19 +103,29 @@ export namespace MCP {
...mcp.environment,
},
}),
}).catch(() => {})
if (!client) {
}).catch((error) => {
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, {
error: {
name: "UnknownError",
data: {
message: `MCP server ${key} failed to start`,
message: errorMessage,
},
},
})
continue
return null
})
if (client) {
clients[key] = client
}
clients[key] = client
}
}