test-server.js•2.41 kB
import { spawn } from 'child_process';
import { createInterface } from 'readline';
// Test the MCP server
async function testServer() {
console.log('Starting Kagi MCP server test...\n');
// Check for API key
if (!process.env.KAGI_API_KEY) {
console.error('Error: KAGI_API_KEY environment variable is not set');
process.exit(1);
}
// Spawn the server
const server = spawn('node', ['dist/index.js'], {
stdio: ['pipe', 'pipe', 'pipe'],
env: { ...process.env },
});
const rl = createInterface({
input: server.stdout,
crlfDelay: Infinity,
});
server.stderr.on('data', (data) => {
console.error('Server error:', data.toString());
});
// Send initialize request
const initRequest = {
jsonrpc: '2.0',
method: 'initialize',
params: {
protocolVersion: '2024-11-05',
capabilities: {},
clientInfo: {
name: 'test-client',
version: '1.0.0',
},
},
id: 1,
};
console.log('Sending initialize request...');
server.stdin.write(JSON.stringify(initRequest) + '\n');
// Wait for response
let initialized = false;
rl.on('line', (line) => {
try {
const response = JSON.parse(line);
console.log('Received:', JSON.stringify(response, null, 2));
if (response.id === 1 && !initialized) {
initialized = true;
console.log('\nServer initialized successfully!');
// List tools
const listToolsRequest = {
jsonrpc: '2.0',
method: 'tools/list',
params: {},
id: 2,
};
console.log('\nListing available tools...');
server.stdin.write(JSON.stringify(listToolsRequest) + '\n');
} else if (response.id === 2) {
console.log('\nAvailable tools:');
response.result.tools.forEach((tool) => {
console.log(`- ${tool.name}: ${tool.description.substring(0, 60)}...`);
});
console.log('\nTest completed successfully!');
server.kill();
process.exit(0);
}
} catch (error) {
console.error('Error parsing response:', error);
}
});
// Handle server exit
server.on('exit', (code) => {
console.log(`Server exited with code ${code}`);
process.exit(code || 0);
});
}
testServer().catch((error) => {
console.error('Test failed:', error);
process.exit(1);
});