summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorrmoriz <[email protected]>2025-08-09 02:04:26 +0200
committerGitHub <[email protected]>2025-08-08 20:04:26 -0400
commit83f4e8e1560c1489796bd8dbf2e07e3f3e7e2471 (patch)
tree8af49dc81f3c40a467a972485c1a1100579dac24
parent7af2771a7e5d7c7230f7c5880d40b4adba54ea75 (diff)
downloadopencode-83f4e8e1560c1489796bd8dbf2e07e3f3e7e2471.tar.gz
opencode-83f4e8e1560c1489796bd8dbf2e07e3f3e7e2471.zip
Clarify remote mcp error (#1729)
Co-authored-by: opencode <[email protected]>
-rw-r--r--packages/opencode/src/mcp/index.ts77
1 files changed, 55 insertions, 22 deletions
diff --git a/packages/opencode/src/mcp/index.ts b/packages/opencode/src/mcp/index.ts
index 7057be511..8f614b63a 100644
--- a/packages/opencode/src/mcp/index.ts
+++ b/packages/opencode/src/mcp/index.ts
@@ -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
}
}