import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { Config } from "./config/types";
import { ToolsLoader } from "./tools/loader/toolsLoader";
import { ToolsProcessor } from "./tools/response/types";
export class Server {
config: Config;
toolsGetter: ToolsLoader;
toolsProccessor: ToolsProcessor;
server?: McpServer;
constructor(
config: Config,
toolsGetter: ToolsLoader,
toolsProccessor: ToolsProcessor,
) {
this.config = config;
this.toolsGetter = toolsGetter;
this.toolsProccessor = toolsProccessor;
}
async configureServer(name: string, version: string) {
const server = new McpServer({
name,
version,
});
const tools = await this.toolsGetter.getTools();
const process = await this.toolsProccessor.prepareItems(tools);
process.forEach((x) => {
server.tool(x.name, x.description, x.payload, x.handle.bind(x) as any);
});
this.server = server;
}
async runServer() {
const transport = new StdioServerTransport();
await this.server!.connect(transport);
}
}