mongodb-mcp-server 0.0.8 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/.github/CODEOWNERS +0 -2
  2. package/.github/ISSUE_TEMPLATE/bug_report.yml +8 -0
  3. package/.github/workflows/{lint.yml → check.yml} +22 -1
  4. package/.github/workflows/code_health.yaml +0 -22
  5. package/.github/workflows/code_health_fork.yaml +7 -63
  6. package/.vscode/extensions.json +9 -0
  7. package/.vscode/settings.json +11 -0
  8. package/README.md +41 -22
  9. package/dist/common/atlas/apiClient.js +141 -34
  10. package/dist/common/atlas/apiClient.js.map +1 -1
  11. package/dist/common/atlas/apiClientError.js +38 -5
  12. package/dist/common/atlas/apiClientError.js.map +1 -1
  13. package/dist/common/atlas/cluster.js +66 -0
  14. package/dist/common/atlas/cluster.js.map +1 -0
  15. package/dist/common/atlas/generatePassword.js +9 -0
  16. package/dist/common/atlas/generatePassword.js.map +1 -0
  17. package/dist/helpers/EJsonTransport.js +38 -0
  18. package/dist/helpers/EJsonTransport.js.map +1 -0
  19. package/dist/helpers/connectionOptions.js +10 -0
  20. package/dist/helpers/connectionOptions.js.map +1 -0
  21. package/dist/{packageInfo.js → helpers/packageInfo.js} +1 -1
  22. package/dist/helpers/packageInfo.js.map +1 -0
  23. package/dist/index.js +6 -3
  24. package/dist/index.js.map +1 -1
  25. package/dist/logger.js +2 -0
  26. package/dist/logger.js.map +1 -1
  27. package/dist/server.js +15 -11
  28. package/dist/server.js.map +1 -1
  29. package/dist/session.js +8 -3
  30. package/dist/session.js.map +1 -1
  31. package/dist/telemetry/constants.js +1 -3
  32. package/dist/telemetry/constants.js.map +1 -1
  33. package/dist/telemetry/eventCache.js.map +1 -1
  34. package/dist/telemetry/telemetry.js +46 -4
  35. package/dist/telemetry/telemetry.js.map +1 -1
  36. package/dist/tools/atlas/atlasTool.js +38 -0
  37. package/dist/tools/atlas/atlasTool.js.map +1 -1
  38. package/dist/tools/atlas/create/createDBUser.js +19 -2
  39. package/dist/tools/atlas/create/createDBUser.js.map +1 -1
  40. package/dist/tools/atlas/metadata/connectCluster.js +5 -22
  41. package/dist/tools/atlas/metadata/connectCluster.js.map +1 -1
  42. package/dist/tools/atlas/read/inspectCluster.js +4 -24
  43. package/dist/tools/atlas/read/inspectCluster.js.map +1 -1
  44. package/dist/tools/atlas/read/listClusters.js +9 -18
  45. package/dist/tools/atlas/read/listClusters.js.map +1 -1
  46. package/dist/tools/mongodb/tools.js +2 -4
  47. package/dist/tools/mongodb/tools.js.map +1 -1
  48. package/eslint.config.js +2 -1
  49. package/{jest.config.ts → jest.config.cjs} +1 -1
  50. package/package.json +4 -2
  51. package/scripts/apply.ts +4 -1
  52. package/scripts/filter.ts +4 -0
  53. package/src/common/atlas/apiClient.ts +179 -37
  54. package/src/common/atlas/apiClientError.ts +58 -7
  55. package/src/common/atlas/cluster.ts +95 -0
  56. package/src/common/atlas/generatePassword.ts +10 -0
  57. package/src/common/atlas/openapi.d.ts +438 -15
  58. package/src/helpers/EJsonTransport.ts +47 -0
  59. package/src/helpers/connectionOptions.ts +20 -0
  60. package/src/{packageInfo.ts → helpers/packageInfo.ts} +1 -1
  61. package/src/index.ts +7 -3
  62. package/src/logger.ts +2 -0
  63. package/src/server.ts +22 -14
  64. package/src/session.ts +8 -4
  65. package/src/telemetry/constants.ts +2 -3
  66. package/src/telemetry/eventCache.ts +1 -1
  67. package/src/telemetry/telemetry.ts +72 -6
  68. package/src/telemetry/types.ts +0 -1
  69. package/src/tools/atlas/atlasTool.ts +47 -1
  70. package/src/tools/atlas/create/createDBUser.ts +22 -2
  71. package/src/tools/atlas/metadata/connectCluster.ts +5 -27
  72. package/src/tools/atlas/read/inspectCluster.ts +4 -40
  73. package/src/tools/atlas/read/listClusters.ts +19 -36
  74. package/src/tools/mongodb/tools.ts +2 -4
  75. package/src/types/mongodb-connection-string-url.d.ts +69 -0
  76. package/tests/integration/helpers.ts +18 -2
  77. package/tests/integration/telemetry.test.ts +28 -0
  78. package/tests/integration/tools/atlas/dbUsers.test.ts +57 -32
  79. package/tests/integration/tools/mongodb/metadata/connect.test.ts +2 -6
  80. package/tests/integration/tools/mongodb/mongodbHelpers.ts +15 -24
  81. package/tests/integration/tools/mongodb/read/find.test.ts +28 -0
  82. package/tests/unit/EJsonTransport.test.ts +71 -0
  83. package/tests/unit/apiClient.test.ts +193 -0
  84. package/tests/unit/session.test.ts +65 -0
  85. package/tests/unit/telemetry.test.ts +165 -71
  86. package/tsconfig.build.json +1 -1
  87. package/dist/packageInfo.js.map +0 -1
  88. package/dist/telemetry/device-id.js +0 -20
  89. package/dist/telemetry/device-id.js.map +0 -1
  90. package/src/telemetry/device-id.ts +0 -21
