Skip to content

Commit 95f3b1e

Browse files
committed
automatically connect if config connection string is provided
1 parent 70077ef commit 95f3b1e

File tree

3 files changed

+29
-19
lines changed

3 files changed

+29
-19
lines changed

src/common/mongodb/connect.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { NodeDriverServiceProvider } from "@mongosh/service-provider-node-driver";
2+
import { State } from "../../state.js";
3+
import config from "../../config.js";
4+
5+
export async function connectToMongoDB(connectionString: string, state: State): Promise<void> {
6+
const provider = await NodeDriverServiceProvider.connect(connectionString, {
7+
productDocsLink: "https://docs.mongodb.com/todo-mcp",
8+
productName: "MongoDB MCP",
9+
readConcern: config.connectOptions.readConcern,
10+
readPreference: config.connectOptions.readPreference,
11+
writeConcern: {
12+
w: config.connectOptions.writeConcern,
13+
},
14+
timeoutMS: config.connectOptions.timeoutMS,
15+
});
16+
17+
state.serviceProvider = provider;
18+
state.credentials.connectionString = connectionString;
19+
await state.persistCredentials();
20+
}

src/tools/mongodb/connect.ts

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { DbOperationType, MongoDBToolBase } from "./mongodbTool.js";
55
import { ToolArgs } from "../tool.js";
66
import { ErrorCodes, MongoDBError } from "../../errors.js";
77
import config from "../../config.js";
8+
import { connectToMongoDB } from "../../common/mongodb/connect.js";
89

910
export class ConnectTool extends MongoDBToolBase {
1011
protected name = "connect";
@@ -58,27 +59,10 @@ export class ConnectTool extends MongoDBToolBase {
5859
throw new MongoDBError(ErrorCodes.InvalidParams, "Invalid connection options");
5960
}
6061

61-
await this.connect(connectionString);
62+
await connectToMongoDB(connectionString, this.state);
6263

6364
return {
6465
content: [{ type: "text", text: `Successfully connected to ${connectionString}.` }],
6566
};
6667
}
67-
68-
private async connect(connectionString: string): Promise<void> {
69-
const provider = await NodeDriverServiceProvider.connect(connectionString, {
70-
productDocsLink: "https://docs.mongodb.com/todo-mcp",
71-
productName: "MongoDB MCP",
72-
readConcern: config.connectOptions.readConcern,
73-
readPreference: config.connectOptions.readPreference,
74-
writeConcern: {
75-
w: config.connectOptions.writeConcern,
76-
},
77-
timeoutMS: config.connectOptions.timeoutMS,
78-
});
79-
80-
this.state.serviceProvider = provider;
81-
this.state.credentials.connectionString = connectionString;
82-
await this.state.persistCredentials();
83-
}
8468
}

src/tools/mongodb/mongodbTool.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import { State } from "../../state.js";
44
import { NodeDriverServiceProvider } from "@mongosh/service-provider-node-driver";
55
import { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
66
import { ErrorCodes, MongoDBError } from "../../errors.js";
7+
import config from "../../config.js";
8+
import { connectToMongoDB } from "../../common/mongodb/connect.js";
79

810
export const DbOperationArgs = {
911
database: z.string().describe("Database name"),
@@ -19,8 +21,12 @@ export abstract class MongoDBToolBase extends ToolBase {
1921

2022
protected abstract operationType: DbOperationType;
2123

22-
protected ensureConnected(): NodeDriverServiceProvider {
24+
protected async ensureConnected(): Promise<NodeDriverServiceProvider> {
2325
const provider = this.state.serviceProvider;
26+
if (!provider && config.connectionString) {
27+
await connectToMongoDB(config.connectionString, this.state);
28+
}
29+
2430
if (!provider) {
2531
throw new MongoDBError(ErrorCodes.NotConnectedToMongoDB, "Not connected to MongoDB");
2632
}

0 commit comments

Comments
 (0)