MCP Memory Server

#!/usr/bin/env node import { spawn } from 'child_process'; import fs from 'fs'; import path from 'path'; // Function to send a request to the MCP server async function sendRequest(request) { return new Promise((resolve, reject) => { const server = spawn('node', ['./dist/index.js'], { env: { ...process.env, MEMORY_DIR: './test-memory' }, stdio: ['pipe', 'pipe', 'inherit'] }); let responseData = ''; server.stdout.on('data', (data) => { responseData += data.toString(); }); server.on('error', (error) => { reject(error); }); server.on('close', (code) => { if (code !== 0) { reject(new Error(`Server exited with code ${code}`)); } else { try { const response = JSON.parse(responseData.trim()); resolve(response); } catch (error) { reject(new Error(`Failed to parse response: ${error.message}\nRaw response: ${responseData}`)); } } }); server.stdin.write(JSON.stringify(request) + '\n'); server.stdin.end(); }); } // Test the server async function testServer() { try { console.log('Testing MCP server...'); // First, list the available tools console.log('Listing tools...'); const listToolsRequest = { id: '1', jsonrpc: '2.0', method: 'tools/list', params: {} }; const listToolsResponse = await sendRequest(listToolsRequest); console.log('Tools list response:', JSON.stringify(listToolsResponse, null, 2)); // Check if we got a valid response with tools if (listToolsResponse.result && listToolsResponse.result.tools && listToolsResponse.result.tools.length > 0) { console.log(`Found ${listToolsResponse.result.tools.length} tools`); console.log('Server is working correctly with tools capability!'); } else { console.error('Failed to get tools list'); process.exit(1); } } catch (error) { console.error('Test failed:', error); process.exit(1); } } testServer();