mirror of
https://github.com/aljazceru/opencode.git
synced 2026-01-06 01:14:52 +01:00
Clarify remote mcp error (#1729)
Co-authored-by: opencode <noreply@opencode.ai>
This commit is contained in:
@@ -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
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user