mongodb-mcp-server 0.1.2 → 0.2.0

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 (270) hide show
  1. package/.github/pull_request_template.md +5 -0
  2. package/.github/workflows/accuracy-tests.yml +55 -0
  3. package/.github/workflows/check.yml +1 -1
  4. package/.github/workflows/code_health.yaml +4 -4
  5. package/.github/workflows/code_health_fork.yaml +0 -14
  6. package/.github/workflows/dependabot_pr.yaml +26 -0
  7. package/.github/workflows/docker.yaml +1 -1
  8. package/.github/workflows/jira-issue.yml +72 -0
  9. package/.smithery/smithery.yaml +10 -0
  10. package/.vscode/extensions.json +1 -1
  11. package/.vscode/launch.json +11 -1
  12. package/.vscode/settings.json +1 -11
  13. package/Dockerfile +1 -0
  14. package/README.md +132 -31
  15. package/dist/common/atlas/accessListUtils.js +36 -0
  16. package/dist/common/atlas/accessListUtils.js.map +1 -0
  17. package/dist/common/atlas/apiClient.js +25 -6
  18. package/dist/common/atlas/apiClient.js.map +1 -1
  19. package/dist/common/atlas/cluster.js +1 -1
  20. package/dist/common/atlas/cluster.js.map +1 -1
  21. package/dist/{config.js → common/config.js} +8 -1
  22. package/dist/common/config.js.map +1 -0
  23. package/dist/{errors.js → common/errors.js} +1 -0
  24. package/dist/common/errors.js.map +1 -0
  25. package/dist/{logger.js → common/logger.js} +20 -19
  26. package/dist/common/logger.js.map +1 -0
  27. package/dist/common/managedTimeout.js +20 -0
  28. package/dist/common/managedTimeout.js.map +1 -0
  29. package/dist/common/packageInfo.js.map +1 -0
  30. package/dist/{session.js → common/session.js} +20 -21
  31. package/dist/common/session.js.map +1 -0
  32. package/dist/common/sessionStore.js +73 -0
  33. package/dist/common/sessionStore.js.map +1 -0
  34. package/dist/helpers/container.js +28 -0
  35. package/dist/helpers/container.js.map +1 -0
  36. package/dist/helpers/generatePassword.js.map +1 -0
  37. package/dist/helpers/indexCheck.js +63 -0
  38. package/dist/helpers/indexCheck.js.map +1 -0
  39. package/dist/index.js +30 -37
  40. package/dist/index.js.map +1 -1
  41. package/dist/server.js +44 -7
  42. package/dist/server.js.map +1 -1
  43. package/dist/telemetry/constants.js +1 -1
  44. package/dist/telemetry/constants.js.map +1 -1
  45. package/dist/telemetry/telemetry.js +86 -116
  46. package/dist/telemetry/telemetry.js.map +1 -1
  47. package/dist/tools/atlas/atlasTool.js +3 -3
  48. package/dist/tools/atlas/atlasTool.js.map +1 -1
  49. package/dist/tools/atlas/connect/connectCluster.js +198 -0
  50. package/dist/tools/atlas/connect/connectCluster.js.map +1 -0
  51. package/dist/tools/atlas/create/createAccessList.js +9 -10
  52. package/dist/tools/atlas/create/createAccessList.js.map +1 -1
  53. package/dist/tools/atlas/create/createDBUser.js +3 -1
  54. package/dist/tools/atlas/create/createDBUser.js.map +1 -1
  55. package/dist/tools/atlas/create/createFreeCluster.js +2 -0
  56. package/dist/tools/atlas/create/createFreeCluster.js.map +1 -1
  57. package/dist/tools/atlas/create/createProject.js.map +1 -1
  58. package/dist/tools/atlas/read/inspectAccessList.js.map +1 -1
  59. package/dist/tools/atlas/read/inspectCluster.js.map +1 -1
  60. package/dist/tools/atlas/read/listAlerts.js.map +1 -1
  61. package/dist/tools/atlas/read/listClusters.js.map +1 -1
  62. package/dist/tools/atlas/read/listDBUsers.js.map +1 -1
  63. package/dist/tools/atlas/read/listOrgs.js.map +1 -1
  64. package/dist/tools/atlas/read/listProjects.js.map +1 -1
  65. package/dist/tools/atlas/tools.js +1 -1
  66. package/dist/tools/atlas/tools.js.map +1 -1
  67. package/dist/tools/mongodb/{metadata → connect}/connect.js +7 -4
  68. package/dist/tools/mongodb/connect/connect.js.map +1 -0
  69. package/dist/tools/mongodb/create/createCollection.js.map +1 -1
  70. package/dist/tools/mongodb/create/createIndex.js +1 -1
  71. package/dist/tools/mongodb/create/createIndex.js.map +1 -1
  72. package/dist/tools/mongodb/create/insertMany.js +1 -1
  73. package/dist/tools/mongodb/create/insertMany.js.map +1 -1
  74. package/dist/tools/mongodb/delete/deleteMany.js +20 -1
  75. package/dist/tools/mongodb/delete/deleteMany.js.map +1 -1
  76. package/dist/tools/mongodb/delete/dropCollection.js.map +1 -1
  77. package/dist/tools/mongodb/delete/dropDatabase.js.map +1 -1
  78. package/dist/tools/mongodb/metadata/collectionSchema.js.map +1 -1
  79. package/dist/tools/mongodb/metadata/collectionStorageSize.js.map +1 -1
  80. package/dist/tools/mongodb/metadata/dbStats.js.map +1 -1
  81. package/dist/tools/mongodb/metadata/explain.js +2 -2
  82. package/dist/tools/mongodb/metadata/explain.js.map +1 -1
  83. package/dist/tools/mongodb/metadata/listCollections.js.map +1 -1
  84. package/dist/tools/mongodb/metadata/listDatabases.js.map +1 -1
  85. package/dist/tools/mongodb/metadata/logs.js.map +1 -1
  86. package/dist/tools/mongodb/mongodbTool.js +47 -10
  87. package/dist/tools/mongodb/mongodbTool.js.map +1 -1
  88. package/dist/tools/mongodb/read/aggregate.js +10 -1
  89. package/dist/tools/mongodb/read/aggregate.js.map +1 -1
  90. package/dist/tools/mongodb/read/collectionIndexes.js.map +1 -1
  91. package/dist/tools/mongodb/read/count.js +15 -1
  92. package/dist/tools/mongodb/read/count.js.map +1 -1
  93. package/dist/tools/mongodb/read/find.js +14 -4
  94. package/dist/tools/mongodb/read/find.js.map +1 -1
  95. package/dist/tools/mongodb/tools.js +1 -1
  96. package/dist/tools/mongodb/tools.js.map +1 -1
  97. package/dist/tools/mongodb/update/renameCollection.js.map +1 -1
  98. package/dist/tools/mongodb/update/updateMany.js +24 -2
  99. package/dist/tools/mongodb/update/updateMany.js.map +1 -1
  100. package/dist/tools/tool.js +12 -9
  101. package/dist/tools/tool.js.map +1 -1
  102. package/dist/transports/base.js +26 -0
  103. package/dist/transports/base.js.map +1 -0
  104. package/dist/{helpers/EJsonTransport.js → transports/stdio.js} +24 -2
  105. package/dist/transports/stdio.js.map +1 -0
  106. package/dist/transports/streamableHttp.js +140 -0
  107. package/dist/transports/streamableHttp.js.map +1 -0
  108. package/eslint.config.js +13 -4
  109. package/package.json +43 -33
  110. package/resources/test-summary-template.html +415 -0
  111. package/scripts/accuracy/generateTestSummary.ts +335 -0
  112. package/scripts/accuracy/runAccuracyTests.sh +45 -0
  113. package/scripts/accuracy/updateAccuracyRunStatus.ts +21 -0
  114. package/src/common/atlas/accessListUtils.ts +54 -0
  115. package/src/common/atlas/apiClient.ts +25 -6
  116. package/src/common/atlas/cluster.ts +1 -1
  117. package/src/{config.ts → common/config.ts} +16 -2
  118. package/src/{errors.ts → common/errors.ts} +1 -0
  119. package/src/{logger.ts → common/logger.ts} +21 -24
  120. package/src/common/managedTimeout.ts +27 -0
  121. package/src/{session.ts → common/session.ts} +24 -26
  122. package/src/common/sessionStore.ts +111 -0
  123. package/src/helpers/container.ts +35 -0
  124. package/src/helpers/indexCheck.ts +83 -0
  125. package/src/index.ts +30 -40
  126. package/src/server.ts +55 -11
  127. package/src/telemetry/constants.ts +1 -1
  128. package/src/telemetry/telemetry.ts +109 -153
  129. package/src/telemetry/types.ts +2 -1
  130. package/src/tools/atlas/atlasTool.ts +4 -4
  131. package/src/tools/atlas/connect/connectCluster.ts +259 -0
  132. package/src/tools/atlas/create/createAccessList.ts +15 -13
  133. package/src/tools/atlas/create/createDBUser.ts +5 -3
  134. package/src/tools/atlas/create/createFreeCluster.ts +4 -2
  135. package/src/tools/atlas/create/createProject.ts +2 -2
  136. package/src/tools/atlas/read/inspectAccessList.ts +2 -2
  137. package/src/tools/atlas/read/inspectCluster.ts +2 -2
  138. package/src/tools/atlas/read/listAlerts.ts +2 -2
  139. package/src/tools/atlas/read/listClusters.ts +2 -2
  140. package/src/tools/atlas/read/listDBUsers.ts +2 -2
  141. package/src/tools/atlas/read/listOrgs.ts +2 -2
  142. package/src/tools/atlas/read/listProjects.ts +2 -2
  143. package/src/tools/atlas/tools.ts +1 -1
  144. package/src/tools/mongodb/{metadata → connect}/connect.ts +12 -9
  145. package/src/tools/mongodb/create/createCollection.ts +2 -2
  146. package/src/tools/mongodb/create/createIndex.ts +3 -3
  147. package/src/tools/mongodb/create/insertMany.ts +3 -3
  148. package/src/tools/mongodb/delete/deleteMany.ts +24 -3
  149. package/src/tools/mongodb/delete/dropCollection.ts +2 -2
  150. package/src/tools/mongodb/delete/dropDatabase.ts +2 -2
  151. package/src/tools/mongodb/metadata/collectionSchema.ts +2 -2
  152. package/src/tools/mongodb/metadata/collectionStorageSize.ts +2 -2
  153. package/src/tools/mongodb/metadata/dbStats.ts +2 -2
  154. package/src/tools/mongodb/metadata/explain.ts +4 -4
  155. package/src/tools/mongodb/metadata/listCollections.ts +2 -2
  156. package/src/tools/mongodb/metadata/listDatabases.ts +2 -2
  157. package/src/tools/mongodb/metadata/logs.ts +2 -2
  158. package/src/tools/mongodb/mongodbTool.ts +60 -14
  159. package/src/tools/mongodb/read/aggregate.ts +14 -3
  160. package/src/tools/mongodb/read/collectionIndexes.ts +2 -2
  161. package/src/tools/mongodb/read/count.ts +19 -3
  162. package/src/tools/mongodb/read/find.ts +20 -6
  163. package/src/tools/mongodb/tools.ts +1 -1
  164. package/src/tools/mongodb/update/renameCollection.ts +2 -2
  165. package/src/tools/mongodb/update/updateMany.ts +28 -4
  166. package/src/tools/tool.ts +23 -18
  167. package/src/transports/base.ts +34 -0
  168. package/src/{helpers/EJsonTransport.ts → transports/stdio.ts} +30 -1
  169. package/src/transports/streamableHttp.ts +178 -0
  170. package/tests/accuracy/aggregate.test.ts +27 -0
  171. package/tests/accuracy/collectionIndexes.test.ts +40 -0
  172. package/tests/accuracy/collectionSchema.test.ts +28 -0
  173. package/tests/accuracy/collectionStorageSize.test.ts +41 -0
  174. package/tests/accuracy/count.test.ts +44 -0
  175. package/tests/accuracy/createCollection.test.ts +46 -0
  176. package/tests/accuracy/createIndex.test.ts +37 -0
  177. package/tests/accuracy/dbStats.test.ts +15 -0
  178. package/tests/accuracy/deleteMany.test.ts +44 -0
  179. package/tests/accuracy/dropCollection.test.ts +74 -0
  180. package/tests/accuracy/dropDatabase.test.ts +41 -0
  181. package/tests/accuracy/explain.test.ts +73 -0
  182. package/tests/accuracy/find.test.ts +114 -0
  183. package/tests/accuracy/insertMany.test.ts +48 -0
  184. package/tests/accuracy/listCollections.test.ts +60 -0
  185. package/tests/accuracy/listDatabases.test.ts +31 -0
  186. package/tests/accuracy/logs.test.ts +28 -0
  187. package/tests/accuracy/renameCollection.test.ts +31 -0
  188. package/tests/accuracy/sdk/accuracyResultStorage/diskStorage.ts +189 -0
  189. package/tests/accuracy/sdk/accuracyResultStorage/getAccuracyResultStorage.ts +11 -0
  190. package/tests/accuracy/sdk/accuracyResultStorage/mongodbStorage.ts +151 -0
  191. package/tests/accuracy/sdk/accuracyResultStorage/resultStorage.ts +117 -0
  192. package/tests/accuracy/sdk/accuracyScorer.ts +93 -0
  193. package/tests/accuracy/sdk/accuracyTestingClient.ts +94 -0
  194. package/tests/accuracy/sdk/agent.ts +56 -0
  195. package/tests/accuracy/sdk/constants.ts +26 -0
  196. package/tests/accuracy/sdk/describeAccuracyTests.ts +126 -0
  197. package/tests/accuracy/sdk/gitInfo.ts +7 -0
  198. package/tests/accuracy/sdk/matcher.ts +193 -0
  199. package/tests/accuracy/sdk/models.ts +95 -0
  200. package/tests/accuracy/test-data-dumps/comics.books.json +417 -0
  201. package/tests/accuracy/test-data-dumps/comics.characters.json +402 -0
  202. package/tests/accuracy/test-data-dumps/mflix.movies.json +496 -0
  203. package/tests/accuracy/test-data-dumps/mflix.shows.json +572 -0
  204. package/tests/accuracy/updateMany.test.ts +42 -0
  205. package/tests/integration/helpers.ts +9 -9
  206. package/tests/integration/indexCheck.test.ts +464 -0
  207. package/tests/integration/server.test.ts +6 -4
  208. package/tests/integration/telemetry.test.ts +29 -0
  209. package/tests/integration/tools/atlas/accessLists.test.ts +22 -2
  210. package/tests/integration/tools/atlas/alerts.test.ts +3 -2
  211. package/tests/integration/tools/atlas/atlasHelpers.ts +3 -0
  212. package/tests/integration/tools/atlas/clusters.test.ts +68 -16
  213. package/tests/integration/tools/atlas/dbUsers.test.ts +14 -1
  214. package/tests/integration/tools/atlas/orgs.test.ts +2 -1
  215. package/tests/integration/tools/atlas/projects.test.ts +4 -3
  216. package/tests/integration/tools/mongodb/{metadata → connect}/connect.test.ts +34 -3
  217. package/tests/integration/tools/mongodb/create/createCollection.test.ts +1 -0
  218. package/tests/integration/tools/mongodb/create/createIndex.test.ts +1 -0
  219. package/tests/integration/tools/mongodb/create/insertMany.test.ts +1 -0
  220. package/tests/integration/tools/mongodb/delete/deleteMany.test.ts +1 -0
  221. package/tests/integration/tools/mongodb/delete/dropCollection.test.ts +1 -1
  222. package/tests/integration/tools/mongodb/delete/dropDatabase.test.ts +1 -0
  223. package/tests/integration/tools/mongodb/metadata/collectionSchema.test.ts +1 -0
  224. package/tests/integration/tools/mongodb/metadata/collectionStorageSize.test.ts +1 -0
  225. package/tests/integration/tools/mongodb/metadata/dbStats.test.ts +1 -0
  226. package/tests/integration/tools/mongodb/metadata/explain.test.ts +1 -0
  227. package/tests/integration/tools/mongodb/metadata/listCollections.test.ts +1 -0
  228. package/tests/integration/tools/mongodb/metadata/listDatabases.test.ts +3 -2
  229. package/tests/integration/tools/mongodb/metadata/logs.test.ts +1 -0
  230. package/tests/integration/tools/mongodb/mongodbHelpers.ts +67 -2
  231. package/tests/integration/tools/mongodb/read/aggregate.test.ts +2 -1
  232. package/tests/integration/tools/mongodb/read/collectionIndexes.test.ts +1 -0
  233. package/tests/integration/tools/mongodb/read/count.test.ts +1 -0
  234. package/tests/integration/tools/mongodb/read/find.test.ts +2 -1
  235. package/tests/integration/tools/mongodb/update/renameCollection.test.ts +1 -0
  236. package/tests/integration/tools/mongodb/update/updateMany.test.ts +1 -0
  237. package/tests/integration/transports/stdio.test.ts +40 -0
  238. package/tests/integration/transports/streamableHttp.test.ts +56 -0
  239. package/tests/matchers/toIncludeSameMembers.test.ts +59 -0
  240. package/tests/matchers/toIncludeSameMembers.ts +12 -0
  241. package/tests/setup.ts +7 -0
  242. package/tests/unit/accessListUtils.test.ts +39 -0
  243. package/tests/unit/accuracyScorer.test.ts +390 -0
  244. package/tests/unit/{apiClient.test.ts → common/apiClient.test.ts} +15 -15
  245. package/tests/unit/common/managedTimeout.test.ts +67 -0
  246. package/tests/unit/{session.test.ts → common/session.test.ts} +7 -12
  247. package/tests/unit/helpers/indexCheck.test.ts +150 -0
  248. package/tests/unit/telemetry.test.ts +99 -137
  249. package/tests/unit/{EJsonTransport.test.ts → transports/stdio.test.ts} +4 -4
  250. package/tests/vitest.d.ts +11 -0
  251. package/tsconfig.json +0 -1
  252. package/{tsconfig.jest.json → tsconfig.test.json} +1 -2
  253. package/vitest.config.ts +41 -0
  254. package/dist/common/atlas/generatePassword.js.map +0 -1
  255. package/dist/config.js.map +0 -1
  256. package/dist/errors.js.map +0 -1
  257. package/dist/helpers/EJsonTransport.js.map +0 -1
  258. package/dist/helpers/packageInfo.js.map +0 -1
  259. package/dist/logger.js.map +0 -1
  260. package/dist/session.js.map +0 -1
  261. package/dist/tools/atlas/metadata/connectCluster.js +0 -100
  262. package/dist/tools/atlas/metadata/connectCluster.js.map +0 -1
  263. package/dist/tools/mongodb/metadata/connect.js.map +0 -1
  264. package/global.d.ts +0 -1
  265. package/jest.config.cjs +0 -22
  266. package/src/tools/atlas/metadata/connectCluster.ts +0 -121
  267. /package/dist/{helpers → common}/packageInfo.js +0 -0
  268. /package/dist/{common/atlas → helpers}/generatePassword.js +0 -0
  269. /package/src/{helpers → common}/packageInfo.ts +0 -0
  270. /package/src/{common/atlas → helpers}/generatePassword.ts +0 -0
