Skip to content

Commit cfc8d89

Browse files
committed
refactor: re-introduce the server class
1 parent 6c8752b commit cfc8d89

File tree

2 files changed

+68
-8
lines changed

2 files changed

+68
-8
lines changed

src/index.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,29 @@ import { ApiClient } from "./common/atlas/apiClient.js";
55
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
66
import config from "./config.js";
77
import { State } from "./state.js";
8-
import { registerAtlasTools } from "./tools/atlas/tools.js";
9-
import { registerMongoDBTools } from "./tools/mongodb/index.js";
8+
import { Server } from "./server.js";
109

1110
try {
1211
const state = new State();
1312
await state.loadCredentials();
1413

1514
const apiClient = ApiClient.fromState(state);
1615

17-
const mcp = new McpServer({
16+
const mcpServer = new McpServer({
1817
name: "MongoDB Atlas",
1918
version: config.version,
2019
});
2120

22-
mcp.server.registerCapabilities({ logging: {} });
21+
const transport = new StdioServerTransport();
2322

24-
registerAtlasTools(mcp, state, apiClient);
25-
registerMongoDBTools(mcp, state);
23+
const server = new Server({
24+
mcpServer,
25+
state,
26+
apiClient,
27+
transport,
28+
});
2629

27-
const transport = new StdioServerTransport();
28-
await mcp.server.connect(transport);
30+
await server.registerAndConnect();
2931
} catch (error) {
3032
logger.emergency(mongoLogId(1_000_004), "server", `Fatal error running server: ${error}`);
3133

src/server.ts

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2+
import { ApiClient } from "./common/atlas/apiClient.js";
3+
import { State } from "./state.js";
4+
import { Transport } from "@modelcontextprotocol/sdk/shared/transport.js";
5+
import { registerAtlasTools } from "./tools/atlas/tools.js";
6+
import { registerMongoDBTools } from "./tools/mongodb/index.js";
7+
import logger, { initializeLogger } from "./logger.js";
8+
import { mongoLogId } from "mongodb-log-writer";
9+
10+
export class Server {
11+
readonly state: State;
12+
private readonly apiClient: ApiClient;
13+
private readonly mcpServer: McpServer;
14+
private readonly transport: Transport;
15+
16+
constructor({
17+
state,
18+
apiClient,
19+
mcpServer,
20+
transport,
21+
}: {
22+
state: State;
23+
apiClient: ApiClient;
24+
mcpServer: McpServer;
25+
transport: Transport;
26+
}) {
27+
this.state = state;
28+
this.apiClient = apiClient;
29+
this.mcpServer = mcpServer;
30+
this.transport = transport;
31+
}
32+
33+
async registerAndConnect() {
34+
this.mcpServer.server.registerCapabilities({ logging: {} });
35+
36+
registerAtlasTools(this.mcpServer, this.state, this.apiClient);
37+
registerMongoDBTools(this.mcpServer, this.state);
38+
39+
await this.mcpServer.connect(this.transport);
40+
41+
await initializeLogger(this.mcpServer);
42+
43+
logger.info(
44+
mongoLogId(1_000_004),
45+
"server",
46+
`Server started with transport ${this.transport.constructor.name}`
47+
);
48+
}
49+
50+
async close(): Promise<void> {
51+
try {
52+
await this.state.serviceProvider?.close(true);
53+
} catch {
54+
// Ignore errors during service provider close
55+
}
56+
await this.mcpServer.close();
57+
}
58+
}

0 commit comments

Comments
 (0)