Skip to content

Commit 571fd72

Browse files
committed
Merge branch 'ni/connection-config' into ni/integration-tests
2 parents 29f9ea1 + 92c0e88 commit 571fd72

File tree

3 files changed

+26
-8
lines changed

3 files changed

+26
-8
lines changed

src/config.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const { localDataPath, configPath } = getLocalDataPath();
99

1010
// If we decide to support non-string config options, we'll need to extend the mechanism for parsing
1111
// env variables.
12-
interface UserConfig extends Record<string, unknown> {
12+
interface UserConfig {
1313
apiBaseUrl: string;
1414
clientId: string;
1515
stateFile: string;
@@ -106,15 +106,16 @@ function getEnvConfig(): Partial<UserConfig> {
106106
}
107107

108108
const result: Record<string, unknown> = {};
109-
for (const [key, value] of Object.entries(process.env).filter(
109+
const mcpVariables = Object.entries(process.env).filter(
110110
([key, value]) => value !== undefined && key.startsWith("MDB_MCP_")
111-
)) {
111+
) as [string, string][];
112+
for (const [key, value] of mcpVariables) {
112113
const fieldPath = key
113114
.replace("MDB_MCP_", "")
114115
.split(".")
115116
.map((part) => SNAKE_CASE_toCamelCase(part));
116117

117-
setValue(result, fieldPath, value!);
118+
setValue(result, fieldPath, value);
118119
}
119120

120121
return result;

src/tools/mongodb/connect.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { DbOperationType, MongoDBToolBase } from "./mongodbTool.js";
44
import { ToolArgs } from "../tool.js";
55
import { ErrorCodes, MongoDBError } from "../../errors.js";
66
import config from "../../config.js";
7-
import { connectToMongoDB } from "../../common/mongodb/connect.js";
87

98
export class ConnectTool extends MongoDBToolBase {
109
protected name = "connect";
@@ -58,7 +57,7 @@ export class ConnectTool extends MongoDBToolBase {
5857
throw new MongoDBError(ErrorCodes.InvalidParams, "Invalid connection options");
5958
}
6059

61-
await connectToMongoDB(connectionString, this.state);
60+
await this.connectToMongoDB(connectionString, this.state);
6261

6362
return {
6463
content: [{ type: "text", text: `Successfully connected to ${connectionString}.` }],

src/tools/mongodb/mongodbTool.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { NodeDriverServiceProvider } from "@mongosh/service-provider-node-driver
55
import { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
66
import { ErrorCodes, MongoDBError } from "../../errors.js";
77
import config from "../../config.js";
8-
import { connectToMongoDB } from "../../common/mongodb/connect.js";
98

109
export const DbOperationArgs = {
1110
database: z.string().describe("Database name"),
@@ -24,7 +23,7 @@ export abstract class MongoDBToolBase extends ToolBase {
2423
protected async ensureConnected(): Promise<NodeDriverServiceProvider> {
2524
const provider = this.state.serviceProvider;
2625
if (!provider && config.connectionString) {
27-
await connectToMongoDB(config.connectionString, this.state);
26+
await this.connectToMongoDB(config.connectionString, this.state);
2827
}
2928

3029
if (!provider) {
@@ -52,4 +51,23 @@ export abstract class MongoDBToolBase extends ToolBase {
5251

5352
return undefined;
5453
}
54+
55+
protected async connectToMongoDB(connectionString: string, state: State): Promise<void> {
56+
const provider = await NodeDriverServiceProvider.connect(connectionString, {
57+
productDocsLink: "https://docs.mongodb.com/todo-mcp",
58+
productName: "MongoDB MCP",
59+
readConcern: {
60+
level: config.connectOptions.readConcern,
61+
},
62+
readPreference: config.connectOptions.readPreference,
63+
writeConcern: {
64+
w: config.connectOptions.writeConcern,
65+
},
66+
timeoutMS: config.connectOptions.timeoutMS,
67+
});
68+
69+
state.serviceProvider = provider;
70+
state.credentials.connectionString = connectionString;
71+
await state.persistCredentials();
72+
}
5573
}

0 commit comments

Comments
 (0)