Harden MCP schema and wire Claude OAuth/token handling

This commit is contained in:
2026-02-23 14:48:01 -05:00
parent ef2a25b5fb
commit 62e2491cde
14 changed files with 770 additions and 56 deletions

View File

@@ -6,6 +6,7 @@ import {
toClaudeServerConfig,
toCodexServerConfig,
} from "../src/mcp/converters.js";
import { parseMcpConfig } from "../src/mcp/types.js";
test("infers stdio transport when url is absent", () => {
const transport = inferTransport({
@@ -84,3 +85,51 @@ test("throws for claude http server without url", () => {
/requires "url" for http transport/,
);
});
test("maps sdk transport for claude conversion", () => {
const claudeConfig = toClaudeServerConfig("local-sdk", {
type: "sdk",
name: "local-sdk-server",
});
assert.deepEqual(claudeConfig, {
type: "sdk",
name: "local-sdk-server",
});
});
test("throws when sdk transport is converted for codex", () => {
assert.throws(
() => toCodexServerConfig("sdk-server", { type: "sdk", name: "sdk-server" }),
/not supported by Codex/,
);
});
test("accepts sdk transport in strict MCP schema", () => {
const parsed = parseMcpConfig({
servers: {
"sdk-server": {
type: "sdk",
name: "sdk-server",
},
},
});
assert.equal(parsed.servers?.["sdk-server"]?.type, "sdk");
});
test("rejects unknown fields in strict MCP schema", () => {
assert.throws(
() =>
parseMcpConfig({
servers: {
broken: {
type: "stdio",
command: "node",
extra: "nope",
},
},
}),
/unrecognized key/i,
);
});