MEGAINFRA-WEBAPP/src/mcp/create-server.ts

24 lines
1 KiB
TypeScript

import {McpServer} from '@modelcontextprotocol/sdk/server/mcp.js';
import {tools} from '@/lib/agent/tools';
import type {Principal} from '@/lib/purchasing/types';
import {requirePermission} from './auth';
import {registerPurchasingReads} from './purchasing-read-tools';
export function createMcpServer(principal:Principal):McpServer {
const server=new McpServer({name:'mega-infrastructure',version:'1.1.0'});
if(principal.permissions.has('read'))for(const tool of tools){
server.registerTool(tool.name,{
description:tool.description,inputSchema:tool.schema,
annotations:{readOnlyHint:true,destructiveHint:false},
},async(args)=>{
try {
requirePermission(principal,'read');
const result=await tool.handler(args as Record<string,unknown>);
return {content:[{type:'text' as const,text:JSON.stringify(result)}]};
} catch {
return {isError:true,content:[{type:'text' as const,text:'read_failed: check server credentials and data availability'}]};
}
});
}
registerPurchasingReads(server,principal);
return server;
}