import { MCPClientManager, TestAgent, EvalSuite, EvalTest } from "@mcpjam/sdk";
async function compareProviders() {
// Setup
const manager = new MCPClientManager({
everything: {
command: "npx",
args: ["-y", "@modelcontextprotocol/server-everything"],
},
});
await manager.connectToServer("everything");
const tools = await manager.getTools();
// Build test suite
const suite = new EvalSuite({ name: "Tool Selection" });
suite.add(new EvalTest({
name: "add",
test: async (a) => (await a.prompt("Add 2+3")).hasToolCall("add"),
}));
suite.add(new EvalTest({
name: "echo",
test: async (a) => (await a.prompt("Echo 'hello'")).hasToolCall("echo"),
}));
// Providers
const providers = [
{ name: "Claude", model: "anthropic/claude-sonnet-4-20250514", key: "ANTHROPIC_API_KEY" },
{ name: "GPT-4o", model: "openai/gpt-4o", key: "OPENAI_API_KEY" },
{ name: "Gemini", model: "google/gemini-1.5-pro", key: "GOOGLE_GENERATIVE_AI_API_KEY" },
];
const results: Record<string, number> = {};
for (const { name, model, key } of providers) {
const apiKey = process.env[key];
if (!apiKey) {
console.log(`⏭️ ${name}: Skipped (no API key)`);
continue;
}
const agent = new TestAgent({ tools, model, apiKey, temperature: 0.1 });
console.log(`🧪 Testing ${name}...`);
await suite.run(agent, { iterations: 20, concurrency: 3 });
results[name] = suite.accuracy();
}
// Report
console.log("\n📊 Results:");
console.log("─".repeat(30));
for (const [name, accuracy] of Object.entries(results)) {
const bar = "█".repeat(Math.round(accuracy * 20));
console.log(`${name.padEnd(10)} ${bar} ${(accuracy * 100).toFixed(1)}%`);
}
await manager.disconnectServer("everything");
}
compareProviders();