Merge branch 'main' into ci-test-cli

This commit is contained in:
Cliff Hall 2025-07-15 16:04:47 -04:00 • committed by GitHub
commit efc8f32ad2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 29 additions and 21 deletions

View file

@ -680,7 +680,7 @@ async function runTests() {
// Test 26: HTTP transport with explicit --transport http flag
await runBasicTest(
"http_transport_with_explicit_flag",
"http://127.0.0.1:3001",
"http://127.0.0.1:3001/mcp",
"--transport",
"http",
"--cli",
@ -710,6 +710,26 @@ async function runTests() {
"tools/list",
);
// Test 29: HTTP transport without URL (should fail)
await runErrorTest(
"http_transport_without_url",
"--transport",
"http",
"--cli",
"--method",
"tools/list",
);
// Test 30: SSE transport without URL (should fail)
await runErrorTest(
"sse_transport_without_url",
"--transport",
"sse",
"--cli",
"--method",
"tools/list",
);
// Kill HTTP server
try {
process.kill(-httpServer.pid);

View file

@ -14,24 +14,6 @@ export type TransportOptions = {
url?: string;
};
function createSSETransport(options: TransportOptions): Transport {
const baseUrl = new URL(options.url ?? "");
const sseUrl = baseUrl.pathname.endsWith("/sse")
? baseUrl
: new URL("/sse", baseUrl);
return new SSEClientTransport(sseUrl);
}
function createHTTPTransport(options: TransportOptions): Transport {
const baseUrl = new URL(options.url ?? "");
const mcpUrl = baseUrl.pathname.endsWith("/mcp")
? baseUrl
: new URL("/mcp", baseUrl);
return new StreamableHTTPClientTransport(mcpUrl);
}
function createStdioTransport(options: TransportOptions): Transport {
let args: string[] = [];
@ -75,12 +57,18 @@ export function createTransport(options: TransportOptions): Transport {
return createStdioTransport(options);
}
// If not STDIO, then it must be either SSE or HTTP.
if (!options.url) {
throw new Error("URL must be provided for SSE or HTTP transport types.");
}
const url = new URL(options.url);
if (transportType === "sse") {
return createSSETransport(options);
return new SSEClientTransport(url);
}
if (transportType === "http") {
return createHTTPTransport(options);
return new StreamableHTTPClientTransport(url);
}
throw new Error(`Unsupported transport type: ${transportType}`);