|  | 
| 1 | 1 | import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; | 
| 2 |  | -import defaultState, { State } from "./state.js"; | 
|  | 2 | +import { Session } from "./session.js"; | 
| 3 | 3 | import { Transport } from "@modelcontextprotocol/sdk/shared/transport.js"; | 
| 4 |  | -import { registerAtlasTools } from "./tools/atlas/tools.js"; | 
| 5 |  | -import { registerMongoDBTools } from "./tools/mongodb/index.js"; | 
| 6 |  | -import config from "./config.js"; | 
|  | 4 | +import { AtlasTools } from "./tools/atlas/tools.js"; | 
|  | 5 | +import { MongoDbTools } from "./tools/mongodb/tools.js"; | 
| 7 | 6 | import logger, { initializeLogger } from "./logger.js"; | 
| 8 | 7 | import { mongoLogId } from "mongodb-log-writer"; | 
| 9 | 8 | 
 | 
| 10 | 9 | export class Server { | 
| 11 |  | -    state: State = defaultState; | 
| 12 |  | -    private server?: McpServer; | 
|  | 10 | +    public readonly session: Session; | 
|  | 11 | +    private readonly mcpServer: McpServer; | 
|  | 12 | + | 
|  | 13 | +    constructor({ mcpServer, session }: { mcpServer: McpServer; session: Session }) { | 
|  | 14 | +        this.mcpServer = mcpServer; | 
|  | 15 | +        this.session = session; | 
|  | 16 | +    } | 
| 13 | 17 | 
 | 
| 14 | 18 |     async connect(transport: Transport) { | 
| 15 |  | -        this.server = new McpServer({ | 
| 16 |  | -            name: "MongoDB Atlas", | 
| 17 |  | -            version: config.version, | 
| 18 |  | -        }); | 
|  | 19 | +        this.mcpServer.server.registerCapabilities({ logging: {} }); | 
| 19 | 20 | 
 | 
| 20 |  | -        this.server.server.registerCapabilities({ logging: {} }); | 
|  | 21 | +        this.registerTools(); | 
| 21 | 22 | 
 | 
| 22 |  | -        registerAtlasTools(this.server, this.state); | 
| 23 |  | -        registerMongoDBTools(this.server, this.state); | 
|  | 23 | +        await initializeLogger(this.mcpServer); | 
| 24 | 24 | 
 | 
| 25 |  | -        await initializeLogger(this.server); | 
| 26 |  | -        await this.server.connect(transport); | 
|  | 25 | +        await this.mcpServer.connect(transport); | 
| 27 | 26 | 
 | 
| 28 | 27 |         logger.info(mongoLogId(1_000_004), "server", `Server started with transport ${transport.constructor.name}`); | 
| 29 | 28 |     } | 
| 30 | 29 | 
 | 
| 31 | 30 |     async close(): Promise<void> { | 
| 32 |  | -        try { | 
| 33 |  | -            await this.state.serviceProvider?.close(true); | 
| 34 |  | -        } catch { | 
| 35 |  | -            // Ignore errors during service provider close | 
|  | 31 | +        await this.session.close(); | 
|  | 32 | +        await this.mcpServer.close(); | 
|  | 33 | +    } | 
|  | 34 | + | 
|  | 35 | +    private registerTools() { | 
|  | 36 | +        for (const tool of [...AtlasTools, ...MongoDbTools]) { | 
|  | 37 | +            new tool(this.session).register(this.mcpServer); | 
| 36 | 38 |         } | 
| 37 |  | -        await this.server?.close(); | 
| 38 | 39 |     } | 
| 39 | 40 | } | 
0 commit comments