diff --git a/packages/opencode/src/mcp/index.ts b/packages/opencode/src/mcp/index.ts index 1b6c9bb5fe..0d6c8c65dc 100644 --- a/packages/opencode/src/mcp/index.ts +++ b/packages/opencode/src/mcp/index.ts @@ -210,6 +210,10 @@ const layer = Layer.effect( type Transport = StdioClientTransport | StreamableHTTPClientTransport | SSEClientTransport + /** + * Connect a client via the given transport with resource safety: + * on failure the transport is closed; on success the caller owns it. + */ const connectTransport = Effect.fn("MCP.connectTransport")(function* (transport: Transport, timeout: number) { const directory = yield* InstanceState.directory return yield* Effect.acquireUseRelease( diff --git a/packages/opencode/test/session/prompt.test.ts b/packages/opencode/test/session/prompt.test.ts index 01b1af5b99..491ad06aaf 100644 --- a/packages/opencode/test/session/prompt.test.ts +++ b/packages/opencode/test/session/prompt.test.ts @@ -117,7 +117,6 @@ function makeMcp(instructions: MCP.ServerInstructions[] = []) { clients: () => Effect.succeed({}), instructions: () => Effect.succeed(instructions), tools: () => Effect.succeed({}), - defs: () => Effect.succeed({}), prompts: () => Effect.succeed({}), resources: () => Effect.succeed({}), resourceTemplates: () => Effect.succeed({}), diff --git a/packages/opencode/test/session/snapshot-tool-race.test.ts b/packages/opencode/test/session/snapshot-tool-race.test.ts index 3bbb4b1fc5..1265237840 100644 --- a/packages/opencode/test/session/snapshot-tool-race.test.ts +++ b/packages/opencode/test/session/snapshot-tool-race.test.ts @@ -39,7 +39,6 @@ const mcp = Layer.succeed( clients: () => Effect.succeed({}), instructions: () => Effect.succeed([]), tools: () => Effect.succeed({}), - defs: () => Effect.succeed({}), prompts: () => Effect.succeed({}), resources: () => Effect.succeed({}), resourceTemplates: () => Effect.succeed({}), diff --git a/packages/opencode/test/tool/code-mode-integration.test.ts b/packages/opencode/test/tool/code-mode-integration.test.ts index f9ed25a831..c4553b4c79 100644 --- a/packages/opencode/test/tool/code-mode-integration.test.ts +++ b/packages/opencode/test/tool/code-mode-integration.test.ts @@ -17,7 +17,6 @@ import { ListToolsRequestSchema, type Tool as MCPToolDef, } from "@modelcontextprotocol/sdk/types.js" -import type { Tool as AITool } from "ai" import { Effect, Layer } from "effect" const PNG = @@ -135,12 +134,9 @@ async function buildTool() { await client.connect() const listed = (await client.listTools()).tools as MCPToolDef[] - const mcpTools: Record = {} - const mcpDefs: Record = {} + const mcpTools: Record = {} for (const def of listed) { - const key = McpCatalog.toolName(SERVER, def.name) - mcpDefs[key] = def - mcpTools[key] = McpCatalog.convertTool(def, client as unknown as Client) + mcpTools[McpCatalog.toolName(SERVER, def.name)] = { def, client: client as unknown as Client } } const layer = Layer.mergeAll( @@ -155,13 +151,12 @@ async function buildTool() { Layer.mock(Session.Service, { get: () => Effect.succeed({ permission: [] } as any) }), Layer.mock(MCP.Service, { tools: () => Effect.succeed(mcpTools), - defs: () => Effect.succeed(mcpDefs), clients: () => Effect.succeed({ [SERVER]: {} as any }), }), ) return { tool: await Effect.runPromise(CodeModeTool.pipe(Effect.flatMap(Tool.init), Effect.provide(layer))), - description: describeCatalog(mcpTools, mcpDefs, [SERVER]), + description: describeCatalog(mcpTools, [SERVER]), } }