mongodb-mcp-server 0.1.2 → 0.1.3

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 (55) hide show
  1. package/.github/pull_request_template.md +5 -0
  2. package/.github/workflows/code_health.yaml +3 -3
  3. package/.github/workflows/docker.yaml +1 -1
  4. package/.smithery/smithery.yaml +10 -0
  5. package/README.md +15 -1
  6. package/dist/config.js +1 -0
  7. package/dist/config.js.map +1 -1
  8. package/dist/errors.js +1 -0
  9. package/dist/errors.js.map +1 -1
  10. package/dist/helpers/indexCheck.js +63 -0
  11. package/dist/helpers/indexCheck.js.map +1 -0
  12. package/dist/logger.js +0 -1
  13. package/dist/logger.js.map +1 -1
  14. package/dist/server.js +1 -1
  15. package/dist/server.js.map +1 -1
  16. package/dist/telemetry/telemetry.js +78 -115
  17. package/dist/telemetry/telemetry.js.map +1 -1
  18. package/dist/tools/mongodb/delete/deleteMany.js +18 -0
  19. package/dist/tools/mongodb/delete/deleteMany.js.map +1 -1
  20. package/dist/tools/mongodb/metadata/explain.js +1 -1
  21. package/dist/tools/mongodb/metadata/explain.js.map +1 -1
  22. package/dist/tools/mongodb/mongodbTool.js +10 -0
  23. package/dist/tools/mongodb/mongodbTool.js.map +1 -1
  24. package/dist/tools/mongodb/read/aggregate.js +9 -0
  25. package/dist/tools/mongodb/read/aggregate.js.map +1 -1
  26. package/dist/tools/mongodb/read/count.js +13 -0
  27. package/dist/tools/mongodb/read/count.js.map +1 -1
  28. package/dist/tools/mongodb/read/find.js +7 -0
  29. package/dist/tools/mongodb/read/find.js.map +1 -1
  30. package/dist/tools/mongodb/update/updateMany.js +20 -0
  31. package/dist/tools/mongodb/update/updateMany.js.map +1 -1
  32. package/dist/tools/tool.js +4 -4
  33. package/dist/tools/tool.js.map +1 -1
  34. package/package.json +2 -2
  35. package/src/config.ts +2 -0
  36. package/src/errors.ts +1 -0
  37. package/src/helpers/indexCheck.ts +83 -0
  38. package/src/logger.ts +0 -1
  39. package/src/server.ts +1 -1
  40. package/src/telemetry/telemetry.ts +98 -150
  41. package/src/telemetry/types.ts +0 -1
  42. package/src/tools/mongodb/delete/deleteMany.ts +20 -0
  43. package/src/tools/mongodb/metadata/explain.ts +1 -1
  44. package/src/tools/mongodb/mongodbTool.ts +10 -0
  45. package/src/tools/mongodb/read/aggregate.ts +11 -0
  46. package/src/tools/mongodb/read/count.ts +15 -0
  47. package/src/tools/mongodb/read/find.ts +9 -0
  48. package/src/tools/mongodb/update/updateMany.ts +22 -0
  49. package/src/tools/tool.ts +5 -5
  50. package/tests/integration/indexCheck.test.ts +463 -0
  51. package/tests/integration/server.test.ts +5 -4
  52. package/tests/integration/telemetry.test.ts +28 -0
  53. package/tests/integration/tools/mongodb/mongodbHelpers.ts +1 -0
  54. package/tests/unit/indexCheck.test.ts +149 -0
  55. package/tests/unit/telemetry.test.ts +58 -106
@@ -1 +1 @@
1
- {"version":3,"file":"explain.js","sourceRoot":"","sources":["../../../../src/tools/mongodb/metadata/explain.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"explain.js","sourceRoot":"","sources":["../../../../src/tools/mongodb/metadata/explain.ts"],"names":[],"mappings":"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"}
@@ -53,6 +53,16 @@ export class MongoDBToolBase extends ToolBase {
53
53
  ],
54
54
  isError: true,
55
55
  };
56
+ case ErrorCodes.ForbiddenCollscan:
57
+ return {
58
+ content: [
59
+ {
60
+ type: "text",
61
+ text: error.message,
62
+ },
63
+ ],
64
+ isError: true,
65
+ };
56
66
  }
57
67
  }
58
68
  return super.handleError(error, args);
