MCP Chat Analysis Server
- __tests__
import { spawn } from 'child_process';
import path from 'path';
import packageJson from '../package.json';
// Increase timeout to 20 seconds since the server has to boot
// and we are testing STDIN / STDOUT which can be slow
jest.setTimeout(20000);
let serverProcess: any;
beforeAll(() => {
// Use the dist/index.js file as the entry point
serverProcess = spawn('npx', ['tsx', path.resolve(__dirname, '../src/index.ts')], {
env: {
...process.env,
BOX_DEV_TOKEN: 'fake_test_token',
},
stdio: ['pipe', 'pipe', 'inherit'],
});
});
afterAll(() => {
if (serverProcess) {
serverProcess.kill(); // Ensure the process is terminated
serverProcess.stdout.removeAllListeners(); // Remove all listeners
serverProcess.stderr?.removeAllListeners(); // Remove stderr listeners if any
serverProcess.stdin?.end(); // Close stdin if necessary
}
});
describe('box-mcp-server initialization', () => {
it('should respond to the initialize method with the correct version over stdin/stdout', async () => {
const requestPayload = JSON.stringify({
method: 'initialize',
params: {
protocolVersion: '2024-11-05',
capabilities: {},
clientInfo: {
name: 'claude-ai',
version: '0.1.0',
},
},
jsonrpc: '2.0',
id: 0,
});
const expectedResponse = JSON.stringify({
result: {
protocolVersion: '2024-11-05',
capabilities: {
resources: {},
tools: {},
},
serverInfo: {
name: 'box-mcp-server',
version: packageJson.version,
},
},
jsonrpc: '2.0',
id: 0,
});
return new Promise<void>((resolve, reject) => {
let responseBuffer = '';
let resolved = false;
// Capture stdout data
serverProcess.stdout.on('data', (data: Buffer) => {
if (resolved) return; // Exit if the promise is already resolved
responseBuffer += data.toString();
try {
const response = JSON.parse(responseBuffer);
expect(response).toEqual(JSON.parse(expectedResponse));
resolved = true; // Mark as resolved
resolve();
} catch (error) {
// Continue collecting data until it's a valid JSON response
}
});
// Handle errors
serverProcess.on('error', (err: Error) => {
if (!resolved) {
reject(err);
resolved = true;
}
});
// Send the request payload via stdin
serverProcess.stdin.write(requestPayload + '\n');
});
});
});