import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js'; import { executeBackendAgentAction, BackendAgentAction } from './runtime.js'; const server = new Server( { name: 'sin-backend', version: '2026.03.22' }, { capabilities: { tools: {} } }, ); server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: [ { name: 'sin_backend_health', description: 'Check 2026 Elite Backend Architect readiness.', inputSchema: { type: 'object', properties: {} }, }, { name: 'sin_backend_code_generate', description: 'Generate Supabase and Agentic Backend architectures.', inputSchema: { type: 'object', properties: { prompt: { type: 'string' }, contextDir: { type: 'string' }, }, required: ['prompt'], }, }, { name: 'sin_backend_code_review', description: 'Audit existing backends against 2026 standards.', inputSchema: { type: 'object', properties: { targetDir: { type: 'string' }, }, required: ['targetDir'], }, }, ], }; }); server.setRequestHandler(CallToolRequestSchema, async (request) => { try { let action: BackendAgentAction; if (request.params.name === 'sin_backend_health') { action = { action: 'sin.backend.health' }; } else if (request.params.name === 'sin_backend_code_generate') { const args = request.params.arguments as any; action = { action: 'sin.backend.code.generate', prompt: args.prompt, contextDir: args.contextDir }; } else if (request.params.name === 'sin_backend_code_review') { const args = request.params.arguments as any; action = { action: 'sin.backend.code.review', targetDir: args.targetDir }; } else { throw new Error(`Unknown tool: ${request.params.name}`); } const result = await executeBackendAgentAction(action); return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }], }; } catch (error: any) { return { content: [{ type: 'text', text: `Error: ${error.message}` }], isError: true, }; } }); export async function runMcpServer() { const transport = new StdioServerTransport(); await server.connect(transport); console.error('A2A-SIN-Code-Backend MCP Server running on stdio'); }