Skip to content

Commit e2393e8

Browse files
committed
fix: address comments
1 parent 4e8b791 commit e2393e8

File tree

7 files changed

+63
-28
lines changed

7 files changed

+63
-28
lines changed

src/common/atlas/apiClient.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import version from "../../version.js";
21
import createClient, { Client, FetchOptions, Middleware } from "openapi-fetch";
32
import { AccessToken, ClientCredentials } from "simple-oauth2";
43
import { ApiClientError } from "./apiClientError.js";
54
import { paths, operations } from "./openapi.js";
5+
import { packageInfo } from "../../package.js";
66

77
const ATLAS_API_VERSION = "2025-03-12";
88

@@ -67,7 +67,7 @@ export class ApiClient {
6767
baseUrl: options?.baseUrl || "https://cloud.mongodb.com/",
6868
userAgent:
6969
options?.userAgent ||
70-
`AtlasMCP/${version} (${process.platform}; ${process.arch}; ${process.env.HOSTNAME || "unknown"})`,
70+
`AtlasMCP/${packageInfo.version} (${process.platform}; ${process.arch}; ${process.env.HOSTNAME || "unknown"})`,
7171
};
7272

7373
this.client = createClient<paths>({

src/index.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,25 @@ import logger from "./logger.js";
55
import { mongoLogId } from "mongodb-log-writer";
66
import { Server } from "./server.js";
77
import { config } from "./config.js";
8+
import { Session } from "./session.js";
9+
import { packageInfo } from "./package.js";
10+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
811

912
try {
10-
const server = new Server(config);
13+
const session = new Session({
14+
apiBaseUrl: config.apiBaseUrl,
15+
apiClientId: config.apiClientId,
16+
apiClientSecret: config.apiClientSecret,
17+
});
18+
const mcpServer = new McpServer({
19+
name: packageInfo.mcpServerName,
20+
version: packageInfo.version,
21+
});
22+
const server = new Server({
23+
session,
24+
userConfig: config,
25+
mcpServer,
26+
});
1127

1228
const transport = new StdioServerTransport();
1329

src/package.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import packageJson from "../package.json" with { type: "json" };
2+
3+
export const packageInfo = {
4+
version: packageJson.version,
5+
mcpServerName: "MongoDB MCP Server",
6+
};

src/server.ts

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,22 @@ import { MongoDbTools } from "./tools/mongodb/tools.js";
66
import logger, { initializeLogger } from "./logger.js";
77
import { mongoLogId } from "mongodb-log-writer";
88
import { UserConfig } from "./config.js";
9-
import version from "./version.js";
9+
10+
export interface ServerOptions {
11+
session: Session;
12+
userConfig: UserConfig;
13+
mcpServer: McpServer;
14+
}
1015

1116
export class Server {
1217
public readonly session: Session;
13-
private readonly mcpServer: McpServer = new McpServer({
14-
name: "MongoDB Atlas",
15-
version,
16-
});
18+
private readonly mcpServer: McpServer;
19+
private readonly userConfig: UserConfig;
1720

18-
constructor(private readonly config: UserConfig) {
19-
this.session = new Session({
20-
apiBaseUrl: config.apiBaseUrl,
21-
apiClientId: config.apiClientId,
22-
apiClientSecret: config.apiClientSecret,
23-
});
21+
constructor({ session, mcpServer, userConfig }: ServerOptions) {
22+
this.session = session;
23+
this.mcpServer = mcpServer;
24+
this.userConfig = userConfig;
2425
}
2526

2627
async connect(transport: Transport) {
@@ -29,7 +30,7 @@ export class Server {
2930
this.registerTools();
3031
this.registerResources();
3132

32-
await initializeLogger(this.mcpServer, this.config.logPath);
33+
await initializeLogger(this.mcpServer, this.userConfig.logPath);
3334

3435
await this.mcpServer.connect(transport);
3536

@@ -43,12 +44,12 @@ export class Server {
4344

4445
private registerTools() {
4546
for (const tool of [...AtlasTools, ...MongoDbTools]) {
46-
new tool(this.session, this.config).register(this.mcpServer);
47+
new tool(this.session, this.userConfig).register(this.mcpServer);
4748
}
4849
}
4950

5051
private registerResources() {
51-
if (this.config.connectionString) {
52+
if (this.userConfig.connectionString) {
5253
this.mcpServer.resource(
5354
"connection-string",
5455
"config://connection-string",
@@ -59,7 +60,7 @@ export class Server {
5960
return {
6061
contents: [
6162
{
62-
text: `Preconfigured connection string: ${this.config.connectionString}`,
63+
text: `Preconfigured connection string: ${this.userConfig.connectionString}`,
6364
uri: uri.href,
6465
},
6566
],

src/session.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,17 @@ export class Session {
1111
serviceProvider?: NodeDriverServiceProvider;
1212
apiClient: ApiClient;
1313

14-
constructor(options?: SessionOptions) {
14+
constructor({ apiBaseUrl, apiClientId, apiClientSecret }: SessionOptions = {}) {
1515
const credentials: ApiClientCredentials | undefined =
16-
options?.apiClientId && options?.apiClientSecret
16+
apiClientId && apiClientSecret
1717
? {
18-
clientId: options?.apiClientId,
19-
clientSecret: options?.apiClientSecret,
18+
clientId: apiClientId,
19+
clientSecret: apiClientSecret,
2020
}
2121
: undefined;
2222

2323
this.apiClient = new ApiClient({
24-
baseUrl: options?.apiBaseUrl,
24+
baseUrl: apiBaseUrl,
2525
credentials,
2626
});
2727
}

src/version.ts

Lines changed: 0 additions & 3 deletions
This file was deleted.

tests/integration/helpers.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import { MongoClient, ObjectId } from "mongodb";
88
import { toIncludeAllMembers } from "jest-extended";
99
import { config, UserConfig } from "../../src/config.js";
1010
import { McpError } from "@modelcontextprotocol/sdk/types.js";
11+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
12+
import { Session } from "../../src/session.js";
1113

1214
interface ParameterInfo {
1315
name: string;
@@ -27,7 +29,7 @@ export interface IntegrationTest {
2729
randomDbName: () => string;
2830
}
2931

30-
export function setupIntegrationTest(cfg: UserConfig = config): IntegrationTest {
32+
export function setupIntegrationTest(userConfig: UserConfig = config): IntegrationTest {
3133
let mongoCluster: runner.MongoCluster | undefined;
3234
let mongoClient: MongoClient | undefined;
3335

@@ -56,7 +58,20 @@ export function setupIntegrationTest(cfg: UserConfig = config): IntegrationTest
5658
}
5759
);
5860

59-
mcpServer = new Server(cfg);
61+
const session = new Session({
62+
apiBaseUrl: userConfig.apiBaseUrl,
63+
apiClientId: userConfig.apiClientId,
64+
apiClientSecret: userConfig.apiClientSecret,
65+
});
66+
67+
mcpServer = new Server({
68+
session,
69+
userConfig,
70+
mcpServer: new McpServer({
71+
name: "test-server",
72+
version: "1.2.3",
73+
}),
74+
});
6075
await mcpServer.connect(serverTransport);
6176
await mcpClient.connect(clientTransport);
6277
});

0 commit comments

Comments
 (0)