Skip to content

Commit a803f48

Browse files
authored
Update connection string app name if not present (#199)
1 parent 119a78a commit a803f48

16 files changed

+174
-9
lines changed

eslint.config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ export default defineConfig([
4949
"global.d.ts",
5050
"eslint.config.js",
5151
"jest.config.ts",
52+
"src/types/*.d.ts",
5253
]),
5354
eslintPluginPrettierRecommended,
5455
]);

package-lock.json

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
"bson": "^6.10.3",
6767
"lru-cache": "^11.1.0",
6868
"mongodb": "^6.15.0",
69+
"mongodb-connection-string-url": "^3.0.2",
6970
"mongodb-log-writer": "^2.4.1",
7071
"mongodb-redact": "^1.1.6",
7172
"mongodb-schema": "^12.6.2",

src/common/atlas/apiClient.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { AccessToken, ClientCredentials } from "simple-oauth2";
44
import { ApiClientError } from "./apiClientError.js";
55
import { paths, operations } from "./openapi.js";
66
import { CommonProperties, TelemetryEvent } from "../../telemetry/types.js";
7-
import { packageInfo } from "../../packageInfo.js";
7+
import { packageInfo } from "../../helpers/packageInfo.js";
88

99
const ATLAS_API_VERSION = "2025-03-12";
1010

src/helpers/connectionOptions.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { MongoClientOptions } from "mongodb";
2+
import ConnectionString from "mongodb-connection-string-url";
3+
4+
export function setAppNameParamIfMissing({
5+
connectionString,
6+
defaultAppName,
7+
}: {
8+
connectionString: string;
9+
defaultAppName?: string;
10+
}): string {
11+
const connectionStringUrl = new ConnectionString(connectionString);
12+
13+
const searchParams = connectionStringUrl.typedSearchParams<MongoClientOptions>();
14+
15+
if (!searchParams.has("appName") && defaultAppName !== undefined) {
16+
searchParams.set("appName", defaultAppName);
17+
}
18+
19+
return connectionStringUrl.toString();
20+
}
File renamed without changes.

src/packageInfo.ts renamed to src/helpers/packageInfo.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import packageJson from "../package.json" with { type: "json" };
1+
import packageJson from "../../package.json" with { type: "json" };
22

33
export const packageInfo = {
44
version: packageJson.version,

src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
66
import { config } from "./config.js";
77
import { Session } from "./session.js";
88
import { Server } from "./server.js";
9-
import { packageInfo } from "./packageInfo.js";
9+
import { packageInfo } from "./helpers/packageInfo.js";
1010
import { Telemetry } from "./telemetry/telemetry.js";
1111

1212
try {

src/session.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import { Implementation } from "@modelcontextprotocol/sdk/types.js";
44
import logger, { LogId } from "./logger.js";
55
import EventEmitter from "events";
66
import { ConnectOptions } from "./config.js";
7+
import { setAppNameParamIfMissing } from "./helpers/connectionOptions.js";
8+
import { packageInfo } from "./helpers/packageInfo.js";
79

810
export interface SessionOptions {
911
apiBaseUrl: string;
@@ -98,6 +100,10 @@ export class Session extends EventEmitter<{
98100
}
99101

100102
async connectToMongoDB(connectionString: string, connectOptions: ConnectOptions): Promise<void> {
103+
connectionString = setAppNameParamIfMissing({
104+
connectionString,
105+
defaultAppName: `${packageInfo.mcpServerName} ${packageInfo.version}`,
106+
});
101107
const provider = await NodeDriverServiceProvider.connect(connectionString, {
102108
productDocsLink: "https://docs.mongodb.com/todo-mcp",
103109
productName: "MongoDB MCP",

src/telemetry/constants.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { packageInfo } from "../packageInfo.js";
1+
import { packageInfo } from "../helpers/packageInfo.js";
22
import { type CommonStaticProperties } from "./types.js";
33

44
/**

0 commit comments

Comments
 (0)