import { describe, expect, test } from "bun:test" import type { Client } from "@modelcontextprotocol/sdk/client/index.js" import { McpCatalog } from "@/mcp/catalog" const options = { toolCallId: "call_mcp", abortSignal: new AbortController().signal } as any function clientReturning(result: unknown) { return { callTool: async () => result, } as unknown as Client } function mcpTool() { return { name: "screenshot", description: "Take a screenshot", inputSchema: { type: "object", properties: {}, additionalProperties: false, }, } as any } describe("McpCatalog.convertTool", () => { test("preserves content when structuredContent is also present", async () => { const content = [{ type: "image" as const, mimeType: "image/png", data: "AAAA" }] const structuredContent = { image: { mimeType: "image/png", data: "AAAA" } } const converted = McpCatalog.convertTool(mcpTool(), clientReturning({ content, structuredContent })) const output = await converted.execute?.({}, options) expect(output).toMatchObject({ content, structuredContent }) }) test("falls back to structuredContent only when content is absent", async () => { const structuredContent = { results: [{ title: "one" }] } const converted = McpCatalog.convertTool(mcpTool(), clientReturning({ content: [], structuredContent })) const output = await converted.execute?.({}, options) expect(output).toMatchObject({ structuredContent, content: [{ type: "text", text: JSON.stringify(structuredContent) }], }) }) })