24 lines
1 KiB
TypeScript
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;
|
|
}
|