@@ -1,6 +1,7 @@
1
1
  import { ToolBase } from "../tool.js";
2
2
  import logger, { LogId } from "../../logger.js";
3
3
  import { z } from "zod";
4
+ import { ApiClientError } from "../../common/atlas/apiClientError.js";
4
5
  export class AtlasToolBase extends ToolBase {
5
6
  constructor() {
6
7
  super(...arguments);
@@ -12,6 +13,43 @@ export class AtlasToolBase extends ToolBase {
12
13
  }
13
14
  return super.verifyAllowed();
14
15
  }
16
+ handleError(error, args) {
17
+ if (error instanceof ApiClientError) {
18
+ const statusCode = error.response.status;
19
+ if (statusCode === 401) {
20
+ return {
21
+ content: [
22
+ {
23
+ type: "text",
24
+ text: `Unable to authenticate with MongoDB Atlas, API error: ${error.message}
25
+
26
+ Hint: Your API credentials may be invalid, expired or lack permissions.
27
+ Please check your Atlas API credentials and ensure they have the appropriate permissions.
28
+ For more information on setting up API keys, visit: https://www.mongodb.com/docs/atlas/configure-api-access/`,
29
+ },
30
+ ],
31
+ isError: true,
32
+ };
33
+ }
34
+ if (statusCode === 403) {
35
+ return {
36
+ content: [
37
+ {
38
+ type: "text",
39
+ text: `Received a Forbidden API Error: ${error.message}
40
+
41
+ You don't have sufficient permissions to perform this action in MongoDB Atlas
42
+ Please ensure your API key has the necessary roles assigned.
43
+ For more information on Atlas API access roles, visit: https://www.mongodb.com/docs/atlas/api/service-accounts-overview/`,
44
+ },
45
+ ],
46
+ isError: true,
47
+ };
48
+ }
49
+ }
50
+ // For other types of errors, use the default error handling from the base class
51
+ return super.handleError(error, args);
52
+ }
15
53
  /**
16
54
  *
17
55
  * Resolves the tool metadata from the arguments passed to the tool
@@ -1 +1 @@
1
- {"version":3,"file":"atlasTool.js","sourceRoot":"","sources":["../../../src/tools/atlas/atlasTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAuC,MAAM,YAAY,CAAC;AAE3E,OAAO,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,OAAgB,aAAc,SAAQ,QAAQ;IAApD;;QACc,aAAQ,GAAiB,OAAO,CAAC;IAkD/C,CAAC;IAhDa,aAAa;QACnB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YAC3D,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,KAAK,CAAC,aAAa,EAAE,CAAC;IACjC,CAAC;IAED;;;;;;OAMG;IACO,wBAAwB,CAC9B,GAAG,IAAqD;QAExD,MAAM,YAAY,GAA0B,EAAE,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACf,OAAO,YAAY,CAAC;QACxB,CAAC;QAED,sDAAsD;QACtD,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAElD,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,CAAC,KAAK,CACR,KAAK,CAAC,sBAAsB,EAC5B,MAAM,EACN,iCAAiC,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,CAChE,CAAC;YACF,OAAO,YAAY,CAAC;QACxB,CAAC;QAED,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC;QAE/B,qCAAqC;QACrC,IAAI,WAAW,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC5F,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAC5C,CAAC;QAED,iCAAiC;QACjC,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAChF,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACpC,CAAC;QACD,OAAO,YAAY,CAAC;IACxB,CAAC;CACJ"}
1
+ {"version":3,"file":"atlasTool.js","sourceRoot":"","sources":["../../../src/tools/atlas/atlasTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAiD,MAAM,YAAY,CAAC;AAGrF,OAAO,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAEtE,MAAM,OAAgB,aAAc,SAAQ,QAAQ;IAApD;;QACc,aAAQ,GAAiB,OAAO,CAAC;IA8F/C,CAAC;IA5Fa,aAAa;QACnB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YAC3D,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,KAAK,CAAC,aAAa,EAAE,CAAC;IACjC,CAAC;IAES,WAAW,CACjB,KAAc,EACd,IAAqC;QAErC,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;YAClC,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YAEzC,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;gBACrB,OAAO;oBACH,OAAO,EAAE;wBACL;4BACI,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,yDAAyD,KAAK,CAAC,OAAO;;;;6GAIK;yBACpF;qBACJ;oBACD,OAAO,EAAE,IAAI;iBAChB,CAAC;YACN,CAAC;YAED,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;gBACrB,OAAO;oBACH,OAAO,EAAE;wBACL;4BACI,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,mCAAmC,KAAK,CAAC,OAAO;;;;yHAIuC;yBAChG;qBACJ;oBACD,OAAO,EAAE,IAAI;iBAChB,CAAC;YACN,CAAC;QACL,CAAC;QAED,gFAAgF;QAChF,OAAO,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;;OAMG;IACO,wBAAwB,CAC9B,GAAG,IAAqD;QAExD,MAAM,YAAY,GAA0B,EAAE,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACf,OAAO,YAAY,CAAC;QACxB,CAAC;QAED,sDAAsD;QACtD,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAElD,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,CAAC,KAAK,CACR,KAAK,CAAC,sBAAsB,EAC5B,MAAM,EACN,iCAAiC,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,CAChE,CAAC;YACF,OAAO,YAAY,CAAC;QACxB,CAAC;QAED,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC;QAE/B,qCAAqC;QACrC,IAAI,WAAW,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC5F,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAC5C,CAAC;QAED,iCAAiC;QACjC,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAChF,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACpC,CAAC;QACD,OAAO,YAAY,CAAC;IACxB,CAAC;CACJ"}
@@ -1,5 +1,6 @@
1
1
  import { z } from "zod";
2
2
  import { AtlasToolBase } from "../atlasTool.js";
3
+ import { generateSecurePassword } from "../../../common/atlas/generatePassword.js";
3
4
  export class CreateDBUserTool extends AtlasToolBase {
4
5
  constructor() {
5
6
  super(...arguments);
@@ -9,7 +10,14 @@ export class CreateDBUserTool extends AtlasToolBase {
9
10
  this.argsShape = {
10
11
  projectId: z.string().describe("Atlas project ID"),
11
12
  username: z.string().describe("Username for the new user"),
12
- password: z.string().describe("Password for the new user"),
13
+ // Models will generate overly simplistic passwords like SecurePassword123 or
14
+ // AtlasPassword123, which are easily guessable and exploitable. We're instructing
15
+ // the model not to try and generate anything and instead leave the field unset.
16
+ password: z
17
+ .string()
18
+ .optional()
19
+ .nullable()
20
+ .describe("Password for the new user. If the user hasn't supplied an explicit password, leave it unset and under no circumstances try to generate a random one. A secure password will be generated by the MCP server if necessary."),
13
21
  roles: z
14
22
  .array(z.object({
15
23
  roleName: z.string().describe("Role name"),
@@ -24,6 +32,10 @@ export class CreateDBUserTool extends AtlasToolBase {
24
32
  };
25
33
  }
26
34
  async execute({ projectId, username, password, roles, clusters, }) {
35
+ const shouldGeneratePassword = !password;
36
+ if (shouldGeneratePassword) {
37
+ password = await generateSecurePassword();
38
+ }
27
39
  const input = {
28
40
  groupId: projectId,
29
41
  awsIAMType: "NONE",
@@ -50,7 +62,12 @@ export class CreateDBUserTool extends AtlasToolBase {
50
62
  body: input,
51
63
  });
52
64
  return {
53
- content: [{ type: "text", text: `User "${username}" created sucessfully.` }],
65
+ content: [
66
+ {
67
+ type: "text",
68
+ text: `User "${username}" created successfully${shouldGeneratePassword ? ` with password: \`${password}\`` : ""}.`,
69
+ },
70
+ ],
54
71
  };
55
72
  }
56
73
  }
@@ -1 +1 @@
1
- {"version":3,"file":"createDBUser.js","sourceRoot":"","sources":["../../../../src/tools/atlas/create/createDBUser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIhD,MAAM,OAAO,gBAAiB,SAAQ,aAAa;IAAnD;;QACc,SAAI,GAAG,sBAAsB,CAAC;QAC9B,gBAAW,GAAG,uCAAuC,CAAC;QACtD,kBAAa,GAAkB,QAAQ,CAAC;QACxC,cAAS,GAAG;YAClB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAClD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;YAC1D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;YAC1D,KAAK,EAAE,CAAC;iBACH,KAAK,CACF,CAAC,CAAC,MAAM,CAAC;gBACL,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAC1C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;gBACnE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE;aACpE,CAAC,CACL;iBACA,QAAQ,CAAC,wBAAwB,CAAC;YACvC,QAAQ,EAAE,CAAC;iBACN,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;iBACjB,QAAQ,CAAC,wEAAwE,CAAC;iBAClF,QAAQ,EAAE;SAClB,CAAC;IAwCN,CAAC;IAtCa,KAAK,CAAC,OAAO,CAAC,EACpB,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,QAAQ,GACsB;QAC9B,MAAM,KAAK,GAAG;YACV,OAAO,EAAE,SAAS;YAClB,UAAU,EAAE,MAAM;YAClB,YAAY,EAAE,OAAO;YACrB,YAAY,EAAE,MAAM;YACpB,YAAY,EAAE,MAAM;YACpB,QAAQ,EAAE,MAAM;YAChB,QAAQ;YACR,QAAQ;YACR,KAAK,EAAE,KAAsC;YAC7C,MAAM,EAAE,QAAQ,EAAE,MAAM;gBACpB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;oBACvB,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,OAAO;iBAChB,CAAC,CAAC;gBACL,CAAC,CAAC,SAAS;SACG,CAAC;QAEvB,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,kBAAkB,CAAC;YAC5C,MAAM,EAAE;gBACJ,IAAI,EAAE;oBACF,OAAO,EAAE,SAAS;iBACrB;aACJ;YACD,IAAI,EAAE,KAAK;SACd,CAAC,CAAC;QAEH,OAAO;YACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,QAAQ,wBAAwB,EAAE,CAAC;SAC/E,CAAC;IACN,CAAC;CACJ"}
1
+ {"version":3,"file":"createDBUser.js","sourceRoot":"","sources":["../../../../src/tools/atlas/create/createDBUser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AAEnF,MAAM,OAAO,gBAAiB,SAAQ,aAAa;IAAnD;;QACc,SAAI,GAAG,sBAAsB,CAAC;QAC9B,gBAAW,GAAG,uCAAuC,CAAC;QACtD,kBAAa,GAAkB,QAAQ,CAAC;QACxC,cAAS,GAAG;YAClB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAClD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;YAC1D,6EAA6E;YAC7E,kFAAkF;YAClF,gFAAgF;YAChF,QAAQ,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,EAAE;iBACV,QAAQ,CACL,0NAA0N,CAC7N;YACL,KAAK,EAAE,CAAC;iBACH,KAAK,CACF,CAAC,CAAC,MAAM,CAAC;gBACL,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAC1C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;gBACnE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE;aACpE,CAAC,CACL;iBACA,QAAQ,CAAC,wBAAwB,CAAC;YACvC,QAAQ,EAAE,CAAC;iBACN,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;iBACjB,QAAQ,CAAC,wEAAwE,CAAC;iBAClF,QAAQ,EAAE;SAClB,CAAC;IAkDN,CAAC;IAhDa,KAAK,CAAC,OAAO,CAAC,EACpB,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,QAAQ,GACsB;QAC9B,MAAM,sBAAsB,GAAG,CAAC,QAAQ,CAAC;QACzC,IAAI,sBAAsB,EAAE,CAAC;YACzB,QAAQ,GAAG,MAAM,sBAAsB,EAAE,CAAC;QAC9C,CAAC;QAED,MAAM,KAAK,GAAG;YACV,OAAO,EAAE,SAAS;YAClB,UAAU,EAAE,MAAM;YAClB,YAAY,EAAE,OAAO;YACrB,YAAY,EAAE,MAAM;YACpB,YAAY,EAAE,MAAM;YACpB,QAAQ,EAAE,MAAM;YAChB,QAAQ;YACR,QAAQ;YACR,KAAK,EAAE,KAAsC;YAC7C,MAAM,EAAE,QAAQ,EAAE,MAAM;gBACpB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;oBACvB,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,OAAO;iBAChB,CAAC,CAAC;gBACL,CAAC,CAAC,SAAS;SACG,CAAC;QAEvB,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,kBAAkB,CAAC;YAC5C,MAAM,EAAE;gBACJ,IAAI,EAAE;oBACF,OAAO,EAAE,SAAS;iBACrB;aACJ;YACD,IAAI,EAAE,KAAK;SACd,CAAC,CAAC;QAEH,OAAO;YACH,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,SAAS,QAAQ,yBAAyB,sBAAsB,CAAC,CAAC,CAAC,qBAAqB,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG;iBACrH;aACJ;SACJ,CAAC;IACN,CAAC;CACJ"}
@@ -1,15 +1,9 @@
1
1
  import { z } from "zod";
2
2
  import { AtlasToolBase } from "../atlasTool.js";
3
- import { randomBytes } from "crypto";
4
- import { promisify } from "util";
3
+ import { generateSecurePassword } from "../../../common/atlas/generatePassword.js";
5
4
  import logger, { LogId } from "../../../logger.js";
5
+ import { inspectCluster } from "../../../common/atlas/cluster.js";
6
6
  const EXPIRY_MS = 1000 * 60 * 60 * 12; // 12 hours
7
- const randomBytesAsync = promisify(randomBytes);
8
- async function generateSecurePassword() {
9
- const buf = await randomBytesAsync(16);
10
- const pass = buf.toString("base64url");
11
- return pass;
12
- }
13
7
  function sleep(ms) {
14
8
  return new Promise((resolve) => setTimeout(resolve, ms));
15
9
  }
@@ -26,19 +20,8 @@ export class ConnectClusterTool extends AtlasToolBase {
26
20
  }
27
21
  async execute({ projectId, clusterName }) {
28
22
  await this.session.disconnect();
29
- const cluster = await this.session.apiClient.getCluster({
30
- params: {
31
- path: {
32
- groupId: projectId,
33
- clusterName,
34
- },
35
- },
36
- });
37
- if (!cluster) {
38
- throw new Error("Cluster not found");
39
- }
40
- const baseConnectionString = cluster.connectionStrings?.standardSrv || cluster.connectionStrings?.standard;
41
- if (!baseConnectionString) {
23
+ const cluster = await inspectCluster(this.session.apiClient, projectId, clusterName);
24
+ if (!cluster.connectionString) {
42
25
  throw new Error("Connection string not available");
43
26
  }
44
27
  const username = `mcpUser${Math.floor(Math.random() * 100000)}`;
@@ -82,7 +65,7 @@ export class ConnectClusterTool extends AtlasToolBase {
82
65
  clusterName,
83
66
  expiryDate,
84
67
  };
85
- const cn = new URL(baseConnectionString);
68
+ const cn = new URL(cluster.connectionString);
86
69
  cn.username = username;
87
70
  cn.password = password;
88
71
  cn.searchParams.set("authSource", "admin");
@@ -1 +1 @@
1
- {"version":3,"file":"connectCluster.js","sourceRoot":"","sources":["../../../../src/tools/atlas/metadata/connectCluster.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connectCluster.js","sourceRoot":"","sources":["../../../../src/tools/atlas/metadata/connectCluster.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { z } from "zod";
2
2
  import { AtlasToolBase } from "../atlasTool.js";
3
+ import { inspectCluster } from "../../../common/atlas/cluster.js";
3
4
  export class InspectClusterTool extends AtlasToolBase {
4
5
  constructor() {
5
6
  super(...arguments);
@@ -12,38 +13,17 @@ export class InspectClusterTool extends AtlasToolBase {
12
13
  };
13
14
  }
14
15
  async execute({ projectId, clusterName }) {
15
- const cluster = await this.session.apiClient.getCluster({
16
- params: {
17
- path: {
18
- groupId: projectId,
19
- clusterName,
20
- },
21
- },
22
- });
16
+ const cluster = await inspectCluster(this.session.apiClient, projectId, clusterName);
23
17
  return this.formatOutput(cluster);
24
18
  }
25
- formatOutput(cluster) {
26
- if (!cluster) {
27
- throw new Error("Cluster not found");
28
- }
29
- const regionConfigs = (cluster.replicationSpecs || [])
30
- .map((replicationSpec) => (replicationSpec.regionConfigs || []))
31
- .flat()
32
- .map((regionConfig) => {
33
- return {
34
- providerName: regionConfig.providerName,
35
- instanceSize: regionConfig.electableSpecs?.instanceSize || regionConfig.readOnlySpecs?.instanceSize,
36
- };
37
- });
38
- const instanceSize = (regionConfigs.length <= 0 ? undefined : regionConfigs[0].instanceSize) || "UNKNOWN";
39
- const clusterInstanceType = instanceSize == "M0" ? "FREE" : "DEDICATED";
19
+ formatOutput(formattedCluster) {
40
20
  return {
41
21
  content: [
42
22
  {
43
23
  type: "text",
44
24
  text: `Cluster Name | Cluster Type | Tier | State | MongoDB Version | Connection String
45
25
  ----------------|----------------|----------------|----------------|----------------|----------------
46
- ${cluster.name} | ${clusterInstanceType} | ${clusterInstanceType == "DEDICATED" ? instanceSize : "N/A"} | ${cluster.stateName} | ${cluster.mongoDBVersion || "N/A"} | ${cluster.connectionStrings?.standardSrv || cluster.connectionStrings?.standard || "N/A"}`,
26
+ ${formattedCluster.name || "Unknown"} | ${formattedCluster.instanceType} | ${formattedCluster.instanceSize || "N/A"} | ${formattedCluster.state || "UNKNOWN"} | ${formattedCluster.mongoDBVersion || "N/A"} | ${formattedCluster.connectionString || "N/A"}`,
47
27
  },
48
28
  ],
49
29
  };
@@ -1 +1 @@
1
- {"version":3,"file":"inspectCluster.js","sourceRoot":"","sources":["../../../../src/tools/atlas/read/inspectCluster.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIhD,MAAM,OAAO,kBAAmB,SAAQ,aAAa;IAArD;;QACc,SAAI,GAAG,uBAAuB,CAAC;QAC/B,gBAAW,GAAG,+BAA+B,CAAC;QAC9C,kBAAa,GAAkB,MAAM,CAAC;QACtC,cAAS,GAAG;YAClB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAClD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;SACzD,CAAC;IAwDN,CAAC;IAtDa,KAAK,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,WAAW,EAAmC;QAC/E,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC;YACpD,MAAM,EAAE;gBACJ,IAAI,EAAE;oBACF,OAAO,EAAE,SAAS;oBAClB,WAAW;iBACd;aACJ;SACJ,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAEO,YAAY,CAAC,OAAoC;QACrD,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACzC,CAAC;QAED,MAAM,aAAa,GAAG,CAAC,OAAO,CAAC,gBAAgB,IAAI,EAAE,CAAC;aACjD,GAAG,CACA,CAAC,eAAe,EAAE,EAAE,CAChB,CAAC,eAAe,CAAC,aAAa,IAAI,EAAE,CAQjC,CACV;aACA,IAAI,EAAE;aACN,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE;YAClB,OAAO;gBACH,YAAY,EAAE,YAAY,CAAC,YAAY;gBACvC,YAAY,EAAE,YAAY,CAAC,cAAc,EAAE,YAAY,IAAI,YAAY,CAAC,aAAa,EAAE,YAAY;aACtG,CAAC;QACN,CAAC,CAAC,CAAC;QAEP,MAAM,YAAY,GAAG,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC;QAE1G,MAAM,mBAAmB,GAAG,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC;QAExE,OAAO;YACH,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE;;EAExB,OAAO,CAAC,IAAI,MAAM,mBAAmB,MAAM,mBAAmB,IAAI,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,MAAM,OAAO,CAAC,SAAS,MAAM,OAAO,CAAC,cAAc,IAAI,KAAK,MAAM,OAAO,CAAC,iBAAiB,EAAE,WAAW,IAAI,OAAO,CAAC,iBAAiB,EAAE,QAAQ,IAAI,KAAK,EAAE;iBAC/O;aACJ;SACJ,CAAC;IACN,CAAC;CACJ"}
1
+ {"version":3,"file":"inspectCluster.js","sourceRoot":"","sources":["../../../../src/tools/atlas/read/inspectCluster.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAW,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAE3E,MAAM,OAAO,kBAAmB,SAAQ,aAAa;IAArD;;QACc,SAAI,GAAG,uBAAuB,CAAC;QAC/B,gBAAW,GAAG,+BAA+B,CAAC;QAC9C,kBAAa,GAAkB,MAAM,CAAC;QACtC,cAAS,GAAG;YAClB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAClD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;SACzD,CAAC;IAoBN,CAAC;IAlBa,KAAK,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,WAAW,EAAmC;QAC/E,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QAErF,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAEO,YAAY,CAAC,gBAAyB;QAC1C,OAAO;YACH,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE;;EAExB,gBAAgB,CAAC,IAAI,IAAI,SAAS,MAAM,gBAAgB,CAAC,YAAY,MAAM,gBAAgB,CAAC,YAAY,IAAI,KAAK,MAAM,gBAAgB,CAAC,KAAK,IAAI,SAAS,MAAM,gBAAgB,CAAC,cAAc,IAAI,KAAK,MAAM,gBAAgB,CAAC,gBAAgB,IAAI,KAAK,EAAE;iBAC3O;aACJ;SACJ,CAAC;IACN,CAAC;CACJ"}
@@ -1,5 +1,6 @@
1
1
  import { z } from "zod";
2
2
  import { AtlasToolBase } from "../atlasTool.js";
3
+ import { formatCluster, formatFlexCluster } from "../../../common/atlas/cluster.js";
3
4
  export class ListClustersTool extends AtlasToolBase {
4
5
  constructor() {
5
6
  super(...arguments);
@@ -66,26 +67,16 @@ ${rows}`,
66
67
  ],
67
68
  };
68
69
  }
69
- formatClustersTable(project, clusters) {
70
- if (!clusters?.results?.length) {
70
+ formatClustersTable(project, clusters, flexClusters) {
71
+ // Check if both traditional clusters and flex clusters are absent
72
+ if (!clusters?.results?.length && !flexClusters?.results?.length) {
71
73
  throw new Error("No clusters found.");
72
74
  }
73
- const rows = clusters.results
74
- .map((cluster) => {
75
- const connectionString = cluster.connectionStrings?.standardSrv || cluster.connectionStrings?.standard || "N/A";
76
- const mongoDBVersion = cluster.mongoDBVersion || "N/A";
77
- const regionConfigs = (cluster.replicationSpecs || [])
78
- .map((replicationSpec) => (replicationSpec.regionConfigs || []))
79
- .flat()
80
- .map((regionConfig) => {
81
- return {
82
- providerName: regionConfig.providerName,
83
- instanceSize: regionConfig.electableSpecs?.instanceSize || regionConfig.readOnlySpecs?.instanceSize,
84
- };
85
- });
86
- const instanceSize = (regionConfigs.length <= 0 ? undefined : regionConfigs[0].instanceSize) || "UNKNOWN";
87
- const clusterInstanceType = instanceSize == "M0" ? "FREE" : "DEDICATED";
88
- return `${cluster.name} | ${clusterInstanceType} | ${clusterInstanceType == "DEDICATED" ? instanceSize : "N/A"} | ${cluster.stateName} | ${mongoDBVersion} | ${connectionString}`;
75
+ const formattedClusters = clusters?.results?.map((cluster) => formatCluster(cluster)) || [];
76
+ const formattedFlexClusters = flexClusters?.results?.map((cluster) => formatFlexCluster(cluster)) || [];
77
+ const rows = [...formattedClusters, ...formattedFlexClusters]
78
+ .map((formattedCluster) => {
79
+ return `${formattedCluster.name || "Unknown"} | ${formattedCluster.instanceType} | ${formattedCluster.instanceSize || "N/A"} | ${formattedCluster.state || "UNKNOWN"} | ${formattedCluster.mongoDBVersion || "N/A"} | ${formattedCluster.connectionString || "N/A"}`;
89
80
  })
90
81
  .join("\n");
91
82
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"listClusters.js","sourceRoot":"","sources":["../../../../src/tools/atlas/read/listClusters.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"listClusters.js","sourceRoot":"","sources":["../../../../src/tools/atlas/read/listClusters.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,4 @@
1
- // TODO: https://github.com/mongodb-js/mongodb-mcp-server/issues/141 - reenable when the connect tool is reenabled
2
- // import { ConnectTool } from "./metadata/connect.js";
1
+ import { ConnectTool } from "./metadata/connect.js";
3
2
  import { ListCollectionsTool } from "./metadata/listCollections.js";
4
3
  import { CollectionIndexesTool } from "./read/collectionIndexes.js";
5
4
  import { ListDatabasesTool } from "./metadata/listDatabases.js";
@@ -20,8 +19,7 @@ import { ExplainTool } from "./metadata/explain.js";
20
19
  import { CreateCollectionTool } from "./create/createCollection.js";
21
20
  import { LogsTool } from "./metadata/logs.js";
22
21
  export const MongoDbTools = [
23
- // TODO: https://github.com/mongodb-js/mongodb-mcp-server/issues/141 - reenable when the connect tool is reenabled
24
- // ConnectTool,
22
+ ConnectTool,
25
23
  ListCollectionsTool,
26
24
  ListDatabasesTool,
27
25
  CollectionIndexesTool,
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/tools/mongodb/tools.ts"],"names":[],"mappings":"AAAA,kHAAkH;AAClH,uDAAuD;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,MAAM,CAAC,MAAM,YAAY,GAAG;IACxB,kHAAkH;IAClH,eAAe;IACf,mBAAmB;IACnB,iBAAiB;IACjB,qBAAqB;IACrB,eAAe;IACf,oBAAoB;IACpB,QAAQ;IACR,cAAc;IACd,cAAc;IACd,yBAAyB;IACzB,SAAS;IACT,WAAW;IACX,aAAa;IACb,cAAc;IACd,oBAAoB;IACpB,gBAAgB;IAChB,kBAAkB;IAClB,WAAW;IACX,oBAAoB;IACpB,QAAQ;CACX,CAAC"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/tools/mongodb/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,MAAM,CAAC,MAAM,YAAY,GAAG;IACxB,WAAW;IACX,mBAAmB;IACnB,iBAAiB;IACjB,qBAAqB;IACrB,eAAe;IACf,oBAAoB;IACpB,QAAQ;IACR,cAAc;IACd,cAAc;IACd,yBAAyB;IACzB,SAAS;IACT,WAAW;IACX,aAAa;IACb,cAAc;IACd,oBAAoB;IACpB,gBAAgB;IAChB,kBAAkB;IAClB,WAAW;IACX,oBAAoB;IACpB,QAAQ;CACX,CAAC"}
package/eslint.config.js CHANGED
@@ -48,7 +48,8 @@ export default defineConfig([
48
48
  "coverage",
49
49
  "global.d.ts",
50
50
  "eslint.config.js",
51
- "jest.config.ts",
51
+ "jest.config.cjs",
52
+ "src/types/*.d.ts",
52
53
  ]),
53
54
  eslintPluginPrettierRecommended,
54
55
  ]);
@@ -1,5 +1,5 @@
1
1
  /** @type {import('ts-jest').JestConfigWithTsJest} **/
2
- export default {
2
+ module.exports = {
3
3
  preset: "ts-jest/presets/default-esm",
4
4
  testEnvironment: "node",
5
5
  extensionsToTreatAsEsm: [".ts"],
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mongodb-mcp-server",
3
3
  "description": "MongoDB Model Context Protocol Server",
4
- "version": "0.0.8",
4
+ "version": "0.1.1",
5
5
  "main": "dist/index.js",
6
6
  "author": "MongoDB <info@mongodb.com>",
7
7
  "homepage": "https://github.com/mongodb-js/mongodb-mcp-server",
@@ -61,15 +61,17 @@
61
61
  },
62
62
  "dependencies": {
63
63
  "@modelcontextprotocol/sdk": "^1.8.0",
64
+ "@mongodb-js/device-id": "^0.2.1",
64
65
  "@mongodb-js/devtools-connect": "^3.7.2",
65
66
  "@mongosh/service-provider-node-driver": "^3.6.0",
66
67
  "bson": "^6.10.3",
67
68
  "lru-cache": "^11.1.0",
68
69
  "mongodb": "^6.15.0",
70
+ "mongodb-connection-string-url": "^3.0.2",
69
71
  "mongodb-log-writer": "^2.4.1",
70
72
  "mongodb-redact": "^1.1.6",
71
73
  "mongodb-schema": "^12.6.2",
72
- "node-machine-id": "^1.1.12",
74
+ "node-machine-id": "1.1.12",
73
75
  "openapi-fetch": "^0.13.5",
74
76
  "simple-oauth2": "^5.1.0",
75
77
  "yargs-parser": "^21.1.1",
package/scripts/apply.ts CHANGED
@@ -93,7 +93,10 @@ async function main() {
93
93
  .map((operation) => {
94
94
  const { operationId, method, path, requiredParams, hasResponseBody } = operation;
95
95
  return `async ${operationId}(options${requiredParams ? "" : "?"}: FetchOptions<operations["${operationId}"]>) {
96
- ${hasResponseBody ? `const { data } = ` : ``}await this.client.${method}("${path}", options);
96
+ const { ${hasResponseBody ? `data, ` : ``}error, response } = await this.client.${method}("${path}", options);
97
+ if (error) {
98
+ throw ApiClientError.fromError(response, error);
99
+ }
97
100
  ${
98
101
  hasResponseBody
99
102
  ? `return data;
package/scripts/filter.ts CHANGED
@@ -25,9 +25,13 @@ function filterOpenapi(openapi: OpenAPIV3_1.Document): OpenAPIV3_1.Document {
25
25
  "createProject",
26
26
  "deleteProject",
27
27
  "listClusters",
28
+ "listFlexClusters",
28
29
  "getCluster",
30
+ "getFlexCluster",
29
31
  "createCluster",
32
+ "createFlexCluster",
30
33
  "deleteCluster",
34
+ "deleteFlexCluster",
31
35
  "listClustersForAllProjects",
32
36
  "createDatabaseUser",
33
37
  "deleteDatabaseUser",