@@ -1 +1 @@
1
- {"version":3,"file":"mongodbTool.js","sourceRoot":"","sources":["../../../src/tools/mongodb/mongodbTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAY,QAAQ,EAAuC,MAAM,YAAY,CAAC;AAGrF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,CAAC,MAAM,eAAe,GAAG;IAC3B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;IAC9C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;CACrD,CAAC;AAEF,MAAM,OAAgB,eAAgB,SAAQ,QAAQ;IAAtD;;QACc,aAAQ,GAAiB,SAAS,CAAC;IA4EjD,CAAC;IA1Ea,KAAK,CAAC,eAAe;QAC3B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAChE,IAAI,CAAC;gBACD,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAC9D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CACR,KAAK,CAAC,qBAAqB,EAC3B,aAAa,EACb,sFAAsF,KAAe,EAAE,CAC1G,CAAC;gBACF,MAAM,IAAI,YAAY,CAAC,UAAU,CAAC,6BAA6B,EAAE,2BAA2B,CAAC,CAAC;YAClG,CAAC;QACL,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;YAChC,MAAM,IAAI,YAAY,CAAC,UAAU,CAAC,qBAAqB,EAAE,0BAA0B,CAAC,CAAC;QACzF,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;IACxC,CAAC;IAES,WAAW,CACjB,KAAc,EACd,IAAqC;QAErC,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;YAChC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gBACjB,KAAK,UAAU,CAAC,qBAAqB;oBACjC,OAAO;wBACH,OAAO,EAAE;4BACL;gCACI,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,2EAA2E;6BACpF;4BACD;gCACI,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,wFAAwF;6BACjG;yBACJ;wBACD,OAAO,EAAE,IAAI;qBAChB,CAAC;gBACN,KAAK,UAAU,CAAC,6BAA6B;oBACzC,OAAO;wBACH,OAAO,EAAE;4BACL;gCACI,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,0NAA0N;6BACnO;yBACJ;wBACD,OAAO,EAAE,IAAI;qBAChB,CAAC;YACV,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IAES,gBAAgB,CAAC,gBAAwB;QAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACvF,CAAC;IAES,wBAAwB;IAC9B,6DAA6D;IAC7D,IAAqC;QAErC,MAAM,QAAQ,GAA0B,EAAE,CAAC;QAE3C,mFAAmF;QACnF,IAAI,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,SAAS,EAAE,CAAC;YAChD,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,SAAS,CAAC;QACtE,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ"}
1
+ {"version":3,"file":"mongodbTool.js","sourceRoot":"","sources":["../../../src/tools/mongodb/mongodbTool.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  import { DbOperationArgs, MongoDBToolBase } from "../mongodbTool.js";
3
3
  import { EJSON } from "bson";
4
+ import { checkIndexUsage } from "../../../helpers/indexCheck.js";
4
5
  export const AggregateArgs = {
5
6
  pipeline: z.array(z.record(z.string(), z.unknown())).describe("An array of aggregation stages to execute"),
6
7
  };
@@ -17,6 +18,14 @@ export class AggregateTool extends MongoDBToolBase {
17
18
  }
18
19
  async execute({ database, collection, pipeline, }) {
19
20
  const provider = await this.ensureConnected();
21
+ // Check if aggregate operation uses an index if enabled
22
+ if (this.config.indexCheck) {
23
+ await checkIndexUsage(provider, database, collection, "aggregate", async () => {
24
+ return provider
25
+ .aggregate(database, collection, pipeline, {}, { writeConcern: undefined })
26
+ .explain("queryPlanner");
27
+ });
28
+ }
20
29
  const documents = await provider.aggregate(database, collection, pipeline).toArray();
21
30
  const content = [
22
31
  {
@@ -1 +1 @@
1
- {"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../../../../src/tools/mongodb/read/aggregate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAErE,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAE7B,MAAM,CAAC,MAAM,aAAa,GAAG;IACzB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,2CAA2C,CAAC;CAC7G,CAAC;AAEF,MAAM,OAAO,aAAc,SAAQ,eAAe;IAAlD;;QACc,SAAI,GAAG,WAAW,CAAC;QACnB,gBAAW,GAAG,iDAAiD,CAAC;QAChE,cAAS,GAAG;YAClB,GAAG,eAAe;YAClB,GAAG,aAAa;SACnB,CAAC;QACQ,kBAAa,GAAkB,MAAM,CAAC;IA2BpD,CAAC;IAzBa,KAAK,CAAC,OAAO,CAAC,EACpB,QAAQ,EACR,UAAU,EACV,QAAQ,GACsB;QAC9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;QAErF,MAAM,OAAO,GAA0C;YACnD;gBACI,IAAI,EAAE,SAAS,SAAS,CAAC,MAAM,iCAAiC,UAAU,IAAI;gBAC9E,IAAI,EAAE,MAAM;aACf;YACD,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBACrB,OAAO;oBACH,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC;oBAC1B,IAAI,EAAE,MAAM;iBACmB,CAAC;YACxC,CAAC,CAAC;SACL,CAAC;QAEF,OAAO;YACH,OAAO;SACV,CAAC;IACN,CAAC;CACJ"}
1
+ {"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../../../../src/tools/mongodb/read/aggregate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAErE,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,MAAM,CAAC,MAAM,aAAa,GAAG;IACzB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,2CAA2C,CAAC;CAC7G,CAAC;AAEF,MAAM,OAAO,aAAc,SAAQ,eAAe;IAAlD;;QACc,SAAI,GAAG,WAAW,CAAC;QACnB,gBAAW,GAAG,iDAAiD,CAAC;QAChE,cAAS,GAAG;YAClB,GAAG,eAAe;YAClB,GAAG,aAAa;SACnB,CAAC;QACQ,kBAAa,GAAkB,MAAM,CAAC;IAqCpD,CAAC;IAnCa,KAAK,CAAC,OAAO,CAAC,EACpB,QAAQ,EACR,UAAU,EACV,QAAQ,GACsB;QAC9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAE9C,wDAAwD;QACxD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YACzB,MAAM,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,IAAI,EAAE;gBAC1E,OAAO,QAAQ;qBACV,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;qBAC1E,OAAO,CAAC,cAAc,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC;QACP,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;QAErF,MAAM,OAAO,GAA0C;YACnD;gBACI,IAAI,EAAE,SAAS,SAAS,CAAC,MAAM,iCAAiC,UAAU,IAAI;gBAC9E,IAAI,EAAE,MAAM;aACf;YACD,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBACrB,OAAO;oBACH,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC;oBAC1B,IAAI,EAAE,MAAM;iBACmB,CAAC;YACxC,CAAC,CAAC;SACL,CAAC;QAEF,OAAO;YACH,OAAO;SACV,CAAC;IACN,CAAC;CACJ"}
@@ -1,5 +1,6 @@
1
1
  import { DbOperationArgs, MongoDBToolBase } from "../mongodbTool.js";
2
2
  import { z } from "zod";
3
+ import { checkIndexUsage } from "../../../helpers/indexCheck.js";
3
4
  export const CountArgs = {
4
5
  query: z
5
6
  .record(z.string(), z.unknown())
@@ -19,6 +20,18 @@ export class CountTool extends MongoDBToolBase {
19
20
  }
20
21
  async execute({ database, collection, query }) {
21
22
  const provider = await this.ensureConnected();
23
+ // Check if count operation uses an index if enabled
24
+ if (this.config.indexCheck) {
25
+ await checkIndexUsage(provider, database, collection, "count", async () => {
26
+ return provider.runCommandWithCheck(database, {
27
+ explain: {
28
+ count: collection,
29
+ query,
30
+ },
31
+ verbosity: "queryPlanner",
32
+ });
33
+ });
34
+ }
22
35
  const count = await provider.count(database, collection, query);
23
36
  return {
24
37
  content: [
@@ -1 +1 @@
1
- {"version":3,"file":"count.js","sourceRoot":"","sources":["../../../../src/tools/mongodb/read/count.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAErE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,SAAS,GAAG;IACrB,KAAK,EAAE,CAAC;SACH,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;SAC/B,QAAQ,EAAE;SACV,QAAQ,CACL,8IAA8I,CACjJ;CACR,CAAC;AAEF,MAAM,OAAO,SAAU,SAAQ,eAAe;IAA9C;;QACc,SAAI,GAAG,OAAO,CAAC;QACf,gBAAW,GACjB,4HAA4H,CAAC;QACvH,cAAS,GAAG;YAClB,GAAG,eAAe;YAClB,GAAG,SAAS;SACf,CAAC;QAEQ,kBAAa,GAAkB,MAAM,CAAC;IAepD,CAAC;IAba,KAAK,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAmC;QACpF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QAEhE,OAAO;YACH,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,SAAS,KAAK,iCAAiC,UAAU,GAAG;oBAClE,IAAI,EAAE,MAAM;iBACf;aACJ;SACJ,CAAC;IACN,CAAC;CACJ"}
1
+ {"version":3,"file":"count.js","sourceRoot":"","sources":["../../../../src/tools/mongodb/read/count.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAErE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,MAAM,CAAC,MAAM,SAAS,GAAG;IACrB,KAAK,EAAE,CAAC;SACH,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;SAC/B,QAAQ,EAAE;SACV,QAAQ,CACL,8IAA8I,CACjJ;CACR,CAAC;AAEF,MAAM,OAAO,SAAU,SAAQ,eAAe;IAA9C;;QACc,SAAI,GAAG,OAAO,CAAC;QACf,gBAAW,GACjB,4HAA4H,CAAC;QACvH,cAAS,GAAG;YAClB,GAAG,eAAe;YAClB,GAAG,SAAS;SACf,CAAC;QAEQ,kBAAa,GAAkB,MAAM,CAAC;IA6BpD,CAAC;IA3Ba,KAAK,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAmC;QACpF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAE9C,oDAAoD;QACpD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YACzB,MAAM,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE;gBACtE,OAAO,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,EAAE;oBAC1C,OAAO,EAAE;wBACL,KAAK,EAAE,UAAU;wBACjB,KAAK;qBACR;oBACD,SAAS,EAAE,cAAc;iBAC5B,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QAEhE,OAAO;YACH,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,SAAS,KAAK,iCAAiC,UAAU,GAAG;oBAClE,IAAI,EAAE,MAAM;iBACf;aACJ;SACJ,CAAC;IACN,CAAC;CACJ"}
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  import { DbOperationArgs, MongoDBToolBase } from "../mongodbTool.js";
3
3
  import { EJSON } from "bson";
4
+ import { checkIndexUsage } from "../../../helpers/indexCheck.js";
4
5
  export const FindArgs = {
5
6
  filter: z
6
7
  .record(z.string(), z.unknown())
@@ -29,6 +30,12 @@ export class FindTool extends MongoDBToolBase {
29
30
  }
30
31
  async execute({ database, collection, filter, projection, limit, sort, }) {
31
32
  const provider = await this.ensureConnected();
33
+ // Check if find operation uses an index if enabled
34
+ if (this.config.indexCheck) {
35
+ await checkIndexUsage(provider, database, collection, "find", async () => {
36
+ return provider.find(database, collection, filter, { projection, limit, sort }).explain("queryPlanner");
37
+ });
38
+ }
32
39
  const documents = await provider.find(database, collection, filter, { projection, limit, sort }).toArray();
33
40
  const content = [
34
41
  {
@@ -1 +1 @@
1
- {"version":3,"file":"find.js","sourceRoot":"","sources":["../../../../src/tools/mongodb/read/find.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGrE,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAE7B,MAAM,CAAC,MAAM,QAAQ,GAAG;IACpB,MAAM,EAAE,CAAC;SACJ,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;SAC/B,QAAQ,EAAE;SACV,QAAQ,CAAC,qFAAqF,CAAC;IACpG,UAAU,EAAE,CAAC;SACR,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;SAC/B,QAAQ,EAAE;SACV,QAAQ,CAAC,wFAAwF,CAAC;IACvG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IAC9F,IAAI,EAAE,CAAC;SACF,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAiB,CAAC;SAC7C,QAAQ,EAAE;SACV,QAAQ,CAAC,kGAAkG,CAAC;CACpH,CAAC;AAEF,MAAM,OAAO,QAAS,SAAQ,eAAe;IAA7C;;QACc,SAAI,GAAG,MAAM,CAAC;QACd,gBAAW,GAAG,+CAA+C,CAAC;QAC9D,cAAS,GAAG;YAClB,GAAG,eAAe;YAClB,GAAG,QAAQ;SACd,CAAC;QACQ,kBAAa,GAAkB,MAAM,CAAC;IA8BpD,CAAC;IA5Ba,KAAK,CAAC,OAAO,CAAC,EACpB,QAAQ,EACR,UAAU,EACV,MAAM,EACN,UAAU,EACV,KAAK,EACL,IAAI,GAC0B;QAC9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAE3G,MAAM,OAAO,GAA0C;YACnD;gBACI,IAAI,EAAE,SAAS,SAAS,CAAC,MAAM,iCAAiC,UAAU,IAAI;gBAC9E,IAAI,EAAE,MAAM;aACf;YACD,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBACrB,OAAO;oBACH,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC;oBAC1B,IAAI,EAAE,MAAM;iBACmB,CAAC;YACxC,CAAC,CAAC;SACL,CAAC;QAEF,OAAO;YACH,OAAO;SACV,CAAC;IACN,CAAC;CACJ"}
1
+ {"version":3,"file":"find.js","sourceRoot":"","sources":["../../../../src/tools/mongodb/read/find.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGrE,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,MAAM,CAAC,MAAM,QAAQ,GAAG;IACpB,MAAM,EAAE,CAAC;SACJ,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;SAC/B,QAAQ,EAAE;SACV,QAAQ,CAAC,qFAAqF,CAAC;IACpG,UAAU,EAAE,CAAC;SACR,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;SAC/B,QAAQ,EAAE;SACV,QAAQ,CAAC,wFAAwF,CAAC;IACvG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IAC9F,IAAI,EAAE,CAAC;SACF,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAiB,CAAC;SAC7C,QAAQ,EAAE;SACV,QAAQ,CAAC,kGAAkG,CAAC;CACpH,CAAC;AAEF,MAAM,OAAO,QAAS,SAAQ,eAAe;IAA7C;;QACc,SAAI,GAAG,MAAM,CAAC;QACd,gBAAW,GAAG,+CAA+C,CAAC;QAC9D,cAAS,GAAG;YAClB,GAAG,eAAe;YAClB,GAAG,QAAQ;SACd,CAAC;QACQ,kBAAa,GAAkB,MAAM,CAAC;IAsCpD,CAAC;IApCa,KAAK,CAAC,OAAO,CAAC,EACpB,QAAQ,EACR,UAAU,EACV,MAAM,EACN,UAAU,EACV,KAAK,EACL,IAAI,GAC0B;QAC9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAE9C,mDAAmD;QACnD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YACzB,MAAM,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE;gBACrE,OAAO,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAC5G,CAAC,CAAC,CAAC;QACP,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAE3G,MAAM,OAAO,GAA0C;YACnD;gBACI,IAAI,EAAE,SAAS,SAAS,CAAC,MAAM,iCAAiC,UAAU,IAAI;gBAC9E,IAAI,EAAE,MAAM;aACf;YACD,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBACrB,OAAO;oBACH,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC;oBAC1B,IAAI,EAAE,MAAM;iBACmB,CAAC;YACxC,CAAC,CAAC;SACL,CAAC;QAEF,OAAO;YACH,OAAO;SACV,CAAC;IACN,CAAC;CACJ"}
@@ -1,5 +1,6 @@
1
1
  import { z } from "zod";
2
2
  import { DbOperationArgs, MongoDBToolBase } from "../mongodbTool.js";
3
+ import { checkIndexUsage } from "../../../helpers/indexCheck.js";
3
4
  export class UpdateManyTool extends MongoDBToolBase {
4
5
  constructor() {
5
6
  super(...arguments);
@@ -23,6 +24,25 @@ export class UpdateManyTool extends MongoDBToolBase {
23
24
  }
24
25
  async execute({ database, collection, filter, update, upsert, }) {
25
26
  const provider = await this.ensureConnected();
27
+ // Check if update operation uses an index if enabled
28
+ if (this.config.indexCheck) {
29
+ await checkIndexUsage(provider, database, collection, "updateMany", async () => {
30
+ return provider.runCommandWithCheck(database, {
31
+ explain: {
32
+ update: collection,
33
+ updates: [
34
+ {
35
+ q: filter || {},
36
+ u: update,
37
+ upsert: upsert || false,
38
+ multi: true,
39
+ },
40
+ ],
41
+ },
42
+ verbosity: "queryPlanner",
43
+ });
44
+ });
45
+ }
26
46
  const result = await provider.updateMany(database, collection, filter, update, {
27
47
  upsert,
28
48
  });
@@ -1 +1 @@
1
- {"version":3,"file":"updateMany.js","sourceRoot":"","sources":["../../../../src/tools/mongodb/update/updateMany.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGrE,MAAM,OAAO,cAAe,SAAQ,eAAe;IAAnD;;QACc,SAAI,GAAG,aAAa,CAAC;QACrB,gBAAW,GAAG,wEAAwE,CAAC;QACvF,cAAS,GAAG;YAClB,GAAG,eAAe;YAClB,MAAM,EAAE,CAAC;iBACJ,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;iBAC/B,QAAQ,EAAE;iBACV,QAAQ,CACL,gHAAgH,CACnH;YACL,MAAM,EAAE,CAAC;iBACJ,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;iBAC/B,QAAQ,CAAC,4FAA4F,CAAC;YAC3G,MAAM,EAAE,CAAC;iBACJ,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,4EAA4E,CAAC;SAC9F,CAAC;QACQ,kBAAa,GAAkB,QAAQ,CAAC;IAoCtD,CAAC;IAlCa,KAAK,CAAC,OAAO,CAAC,EACpB,QAAQ,EACR,UAAU,EACV,MAAM,EACN,MAAM,EACN,MAAM,GACwB;QAC9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE;YAC3E,MAAM;SACT,CAAC,CAAC;QAEH,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,MAAM,CAAC,YAAY,KAAK,CAAC,IAAI,MAAM,CAAC,aAAa,KAAK,CAAC,IAAI,MAAM,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;YACxF,OAAO,GAAG,kCAAkC,CAAC;QACjD,CAAC;aAAM,CAAC;YACJ,OAAO,GAAG,WAAW,MAAM,CAAC,YAAY,eAAe,CAAC;YACxD,IAAI,MAAM,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;gBAC3B,OAAO,IAAI,aAAa,MAAM,CAAC,aAAa,eAAe,CAAC;YAChE,CAAC;YACD,IAAI,MAAM,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;gBAC3B,OAAO,IAAI,aAAa,MAAM,CAAC,aAAa,sBAAsB,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,CAAC;YACvG,CAAC;QACL,CAAC;QAED,OAAO;YACH,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,MAAM;iBACf;aACJ;SACJ,CAAC;IACN,CAAC;CACJ"}
1
+ {"version":3,"file":"updateMany.js","sourceRoot":"","sources":["../../../../src/tools/mongodb/update/updateMany.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAErE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,MAAM,OAAO,cAAe,SAAQ,eAAe;IAAnD;;QACc,SAAI,GAAG,aAAa,CAAC;QACrB,gBAAW,GAAG,wEAAwE,CAAC;QACvF,cAAS,GAAG;YAClB,GAAG,eAAe;YAClB,MAAM,EAAE,CAAC;iBACJ,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;iBAC/B,QAAQ,EAAE;iBACV,QAAQ,CACL,gHAAgH,CACnH;YACL,MAAM,EAAE,CAAC;iBACJ,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;iBAC/B,QAAQ,CAAC,4FAA4F,CAAC;YAC3G,MAAM,EAAE,CAAC;iBACJ,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,4EAA4E,CAAC;SAC9F,CAAC;QACQ,kBAAa,GAAkB,QAAQ,CAAC;IAyDtD,CAAC;IAvDa,KAAK,CAAC,OAAO,CAAC,EACpB,QAAQ,EACR,UAAU,EACV,MAAM,EACN,MAAM,EACN,MAAM,GACwB;QAC9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAE9C,qDAAqD;QACrD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YACzB,MAAM,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,IAAI,EAAE;gBAC3E,OAAO,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,EAAE;oBAC1C,OAAO,EAAE;wBACL,MAAM,EAAE,UAAU;wBAClB,OAAO,EAAE;4BACL;gCACI,CAAC,EAAE,MAAM,IAAI,EAAE;gCACf,CAAC,EAAE,MAAM;gCACT,MAAM,EAAE,MAAM,IAAI,KAAK;gCACvB,KAAK,EAAE,IAAI;6BACd;yBACJ;qBACJ;oBACD,SAAS,EAAE,cAAc;iBAC5B,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE;YAC3E,MAAM;SACT,CAAC,CAAC;QAEH,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,MAAM,CAAC,YAAY,KAAK,CAAC,IAAI,MAAM,CAAC,aAAa,KAAK,CAAC,IAAI,MAAM,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;YACxF,OAAO,GAAG,kCAAkC,CAAC;QACjD,CAAC;aAAM,CAAC;YACJ,OAAO,GAAG,WAAW,MAAM,CAAC,YAAY,eAAe,CAAC;YACxD,IAAI,MAAM,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;gBAC3B,OAAO,IAAI,aAAa,MAAM,CAAC,aAAa,eAAe,CAAC;YAChE,CAAC;YACD,IAAI,MAAM,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;gBAC3B,OAAO,IAAI,aAAa,MAAM,CAAC,aAAa,sBAAsB,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,CAAC;YACvG,CAAC;QACL,CAAC;QAED,OAAO;YACH,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,MAAM;iBACf;aACJ;SACJ,CAAC;IACN,CAAC;CACJ"}
@@ -39,13 +39,13 @@ export class ToolBase {
39
39
  try {
40
40
  logger.debug(LogId.toolExecute, "tool", `Executing tool ${this.name}`);
41
41
  const result = await this.execute(...args);
42
- this.emitToolEvent(startTime, result, ...args);
42
+ await this.emitToolEvent(startTime, result, ...args).catch(() => { });
43
43
  return result;
44
44
  }
45
45
  catch (error) {
46
46
  logger.error(LogId.toolExecuteFailure, "tool", `Error executing ${this.name}: ${error}`);
47
47
  const toolResult = await this.handleError(error, args[0]);
48
- this.emitToolEvent(startTime, toolResult, ...args);
48
+ await this.emitToolEvent(startTime, toolResult, ...args).catch(() => { });
49
49
  return toolResult;
50
50
  }
51
51
  };
@@ -121,7 +121,7 @@ export class ToolBase {
121
121
  * @param result - Whether the command succeeded or failed
122
122
  * @param args - The arguments passed to the tool
123
123
  */
124
- emitToolEvent(startTime, result, ...args) {
124
+ async emitToolEvent(startTime, result, ...args) {
125
125
  if (!this.telemetry.isTelemetryEnabled()) {
126
126
  return;
127
127
  }
@@ -144,7 +144,7 @@ export class ToolBase {
144
144
  if (metadata?.projectId) {
145
145
  event.properties.project_id = metadata.projectId;
146
146
  }
147
- this.telemetry.emitEvents([event]);
147
+ await this.telemetry.emitEvents([event]);
148
148
  }
149
149
  }
150
150
  //# sourceMappingURL=tool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/tools/tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/tools/tool.ts"],"names":[],"mappings":"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"}
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.1.2",
4
+ "version": "0.1.3",
5
5
  "main": "dist/index.js",
6
6
  "author": "MongoDB <info@mongodb.com>",
7
7
  "homepage": "https://github.com/mongodb-js/mongodb-mcp-server",
@@ -43,7 +43,7 @@
43
43
  "@types/yargs-parser": "^21.0.3",
44
44
  "eslint": "^9.24.0",
45
45
  "eslint-config-prettier": "^10.1.2",
46
- "eslint-plugin-jest": "^28.11.0",
46
+ "eslint-plugin-jest": "^29.0.1",
47
47
  "eslint-plugin-prettier": "^5.2.6",
48
48
  "globals": "^16.0.0",
49
49
  "jest": "^29.7.0",
package/src/config.ts CHANGED
@@ -23,6 +23,7 @@ export interface UserConfig {
23
23
  connectOptions: ConnectOptions;
24
24
  disabledTools: Array<string>;
25
25
  readOnly?: boolean;
26
+ indexCheck?: boolean;
26
27
  }
27
28
 
28
29
  const defaults: UserConfig = {
@@ -37,6 +38,7 @@ const defaults: UserConfig = {
37
38
  disabledTools: [],
38
39
  telemetry: "enabled",
39
40
  readOnly: false,
41
+ indexCheck: false,
40
42
  };
41
43
 
42
44
  export const config = {
package/src/errors.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export enum ErrorCodes {
2
2
  NotConnectedToMongoDB = 1_000_000,
3
3
  MisconfiguredConnectionString = 1_000_001,
4
+ ForbiddenCollscan = 1_000_002,
4
5
  }
5
6
 
6
7
  export class MongoDBError extends Error {
@@ -0,0 +1,83 @@
1
+ import { Document } from "mongodb";
2
+ import { NodeDriverServiceProvider } from "@mongosh/service-provider-node-driver";
3
+ import { ErrorCodes, MongoDBError } from "../errors.js";
4
+
5
+ /**
6
+ * Check if the query plan uses an index
7
+ * @param explainResult The result of the explain query
8
+ * @returns true if an index is used, false if it's a full collection scan
9
+ */
10
+ export function usesIndex(explainResult: Document): boolean {
11
+ const queryPlanner = explainResult?.queryPlanner as Document | undefined;
12
+ const winningPlan = queryPlanner?.winningPlan as Document | undefined;
13
+ const stage = winningPlan?.stage as string | undefined;
14
+ const inputStage = winningPlan?.inputStage as Document | undefined;
15
+
16
+ // Check for index scan stages (including MongoDB 8.0+ stages)
17
+ const indexScanStages = [
18
+ "IXSCAN",
19
+ "COUNT_SCAN",
20
+ "EXPRESS_IXSCAN",
21
+ "EXPRESS_CLUSTERED_IXSCAN",
22
+ "EXPRESS_UPDATE",
23
+ "EXPRESS_DELETE",
24
+ "IDHACK",
25
+ ];
26
+
27
+ if (stage && indexScanStages.includes(stage)) {
28
+ return true;
29
+ }
30
+
31
+ if (inputStage && inputStage.stage && indexScanStages.includes(inputStage.stage as string)) {
32
+ return true;
33
+ }
34
+
35
+ // Recursively check deeper stages
36
+ if (inputStage && inputStage.inputStage) {
37
+ return usesIndex({ queryPlanner: { winningPlan: inputStage } });
38
+ }
39
+
40
+ if (stage === "COLLSCAN") {
41
+ return false;
42
+ }
43
+
44
+ // Default to false (conservative approach)
45
+ return false;
46
+ }
47
+
48
+ /**
49
+ * Generate an error message for index check failure
50
+ */
51
+ export function getIndexCheckErrorMessage(database: string, collection: string, operation: string): string {
52
+ return `Index check failed: The ${operation} operation on "${database}.${collection}" performs a collection scan (COLLSCAN) instead of using an index. Consider adding an index for better performance. Use 'explain' tool for query plan analysis or 'collection-indexes' to view existing indexes. To disable this check, set MDB_MCP_INDEX_CHECK to false.`;
53
+ }
54
+
55
+ /**
56
+ * Generic function to perform index usage check
57
+ */
58
+ export async function checkIndexUsage(
59
+ provider: NodeDriverServiceProvider,
60
+ database: string,
61
+ collection: string,
62
+ operation: string,
63
+ explainCallback: () => Promise<Document>
64
+ ): Promise<void> {
65
+ try {
66
+ const explainResult = await explainCallback();
67
+
68
+ if (!usesIndex(explainResult)) {
69
+ throw new MongoDBError(
70
+ ErrorCodes.ForbiddenCollscan,
71
+ getIndexCheckErrorMessage(database, collection, operation)
72
+ );
73
+ }
74
+ } catch (error) {
75
+ if (error instanceof MongoDBError && error.code === ErrorCodes.ForbiddenCollscan) {
76
+ throw error;
77
+ }
78
+
79
+ // If explain itself fails, log but do not prevent query execution
80
+ // This avoids blocking normal queries in special cases (e.g., permission issues)
81
+ console.warn(`Index check failed to execute explain for ${operation} on ${database}.${collection}:`, error);
82
+ }
83
+ }
package/src/logger.ts CHANGED
@@ -25,7 +25,6 @@ export const LogId = {
25
25
  telemetryMetadataError: mongoLogId(1_002_005),
26
26
  telemetryDeviceIdFailure: mongoLogId(1_002_006),
27
27
  telemetryDeviceIdTimeout: mongoLogId(1_002_007),
28
- telemetryContainerEnvFailure: mongoLogId(1_002_008),
29
28
 
30
29
  toolExecute: mongoLogId(1_003_001),
31
30
  toolExecuteFailure: mongoLogId(1_003_002),
package/src/server.ts CHANGED
@@ -130,7 +130,7 @@ export class Server {
130
130
  }
131
131
  }
132
132
 
133
- this.telemetry.emitEvents([event]);
133
+ this.telemetry.emitEvents([event]).catch(() => {});
134
134
  }
135
135
 
136
136
  private registerTools() {