MCP Titan
by henryhawke
Verified
import { TitanMemoryServer } from '../index.js';
import { CallToolRequestSchema } from '@modelcontextprotocol/sdk/types.js';
describe('TitanMemoryServer Tests', () => {
let server: TitanMemoryServer;
let handler: any;
beforeAll(async () => {
process.env.NODE_ENV = 'test';
server = new TitanMemoryServer();
await server.run();
handler = server['server']['_requestHandlers'].get('tools/call');
// Initialize the model first with smaller dimensions for testing
await handler({
jsonrpc: '2.0',
method: 'tools/call',
params: {
name: 'init_model',
arguments: {
inputDim: 32,
outputDim: 32
}
},
id: 1
});
});
afterAll(async () => {
if (server) {
await server['cleanup']();
}
process.env.NODE_ENV = undefined;
});
test('Initialize model with config', async () => {
const request = {
jsonrpc: '2.0',
method: 'tools/call',
params: {
name: 'init_model',
arguments: {
inputDim: 32,
outputDim: 32
}
},
id: 1
};
const response = await handler(request);
expect(response.content[0].text).toBeDefined();
const result = JSON.parse(response.content[0].text);
expect(result.config).toMatchObject({
inputDim: 32,
outputDim: 32
});
});
test('Training step with valid input', async () => {
const x_t = Array(32).fill(0).map(() => Math.random());
const x_next = Array(32).fill(0).map(() => Math.random());
const response = await handler({
jsonrpc: '2.0',
method: 'tools/call',
params: {
name: 'train_step',
arguments: { x_t, x_next }
},
id: 2
});
expect(response.content[0].text).toBeDefined();
const result = JSON.parse(response.content[0].text);
expect(result.cost).toBeDefined();
expect(result.predicted).toBeDefined();
expect(result.surprise).toBeDefined();
});
test('Forward pass with valid input', async () => {
const x = Array(32).fill(0).map(() => Math.random());
const response = await handler({
jsonrpc: '2.0',
method: 'tools/call',
params: {
name: 'forward_pass',
arguments: { x }
},
id: 3
});
expect(response.content[0].text).toBeDefined();
const result = JSON.parse(response.content[0].text);
expect(result.predicted).toBeDefined();
expect(result.memory).toBeDefined();
expect(result.surprise).toBeDefined();
});
test('Get memory state', async () => {
const response = await handler({
jsonrpc: '2.0',
method: 'tools/call',
params: {
name: 'get_memory_state',
arguments: {}
},
id: 4
});
expect(response.content[0].text).toBeDefined();
const result = JSON.parse(response.content[0].text);
expect(result.memoryStats).toBeDefined();
expect(result.memoryStats.mean).toBeDefined();
expect(result.memoryStats.std).toBeDefined();
expect(result.memorySize).toBeDefined();
expect(result.status).toBe('active');
});
});