#!/usr/bin/env node
// Comprehensive test to validate the refactored MCP server
const { spawn } = require('child_process');
async function testMCPServer() {
console.log('๐งช Testing Refactored MCP Server...\n');
const server = spawn('node', ['dist/index.js'], {
stdio: ['pipe', 'pipe', 'inherit']
});
// Helper function to send JSON-RPC request
function sendRequest(method, params = {}) {
return new Promise((resolve, reject) => {
const request = {
jsonrpc: '2.0',
id: Math.random().toString(36).substr(2, 9),
method,
params
};
let response = '';
const onData = (data) => {
response += data.toString();
try {
const parsed = JSON.parse(response);
server.stdout.off('data', onData);
resolve(parsed);
} catch (e) {
// Continue collecting data
}
};
server.stdout.on('data', onData);
server.stdin.write(JSON.stringify(request) + '\n');
setTimeout(() => {
server.stdout.off('data', onData);
reject(new Error('Request timeout'));
}, 5000);
});
}
try {
// Test 1: Initialize
console.log('1๏ธโฃ Testing initialization...');
const initResponse = await sendRequest('initialize', {
protocolVersion: '2024-11-05',
capabilities: {},
clientInfo: { name: 'test-client', version: '1.0.0' }
});
console.log('โ
Initialization successful');
// Test 2: List tools
console.log('\\n2๏ธโฃ Testing tool listing...');
const toolsResponse = await sendRequest('tools/list');
const tools = toolsResponse.result.tools;
console.log('โ
Tools listed:', tools.map(t => t.name).join(', '));
console.log(' Tool details:');
tools.forEach(tool => {
console.log(` - ${tool.name}: ${tool.description}`);
});
// Test 3: Test Echo tool
console.log('\\n3๏ธโฃ Testing Echo tool...');
const echoResponse = await sendRequest('tools/call', {
name: 'echo',
arguments: { text: 'Hello from refactored server!' }
});
console.log('โ
Echo result:', echoResponse.result.content[0].text);
// Test 4: Test Add Numbers tool
console.log('\\n4๏ธโฃ Testing Add Numbers tool...');
const addResponse = await sendRequest('tools/call', {
name: 'add_numbers',
arguments: { a: 42, b: 58 }
});
console.log('โ
Add result:', addResponse.result.content[0].text);
// Test 5: Test Get Current Time tool
console.log('\\n5๏ธโฃ Testing Get Current Time tool...');
const timeResponse = await sendRequest('tools/call', {
name: 'get_current_time',
arguments: {}
});
console.log('โ
Time result:', timeResponse.result.content[0].text);
// Test 6: List resources
console.log('\\n6๏ธโฃ Testing resource listing...');
const resourcesResponse = await sendRequest('resources/list');
const resources = resourcesResponse.result.resources;
console.log('โ
Resources listed:', resources.map(r => r.name).join(', '));
console.log(' Resource details:');
resources.forEach(resource => {
console.log(` - ${resource.name}: ${resource.description}`);
});
// Test 7: Read Server Info resource
console.log('\\n7๏ธโฃ Testing Server Info resource...');
const serverInfoResponse = await sendRequest('resources/read', {
uri: 'info://server'
});
console.log('โ
Server Info content:');
console.log(' ', serverInfoResponse.result.contents[0].text.split('\\n')[0]);
// Test 8: Read Greeting resource
console.log('\\n8๏ธโฃ Testing Greeting resource...');
const greetingResponse = await sendRequest('resources/read', {
uri: 'greeting://hello'
});
console.log('โ
Greeting content:');
console.log(' ', greetingResponse.result.contents[0].text.split('\\n')[0]);
console.log('\\n๐ All comprehensive tests passed! The refactored MCP Server is working perfectly.');
console.log('\\n๐ Project Structure:');
console.log(' โโโ src/handlers/ - Request handlers');
console.log(' โโโ src/tools/ - Tool implementations & registry');
console.log(' โโโ src/resources/ - Resource implementations & registry');
console.log(' โโโ src/types/ - Type definitions');
console.log(' โโโ src/utils/ - Utilities & configuration');
console.log(' โโโ examples/ - Example tools & resources');
} catch (error) {
console.error('โ Test failed:', error.message);
} finally {
server.kill();
}
}
testMCPServer();