mcporter/tests/fixtures/stdio-memory-server.mjs
2026-06-18 07:54:31 +02:00

77 lines
1.8 KiB
JavaScript

#!/usr/bin/env node
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { z } from 'zod';
const server = new McpServer({ name: 'memory-fixture', version: '1.0.0' });
const memory = new Set();
server.registerTool(
'create_entities',
{
title: 'Create Entities',
description: 'Insert the provided entity names into the in-memory store',
inputSchema: {
entities: z.array(z.string()),
},
outputSchema: {
count: z.number(),
},
},
async ({ entities }) => {
for (const entity of entities) {
if (entity.trim().length > 0) {
memory.add(entity.trim());
}
}
return {
content: [{ type: 'text', text: `Stored ${memory.size} entities` }],
structuredContent: { count: memory.size },
};
}
);
server.registerTool(
'echo_text',
{
title: 'Echo Text',
description: 'Return the provided text unchanged',
inputSchema: {
text: z.string(),
},
outputSchema: {
text: z.string(),
},
},
async ({ text }) => ({
content: [{ type: 'text', text }],
structuredContent: { text },
})
);
server.registerTool(
'list_entities',
{
title: 'List Entities',
description: 'Return all previously stored entities',
inputSchema: {},
outputSchema: {
entities: z.array(z.string()),
},
},
async () => {
return {
content: [{ type: 'text', text: JSON.stringify(Array.from(memory)) }],
structuredContent: { entities: Array.from(memory) },
};
}
);
const transport = new StdioServerTransport();
await server.connect(transport);
await new Promise((resolve, reject) => {
transport.onclose = resolve;
transport.onerror = reject;
});