import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
async function testHttp(baseUrl: string) {
console.log(`Testing HTTP Transport at ${baseUrl}...`);
const transport = new StreamableHTTPClientTransport(new URL(baseUrl));
const client = new Client({
name: "test-client",
version: "1.0.0",
}, {
capabilities: {}
});
await client.connect(transport as any);
console.log("Connected via HTTP!");
const result = await client.callTool({
name: "calculate",
arguments: {
operation: "add",
a: 10,
b: 20
}
});
console.log("Calculation Result (HTTP):", result);
await client.close();
}
async function testStdio() {
console.log("Testing Stdio Transport...");
const transport = new StdioClientTransport({
command: "node",
args: ["dist/index.js"]
});
const client = new Client({
name: "test-client",
version: "1.0.0",
}, {
capabilities: {}
});
await client.connect(transport);
console.log("Connected via Stdio!");
const result = await client.callTool({
name: "calculate",
arguments: {
operation: "multiply",
a: 5,
b: 6
}
});
console.log("Calculation Result (Stdio):", result);
await client.close();
}
const mode = process.argv[2];
const url = process.argv[3] || "http://localhost:3000/mcp";
if (mode === "http") {
testHttp(url).catch(console.error);
} else if (mode === "stdio") {
testStdio().catch(console.error);
} else {
console.log("Usage: node test-client.js [http <url>|stdio]");
}