import { spawn, ChildProcess } from "child_process";
import { fileURLToPath } from "url";
import { dirname, join } from "path";
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
interface ServerResponse {
jsonrpc: string;
id: number;
result?: any;
error?: any;
}
// Test the Translations MCP server
function testTranslationsMCPServer(): void {
console.log("Testing Translations MCP Server...\n");
const serverProcess: ChildProcess = spawn("node", [join(__dirname, "../dist/index.js")], {
stdio: ["pipe", "pipe", "pipe"],
});
// Test 1: List tools
const listToolsMessage =
JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "tools/list",
}) + "\n";
serverProcess.stdin?.write(listToolsMessage);
// Test 2: Call find_translation tool with a simple query
const callFindTranslationMessage =
JSON.stringify({
jsonrpc: "2.0",
id: 2,
method: "tools/call",
params: {
name: "find_translation",
arguments: {
query: "common",
},
},
}) + "\n";
setTimeout(() => {
serverProcess.stdin?.write(callFindTranslationMessage);
}, 100);
setTimeout(() => {
serverProcess.stdin?.end();
}, 200);
let output = "";
serverProcess.stdout?.on("data", (data: Buffer) => {
output += data.toString();
});
serverProcess.stderr?.on("data", (data: Buffer) => {
console.log("Server log:", data.toString());
});
serverProcess.on("close", (code: number | null) => {
console.log("Server responses:");
// Parse and display responses with proper typing
const responses = output
.trim()
.split("\n")
.filter((line) => line.trim());
responses.forEach((responseStr, index) => {
try {
const response: ServerResponse = JSON.parse(responseStr);
console.log(
`Response ${index + 1}:`,
JSON.stringify(response, null, 2)
);
} catch (error) {
console.log(`Response ${index + 1} (raw):`, responseStr);
}
});
console.log("\nServer exited with code:", code);
console.log("✅ Translations MCP Server test completed!");
});
// Clean exit after 5 seconds
setTimeout(() => {
serverProcess.kill();
}, 5000);
}
testTranslationsMCPServer();