@@ -1,20 +1,24 @@
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
- .record(z.string(), z.unknown())
7
+ .object({})
8
+ .passthrough()
7
9
  .optional()
8
10
  .describe("The query filter, matching the syntax of the query argument of db.collection.find()"),
9
11
  projection: z
10
- .record(z.string(), z.unknown())
12
+ .object({})
13
+ .passthrough()
11
14
  .optional()
12
15
  .describe("The projection, matching the syntax of the projection argument of db.collection.find()"),
13
16
  limit: z.number().optional().default(10).describe("The maximum number of documents to return"),
14
17
  sort: z
15
- .record(z.string(), z.custom())
18
+ .object({})
19
+ .catchall(z.custom())
16
20
  .optional()
17
- .describe("A document, describing the sort order, matching the syntax of the sort argument of cursor.sort()"),
21
+ .describe("A document, describing the sort order, matching the syntax of the sort argument of cursor.sort(). The keys of the object are the fields to sort on, while the values are the sort directions (1 for ascending, -1 for descending)."),
18
22
  };
19
23
  export class FindTool extends MongoDBToolBase {
20
24
  constructor() {
@@ -29,6 +33,12 @@ export class FindTool extends MongoDBToolBase {
29
33
  }
30
34
  async execute({ database, collection, filter, projection, limit, sort, }) {
31
35
  const provider = await this.ensureConnected();
36
+ // Check if find operation uses an index if enabled
37
+ if (this.config.indexCheck) {
38
+ await checkIndexUsage(provider, database, collection, "find", async () => {
39
+ return provider.find(database, collection, filter, { projection, limit, sort }).explain("queryPlanner");
40
+ });
41
+ }
32
42
  const documents = await provider.find(database, collection, filter, { projection, limit, sort }).toArray();
33
43
  const content = [
34
44
  {
@@ -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,EAAE,CAAC;SACV,WAAW,EAAE;SACb,QAAQ,EAAE;SACV,QAAQ,CAAC,qFAAqF,CAAC;IACpG,UAAU,EAAE,CAAC;SACR,MAAM,CAAC,EAAE,CAAC;SACV,WAAW,EAAE;SACb,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,EAAE,CAAC;SACV,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAiB,CAAC;SACnC,QAAQ,EAAE;SACV,QAAQ,CACL,oOAAoO,CACvO;CACR,CAAC;AAEF,MAAM,OAAO,QAAS,SAAQ,eAAe;IAA7C;;QACW,SAAI,GAAG,MAAM,CAAC;QACX,gBAAW,GAAG,+CAA+C,CAAC;QAC9D,cAAS,GAAG;YAClB,GAAG,eAAe;YAClB,GAAG,QAAQ;SACd,CAAC;QACK,kBAAa,GAAkB,MAAM,CAAC;IAsCjD,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,4 +1,4 @@
1
- import { ConnectTool } from "./metadata/connect.js";
1
+ import { ConnectTool } from "./connect/connect.js";
2
2
  import { ListCollectionsTool } from "./metadata/listCollections.js";
3
3
  import { CollectionIndexesTool } from "./read/collectionIndexes.js";
4
4
  import { ListDatabasesTool } from "./metadata/listDatabases.js";
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/tools/mongodb/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,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"}
@@ -1 +1 @@
1
- {"version":3,"file":"renameCollection.js","sourceRoot":"","sources":["../../../../src/tools/mongodb/update/renameCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGrE,MAAM,OAAO,oBAAqB,SAAQ,eAAe;IAAzD;;QACc,SAAI,GAAG,mBAAmB,CAAC;QAC3B,gBAAW,GAAG,4CAA4C,CAAC;QAC3D,cAAS,GAAG;YAClB,GAAG,eAAe;YAClB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;YAC/D,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,mDAAmD,CAAC;SAClH,CAAC;QACQ,kBAAa,GAAkB,QAAQ,CAAC;IAoDtD,CAAC;IAlDa,KAAK,CAAC,OAAO,CAAC,EACpB,QAAQ,EACR,UAAU,EACV,OAAO,EACP,UAAU,GACoB;QAC9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE;YAC1E,UAAU;SACb,CAAC,CAAC;QAEH,OAAO;YACH,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,eAAe,UAAU,iBAAiB,MAAM,CAAC,cAAc,kBAAkB,QAAQ,IAAI;oBACnG,IAAI,EAAE,MAAM;iBACf;aACJ;SACJ,CAAC;IACN,CAAC;IAES,WAAW,CACjB,KAAc,EACd,IAAqC;QAErC,IAAI,KAAK,YAAY,KAAK,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;YAChD,QAAQ,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACrB,KAAK,mBAAmB;oBACpB,OAAO;wBACH,OAAO,EAAE;4BACL;gCACI,IAAI,EAAE,kBAAkB,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,6BAA6B;gCACrF,IAAI,EAAE,MAAM;6BACf;yBACJ;qBACJ,CAAC;gBACN,KAAK,iBAAiB;oBAClB,OAAO;wBACH,OAAO,EAAE;4BACL;gCACI,IAAI,EAAE,kBAAkB,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,SAAS,IAAI,CAAC,OAAO,qHAAqH;gCAClM,IAAI,EAAE,MAAM;6BACf;yBACJ;qBACJ,CAAC;YACV,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;CACJ"}
1
+ {"version":3,"file":"renameCollection.js","sourceRoot":"","sources":["../../../../src/tools/mongodb/update/renameCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGrE,MAAM,OAAO,oBAAqB,SAAQ,eAAe;IAAzD;;QACW,SAAI,GAAG,mBAAmB,CAAC;QACxB,gBAAW,GAAG,4CAA4C,CAAC;QAC3D,cAAS,GAAG;YAClB,GAAG,eAAe;YAClB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;YAC/D,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,mDAAmD,CAAC;SAClH,CAAC;QACK,kBAAa,GAAkB,QAAQ,CAAC;IAoDnD,CAAC;IAlDa,KAAK,CAAC,OAAO,CAAC,EACpB,QAAQ,EACR,UAAU,EACV,OAAO,EACP,UAAU,GACoB;QAC9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE;YAC1E,UAAU;SACb,CAAC,CAAC;QAEH,OAAO;YACH,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,eAAe,UAAU,iBAAiB,MAAM,CAAC,cAAc,kBAAkB,QAAQ,IAAI;oBACnG,IAAI,EAAE,MAAM;iBACf;aACJ;SACJ,CAAC;IACN,CAAC;IAES,WAAW,CACjB,KAAc,EACd,IAAqC;QAErC,IAAI,KAAK,YAAY,KAAK,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;YAChD,QAAQ,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACrB,KAAK,mBAAmB;oBACpB,OAAO;wBACH,OAAO,EAAE;4BACL;gCACI,IAAI,EAAE,kBAAkB,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,6BAA6B;gCACrF,IAAI,EAAE,MAAM;6BACf;yBACJ;qBACJ,CAAC;gBACN,KAAK,iBAAiB;oBAClB,OAAO;wBACH,OAAO,EAAE;4BACL;gCACI,IAAI,EAAE,kBAAkB,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,SAAS,IAAI,CAAC,OAAO,qHAAqH;gCAClM,IAAI,EAAE,MAAM;6BACf;yBACJ;qBACJ,CAAC;YACV,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1C,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);
@@ -8,11 +9,13 @@ export class UpdateManyTool extends MongoDBToolBase {
8
9
  this.argsShape = {
9
10
  ...DbOperationArgs,
10
11
  filter: z
11
- .record(z.string(), z.unknown())
12
+ .object({})
13
+ .passthrough()
12
14
  .optional()
13
15
  .describe("The selection criteria for the update, matching the syntax of the filter argument of db.collection.updateOne()"),
14
16
  update: z
15
- .record(z.string(), z.unknown())
17
+ .object({})
18
+ .passthrough()
16
19
  .describe("An update document describing the modifications to apply using update operator expressions"),
17
20
  upsert: z
18
21
  .boolean()
@@ -23,6 +26,25 @@ export class UpdateManyTool extends MongoDBToolBase {
23
26
  }
24
27
  async execute({ database, collection, filter, update, upsert, }) {
25
28
  const provider = await this.ensureConnected();
29
+ // Check if update operation uses an index if enabled
30
+ if (this.config.indexCheck) {
31
+ await checkIndexUsage(provider, database, collection, "updateMany", async () => {
32
+ return provider.runCommandWithCheck(database, {
33
+ explain: {
34
+ update: collection,
35
+ updates: [
36
+ {
37
+ q: filter || {},
38
+ u: update,
39
+ upsert: upsert || false,
40
+ multi: true,
41
+ },
42
+ ],
43
+ },
44
+ verbosity: "queryPlanner",
45
+ });
46
+ });
47
+ }
26
48
  const result = await provider.updateMany(database, collection, filter, update, {
27
49
  upsert,
28
50
  });
@@ -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;;QACW,SAAI,GAAG,aAAa,CAAC;QAClB,gBAAW,GAAG,wEAAwE,CAAC;QACvF,cAAS,GAAG;YAClB,GAAG,eAAe;YAClB,MAAM,EAAE,CAAC;iBACJ,MAAM,CAAC,EAAE,CAAC;iBACV,WAAW,EAAE;iBACb,QAAQ,EAAE;iBACV,QAAQ,CACL,gHAAgH,CACnH;YACL,MAAM,EAAE,CAAC;iBACJ,MAAM,CAAC,EAAE,CAAC;iBACV,WAAW,EAAE;iBACb,QAAQ,CAAC,4FAA4F,CAAC;YAC3G,MAAM,EAAE,CAAC;iBACJ,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,4EAA4E,CAAC;SAC9F,CAAC;QACK,kBAAa,GAAkB,QAAQ,CAAC;IAyDnD,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"}
@@ -1,4 +1,4 @@
1
- import logger, { LogId } from "../logger.js";
1
+ import logger, { LogId } from "../common/logger.js";
2
2
  export class ToolBase {
3
3
  get annotations() {
4
4
  const annotations = {
@@ -8,6 +8,7 @@ export class ToolBase {
8
8
  switch (this.operationType) {
9
9
  case "read":
10
10
  case "metadata":
11
+ case "connect":
11
12
  annotations.readOnlyHint = true;
12
13
  annotations.destructiveHint = false;
13
14
  break;
@@ -32,30 +33,31 @@ export class ToolBase {
32
33
  }
33
34
  register(server) {
34
35
  if (!this.verifyAllowed()) {
35
- return;
36
+ return false;
36
37
  }
37
38
  const callback = async (...args) => {
38
39
  const startTime = Date.now();
39
40
  try {
40
41
  logger.debug(LogId.toolExecute, "tool", `Executing tool ${this.name}`);
41
42
  const result = await this.execute(...args);
42
- this.emitToolEvent(startTime, result, ...args);
43
+ await this.emitToolEvent(startTime, result, ...args).catch(() => { });
43
44
  return result;
44
45
  }
45
46
  catch (error) {
46
47
  logger.error(LogId.toolExecuteFailure, "tool", `Error executing ${this.name}: ${error}`);
47
48
  const toolResult = await this.handleError(error, args[0]);
48
- this.emitToolEvent(startTime, toolResult, ...args);
49
+ await this.emitToolEvent(startTime, toolResult, ...args).catch(() => { });
49
50
  return toolResult;
50
51
  }
51
52
  };
52
- server.tool(this.name, this.description, this.argsShape, this.annotations, callback);
53
+ server.mcpServer.tool(this.name, this.description, this.argsShape, this.annotations, callback);
53
54
  // This is very similar to RegisteredTool.update, but without the bugs around the name.
54
55
  // In the upstream update method, the name is captured in the closure and not updated when
55
56
  // the tool name changes. This means that you only get one name update before things end up
56
57
  // in a broken state.
58
+ // See https://github.com/modelcontextprotocol/typescript-sdk/issues/414 for more details.
57
59
  this.update = (updates) => {
58
- const tools = server["_registeredTools"];
60
+ const tools = server.mcpServer["_registeredTools"];
59
61
  const existingTool = tools[this.name];
60
62
  if (!existingTool) {
61
63
  logger.warning(LogId.toolUpdateFailure, "tool", `Tool ${this.name} not found in update`);
@@ -76,8 +78,9 @@ export class ToolBase {
76
78
  if (updates.inputSchema) {
77
79
  existingTool.inputSchema = updates.inputSchema;
78
80
  }
79
- server.sendToolListChanged();
81
+ server.mcpServer.sendToolListChanged();
80
82
  };
83
+ return true;
81
84
  }
82
85
  // Checks if a tool is allowed to run based on the config
83
86
  verifyAllowed() {
@@ -121,7 +124,7 @@ export class ToolBase {
121
124
  * @param result - Whether the command succeeded or failed
122
125
  * @param args - The arguments passed to the tool
123
126
  */
124
- emitToolEvent(startTime, result, ...args) {
127
+ async emitToolEvent(startTime, result, ...args) {
125
128
  if (!this.telemetry.isTelemetryEnabled()) {
126
129
  return;
127
130
  }
@@ -144,7 +147,7 @@ export class ToolBase {
144
147
  if (metadata?.projectId) {
145
148
  event.properties.project_id = metadata.projectId;
146
149
  }
147
- this.telemetry.emitEvents([event]);
150
+ await this.telemetry.emitEvents([event]);
148
151
  }
149
152
  }
150
153
  //# 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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"}
@@ -0,0 +1,26 @@
1
+ import { packageInfo } from "../common/packageInfo.js";
2
+ import { Server } from "../server.js";
3
+ import { Session } from "../common/session.js";
4
+ import { Telemetry } from "../telemetry/telemetry.js";
5
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
6
+ export class TransportRunnerBase {
7
+ setupServer(userConfig) {
8
+ const session = new Session({
9
+ apiBaseUrl: userConfig.apiBaseUrl,
10
+ apiClientId: userConfig.apiClientId,
11
+ apiClientSecret: userConfig.apiClientSecret,
12
+ });
13
+ const telemetry = Telemetry.create(session, userConfig);
14
+ const mcpServer = new McpServer({
15
+ name: packageInfo.mcpServerName,
16
+ version: packageInfo.version,
17
+ });
18
+ return new Server({
19
+ mcpServer,
20
+ session,
21
+ telemetry,
22
+ userConfig,
23
+ });
24
+ }
25
+ }
26
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/transports/base.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,MAAM,OAAgB,mBAAmB;IAC3B,WAAW,CAAC,UAAsB;QACxC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC;YACxB,UAAU,EAAE,UAAU,CAAC,UAAU;YACjC,WAAW,EAAE,UAAU,CAAC,WAAW;YACnC,eAAe,EAAE,UAAU,CAAC,eAAe;SAC9C,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAExD,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC;YAC5B,IAAI,EAAE,WAAW,CAAC,aAAa;YAC/B,OAAO,EAAE,WAAW,CAAC,OAAO;SAC/B,CAAC,CAAC;QAEH,OAAO,IAAI,MAAM,CAAC;YACd,SAAS;YACT,OAAO;YACP,SAAS;YACT,UAAU;SACb,CAAC,CAAC;IACP,CAAC;CAKJ"}
@@ -1,3 +1,5 @@
1
+ import logger, { LogId } from "../common/logger.js";
2
+ import { TransportRunnerBase } from "./base.js";
1
3
  import { JSONRPCMessageSchema } from "@modelcontextprotocol/sdk/types.js";
2
4
  import { EJSON } from "bson";
3
5
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
@@ -30,9 +32,29 @@ export class EJsonReadBuffer {
30
32
  //
31
33
  // This function creates a StdioServerTransport and replaces the internal readBuffer with EJsonReadBuffer
32
34
  // that uses EJson.parse instead.
33
- export function createEJsonTransport() {
35
+ export function createStdioTransport() {
34
36
  const server = new StdioServerTransport();
35
37
  server["_readBuffer"] = new EJsonReadBuffer();
36
38
  return server;
37
39
  }
38
- //# sourceMappingURL=EJsonTransport.js.map
40
+ export class StdioRunner extends TransportRunnerBase {
41
+ constructor(userConfig) {
42
+ super();
43
+ this.userConfig = userConfig;
44
+ }
45
+ async start() {
46
+ try {
47
+ this.server = this.setupServer(this.userConfig);
48
+ const transport = createStdioTransport();
49
+ await this.server.connect(transport);
50
+ }
51
+ catch (error) {
52
+ logger.emergency(LogId.serverStartFailure, "server", `Fatal error running server: ${error}`);
53
+ process.exit(1);
54
+ }
55
+ }
56
+ async close() {
57
+ await this.server?.close();
58
+ }
59
+ }
60
+ //# sourceMappingURL=stdio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../src/transports/stdio.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAkB,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1F,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAGjF,qEAAqE;AACrE,qEAAqE;AACrE,MAAM,OAAO,eAAe;IAGxB,MAAM,CAAC,KAAa;QAChB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/E,CAAC;IAED,WAAW;QACP,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACxE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAEhD,uEAAuE;QACvE,OAAO,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,KAAK;QACD,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;IAC7B,CAAC;CACJ;AAED,6FAA6F;AAC7F,mFAAmF;AACnF,2FAA2F;AAC3F,EAAE;AACF,yGAAyG;AACzG,iCAAiC;AACjC,MAAM,UAAU,oBAAoB;IAChC,MAAM,MAAM,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC1C,MAAM,CAAC,aAAa,CAAC,GAAG,IAAI,eAAe,EAAE,CAAC;IAE9C,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,MAAM,OAAO,WAAY,SAAQ,mBAAmB;IAGhD,YAAoB,UAAsB;QACtC,KAAK,EAAE,CAAC;QADQ,eAAU,GAAV,UAAU,CAAY;IAE1C,CAAC;IAED,KAAK,CAAC,KAAK;QACP,IAAI,CAAC;YACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAEhD,MAAM,SAAS,GAAG,oBAAoB,EAAE,CAAC;YAEzC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACtB,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,kBAAkB,EAAE,QAAQ,EAAE,+BAA+B,KAAe,EAAE,CAAC,CAAC;YACvG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK;QACP,MAAM,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;IAC/B,CAAC;CACJ"}
@@ -0,0 +1,140 @@
1
+ import express from "express";
2
+ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
3
+ import { isInitializeRequest } from "@modelcontextprotocol/sdk/types.js";
4
+ import { TransportRunnerBase } from "./base.js";
5
+ import logger, { LogId } from "../common/logger.js";
6
+ import { randomUUID } from "crypto";
7
+ import { SessionStore } from "../common/sessionStore.js";
8
+ const JSON_RPC_ERROR_CODE_PROCESSING_REQUEST_FAILED = -32000;
9
+ const JSON_RPC_ERROR_CODE_SESSION_ID_REQUIRED = -32001;
10
+ const JSON_RPC_ERROR_CODE_SESSION_ID_INVALID = -32002;
11
+ const JSON_RPC_ERROR_CODE_SESSION_NOT_FOUND = -32003;
12
+ const JSON_RPC_ERROR_CODE_INVALID_REQUEST = -32004;
13
+ function withErrorHandling(fn) {
14
+ return (req, res, next) => {
15
+ fn(req, res, next).catch((error) => {
16
+ logger.error(LogId.streamableHttpTransportRequestFailure, "streamableHttpTransport", `Error handling request: ${error instanceof Error ? error.message : String(error)}`);
17
+ res.status(400).json({
18
+ jsonrpc: "2.0",
19
+ error: {
20
+ code: JSON_RPC_ERROR_CODE_PROCESSING_REQUEST_FAILED,
21
+ message: `failed to handle request`,
22
+ data: error instanceof Error ? error.message : String(error),
23
+ },
24
+ });
25
+ });
26
+ };
27
+ }
28
+ export class StreamableHttpRunner extends TransportRunnerBase {
29
+ constructor(userConfig) {
30
+ super();
31
+ this.userConfig = userConfig;
32
+ this.sessionStore = new SessionStore(this.userConfig.idleTimeoutMs, this.userConfig.notificationTimeoutMs);
33
+ }
34
+ async start() {
35
+ const app = express();
36
+ app.enable("trust proxy"); // needed for reverse proxy support
37
+ app.use(express.json());
38
+ const handleSessionRequest = async (req, res) => {
39
+ const sessionId = req.headers["mcp-session-id"];
40
+ if (!sessionId) {
41
+ res.status(400).json({
42
+ jsonrpc: "2.0",
43
+ error: {
44
+ code: JSON_RPC_ERROR_CODE_SESSION_ID_REQUIRED,
45
+ message: `session id is required`,
46
+ },
47
+ });
48
+ return;
49
+ }
50
+ if (typeof sessionId !== "string") {
51
+ res.status(400).json({
52
+ jsonrpc: "2.0",
53
+ error: {
54
+ code: JSON_RPC_ERROR_CODE_SESSION_ID_INVALID,
55
+ message: `session id is invalid`,
56
+ },
57
+ });
58
+ return;
59
+ }
60
+ const transport = this.sessionStore.getSession(sessionId);
61
+ if (!transport) {
62
+ res.status(404).json({
63
+ jsonrpc: "2.0",
64
+ error: {
65
+ code: JSON_RPC_ERROR_CODE_SESSION_NOT_FOUND,
66
+ message: `session not found`,
67
+ },
68
+ });
69
+ return;
70
+ }
71
+ await transport.handleRequest(req, res, req.body);
72
+ };
73
+ app.post("/mcp", withErrorHandling(async (req, res) => {
74
+ const sessionId = req.headers["mcp-session-id"];
75
+ if (sessionId) {
76
+ await handleSessionRequest(req, res);
77
+ return;
78
+ }
79
+ if (!isInitializeRequest(req.body)) {
80
+ res.status(400).json({
81
+ jsonrpc: "2.0",
82
+ error: {
83
+ code: JSON_RPC_ERROR_CODE_INVALID_REQUEST,
84
+ message: `invalid request`,
85
+ },
86
+ });
87
+ return;
88
+ }
89
+ const server = this.setupServer(this.userConfig);
90
+ const transport = new StreamableHTTPServerTransport({
91
+ sessionIdGenerator: () => randomUUID().toString(),
92
+ onsessioninitialized: (sessionId) => {
93
+ this.sessionStore.setSession(sessionId, transport, server.mcpServer);
94
+ },
95
+ onsessionclosed: async (sessionId) => {
96
+ try {
97
+ await this.sessionStore.closeSession(sessionId, false);
98
+ }
99
+ catch (error) {
100
+ logger.error(LogId.streamableHttpTransportSessionCloseFailure, "streamableHttpTransport", `Error closing session: ${error instanceof Error ? error.message : String(error)}`);
101
+ }
102
+ },
103
+ });
104
+ transport.onclose = () => {
105
+ server.close().catch((error) => {
106
+ logger.error(LogId.streamableHttpTransportCloseFailure, "streamableHttpTransport", `Error closing server: ${error instanceof Error ? error.message : String(error)}`);
107
+ });
108
+ };
109
+ await server.connect(transport);
110
+ await transport.handleRequest(req, res, req.body);
111
+ }));
112
+ app.get("/mcp", withErrorHandling(handleSessionRequest));
113
+ app.delete("/mcp", withErrorHandling(handleSessionRequest));
114
+ this.httpServer = await new Promise((resolve, reject) => {
115
+ const result = app.listen(this.userConfig.httpPort, this.userConfig.httpHost, (err) => {
116
+ if (err) {
117
+ reject(err);
118
+ return;
119
+ }
120
+ resolve(result);
121
+ });
122
+ });
123
+ logger.info(LogId.streamableHttpTransportStarted, "streamableHttpTransport", `Server started on http://${this.userConfig.httpHost}:${this.userConfig.httpPort}`);
124
+ }
125
+ async close() {
126
+ await Promise.all([
127
+ this.sessionStore.closeAllSessions(),
128
+ new Promise((resolve, reject) => {
129
+ this.httpServer?.close((err) => {
130
+ if (err) {
131
+ reject(err);
132
+ return;
133
+ }
134
+ resolve();
135
+ });
136
+ }),
137
+ ]);
138
+ }
139
+ }
140
+ //# sourceMappingURL=streamableHttp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streamableHttp.js","sourceRoot":"","sources":["../../src/transports/streamableHttp.ts"],"names":[],"mappings":"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"}
package/eslint.config.js CHANGED
@@ -3,7 +3,7 @@ import js from "@eslint/js";
3
3
  import globals from "globals";
4
4
  import tseslint from "typescript-eslint";
5
5
  import eslintPluginPrettierRecommended from "eslint-plugin-prettier/recommended";
6
- import jestPlugin from "eslint-plugin-jest";
6
+ import vitestPlugin from "@vitest/eslint-plugin";
7
7
 
8
8
  const testFiles = ["tests/**/*.test.ts", "tests/**/*.ts"];
9
9
 
@@ -15,14 +15,23 @@ export default defineConfig([
15
15
  {
16
16
  files: testFiles,
17
17
  plugins: {
18
- jest: jestPlugin,
18
+ vitest: vitestPlugin,
19
19
  },
20
20
  languageOptions: {
21
21
  globals: {
22
22
  ...globals.node,
23
- ...jestPlugin.environments.globals.globals,
24
23
  },
25
24
  },
25
+ rules: {
26
+ ...vitestPlugin.configs.recommended.rules,
27
+ "vitest/valid-title": "off",
28
+ "vitest/expect-expect": [
29
+ "error",
30
+ {
31
+ assertFunctionNames: ["expect", "expectDefined", "verifyMockCalls"],
32
+ },
33
+ ],
34
+ },
26
35
  },
27
36
  tseslint.configs.recommendedTypeChecked,
28
37
  {
@@ -48,7 +57,7 @@ export default defineConfig([
48
57
  "coverage",
49
58
  "global.d.ts",
50
59
  "eslint.config.js",
51
- "jest.config.cjs",
60
+ "vitest.config.ts",
52
61
  "src/types/*.d.ts",
53
62
  ]),
54
63
  eslintPluginPrettierRecommended,
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.2.0",
5
5
  "main": "dist/index.js",
6
6
  "author": "MongoDB <info@mongodb.com>",
7
7
  "homepage": "https://github.com/mongodb-js/mongodb-mcp-server",
@@ -16,6 +16,7 @@
16
16
  },
17
17
  "type": "module",
18
18
  "scripts": {
19
+ "start": "node dist/index.js --transport http --loggers stderr mcp",
19
20
  "prepare": "npm run build",
20
21
  "build:clean": "rm -rf dist",
21
22
  "build:compile": "tsc --project tsconfig.build.json",
@@ -29,55 +30,64 @@
29
30
  "check:types": "tsc --noEmit --project tsconfig.json",
30
31
  "reformat": "prettier --write .",
31
32
  "generate": "./scripts/generate.sh",
32
- "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js --coverage"
33
+ "test": "vitest --project unit-and-integration --coverage",
34
+ "pretest:accuracy": "npm run build:compile",
35
+ "test:accuracy": "sh ./scripts/accuracy/runAccuracyTests.sh"
33
36
  },
34
37
  "license": "Apache-2.0",
35
38
  "devDependencies": {
36
- "@eslint/js": "^9.24.0",
37
- "@jest/globals": "^30.0.0",
38
- "@modelcontextprotocol/inspector": "^0.14.0",
39
- "@redocly/cli": "^1.34.2",
40
- "@types/jest": "^29.5.14",
41
- "@types/node": "^22.14.0",
39
+ "@ai-sdk/azure": "^1.3.24",
40
+ "@ai-sdk/google": "^1.2.22",
41
+ "@ai-sdk/openai": "^1.3.23",
42
+ "@eslint/js": "^9.30.1",
43
+ "@modelcontextprotocol/inspector": "^0.16.0",
44
+ "@redocly/cli": "^1.34.4",
45
+ "@types/express": "^5.0.1",
46
+ "@types/node": "^24.0.12",
47
+ "@types/proper-lockfile": "^4.1.4",
42
48
  "@types/simple-oauth2": "^5.0.7",
43
49
  "@types/yargs-parser": "^21.0.3",
44
- "eslint": "^9.24.0",
45
- "eslint-config-prettier": "^10.1.2",
46
- "eslint-plugin-jest": "^28.11.0",
47
- "eslint-plugin-prettier": "^5.2.6",
48
- "globals": "^16.0.0",
49
- "jest": "^29.7.0",
50
- "jest-environment-node": "^29.7.0",
51
- "jest-extended": "^6.0.0",
52
- "mongodb-runner": "^5.8.2",
50
+ "@vitest/coverage-v8": "^3.2.4",
51
+ "ai": "^4.3.17",
52
+ "eslint": "^9.30.1",
53
+ "eslint-config-prettier": "^10.1.5",
54
+ "eslint-plugin-prettier": "^5.5.1",
55
+ "globals": "^16.3.0",
56
+ "mongodb-runner": "^5.9.2",
57
+ "ollama-ai-provider": "^1.2.0",
53
58
  "openapi-types": "^12.1.3",
54
- "openapi-typescript": "^7.6.1",
55
- "prettier": "^3.5.3",
56
- "ts-jest": "^29.3.1",
57
- "tsx": "^4.19.3",
58
- "typescript": "^5.8.2",
59
- "typescript-eslint": "^8.29.1",
60
- "yaml": "^2.7.1"
59
+ "openapi-typescript": "^7.8.0",
60
+ "prettier": "^3.6.2",
61
+ "proper-lockfile": "^4.1.2",
62
+ "simple-git": "^3.28.0",
63
+ "tsx": "^4.20.3",
64
+ "typescript": "^5.8.3",
65
+ "typescript-eslint": "^8.36.0",
66
+ "vitest": "^3.2.4",
67
+ "uuid": "^11.1.0",
68
+ "yaml": "^2.8.0"
61
69
  },
62
70
  "dependencies": {
63
- "@modelcontextprotocol/sdk": "^1.11.2",
64
- "@mongodb-js/device-id": "^0.2.1",
65
- "@mongodb-js/devtools-connect": "^3.7.2",
66
- "@mongosh/service-provider-node-driver": "^3.6.0",
67
- "bson": "^6.10.3",
71
+ "@modelcontextprotocol/sdk": "^1.15.0",
72
+ "@mongodb-js/device-id": "^0.3.1",
73
+ "@mongodb-js/devtools-connect": "^3.9.2",
74
+ "@mongosh/service-provider-node-driver": "^3.10.2",
75
+ "@vitest/eslint-plugin": "^1.3.4",
76
+ "bson": "^6.10.4",
77
+ "express": "^5.1.0",
68
78
  "lru-cache": "^11.1.0",
69
- "mongodb": "^6.15.0",
79
+ "mongodb": "^6.17.0",
70
80
  "mongodb-connection-string-url": "^3.0.2",
71
81
  "mongodb-log-writer": "^2.4.1",
72
- "mongodb-redact": "^1.1.6",
82
+ "mongodb-redact": "^1.1.8",
73
83
  "mongodb-schema": "^12.6.2",
74
84
  "node-machine-id": "1.1.12",
75
85
  "openapi-fetch": "^0.14.0",
76
86
  "simple-oauth2": "^5.1.0",
77
87
  "yargs-parser": "^22.0.0",
78
- "zod": "^3.24.2"
88
+ "zod": "^3.25.76"
79
89
  },
80
90
  "engines": {
81
- "node": ">=20.10.0"
91
+ "node": "^20.19.0 || ^22.12.0 || >= 23.0.0"
82
92
  }
83
93
  }