import test from "node:test"; import assert from "node:assert/strict"; import { inferTransport, normalizeSharedMcpServer, toClaudeServerConfig, toCodexServerConfig, } from "../src/mcp/converters.js"; test("infers stdio transport when url is absent", () => { const transport = inferTransport({ command: "npx", args: ["-y", "@modelcontextprotocol/server-memory"], }); assert.equal(transport, "stdio"); }); test("infers http transport when url is present", () => { const transport = inferTransport({ url: "http://localhost:3000/mcp", }); assert.equal(transport, "http"); }); test("throws for stdio codex server without command", () => { assert.throws( () => toCodexServerConfig("bad-server", { type: "stdio" }), /requires "command" for stdio transport/, ); }); test("maps shared headers to codex http_headers", () => { const codexConfig = toCodexServerConfig("headers-server", { url: "http://localhost:3000/mcp", headers: { Authorization: "Bearer token", }, }); assert.deepEqual(codexConfig.http_headers, { Authorization: "Bearer token", }); }); test("normalizes header aliases into a single headers object", () => { const normalized = normalizeSharedMcpServer({ url: "http://localhost:3000/mcp", http_headers: { "X-Source": "legacy", }, headers: { Authorization: "Bearer token", }, }); assert.deepEqual(normalized.headers, { "X-Source": "legacy", Authorization: "Bearer token", }); assert.equal("http_headers" in normalized, false); }); test("maps legacy http_headers alias for claude conversion", () => { const claudeConfig = toClaudeServerConfig("legacy-http-headers", { type: "http", url: "http://localhost:3000/mcp", http_headers: { Authorization: "Bearer token", }, }); assert.deepEqual(claudeConfig, { type: "http", url: "http://localhost:3000/mcp", headers: { Authorization: "Bearer token", }, }); }); test("throws for claude http server without url", () => { assert.throws( () => toClaudeServerConfig("bad-http", { type: "http" }), /requires "url" for http transport/, ); });