| 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'); |
| } |
|
|