@neverinfamous/mysql-mcp 2.1.0 → 2.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 (751) hide show
  1. package/.env.example +14 -4
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +7 -1
  3. package/.github/ISSUE_TEMPLATE/feature_request.md +6 -1
  4. package/.github/dependabot.yml +15 -0
  5. package/.github/pull_request_template.md +5 -0
  6. package/.github/workflows/codeql.yml +41 -42
  7. package/.github/workflows/docker-publish.yml +248 -210
  8. package/.github/workflows/publish-npm.yml +16 -6
  9. package/CHANGELOG.md +272 -22
  10. package/CODE_OF_CONDUCT.md +2 -0
  11. package/DOCKER_README.md +222 -156
  12. package/Dockerfile +2 -2
  13. package/README.md +210 -176
  14. package/SECURITY.md +0 -8
  15. package/VERSION +1 -1
  16. package/dist/__tests__/mocks/adapter.d.ts +3 -3
  17. package/dist/__tests__/mocks/adapter.d.ts.map +1 -1
  18. package/dist/__tests__/mocks/adapter.js +51 -35
  19. package/dist/__tests__/mocks/adapter.js.map +1 -1
  20. package/dist/__tests__/mocks/index.d.ts +4 -4
  21. package/dist/__tests__/mocks/index.d.ts.map +1 -1
  22. package/dist/__tests__/mocks/index.js +2 -2
  23. package/dist/__tests__/mocks/index.js.map +1 -1
  24. package/dist/__tests__/mocks/mysql.d.ts +2 -2
  25. package/dist/__tests__/mocks/mysql.d.ts.map +1 -1
  26. package/dist/__tests__/mocks/mysql.js +14 -14
  27. package/dist/__tests__/mocks/mysql.js.map +1 -1
  28. package/dist/__tests__/setup.d.ts.map +1 -1
  29. package/dist/__tests__/setup.js +7 -7
  30. package/dist/__tests__/setup.js.map +1 -1
  31. package/dist/adapters/DatabaseAdapter.d.ts +2 -2
  32. package/dist/adapters/DatabaseAdapter.d.ts.map +1 -1
  33. package/dist/adapters/DatabaseAdapter.js +69 -40
  34. package/dist/adapters/DatabaseAdapter.js.map +1 -1
  35. package/dist/adapters/mysql/MySQLAdapter.d.ts +10 -4
  36. package/dist/adapters/mysql/MySQLAdapter.d.ts.map +1 -1
  37. package/dist/adapters/mysql/MySQLAdapter.js +143 -116
  38. package/dist/adapters/mysql/MySQLAdapter.js.map +1 -1
  39. package/dist/adapters/mysql/SchemaManager.d.ts +1 -1
  40. package/dist/adapters/mysql/SchemaManager.d.ts.map +1 -1
  41. package/dist/adapters/mysql/SchemaManager.js +76 -56
  42. package/dist/adapters/mysql/SchemaManager.js.map +1 -1
  43. package/dist/adapters/mysql/index.d.ts +2 -2
  44. package/dist/adapters/mysql/index.js +2 -2
  45. package/dist/adapters/mysql/prompts/backupStrategy.d.ts +1 -1
  46. package/dist/adapters/mysql/prompts/backupStrategy.d.ts.map +1 -1
  47. package/dist/adapters/mysql/prompts/backupStrategy.js +21 -9
  48. package/dist/adapters/mysql/prompts/backupStrategy.js.map +1 -1
  49. package/dist/adapters/mysql/prompts/clusterSetup.d.ts +1 -1
  50. package/dist/adapters/mysql/prompts/clusterSetup.d.ts.map +1 -1
  51. package/dist/adapters/mysql/prompts/clusterSetup.js +3 -3
  52. package/dist/adapters/mysql/prompts/clusterSetup.js.map +1 -1
  53. package/dist/adapters/mysql/prompts/docstoreSetup.d.ts +1 -1
  54. package/dist/adapters/mysql/prompts/docstoreSetup.js +3 -3
  55. package/dist/adapters/mysql/prompts/docstoreSetup.js.map +1 -1
  56. package/dist/adapters/mysql/prompts/eventScheduler.d.ts +1 -1
  57. package/dist/adapters/mysql/prompts/eventScheduler.js +3 -3
  58. package/dist/adapters/mysql/prompts/eventScheduler.js.map +1 -1
  59. package/dist/adapters/mysql/prompts/healthCheck.d.ts +1 -1
  60. package/dist/adapters/mysql/prompts/healthCheck.d.ts.map +1 -1
  61. package/dist/adapters/mysql/prompts/healthCheck.js +10 -6
  62. package/dist/adapters/mysql/prompts/healthCheck.js.map +1 -1
  63. package/dist/adapters/mysql/prompts/index.d.ts +2 -2
  64. package/dist/adapters/mysql/prompts/index.d.ts.map +1 -1
  65. package/dist/adapters/mysql/prompts/index.js +98 -62
  66. package/dist/adapters/mysql/prompts/index.js.map +1 -1
  67. package/dist/adapters/mysql/prompts/indexTuning.d.ts +1 -1
  68. package/dist/adapters/mysql/prompts/indexTuning.d.ts.map +1 -1
  69. package/dist/adapters/mysql/prompts/indexTuning.js +11 -7
  70. package/dist/adapters/mysql/prompts/indexTuning.js.map +1 -1
  71. package/dist/adapters/mysql/prompts/mysqlshSetup.d.ts +1 -1
  72. package/dist/adapters/mysql/prompts/mysqlshSetup.js +4 -4
  73. package/dist/adapters/mysql/prompts/mysqlshSetup.js.map +1 -1
  74. package/dist/adapters/mysql/prompts/proxysqlSetup.d.ts +1 -1
  75. package/dist/adapters/mysql/prompts/proxysqlSetup.js +3 -3
  76. package/dist/adapters/mysql/prompts/proxysqlSetup.js.map +1 -1
  77. package/dist/adapters/mysql/prompts/replicationSetup.d.ts +1 -1
  78. package/dist/adapters/mysql/prompts/replicationSetup.d.ts.map +1 -1
  79. package/dist/adapters/mysql/prompts/replicationSetup.js +13 -7
  80. package/dist/adapters/mysql/prompts/replicationSetup.js.map +1 -1
  81. package/dist/adapters/mysql/prompts/routerSetup.d.ts +1 -1
  82. package/dist/adapters/mysql/prompts/routerSetup.js +3 -3
  83. package/dist/adapters/mysql/prompts/routerSetup.js.map +1 -1
  84. package/dist/adapters/mysql/prompts/spatialSetup.d.ts +1 -1
  85. package/dist/adapters/mysql/prompts/spatialSetup.js +3 -3
  86. package/dist/adapters/mysql/prompts/spatialSetup.js.map +1 -1
  87. package/dist/adapters/mysql/prompts/sysSchema.d.ts +1 -1
  88. package/dist/adapters/mysql/prompts/sysSchema.d.ts.map +1 -1
  89. package/dist/adapters/mysql/prompts/sysSchema.js +3 -3
  90. package/dist/adapters/mysql/prompts/sysSchema.js.map +1 -1
  91. package/dist/adapters/mysql/resources/capabilities.d.ts +2 -2
  92. package/dist/adapters/mysql/resources/capabilities.d.ts.map +1 -1
  93. package/dist/adapters/mysql/resources/capabilities.js +17 -15
  94. package/dist/adapters/mysql/resources/capabilities.js.map +1 -1
  95. package/dist/adapters/mysql/resources/cluster.d.ts +2 -2
  96. package/dist/adapters/mysql/resources/cluster.d.ts.map +1 -1
  97. package/dist/adapters/mysql/resources/cluster.js +17 -15
  98. package/dist/adapters/mysql/resources/cluster.js.map +1 -1
  99. package/dist/adapters/mysql/resources/docstore.d.ts +2 -2
  100. package/dist/adapters/mysql/resources/docstore.d.ts.map +1 -1
  101. package/dist/adapters/mysql/resources/docstore.js +12 -12
  102. package/dist/adapters/mysql/resources/docstore.js.map +1 -1
  103. package/dist/adapters/mysql/resources/events.d.ts +2 -2
  104. package/dist/adapters/mysql/resources/events.d.ts.map +1 -1
  105. package/dist/adapters/mysql/resources/events.js +12 -12
  106. package/dist/adapters/mysql/resources/events.js.map +1 -1
  107. package/dist/adapters/mysql/resources/health.d.ts +2 -2
  108. package/dist/adapters/mysql/resources/health.d.ts.map +1 -1
  109. package/dist/adapters/mysql/resources/health.js +36 -32
  110. package/dist/adapters/mysql/resources/health.js.map +1 -1
  111. package/dist/adapters/mysql/resources/index.d.ts +2 -2
  112. package/dist/adapters/mysql/resources/index.js +19 -19
  113. package/dist/adapters/mysql/resources/index.js.map +1 -1
  114. package/dist/adapters/mysql/resources/indexes.d.ts +2 -2
  115. package/dist/adapters/mysql/resources/indexes.d.ts.map +1 -1
  116. package/dist/adapters/mysql/resources/indexes.js +12 -12
  117. package/dist/adapters/mysql/resources/indexes.js.map +1 -1
  118. package/dist/adapters/mysql/resources/innodb.d.ts +2 -2
  119. package/dist/adapters/mysql/resources/innodb.d.ts.map +1 -1
  120. package/dist/adapters/mysql/resources/innodb.js +37 -36
  121. package/dist/adapters/mysql/resources/innodb.js.map +1 -1
  122. package/dist/adapters/mysql/resources/locks.d.ts +2 -2
  123. package/dist/adapters/mysql/resources/locks.d.ts.map +1 -1
  124. package/dist/adapters/mysql/resources/locks.js +14 -14
  125. package/dist/adapters/mysql/resources/locks.js.map +1 -1
  126. package/dist/adapters/mysql/resources/performance.d.ts +2 -2
  127. package/dist/adapters/mysql/resources/performance.d.ts.map +1 -1
  128. package/dist/adapters/mysql/resources/performance.js +30 -29
  129. package/dist/adapters/mysql/resources/performance.js.map +1 -1
  130. package/dist/adapters/mysql/resources/pool.d.ts +2 -2
  131. package/dist/adapters/mysql/resources/pool.d.ts.map +1 -1
  132. package/dist/adapters/mysql/resources/pool.js +9 -9
  133. package/dist/adapters/mysql/resources/pool.js.map +1 -1
  134. package/dist/adapters/mysql/resources/processlist.d.ts +2 -2
  135. package/dist/adapters/mysql/resources/processlist.d.ts.map +1 -1
  136. package/dist/adapters/mysql/resources/processlist.js +9 -9
  137. package/dist/adapters/mysql/resources/processlist.js.map +1 -1
  138. package/dist/adapters/mysql/resources/replication.d.ts +2 -2
  139. package/dist/adapters/mysql/resources/replication.d.ts.map +1 -1
  140. package/dist/adapters/mysql/resources/replication.js +42 -35
  141. package/dist/adapters/mysql/resources/replication.js.map +1 -1
  142. package/dist/adapters/mysql/resources/schema.d.ts +2 -2
  143. package/dist/adapters/mysql/resources/schema.d.ts.map +1 -1
  144. package/dist/adapters/mysql/resources/schema.js +8 -8
  145. package/dist/adapters/mysql/resources/schema.js.map +1 -1
  146. package/dist/adapters/mysql/resources/spatial.d.ts +2 -2
  147. package/dist/adapters/mysql/resources/spatial.d.ts.map +1 -1
  148. package/dist/adapters/mysql/resources/spatial.js +9 -9
  149. package/dist/adapters/mysql/resources/spatial.js.map +1 -1
  150. package/dist/adapters/mysql/resources/status.d.ts +2 -2
  151. package/dist/adapters/mysql/resources/status.d.ts.map +1 -1
  152. package/dist/adapters/mysql/resources/status.js +10 -10
  153. package/dist/adapters/mysql/resources/status.js.map +1 -1
  154. package/dist/adapters/mysql/resources/sysschema.d.ts +2 -2
  155. package/dist/adapters/mysql/resources/sysschema.d.ts.map +1 -1
  156. package/dist/adapters/mysql/resources/sysschema.js +10 -10
  157. package/dist/adapters/mysql/resources/sysschema.js.map +1 -1
  158. package/dist/adapters/mysql/resources/tables.d.ts +2 -2
  159. package/dist/adapters/mysql/resources/tables.d.ts.map +1 -1
  160. package/dist/adapters/mysql/resources/tables.js +8 -8
  161. package/dist/adapters/mysql/resources/tables.js.map +1 -1
  162. package/dist/adapters/mysql/resources/variables.d.ts +2 -2
  163. package/dist/adapters/mysql/resources/variables.d.ts.map +1 -1
  164. package/dist/adapters/mysql/resources/variables.js +10 -10
  165. package/dist/adapters/mysql/resources/variables.js.map +1 -1
  166. package/dist/adapters/mysql/tools/admin/backup.d.ts +2 -2
  167. package/dist/adapters/mysql/tools/admin/backup.d.ts.map +1 -1
  168. package/dist/adapters/mysql/tools/admin/backup.js +191 -99
  169. package/dist/adapters/mysql/tools/admin/backup.js.map +1 -1
  170. package/dist/adapters/mysql/tools/admin/index.d.ts +2 -2
  171. package/dist/adapters/mysql/tools/admin/index.js +6 -6
  172. package/dist/adapters/mysql/tools/admin/index.js.map +1 -1
  173. package/dist/adapters/mysql/tools/admin/maintenance.d.ts +2 -2
  174. package/dist/adapters/mysql/tools/admin/maintenance.d.ts.map +1 -1
  175. package/dist/adapters/mysql/tools/admin/maintenance.js +93 -62
  176. package/dist/adapters/mysql/tools/admin/maintenance.js.map +1 -1
  177. package/dist/adapters/mysql/tools/admin/monitoring.d.ts +2 -2
  178. package/dist/adapters/mysql/tools/admin/monitoring.d.ts.map +1 -1
  179. package/dist/adapters/mysql/tools/admin/monitoring.js +215 -79
  180. package/dist/adapters/mysql/tools/admin/monitoring.js.map +1 -1
  181. package/dist/adapters/mysql/tools/cluster/group-replication.d.ts +2 -2
  182. package/dist/adapters/mysql/tools/cluster/group-replication.d.ts.map +1 -1
  183. package/dist/adapters/mysql/tools/cluster/group-replication.js +90 -74
  184. package/dist/adapters/mysql/tools/cluster/group-replication.js.map +1 -1
  185. package/dist/adapters/mysql/tools/cluster/index.d.ts +2 -2
  186. package/dist/adapters/mysql/tools/cluster/index.js +3 -3
  187. package/dist/adapters/mysql/tools/cluster/index.js.map +1 -1
  188. package/dist/adapters/mysql/tools/cluster/innodb-cluster.d.ts +2 -2
  189. package/dist/adapters/mysql/tools/cluster/innodb-cluster.d.ts.map +1 -1
  190. package/dist/adapters/mysql/tools/cluster/innodb-cluster.js +204 -97
  191. package/dist/adapters/mysql/tools/cluster/innodb-cluster.js.map +1 -1
  192. package/dist/adapters/mysql/tools/core.d.ts +2 -2
  193. package/dist/adapters/mysql/tools/core.d.ts.map +1 -1
  194. package/dist/adapters/mysql/tools/core.js +205 -97
  195. package/dist/adapters/mysql/tools/core.js.map +1 -1
  196. package/dist/adapters/mysql/tools/docstore.d.ts +2 -2
  197. package/dist/adapters/mysql/tools/docstore.d.ts.map +1 -1
  198. package/dist/adapters/mysql/tools/docstore.js +252 -117
  199. package/dist/adapters/mysql/tools/docstore.js.map +1 -1
  200. package/dist/adapters/mysql/tools/events.d.ts +2 -2
  201. package/dist/adapters/mysql/tools/events.d.ts.map +1 -1
  202. package/dist/adapters/mysql/tools/events.js +219 -108
  203. package/dist/adapters/mysql/tools/events.js.map +1 -1
  204. package/dist/adapters/mysql/tools/index.d.ts +19 -19
  205. package/dist/adapters/mysql/tools/index.d.ts.map +1 -1
  206. package/dist/adapters/mysql/tools/index.js +19 -19
  207. package/dist/adapters/mysql/tools/index.js.map +1 -1
  208. package/dist/adapters/mysql/tools/json/core.d.ts +2 -2
  209. package/dist/adapters/mysql/tools/json/core.d.ts.map +1 -1
  210. package/dist/adapters/mysql/tools/json/core.js +221 -127
  211. package/dist/adapters/mysql/tools/json/core.js.map +1 -1
  212. package/dist/adapters/mysql/tools/json/enhanced.d.ts +2 -2
  213. package/dist/adapters/mysql/tools/json/enhanced.d.ts.map +1 -1
  214. package/dist/adapters/mysql/tools/json/enhanced.js +274 -163
  215. package/dist/adapters/mysql/tools/json/enhanced.js.map +1 -1
  216. package/dist/adapters/mysql/tools/json/helpers.d.ts +2 -2
  217. package/dist/adapters/mysql/tools/json/helpers.d.ts.map +1 -1
  218. package/dist/adapters/mysql/tools/json/helpers.js +134 -56
  219. package/dist/adapters/mysql/tools/json/helpers.js.map +1 -1
  220. package/dist/adapters/mysql/tools/json/index.d.ts +2 -2
  221. package/dist/adapters/mysql/tools/json/index.js +6 -6
  222. package/dist/adapters/mysql/tools/json/index.js.map +1 -1
  223. package/dist/adapters/mysql/tools/partitioning.d.ts +2 -2
  224. package/dist/adapters/mysql/tools/partitioning.js +143 -59
  225. package/dist/adapters/mysql/tools/partitioning.js.map +1 -1
  226. package/dist/adapters/mysql/tools/performance/analysis.d.ts +2 -2
  227. package/dist/adapters/mysql/tools/performance/analysis.d.ts.map +1 -1
  228. package/dist/adapters/mysql/tools/performance/analysis.js +122 -86
  229. package/dist/adapters/mysql/tools/performance/analysis.js.map +1 -1
  230. package/dist/adapters/mysql/tools/performance/index.d.ts +2 -2
  231. package/dist/adapters/mysql/tools/performance/index.js +4 -4
  232. package/dist/adapters/mysql/tools/performance/index.js.map +1 -1
  233. package/dist/adapters/mysql/tools/performance/optimization.d.ts +3 -3
  234. package/dist/adapters/mysql/tools/performance/optimization.d.ts.map +1 -1
  235. package/dist/adapters/mysql/tools/performance/optimization.js +195 -73
  236. package/dist/adapters/mysql/tools/performance/optimization.js.map +1 -1
  237. package/dist/adapters/mysql/tools/proxysql.d.ts +2 -2
  238. package/dist/adapters/mysql/tools/proxysql.d.ts.map +1 -1
  239. package/dist/adapters/mysql/tools/proxysql.js +213 -125
  240. package/dist/adapters/mysql/tools/proxysql.js.map +1 -1
  241. package/dist/adapters/mysql/tools/replication.d.ts +2 -2
  242. package/dist/adapters/mysql/tools/replication.d.ts.map +1 -1
  243. package/dist/adapters/mysql/tools/replication.js +117 -66
  244. package/dist/adapters/mysql/tools/replication.js.map +1 -1
  245. package/dist/adapters/mysql/tools/roles.d.ts +2 -2
  246. package/dist/adapters/mysql/tools/roles.d.ts.map +1 -1
  247. package/dist/adapters/mysql/tools/roles.js +276 -84
  248. package/dist/adapters/mysql/tools/roles.js.map +1 -1
  249. package/dist/adapters/mysql/tools/router.d.ts +2 -2
  250. package/dist/adapters/mysql/tools/router.d.ts.map +1 -1
  251. package/dist/adapters/mysql/tools/router.js +174 -109
  252. package/dist/adapters/mysql/tools/router.js.map +1 -1
  253. package/dist/adapters/mysql/tools/schema/constraints.d.ts +2 -2
  254. package/dist/adapters/mysql/tools/schema/constraints.d.ts.map +1 -1
  255. package/dist/adapters/mysql/tools/schema/constraints.js +24 -15
  256. package/dist/adapters/mysql/tools/schema/constraints.js.map +1 -1
  257. package/dist/adapters/mysql/tools/schema/index.d.ts +2 -2
  258. package/dist/adapters/mysql/tools/schema/index.d.ts.map +1 -1
  259. package/dist/adapters/mysql/tools/schema/index.js +7 -7
  260. package/dist/adapters/mysql/tools/schema/index.js.map +1 -1
  261. package/dist/adapters/mysql/tools/schema/management.d.ts +2 -2
  262. package/dist/adapters/mysql/tools/schema/management.d.ts.map +1 -1
  263. package/dist/adapters/mysql/tools/schema/management.js +99 -42
  264. package/dist/adapters/mysql/tools/schema/management.js.map +1 -1
  265. package/dist/adapters/mysql/tools/schema/routines.d.ts +2 -2
  266. package/dist/adapters/mysql/tools/schema/routines.d.ts.map +1 -1
  267. package/dist/adapters/mysql/tools/schema/routines.js +36 -19
  268. package/dist/adapters/mysql/tools/schema/routines.js.map +1 -1
  269. package/dist/adapters/mysql/tools/schema/scheduled_events.d.ts +2 -2
  270. package/dist/adapters/mysql/tools/schema/scheduled_events.d.ts.map +1 -1
  271. package/dist/adapters/mysql/tools/schema/scheduled_events.js +26 -13
  272. package/dist/adapters/mysql/tools/schema/scheduled_events.js.map +1 -1
  273. package/dist/adapters/mysql/tools/schema/triggers.d.ts +2 -2
  274. package/dist/adapters/mysql/tools/schema/triggers.d.ts.map +1 -1
  275. package/dist/adapters/mysql/tools/schema/triggers.js +24 -13
  276. package/dist/adapters/mysql/tools/schema/triggers.js.map +1 -1
  277. package/dist/adapters/mysql/tools/schema/views.d.ts +2 -2
  278. package/dist/adapters/mysql/tools/schema/views.d.ts.map +1 -1
  279. package/dist/adapters/mysql/tools/schema/views.js +59 -28
  280. package/dist/adapters/mysql/tools/schema/views.js.map +1 -1
  281. package/dist/adapters/mysql/tools/security/audit.d.ts +2 -2
  282. package/dist/adapters/mysql/tools/security/audit.d.ts.map +1 -1
  283. package/dist/adapters/mysql/tools/security/audit.js +61 -55
  284. package/dist/adapters/mysql/tools/security/audit.js.map +1 -1
  285. package/dist/adapters/mysql/tools/security/data-protection.d.ts +2 -2
  286. package/dist/adapters/mysql/tools/security/data-protection.d.ts.map +1 -1
  287. package/dist/adapters/mysql/tools/security/data-protection.js +188 -80
  288. package/dist/adapters/mysql/tools/security/data-protection.js.map +1 -1
  289. package/dist/adapters/mysql/tools/security/encryption.d.ts +2 -2
  290. package/dist/adapters/mysql/tools/security/encryption.d.ts.map +1 -1
  291. package/dist/adapters/mysql/tools/security/encryption.js +86 -67
  292. package/dist/adapters/mysql/tools/security/encryption.js.map +1 -1
  293. package/dist/adapters/mysql/tools/security/index.d.ts +2 -2
  294. package/dist/adapters/mysql/tools/security/index.js +4 -4
  295. package/dist/adapters/mysql/tools/security/index.js.map +1 -1
  296. package/dist/adapters/mysql/tools/shell/backup.d.ts +1 -1
  297. package/dist/adapters/mysql/tools/shell/backup.d.ts.map +1 -1
  298. package/dist/adapters/mysql/tools/shell/backup.js +122 -63
  299. package/dist/adapters/mysql/tools/shell/backup.js.map +1 -1
  300. package/dist/adapters/mysql/tools/shell/common.d.ts.map +1 -1
  301. package/dist/adapters/mysql/tools/shell/common.js +34 -36
  302. package/dist/adapters/mysql/tools/shell/common.js.map +1 -1
  303. package/dist/adapters/mysql/tools/shell/data-transfer.d.ts +1 -1
  304. package/dist/adapters/mysql/tools/shell/data-transfer.d.ts.map +1 -1
  305. package/dist/adapters/mysql/tools/shell/data-transfer.js +125 -69
  306. package/dist/adapters/mysql/tools/shell/data-transfer.js.map +1 -1
  307. package/dist/adapters/mysql/tools/shell/index.d.ts +2 -2
  308. package/dist/adapters/mysql/tools/shell/index.js +6 -6
  309. package/dist/adapters/mysql/tools/shell/index.js.map +1 -1
  310. package/dist/adapters/mysql/tools/shell/info.d.ts +1 -1
  311. package/dist/adapters/mysql/tools/shell/info.d.ts.map +1 -1
  312. package/dist/adapters/mysql/tools/shell/info.js +12 -12
  313. package/dist/adapters/mysql/tools/shell/info.js.map +1 -1
  314. package/dist/adapters/mysql/tools/shell/restore.d.ts +1 -1
  315. package/dist/adapters/mysql/tools/shell/restore.d.ts.map +1 -1
  316. package/dist/adapters/mysql/tools/shell/restore.js +77 -42
  317. package/dist/adapters/mysql/tools/shell/restore.js.map +1 -1
  318. package/dist/adapters/mysql/tools/shell/utilities.d.ts +1 -1
  319. package/dist/adapters/mysql/tools/shell/utilities.d.ts.map +1 -1
  320. package/dist/adapters/mysql/tools/shell/utilities.js +42 -18
  321. package/dist/adapters/mysql/tools/shell/utilities.js.map +1 -1
  322. package/dist/adapters/mysql/tools/spatial/geometry.d.ts +2 -2
  323. package/dist/adapters/mysql/tools/spatial/geometry.d.ts.map +1 -1
  324. package/dist/adapters/mysql/tools/spatial/geometry.js +85 -46
  325. package/dist/adapters/mysql/tools/spatial/geometry.js.map +1 -1
  326. package/dist/adapters/mysql/tools/spatial/index.d.ts +2 -2
  327. package/dist/adapters/mysql/tools/spatial/index.js +5 -5
  328. package/dist/adapters/mysql/tools/spatial/index.js.map +1 -1
  329. package/dist/adapters/mysql/tools/spatial/operations.d.ts +2 -2
  330. package/dist/adapters/mysql/tools/spatial/operations.d.ts.map +1 -1
  331. package/dist/adapters/mysql/tools/spatial/operations.js +167 -106
  332. package/dist/adapters/mysql/tools/spatial/operations.js.map +1 -1
  333. package/dist/adapters/mysql/tools/spatial/queries.d.ts +2 -2
  334. package/dist/adapters/mysql/tools/spatial/queries.d.ts.map +1 -1
  335. package/dist/adapters/mysql/tools/spatial/queries.js +144 -100
  336. package/dist/adapters/mysql/tools/spatial/queries.js.map +1 -1
  337. package/dist/adapters/mysql/tools/spatial/setup.d.ts +2 -2
  338. package/dist/adapters/mysql/tools/spatial/setup.d.ts.map +1 -1
  339. package/dist/adapters/mysql/tools/spatial/setup.js +104 -34
  340. package/dist/adapters/mysql/tools/spatial/setup.js.map +1 -1
  341. package/dist/adapters/mysql/tools/stats/comparative.d.ts +2 -2
  342. package/dist/adapters/mysql/tools/stats/comparative.d.ts.map +1 -1
  343. package/dist/adapters/mysql/tools/stats/comparative.js +159 -107
  344. package/dist/adapters/mysql/tools/stats/comparative.js.map +1 -1
  345. package/dist/adapters/mysql/tools/stats/descriptive.d.ts +2 -2
  346. package/dist/adapters/mysql/tools/stats/descriptive.d.ts.map +1 -1
  347. package/dist/adapters/mysql/tools/stats/descriptive.js +268 -205
  348. package/dist/adapters/mysql/tools/stats/descriptive.js.map +1 -1
  349. package/dist/adapters/mysql/tools/stats/index.d.ts +2 -2
  350. package/dist/adapters/mysql/tools/stats/index.js +3 -3
  351. package/dist/adapters/mysql/tools/stats/index.js.map +1 -1
  352. package/dist/adapters/mysql/tools/sysschema/activity.d.ts +2 -2
  353. package/dist/adapters/mysql/tools/sysschema/activity.d.ts.map +1 -1
  354. package/dist/adapters/mysql/tools/sysschema/activity.js +23 -23
  355. package/dist/adapters/mysql/tools/sysschema/activity.js.map +1 -1
  356. package/dist/adapters/mysql/tools/sysschema/index.d.ts +2 -2
  357. package/dist/adapters/mysql/tools/sysschema/index.js +4 -4
  358. package/dist/adapters/mysql/tools/sysschema/index.js.map +1 -1
  359. package/dist/adapters/mysql/tools/sysschema/performance.d.ts +2 -2
  360. package/dist/adapters/mysql/tools/sysschema/performance.d.ts.map +1 -1
  361. package/dist/adapters/mysql/tools/sysschema/performance.js +58 -43
  362. package/dist/adapters/mysql/tools/sysschema/performance.js.map +1 -1
  363. package/dist/adapters/mysql/tools/sysschema/resources.d.ts +2 -2
  364. package/dist/adapters/mysql/tools/sysschema/resources.d.ts.map +1 -1
  365. package/dist/adapters/mysql/tools/sysschema/resources.js +53 -33
  366. package/dist/adapters/mysql/tools/sysschema/resources.js.map +1 -1
  367. package/dist/adapters/mysql/tools/text/fulltext.d.ts +4 -3
  368. package/dist/adapters/mysql/tools/text/fulltext.d.ts.map +1 -1
  369. package/dist/adapters/mysql/tools/text/fulltext.js +211 -54
  370. package/dist/adapters/mysql/tools/text/fulltext.js.map +1 -1
  371. package/dist/adapters/mysql/tools/text/index.d.ts +3 -3
  372. package/dist/adapters/mysql/tools/text/index.d.ts.map +1 -1
  373. package/dist/adapters/mysql/tools/text/index.js +6 -5
  374. package/dist/adapters/mysql/tools/text/index.js.map +1 -1
  375. package/dist/adapters/mysql/tools/text/processing.d.ts +2 -2
  376. package/dist/adapters/mysql/tools/text/processing.d.ts.map +1 -1
  377. package/dist/adapters/mysql/tools/text/processing.js +191 -103
  378. package/dist/adapters/mysql/tools/text/processing.js.map +1 -1
  379. package/dist/adapters/mysql/tools/transactions.d.ts +2 -2
  380. package/dist/adapters/mysql/tools/transactions.js +156 -79
  381. package/dist/adapters/mysql/tools/transactions.js.map +1 -1
  382. package/dist/adapters/mysql/types/proxysql-types.d.ts +7 -2
  383. package/dist/adapters/mysql/types/proxysql-types.d.ts.map +1 -1
  384. package/dist/adapters/mysql/types/proxysql-types.js +52 -30
  385. package/dist/adapters/mysql/types/proxysql-types.js.map +1 -1
  386. package/dist/adapters/mysql/types/router-types.d.ts +1 -1
  387. package/dist/adapters/mysql/types/router-types.js +17 -17
  388. package/dist/adapters/mysql/types/router-types.js.map +1 -1
  389. package/dist/adapters/mysql/types/shell-types.d.ts +1 -2
  390. package/dist/adapters/mysql/types/shell-types.d.ts.map +1 -1
  391. package/dist/adapters/mysql/types/shell-types.js +255 -82
  392. package/dist/adapters/mysql/types/shell-types.js.map +1 -1
  393. package/dist/adapters/mysql/types.d.ts +8 -2
  394. package/dist/adapters/mysql/types.d.ts.map +1 -1
  395. package/dist/adapters/mysql/types.js +269 -128
  396. package/dist/adapters/mysql/types.js.map +1 -1
  397. package/dist/auth/AuthorizationServerDiscovery.d.ts +1 -1
  398. package/dist/auth/AuthorizationServerDiscovery.d.ts.map +1 -1
  399. package/dist/auth/AuthorizationServerDiscovery.js +16 -14
  400. package/dist/auth/AuthorizationServerDiscovery.js.map +1 -1
  401. package/dist/auth/OAuthResourceServer.d.ts +1 -1
  402. package/dist/auth/OAuthResourceServer.d.ts.map +1 -1
  403. package/dist/auth/OAuthResourceServer.js +4 -4
  404. package/dist/auth/OAuthResourceServer.js.map +1 -1
  405. package/dist/auth/TokenValidator.d.ts +1 -1
  406. package/dist/auth/TokenValidator.d.ts.map +1 -1
  407. package/dist/auth/TokenValidator.js +30 -20
  408. package/dist/auth/TokenValidator.js.map +1 -1
  409. package/dist/auth/errors.d.ts.map +1 -1
  410. package/dist/auth/errors.js +24 -24
  411. package/dist/auth/errors.js.map +1 -1
  412. package/dist/auth/index.d.ts +7 -7
  413. package/dist/auth/index.d.ts.map +1 -1
  414. package/dist/auth/index.js +6 -6
  415. package/dist/auth/index.js.map +1 -1
  416. package/dist/auth/middleware.d.ts +2 -2
  417. package/dist/auth/middleware.d.ts.map +1 -1
  418. package/dist/auth/middleware.js +28 -24
  419. package/dist/auth/middleware.js.map +1 -1
  420. package/dist/auth/scopes.d.ts +2 -2
  421. package/dist/auth/scopes.d.ts.map +1 -1
  422. package/dist/auth/scopes.js +22 -16
  423. package/dist/auth/scopes.js.map +1 -1
  424. package/dist/auth/types.d.ts +2 -2
  425. package/dist/auth/types.d.ts.map +1 -1
  426. package/dist/cli/args.d.ts +1 -1
  427. package/dist/cli/args.d.ts.map +1 -1
  428. package/dist/cli/args.js +70 -68
  429. package/dist/cli/args.js.map +1 -1
  430. package/dist/cli.d.ts +1 -1
  431. package/dist/cli.d.ts.map +1 -1
  432. package/dist/cli.js +44 -34
  433. package/dist/cli.js.map +1 -1
  434. package/dist/constants/ServerInstructions.d.ts +2 -2
  435. package/dist/constants/ServerInstructions.d.ts.map +1 -1
  436. package/dist/constants/ServerInstructions.js +228 -36
  437. package/dist/constants/ServerInstructions.js.map +1 -1
  438. package/dist/filtering/ToolConstants.d.ts +6 -6
  439. package/dist/filtering/ToolConstants.d.ts.map +1 -1
  440. package/dist/filtering/ToolConstants.js +229 -208
  441. package/dist/filtering/ToolConstants.js.map +1 -1
  442. package/dist/filtering/ToolFilter.d.ts +2 -2
  443. package/dist/filtering/ToolFilter.d.ts.map +1 -1
  444. package/dist/filtering/ToolFilter.js +35 -36
  445. package/dist/filtering/ToolFilter.js.map +1 -1
  446. package/dist/index.d.ts +9 -9
  447. package/dist/index.d.ts.map +1 -1
  448. package/dist/index.js +7 -7
  449. package/dist/index.js.map +1 -1
  450. package/dist/logging/McpLogging.d.ts +2 -2
  451. package/dist/logging/McpLogging.d.ts.map +1 -1
  452. package/dist/logging/McpLogging.js +16 -13
  453. package/dist/logging/McpLogging.js.map +1 -1
  454. package/dist/logging/index.d.ts +1 -1
  455. package/dist/logging/index.js +1 -1
  456. package/dist/pool/ConnectionPool.d.ts +3 -3
  457. package/dist/pool/ConnectionPool.d.ts.map +1 -1
  458. package/dist/pool/ConnectionPool.js +30 -26
  459. package/dist/pool/ConnectionPool.js.map +1 -1
  460. package/dist/progress/ProgressReporter.d.ts +1 -1
  461. package/dist/progress/ProgressReporter.d.ts.map +1 -1
  462. package/dist/progress/ProgressReporter.js +5 -5
  463. package/dist/progress/ProgressReporter.js.map +1 -1
  464. package/dist/progress/index.d.ts +1 -1
  465. package/dist/progress/index.d.ts.map +1 -1
  466. package/dist/progress/index.js +1 -1
  467. package/dist/progress/index.js.map +1 -1
  468. package/dist/server/McpServer.d.ts +3 -3
  469. package/dist/server/McpServer.d.ts.map +1 -1
  470. package/dist/server/McpServer.js +58 -53
  471. package/dist/server/McpServer.js.map +1 -1
  472. package/dist/transports/http.d.ts +3 -3
  473. package/dist/transports/http.d.ts.map +1 -1
  474. package/dist/transports/http.js +36 -33
  475. package/dist/transports/http.js.map +1 -1
  476. package/dist/transports/index.d.ts +1 -1
  477. package/dist/transports/index.d.ts.map +1 -1
  478. package/dist/transports/index.js +1 -1
  479. package/dist/transports/index.js.map +1 -1
  480. package/dist/types/index.d.ts +6 -6
  481. package/dist/types/index.d.ts.map +1 -1
  482. package/dist/types/index.js +1 -1
  483. package/dist/types/index.js.map +1 -1
  484. package/dist/types/modules/database.d.ts +1 -1
  485. package/dist/types/modules/database.d.ts.map +1 -1
  486. package/dist/types/modules/errors.d.ts.map +1 -1
  487. package/dist/types/modules/errors.js +15 -15
  488. package/dist/types/modules/errors.js.map +1 -1
  489. package/dist/types/modules/oauth.d.ts +1 -1
  490. package/dist/types/modules/oauth.d.ts.map +1 -1
  491. package/dist/types/modules/query.d.ts +8 -8
  492. package/dist/types/modules/query.d.ts.map +1 -1
  493. package/dist/types/modules/server.d.ts +3 -3
  494. package/dist/types/modules/server.d.ts.map +1 -1
  495. package/dist/types/modules/tools.d.ts +6 -6
  496. package/dist/types/modules/tools.d.ts.map +1 -1
  497. package/dist/utils/logger.d.ts +2 -2
  498. package/dist/utils/logger.d.ts.map +1 -1
  499. package/dist/utils/logger.js +58 -55
  500. package/dist/utils/logger.js.map +1 -1
  501. package/dist/utils/promptGenerator.d.ts +1 -1
  502. package/dist/utils/promptGenerator.d.ts.map +1 -1
  503. package/dist/utils/promptGenerator.js +24 -16
  504. package/dist/utils/promptGenerator.js.map +1 -1
  505. package/dist/utils/validators.d.ts +21 -2
  506. package/dist/utils/validators.d.ts.map +1 -1
  507. package/dist/utils/validators.js +101 -13
  508. package/dist/utils/validators.js.map +1 -1
  509. package/eslint.config.js +117 -81
  510. package/package.json +61 -64
  511. package/releases/release-notes.md +32 -26
  512. package/releases/v2.0.0-release-notes.md +99 -51
  513. package/releases/v2.1.0-release-notes.md +14 -5
  514. package/releases/v2.2.0-release-notes.md +239 -0
  515. package/server.json +1 -1
  516. package/src/__tests__/cli.test.ts +302 -247
  517. package/src/__tests__/index.test.ts +21 -21
  518. package/src/__tests__/mocks/adapter.ts +204 -163
  519. package/src/__tests__/mocks/index.ts +30 -23
  520. package/src/__tests__/mocks/mysql.ts +94 -84
  521. package/src/__tests__/perf.test.ts +207 -203
  522. package/src/__tests__/performance.test.ts +173 -164
  523. package/src/__tests__/setup.ts +26 -21
  524. package/src/adapters/DatabaseAdapter.ts +386 -340
  525. package/src/adapters/__tests__/DatabaseAdapter.test.ts +455 -377
  526. package/src/adapters/mysql/MySQLAdapter.ts +550 -486
  527. package/src/adapters/mysql/SchemaManager.ts +251 -208
  528. package/src/adapters/mysql/__tests__/MySQLAdapter.integration.test.ts +150 -147
  529. package/src/adapters/mysql/__tests__/MySQLAdapter.test.ts +590 -477
  530. package/src/adapters/mysql/__tests__/SchemaManager.test.ts +196 -154
  531. package/src/adapters/mysql/index.ts +2 -2
  532. package/src/adapters/mysql/prompts/__tests__/indexTuning.test.ts +33 -26
  533. package/src/adapters/mysql/prompts/__tests__/prompts.test.ts +277 -239
  534. package/src/adapters/mysql/prompts/backupStrategy.ts +29 -17
  535. package/src/adapters/mysql/prompts/clusterSetup.ts +11 -10
  536. package/src/adapters/mysql/prompts/docstoreSetup.ts +10 -10
  537. package/src/adapters/mysql/prompts/eventScheduler.ts +10 -10
  538. package/src/adapters/mysql/prompts/healthCheck.ts +20 -15
  539. package/src/adapters/mysql/prompts/index.ts +194 -144
  540. package/src/adapters/mysql/prompts/indexTuning.ts +22 -17
  541. package/src/adapters/mysql/prompts/mysqlshSetup.ts +11 -11
  542. package/src/adapters/mysql/prompts/proxysqlSetup.ts +10 -10
  543. package/src/adapters/mysql/prompts/replicationSetup.ts +24 -16
  544. package/src/adapters/mysql/prompts/routerSetup.ts +10 -10
  545. package/src/adapters/mysql/prompts/spatialSetup.ts +10 -10
  546. package/src/adapters/mysql/prompts/sysSchema.ts +11 -10
  547. package/src/adapters/mysql/resources/__tests__/capabilities.test.ts +69 -47
  548. package/src/adapters/mysql/resources/__tests__/cluster.test.ts +163 -104
  549. package/src/adapters/mysql/resources/__tests__/docstore.test.ts +88 -81
  550. package/src/adapters/mysql/resources/__tests__/events.test.ts +94 -83
  551. package/src/adapters/mysql/resources/__tests__/health.test.ts +131 -91
  552. package/src/adapters/mysql/resources/__tests__/indexes.test.ts +125 -102
  553. package/src/adapters/mysql/resources/__tests__/innodb.test.ts +86 -62
  554. package/src/adapters/mysql/resources/__tests__/locks.test.ts +142 -104
  555. package/src/adapters/mysql/resources/__tests__/performance.test.ts +81 -58
  556. package/src/adapters/mysql/resources/__tests__/pool.test.ts +45 -40
  557. package/src/adapters/mysql/resources/__tests__/processlist.test.ts +39 -23
  558. package/src/adapters/mysql/resources/__tests__/replication.test.ts +265 -211
  559. package/src/adapters/mysql/resources/__tests__/resources.test.ts +121 -109
  560. package/src/adapters/mysql/resources/__tests__/schema.test.ts +29 -23
  561. package/src/adapters/mysql/resources/__tests__/spatial.test.ts +58 -45
  562. package/src/adapters/mysql/resources/__tests__/status.test.ts +62 -45
  563. package/src/adapters/mysql/resources/__tests__/sysschema.test.ts +99 -60
  564. package/src/adapters/mysql/resources/__tests__/tables.test.ts +41 -32
  565. package/src/adapters/mysql/resources/__tests__/variables.test.ts +77 -49
  566. package/src/adapters/mysql/resources/capabilities.ts +59 -42
  567. package/src/adapters/mysql/resources/cluster.ts +58 -49
  568. package/src/adapters/mysql/resources/docstore.ts +46 -41
  569. package/src/adapters/mysql/resources/events.ts +37 -31
  570. package/src/adapters/mysql/resources/health.ts +98 -74
  571. package/src/adapters/mysql/resources/index.ts +46 -46
  572. package/src/adapters/mysql/resources/indexes.ts +66 -51
  573. package/src/adapters/mysql/resources/innodb.ts +98 -81
  574. package/src/adapters/mysql/resources/locks.ts +43 -40
  575. package/src/adapters/mysql/resources/performance.ts +80 -67
  576. package/src/adapters/mysql/resources/pool.ts +23 -20
  577. package/src/adapters/mysql/resources/processlist.ts +23 -18
  578. package/src/adapters/mysql/resources/replication.ts +124 -105
  579. package/src/adapters/mysql/resources/schema.ts +23 -18
  580. package/src/adapters/mysql/resources/spatial.ts +31 -26
  581. package/src/adapters/mysql/resources/status.ts +27 -22
  582. package/src/adapters/mysql/resources/sysschema.ts +41 -36
  583. package/src/adapters/mysql/resources/tables.ts +23 -18
  584. package/src/adapters/mysql/resources/variables.ts +27 -22
  585. package/src/adapters/mysql/tools/__tests__/cluster.test.ts +419 -311
  586. package/src/adapters/mysql/tools/__tests__/core.test.ts +633 -382
  587. package/src/adapters/mysql/tools/__tests__/docstore.test.ts +782 -413
  588. package/src/adapters/mysql/tools/__tests__/events.test.ts +752 -486
  589. package/src/adapters/mysql/tools/__tests__/json_core.test.ts +326 -259
  590. package/src/adapters/mysql/tools/__tests__/json_enhanced.test.ts +452 -352
  591. package/src/adapters/mysql/tools/__tests__/json_helpers.test.ts +169 -136
  592. package/src/adapters/mysql/tools/__tests__/proxysql.test.ts +576 -340
  593. package/src/adapters/mysql/tools/__tests__/replication.test.ts +697 -393
  594. package/src/adapters/mysql/tools/__tests__/roles.test.ts +423 -166
  595. package/src/adapters/mysql/tools/__tests__/router.test.ts +644 -540
  596. package/src/adapters/mysql/tools/__tests__/security.test.ts +708 -422
  597. package/src/adapters/mysql/tools/__tests__/security_injection.test.ts +246 -173
  598. package/src/adapters/mysql/tools/__tests__/security_integration.test.ts +244 -205
  599. package/src/adapters/mysql/tools/__tests__/spatial.test.ts +413 -300
  600. package/src/adapters/mysql/tools/__tests__/spatial_handler.test.ts +503 -150
  601. package/src/adapters/mysql/tools/__tests__/stats.test.ts +861 -553
  602. package/src/adapters/mysql/tools/__tests__/transactions.test.ts +454 -263
  603. package/src/adapters/mysql/tools/admin/__tests__/backup.test.ts +612 -372
  604. package/src/adapters/mysql/tools/admin/__tests__/maintenance.test.ts +550 -257
  605. package/src/adapters/mysql/tools/admin/__tests__/monitoring.test.ts +549 -352
  606. package/src/adapters/mysql/tools/admin/backup.ts +334 -215
  607. package/src/adapters/mysql/tools/admin/index.ts +46 -46
  608. package/src/adapters/mysql/tools/admin/maintenance.ts +176 -130
  609. package/src/adapters/mysql/tools/admin/monitoring.ts +373 -199
  610. package/src/adapters/mysql/tools/cluster/__tests__/group-replication.test.ts +200 -186
  611. package/src/adapters/mysql/tools/cluster/__tests__/innodb-cluster.test.ts +364 -95
  612. package/src/adapters/mysql/tools/cluster/group-replication.ts +218 -183
  613. package/src/adapters/mysql/tools/cluster/index.ts +27 -27
  614. package/src/adapters/mysql/tools/cluster/innodb-cluster.ts +392 -251
  615. package/src/adapters/mysql/tools/core.ts +408 -285
  616. package/src/adapters/mysql/tools/docstore.ts +478 -276
  617. package/src/adapters/mysql/tools/events.ts +425 -285
  618. package/src/adapters/mysql/tools/index.ts +31 -20
  619. package/src/adapters/mysql/tools/json/__tests__/core.test.ts +456 -199
  620. package/src/adapters/mysql/tools/json/__tests__/enhanced.test.ts +554 -298
  621. package/src/adapters/mysql/tools/json/__tests__/helpers.test.ts +150 -74
  622. package/src/adapters/mysql/tools/json/__tests__/validation.test.ts +106 -72
  623. package/src/adapters/mysql/tools/json/core.ts +364 -263
  624. package/src/adapters/mysql/tools/json/enhanced.ts +368 -229
  625. package/src/adapters/mysql/tools/json/helpers.ts +195 -113
  626. package/src/adapters/mysql/tools/json/index.ts +46 -46
  627. package/src/adapters/mysql/tools/partitioning.ts +242 -140
  628. package/src/adapters/mysql/tools/performance/__tests__/analysis.test.ts +439 -247
  629. package/src/adapters/mysql/tools/performance/__tests__/optimization.test.ts +401 -179
  630. package/src/adapters/mysql/tools/performance/analysis.ts +263 -213
  631. package/src/adapters/mysql/tools/performance/index.ts +33 -33
  632. package/src/adapters/mysql/tools/performance/optimization.ts +407 -190
  633. package/src/adapters/mysql/tools/proxysql.ts +462 -320
  634. package/src/adapters/mysql/tools/replication.ts +233 -180
  635. package/src/adapters/mysql/tools/roles.ts +429 -171
  636. package/src/adapters/mysql/tools/router.ts +410 -292
  637. package/src/adapters/mysql/tools/schema/__tests__/constraints.test.ts +157 -82
  638. package/src/adapters/mysql/tools/schema/__tests__/management.test.ts +226 -101
  639. package/src/adapters/mysql/tools/schema/__tests__/routines.test.ts +80 -35
  640. package/src/adapters/mysql/tools/schema/__tests__/scheduled_events.test.ts +59 -40
  641. package/src/adapters/mysql/tools/schema/__tests__/triggers.test.ts +65 -40
  642. package/src/adapters/mysql/tools/schema/__tests__/views.test.ts +146 -77
  643. package/src/adapters/mysql/tools/schema/constraints.ts +61 -42
  644. package/src/adapters/mysql/tools/schema/index.ts +26 -35
  645. package/src/adapters/mysql/tools/schema/management.ts +167 -94
  646. package/src/adapters/mysql/tools/schema/routines.ts +79 -48
  647. package/src/adapters/mysql/tools/schema/scheduled_events.ts +53 -32
  648. package/src/adapters/mysql/tools/schema/triggers.ts +51 -33
  649. package/src/adapters/mysql/tools/schema/views.ts +96 -53
  650. package/src/adapters/mysql/tools/security/__tests__/audit.test.ts +216 -158
  651. package/src/adapters/mysql/tools/security/__tests__/data-protection.test.ts +154 -98
  652. package/src/adapters/mysql/tools/security/__tests__/encryption.test.ts +174 -138
  653. package/src/adapters/mysql/tools/security/audit.ts +213 -193
  654. package/src/adapters/mysql/tools/security/data-protection.ts +336 -198
  655. package/src/adapters/mysql/tools/security/encryption.ts +233 -193
  656. package/src/adapters/mysql/tools/security/index.ts +26 -26
  657. package/src/adapters/mysql/tools/shell/__tests__/backup.test.ts +443 -283
  658. package/src/adapters/mysql/tools/shell/__tests__/common.test.ts +138 -131
  659. package/src/adapters/mysql/tools/shell/__tests__/data-transfer.test.ts +516 -353
  660. package/src/adapters/mysql/tools/shell/__tests__/info.test.ts +65 -63
  661. package/src/adapters/mysql/tools/shell/__tests__/restore.test.ts +233 -174
  662. package/src/adapters/mysql/tools/shell/__tests__/utilities.test.ts +161 -143
  663. package/src/adapters/mysql/tools/shell/backup.ts +280 -188
  664. package/src/adapters/mysql/tools/shell/common.ts +173 -155
  665. package/src/adapters/mysql/tools/shell/data-transfer.ts +286 -200
  666. package/src/adapters/mysql/tools/shell/index.ts +29 -29
  667. package/src/adapters/mysql/tools/shell/info.ts +35 -31
  668. package/src/adapters/mysql/tools/shell/restore.ts +176 -124
  669. package/src/adapters/mysql/tools/shell/utilities.ts +86 -45
  670. package/src/adapters/mysql/tools/spatial/__tests__/geometry.test.ts +129 -89
  671. package/src/adapters/mysql/tools/spatial/__tests__/operations.test.ts +255 -148
  672. package/src/adapters/mysql/tools/spatial/__tests__/queries.test.ts +340 -245
  673. package/src/adapters/mysql/tools/spatial/geometry.ts +120 -74
  674. package/src/adapters/mysql/tools/spatial/index.ts +33 -33
  675. package/src/adapters/mysql/tools/spatial/operations.ts +243 -171
  676. package/src/adapters/mysql/tools/spatial/queries.ts +221 -165
  677. package/src/adapters/mysql/tools/spatial/setup.ts +157 -73
  678. package/src/adapters/mysql/tools/stats/__tests__/comparative.test.ts +188 -130
  679. package/src/adapters/mysql/tools/stats/comparative.ts +261 -187
  680. package/src/adapters/mysql/tools/stats/descriptive.ts +414 -322
  681. package/src/adapters/mysql/tools/stats/index.ts +23 -23
  682. package/src/adapters/mysql/tools/sysschema/__tests__/activity.test.ts +99 -71
  683. package/src/adapters/mysql/tools/sysschema/__tests__/io_summary_fix.test.ts +21 -18
  684. package/src/adapters/mysql/tools/sysschema/__tests__/performance.test.ts +149 -108
  685. package/src/adapters/mysql/tools/sysschema/__tests__/resources.test.ts +222 -104
  686. package/src/adapters/mysql/tools/sysschema/activity.ts +72 -64
  687. package/src/adapters/mysql/tools/sysschema/index.ts +24 -24
  688. package/src/adapters/mysql/tools/sysschema/performance.ts +140 -115
  689. package/src/adapters/mysql/tools/sysschema/resources.ts +135 -99
  690. package/src/adapters/mysql/tools/text/__tests__/fulltext.test.ts +526 -145
  691. package/src/adapters/mysql/tools/text/__tests__/processing.test.ts +452 -193
  692. package/src/adapters/mysql/tools/text/fulltext.ts +319 -123
  693. package/src/adapters/mysql/tools/text/index.ts +32 -30
  694. package/src/adapters/mysql/tools/text/processing.ts +310 -212
  695. package/src/adapters/mysql/tools/transactions.ts +284 -197
  696. package/src/adapters/mysql/types/__tests__/shell-types.test.ts +204 -202
  697. package/src/adapters/mysql/types/proxysql-types.ts +142 -109
  698. package/src/adapters/mysql/types/router-types.ts +36 -36
  699. package/src/adapters/mysql/types/shell-types.ts +280 -94
  700. package/src/adapters/mysql/types.ts +288 -131
  701. package/src/auth/AuthorizationServerDiscovery.ts +127 -113
  702. package/src/auth/OAuthResourceServer.ts +67 -62
  703. package/src/auth/TokenValidator.ts +136 -119
  704. package/src/auth/__tests__/AuthorizationServerDiscovery.test.ts +295 -274
  705. package/src/auth/__tests__/OAuthResourceServer.test.ts +180 -169
  706. package/src/auth/__tests__/TokenValidator.test.ts +297 -285
  707. package/src/auth/__tests__/errors.test.ts +180 -175
  708. package/src/auth/__tests__/middleware.test.ts +281 -247
  709. package/src/auth/__tests__/scopes.test.ts +136 -134
  710. package/src/auth/errors.ts +56 -56
  711. package/src/auth/index.ts +23 -17
  712. package/src/auth/middleware.ts +161 -139
  713. package/src/auth/scopes.ts +133 -107
  714. package/src/auth/types.ts +155 -155
  715. package/src/cli/__tests__/args.test.ts +241 -216
  716. package/src/cli/__tests__/main.test.ts +191 -158
  717. package/src/cli/args.ts +271 -258
  718. package/src/cli.ts +150 -127
  719. package/src/constants/ServerInstructions.ts +271 -70
  720. package/src/filtering/ToolConstants.ts +287 -266
  721. package/src/filtering/ToolFilter.ts +239 -220
  722. package/src/filtering/__tests__/ToolFilter.test.ts +442 -396
  723. package/src/index.ts +62 -57
  724. package/src/logging/McpLogging.ts +128 -119
  725. package/src/logging/__tests__/McpLogging.test.ts +223 -223
  726. package/src/logging/index.ts +2 -2
  727. package/src/pool/ConnectionPool.ts +260 -246
  728. package/src/pool/__tests__/ConnectionPool.test.ts +452 -418
  729. package/src/progress/ProgressReporter.ts +123 -123
  730. package/src/progress/__tests__/ProgressReporter.test.ts +235 -229
  731. package/src/progress/index.ts +6 -2
  732. package/src/server/McpServer.ts +305 -285
  733. package/src/server/__tests__/McpServer.test.ts +333 -291
  734. package/src/transports/__tests__/http.test.ts +658 -527
  735. package/src/transports/http.ts +237 -203
  736. package/src/transports/index.ts +6 -2
  737. package/src/types/__tests__/types.test.ts +197 -193
  738. package/src/types/index.ts +49 -37
  739. package/src/types/modules/database.ts +65 -63
  740. package/src/types/modules/errors.ts +41 -37
  741. package/src/types/modules/oauth.ts +46 -46
  742. package/src/types/modules/query.ts +75 -75
  743. package/src/types/modules/server.ts +18 -18
  744. package/src/types/modules/tools.ts +181 -178
  745. package/src/utils/__tests__/logger.test.ts +424 -414
  746. package/src/utils/__tests__/validators.test.ts +250 -165
  747. package/src/utils/logger.ts +343 -330
  748. package/src/utils/promptGenerator.ts +58 -47
  749. package/src/utils/validators.ts +217 -91
  750. package/tsconfig.json +41 -50
  751. package/vitest.config.ts +23 -23
@@ -1,441 +1,519 @@
1
1
  /**
2
2
  * mysql-mcp - DatabaseAdapter Unit Tests
3
- *
3
+ *
4
4
  * Tests for the abstract DatabaseAdapter base class methods.
5
5
  */
6
6
 
7
- import { describe, it, expect, vi, beforeEach } from 'vitest';
8
- import { DatabaseAdapter } from '../DatabaseAdapter.js';
9
- import type { DatabaseConfig, QueryResult, HealthStatus, SchemaInfo, TableInfo, AdapterCapabilities, ToolDefinition, ResourceDefinition, PromptDefinition, ToolGroup } from '../../types/index.js';
7
+ import { describe, it, expect, vi, beforeEach } from "vitest";
8
+ import { DatabaseAdapter } from "../DatabaseAdapter.js";
9
+ import type {
10
+ DatabaseConfig,
11
+ QueryResult,
12
+ HealthStatus,
13
+ SchemaInfo,
14
+ TableInfo,
15
+ AdapterCapabilities,
16
+ ToolDefinition,
17
+ ResourceDefinition,
18
+ PromptDefinition,
19
+ ToolGroup,
20
+ } from "../../types/index.js";
10
21
 
11
22
  // Create a concrete implementation for testing
12
23
  class TestAdapter extends DatabaseAdapter {
13
- readonly type = 'mysql' as const;
14
- readonly name = 'Test Adapter';
15
- readonly version = '1.0.0';
16
-
17
- private mockQueryResult: QueryResult = { rows: [], rowsAffected: 0 };
18
- private mockHealth: HealthStatus = { connected: true, latencyMs: 5 };
19
-
20
- async connect(_config: DatabaseConfig): Promise<void> {
21
- this.connected = true;
22
- }
23
-
24
- async disconnect(): Promise<void> {
25
- this.connected = false;
26
- }
27
-
28
- async getHealth(): Promise<HealthStatus> {
29
- return this.mockHealth;
30
- }
31
-
32
- async executeReadQuery(_sql: string, _params?: unknown[]): Promise<QueryResult> {
33
- return this.mockQueryResult;
34
- }
35
-
36
- async executeWriteQuery(_sql: string, _params?: unknown[]): Promise<QueryResult> {
37
- return this.mockQueryResult;
38
- }
39
-
40
- async executeQuery(_sql: string, _params?: unknown[]): Promise<QueryResult> {
41
- return this.mockQueryResult;
42
- }
43
-
44
- async getSchema(): Promise<SchemaInfo> {
45
- return { tables: [], views: [], indexes: [] };
46
- }
47
-
48
- async listTables(): Promise<TableInfo[]> {
49
- return [];
50
- }
51
-
52
- async describeTable(_tableName: string): Promise<TableInfo> {
53
- return { name: 'test', type: 'table', columns: [] };
54
- }
55
-
56
- async listSchemas(): Promise<string[]> {
57
- return ['test'];
58
- }
59
-
60
- getCapabilities(): AdapterCapabilities {
61
- return {
62
- json: true,
63
- fullTextSearch: true,
64
- vector: false,
65
- geospatial: true,
66
- transactions: true,
67
- preparedStatements: true,
68
- connectionPooling: true,
69
- partitioning: true,
70
- replication: true
71
- };
72
- }
24
+ readonly type = "mysql" as const;
25
+ readonly name = "Test Adapter";
26
+ readonly version = "1.0.0";
27
+
28
+ private mockQueryResult: QueryResult = { rows: [], rowsAffected: 0 };
29
+ private mockHealth: HealthStatus = { connected: true, latencyMs: 5 };
30
+
31
+ async connect(_config: DatabaseConfig): Promise<void> {
32
+ this.connected = true;
33
+ }
34
+
35
+ async disconnect(): Promise<void> {
36
+ this.connected = false;
37
+ }
38
+
39
+ async getHealth(): Promise<HealthStatus> {
40
+ return this.mockHealth;
41
+ }
42
+
43
+ async executeReadQuery(
44
+ _sql: string,
45
+ _params?: unknown[],
46
+ ): Promise<QueryResult> {
47
+ return this.mockQueryResult;
48
+ }
49
+
50
+ async executeWriteQuery(
51
+ _sql: string,
52
+ _params?: unknown[],
53
+ ): Promise<QueryResult> {
54
+ return this.mockQueryResult;
55
+ }
56
+
57
+ async executeQuery(_sql: string, _params?: unknown[]): Promise<QueryResult> {
58
+ return this.mockQueryResult;
59
+ }
60
+
61
+ async getSchema(): Promise<SchemaInfo> {
62
+ return { tables: [], views: [], indexes: [] };
63
+ }
64
+
65
+ async listTables(): Promise<TableInfo[]> {
66
+ return [];
67
+ }
68
+
69
+ async describeTable(_tableName: string): Promise<TableInfo> {
70
+ return { name: "test", type: "table", columns: [] };
71
+ }
72
+
73
+ async listSchemas(): Promise<string[]> {
74
+ return ["test"];
75
+ }
76
+
77
+ getCapabilities(): AdapterCapabilities {
78
+ return {
79
+ json: true,
80
+ fullTextSearch: true,
81
+ vector: false,
82
+ geospatial: true,
83
+ transactions: true,
84
+ preparedStatements: true,
85
+ connectionPooling: true,
86
+ partitioning: true,
87
+ replication: true,
88
+ };
89
+ }
90
+
91
+ getSupportedToolGroups(): ToolGroup[] {
92
+ return ["core", "transactions"];
93
+ }
94
+
95
+ getToolDefinitions(): ToolDefinition[] {
96
+ return [
97
+ {
98
+ name: "test_tool",
99
+ title: "Test Tool",
100
+ description: "A test tool",
101
+ group: "core",
102
+ inputSchema: {},
103
+ handler: async () => ({ result: "ok" }),
104
+ },
105
+ ];
106
+ }
107
+
108
+ getResourceDefinitions(): ResourceDefinition[] {
109
+ return [
110
+ {
111
+ uri: "mysql://test",
112
+ name: "Test Resource",
113
+ description: "A test resource",
114
+ handler: async () => ({ data: "test" }),
115
+ },
116
+ ];
117
+ }
118
+
119
+ getPromptDefinitions(): PromptDefinition[] {
120
+ return [
121
+ {
122
+ name: "test_prompt",
123
+ description: "A test prompt",
124
+ handler: async () => "Test prompt output",
125
+ },
126
+ ];
127
+ }
128
+
129
+ setQueryResult(result: QueryResult): void {
130
+ this.mockQueryResult = result;
131
+ }
132
+ }
73
133
 
74
- getSupportedToolGroups(): ToolGroup[] {
75
- return ['core', 'transactions'];
76
- }
134
+ describe("DatabaseAdapter", () => {
135
+ let adapter: TestAdapter;
77
136
 
78
- getToolDefinitions(): ToolDefinition[] {
79
- return [
80
- {
81
- name: 'test_tool',
82
- title: 'Test Tool',
83
- description: 'A test tool',
84
- group: 'core',
85
- inputSchema: {},
86
- handler: async () => ({ result: 'ok' })
87
- }
88
- ];
89
- }
90
-
91
- getResourceDefinitions(): ResourceDefinition[] {
92
- return [
93
- {
94
- uri: 'mysql://test',
95
- name: 'Test Resource',
96
- description: 'A test resource',
97
- handler: async () => ({ data: 'test' })
98
- }
99
- ];
100
- }
101
-
102
- getPromptDefinitions(): PromptDefinition[] {
103
- return [
104
- {
105
- name: 'test_prompt',
106
- description: 'A test prompt',
107
- handler: async () => 'Test prompt output'
108
- }
109
- ];
110
- }
111
-
112
- setQueryResult(result: QueryResult): void {
113
- this.mockQueryResult = result;
114
- }
115
- }
137
+ beforeEach(() => {
138
+ adapter = new TestAdapter();
139
+ });
116
140
 
117
- describe('DatabaseAdapter', () => {
118
- let adapter: TestAdapter;
141
+ describe("connection state", () => {
142
+ it("should start disconnected", () => {
143
+ expect(adapter.isConnected()).toBe(false);
144
+ });
119
145
 
120
- beforeEach(() => {
121
- adapter = new TestAdapter();
146
+ it("should be connected after connect()", async () => {
147
+ await adapter.connect({
148
+ type: "mysql",
149
+ host: "localhost",
150
+ port: 3306,
151
+ database: "test",
152
+ username: "root",
153
+ password: "",
154
+ });
155
+ expect(adapter.isConnected()).toBe(true);
122
156
  });
123
157
 
124
- describe('connection state', () => {
125
- it('should start disconnected', () => {
126
- expect(adapter.isConnected()).toBe(false);
127
- });
158
+ it("should be disconnected after disconnect()", async () => {
159
+ await adapter.connect({
160
+ type: "mysql",
161
+ host: "localhost",
162
+ port: 3306,
163
+ database: "test",
164
+ username: "root",
165
+ password: "",
166
+ });
167
+ await adapter.disconnect();
168
+ expect(adapter.isConnected()).toBe(false);
169
+ });
170
+ });
128
171
 
129
- it('should be connected after connect()', async () => {
130
- await adapter.connect({ type: 'mysql', host: 'localhost', port: 3306, database: 'test', username: 'root', password: '' });
131
- expect(adapter.isConnected()).toBe(true);
132
- });
172
+ describe("adapter info", () => {
173
+ it("should return correct type", () => {
174
+ expect(adapter.type).toBe("mysql");
175
+ });
133
176
 
134
- it('should be disconnected after disconnect()', async () => {
135
- await adapter.connect({ type: 'mysql', host: 'localhost', port: 3306, database: 'test', username: 'root', password: '' });
136
- await adapter.disconnect();
137
- expect(adapter.isConnected()).toBe(false);
138
- });
177
+ it("should return correct name", () => {
178
+ expect(adapter.name).toBe("Test Adapter");
139
179
  });
140
180
 
141
- describe('adapter info', () => {
142
- it('should return correct type', () => {
143
- expect(adapter.type).toBe('mysql');
144
- });
181
+ it("should return correct version", () => {
182
+ expect(adapter.version).toBe("1.0.0");
183
+ });
145
184
 
146
- it('should return correct name', () => {
147
- expect(adapter.name).toBe('Test Adapter');
148
- });
185
+ it("should return adapter info object", () => {
186
+ const info = adapter.getInfo();
187
+ expect(info["type"]).toBe("mysql");
188
+ expect(info["name"]).toBe("Test Adapter");
189
+ expect(info["version"]).toBe("1.0.0");
190
+ expect(info["connected"]).toBe(false);
191
+ });
192
+ });
193
+
194
+ describe("capabilities", () => {
195
+ it("should return capabilities", () => {
196
+ const caps = adapter.getCapabilities();
197
+ expect(caps.json).toBe(true);
198
+ expect(caps.fullTextSearch).toBe(true);
199
+ expect(caps.transactions).toBe(true);
200
+ });
149
201
 
150
- it('should return correct version', () => {
151
- expect(adapter.version).toBe('1.0.0');
152
- });
202
+ it("should return supported tool groups", () => {
203
+ const groups = adapter.getSupportedToolGroups();
204
+ expect(groups).toContain("core");
205
+ expect(groups).toContain("transactions");
206
+ });
207
+ });
153
208
 
154
- it('should return adapter info object', () => {
155
- const info = adapter.getInfo();
156
- expect(info['type']).toBe('mysql');
157
- expect(info['name']).toBe('Test Adapter');
158
- expect(info['version']).toBe('1.0.0');
159
- expect(info['connected']).toBe(false);
160
- });
209
+ describe("definitions", () => {
210
+ it("should return tool definitions", () => {
211
+ const tools = adapter.getToolDefinitions();
212
+ expect(tools.length).toBeGreaterThan(0);
213
+ expect(tools[0]?.name).toBe("test_tool");
161
214
  });
162
215
 
163
- describe('capabilities', () => {
164
- it('should return capabilities', () => {
165
- const caps = adapter.getCapabilities();
166
- expect(caps.json).toBe(true);
167
- expect(caps.fullTextSearch).toBe(true);
168
- expect(caps.transactions).toBe(true);
169
- });
216
+ it("should return resource definitions", () => {
217
+ const resources = adapter.getResourceDefinitions();
218
+ expect(resources.length).toBeGreaterThan(0);
219
+ expect(resources[0]?.uri).toBe("mysql://test");
220
+ });
170
221
 
171
- it('should return supported tool groups', () => {
172
- const groups = adapter.getSupportedToolGroups();
173
- expect(groups).toContain('core');
174
- expect(groups).toContain('transactions');
175
- });
222
+ it("should return prompt definitions", () => {
223
+ const prompts = adapter.getPromptDefinitions();
224
+ expect(prompts.length).toBeGreaterThan(0);
225
+ expect(prompts[0]?.name).toBe("test_prompt");
176
226
  });
227
+ });
177
228
 
178
- describe('definitions', () => {
179
- it('should return tool definitions', () => {
180
- const tools = adapter.getToolDefinitions();
181
- expect(tools.length).toBeGreaterThan(0);
182
- expect(tools[0]?.name).toBe('test_tool');
183
- });
229
+ describe("request context", () => {
230
+ it("should create context with default request id", () => {
231
+ const context = adapter.createContext();
232
+ expect(context.requestId).toBeTruthy();
233
+ });
184
234
 
185
- it('should return resource definitions', () => {
186
- const resources = adapter.getResourceDefinitions();
187
- expect(resources.length).toBeGreaterThan(0);
188
- expect(resources[0]?.uri).toBe('mysql://test');
189
- });
235
+ it("should create context with specified request id", () => {
236
+ const context = adapter.createContext("test-request-123");
237
+ expect(context.requestId).toBe("test-request-123");
238
+ });
239
+ });
190
240
 
191
- it('should return prompt definitions', () => {
192
- const prompts = adapter.getPromptDefinitions();
193
- expect(prompts.length).toBeGreaterThan(0);
194
- expect(prompts[0]?.name).toBe('test_prompt');
195
- });
241
+ describe("query validation", () => {
242
+ it("should allow SELECT queries in read-only mode", () => {
243
+ expect(() =>
244
+ adapter.validateQuery("SELECT * FROM users", true),
245
+ ).not.toThrow();
196
246
  });
197
247
 
198
- describe('request context', () => {
199
- it('should create context with default request id', () => {
200
- const context = adapter.createContext();
201
- expect(context.requestId).toBeTruthy();
202
- });
248
+ it("should reject INSERT in read-only mode", () => {
249
+ expect(() =>
250
+ adapter.validateQuery("INSERT INTO users VALUES (1)", true),
251
+ ).toThrow();
252
+ });
203
253
 
204
- it('should create context with specified request id', () => {
205
- const context = adapter.createContext('test-request-123');
206
- expect(context.requestId).toBe('test-request-123');
207
- });
254
+ it("should reject UPDATE in read-only mode", () => {
255
+ expect(() =>
256
+ adapter.validateQuery('UPDATE users SET name = "test"', true),
257
+ ).toThrow();
208
258
  });
209
259
 
210
- describe('query validation', () => {
211
- it('should allow SELECT queries in read-only mode', () => {
212
- expect(() => adapter.validateQuery('SELECT * FROM users', true)).not.toThrow();
213
- });
260
+ it("should reject DELETE in read-only mode", () => {
261
+ expect(() =>
262
+ adapter.validateQuery("DELETE FROM users WHERE id = 1", true),
263
+ ).toThrow();
264
+ });
214
265
 
215
- it('should reject INSERT in read-only mode', () => {
216
- expect(() => adapter.validateQuery('INSERT INTO users VALUES (1)', true)).toThrow();
217
- });
266
+ it("should reject DROP in read-only mode", () => {
267
+ expect(() => adapter.validateQuery("DROP TABLE users", true)).toThrow();
268
+ });
218
269
 
219
- it('should reject UPDATE in read-only mode', () => {
220
- expect(() => adapter.validateQuery('UPDATE users SET name = "test"', true)).toThrow();
221
- });
270
+ it("should allow write queries in non-read-only mode", () => {
271
+ expect(() =>
272
+ adapter.validateQuery("INSERT INTO users VALUES (1)", false),
273
+ ).not.toThrow();
274
+ });
222
275
 
223
- it('should reject DELETE in read-only mode', () => {
224
- expect(() => adapter.validateQuery('DELETE FROM users WHERE id = 1', true)).toThrow();
225
- });
276
+ it("should reject dangerous patterns", () => {
277
+ expect(() =>
278
+ adapter.validateQuery("SELECT * FROM users; DROP TABLE users", false),
279
+ ).toThrow();
280
+ });
226
281
 
227
- it('should reject DROP in read-only mode', () => {
228
- expect(() => adapter.validateQuery('DROP TABLE users', true)).toThrow();
229
- });
282
+ it("should reject CREATE in read-only mode", () => {
283
+ expect(() =>
284
+ adapter.validateQuery("CREATE TABLE test (id INT)", true),
285
+ ).toThrow();
286
+ });
230
287
 
231
- it('should allow write queries in non-read-only mode', () => {
232
- expect(() => adapter.validateQuery('INSERT INTO users VALUES (1)', false)).not.toThrow();
233
- });
288
+ it("should reject ALTER in read-only mode", () => {
289
+ expect(() =>
290
+ adapter.validateQuery(
291
+ "ALTER TABLE users ADD column email VARCHAR(255)",
292
+ true,
293
+ ),
294
+ ).toThrow();
295
+ });
234
296
 
235
- it('should reject dangerous patterns', () => {
236
- expect(() => adapter.validateQuery('SELECT * FROM users; DROP TABLE users', false)).toThrow();
237
- });
297
+ it("should reject TRUNCATE in read-only mode", () => {
298
+ expect(() =>
299
+ adapter.validateQuery("TRUNCATE TABLE users", true),
300
+ ).toThrow();
301
+ });
238
302
 
239
- it('should reject CREATE in read-only mode', () => {
240
- expect(() => adapter.validateQuery('CREATE TABLE test (id INT)', true)).toThrow();
241
- });
303
+ it("should reject REPLACE in read-only mode", () => {
304
+ expect(() =>
305
+ adapter.validateQuery('REPLACE INTO users VALUES (1, "test")', true),
306
+ ).toThrow();
307
+ });
242
308
 
243
- it('should reject ALTER in read-only mode', () => {
244
- expect(() => adapter.validateQuery('ALTER TABLE users ADD column email VARCHAR(255)', true)).toThrow();
245
- });
309
+ it("should reject GRANT in read-only mode", () => {
310
+ expect(() =>
311
+ adapter.validateQuery("GRANT SELECT ON users TO user1", true),
312
+ ).toThrow();
313
+ });
246
314
 
247
- it('should reject TRUNCATE in read-only mode', () => {
248
- expect(() => adapter.validateQuery('TRUNCATE TABLE users', true)).toThrow();
249
- });
315
+ it("should reject REVOKE in read-only mode", () => {
316
+ expect(() =>
317
+ adapter.validateQuery("REVOKE SELECT ON users FROM user1", true),
318
+ ).toThrow();
319
+ });
250
320
 
251
- it('should reject REPLACE in read-only mode', () => {
252
- expect(() => adapter.validateQuery('REPLACE INTO users VALUES (1, "test")', true)).toThrow();
253
- });
321
+ it("should reject empty query", () => {
322
+ expect(() => adapter.validateQuery("", true)).toThrow(
323
+ "Query must be a non-empty string",
324
+ );
325
+ });
254
326
 
255
- it('should reject GRANT in read-only mode', () => {
256
- expect(() => adapter.validateQuery('GRANT SELECT ON users TO user1', true)).toThrow();
257
- });
327
+ it("should reject non-string query", () => {
328
+ expect(() => adapter.validateQuery(null as never, true)).toThrow();
329
+ });
258
330
 
259
- it('should reject REVOKE in read-only mode', () => {
260
- expect(() => adapter.validateQuery('REVOKE SELECT ON users FROM user1', true)).toThrow();
261
- });
331
+ it("should reject SQL comment injection patterns", () => {
332
+ expect(() =>
333
+ adapter.validateQuery("SELECT * FROM users --", false),
334
+ ).toThrow();
335
+ });
262
336
 
263
- it('should reject empty query', () => {
264
- expect(() => adapter.validateQuery('', true)).toThrow('Query must be a non-empty string');
265
- });
337
+ it("should reject dangerous DELETE pattern", () => {
338
+ expect(() =>
339
+ adapter.validateQuery("SELECT 1; DELETE FROM users", false),
340
+ ).toThrow();
341
+ });
266
342
 
267
- it('should reject non-string query', () => {
268
- expect(() => adapter.validateQuery(null as never, true)).toThrow();
269
- });
343
+ it("should reject dangerous TRUNCATE pattern", () => {
344
+ expect(() =>
345
+ adapter.validateQuery("SELECT 1; TRUNCATE users", false),
346
+ ).toThrow();
347
+ });
270
348
 
271
- it('should reject SQL comment injection patterns', () => {
272
- expect(() => adapter.validateQuery('SELECT * FROM users --', false)).toThrow();
273
- });
349
+ it("should reject dangerous INSERT pattern", () => {
350
+ expect(() =>
351
+ adapter.validateQuery("SELECT 1; INSERT INTO logs VALUES (1)", false),
352
+ ).toThrow();
353
+ });
274
354
 
275
- it('should reject dangerous DELETE pattern', () => {
276
- expect(() => adapter.validateQuery('SELECT 1; DELETE FROM users', false)).toThrow();
277
- });
355
+ it("should reject dangerous UPDATE pattern", () => {
356
+ expect(() =>
357
+ adapter.validateQuery("SELECT 1; UPDATE users SET x=1", false),
358
+ ).toThrow();
359
+ });
360
+ });
278
361
 
279
- it('should reject dangerous TRUNCATE pattern', () => {
280
- expect(() => adapter.validateQuery('SELECT 1; TRUNCATE users', false)).toThrow();
281
- });
362
+ describe("MCP registration", () => {
363
+ let mockServer: {
364
+ registerTool: ReturnType<typeof vi.fn>;
365
+ registerResource: ReturnType<typeof vi.fn>;
366
+ registerPrompt: ReturnType<typeof vi.fn>;
367
+ };
282
368
 
283
- it('should reject dangerous INSERT pattern', () => {
284
- expect(() => adapter.validateQuery('SELECT 1; INSERT INTO logs VALUES (1)', false)).toThrow();
285
- });
369
+ beforeEach(() => {
370
+ mockServer = {
371
+ registerTool: vi.fn(),
372
+ registerResource: vi.fn(),
373
+ registerPrompt: vi.fn(),
374
+ };
375
+ });
286
376
 
287
- it('should reject dangerous UPDATE pattern', () => {
288
- expect(() => adapter.validateQuery('SELECT 1; UPDATE users SET x=1', false)).toThrow();
289
- });
377
+ describe("registerTools", () => {
378
+ it("should register enabled tools with server", () => {
379
+ const enabledTools = new Set(["test_tool"]);
380
+ adapter.registerTools(mockServer as never, enabledTools);
381
+ expect(mockServer.registerTool).toHaveBeenCalled();
382
+ });
383
+
384
+ it("should not register tools not in enabled set", () => {
385
+ const enabledTools = new Set(["other_tool"]);
386
+ adapter.registerTools(mockServer as never, enabledTools);
387
+ expect(mockServer.registerTool).not.toHaveBeenCalled();
388
+ });
389
+
390
+ it("should pass tool name and options to server", () => {
391
+ const enabledTools = new Set(["test_tool"]);
392
+ adapter.registerTools(mockServer as never, enabledTools);
393
+
394
+ expect(mockServer.registerTool).toHaveBeenCalledWith(
395
+ "test_tool",
396
+ expect.objectContaining({
397
+ description: "A test tool",
398
+ title: "Test Tool",
399
+ }),
400
+ expect.any(Function),
401
+ );
402
+ });
403
+ });
404
+
405
+ describe("registerResources", () => {
406
+ it("should register all resources with server", () => {
407
+ adapter.registerResources(mockServer as never);
408
+ expect(mockServer.registerResource).toHaveBeenCalled();
409
+ });
410
+
411
+ it("should pass resource name and uri to server", () => {
412
+ adapter.registerResources(mockServer as never);
413
+
414
+ expect(mockServer.registerResource).toHaveBeenCalledWith(
415
+ "Test Resource",
416
+ "mysql://test",
417
+ expect.anything(),
418
+ expect.any(Function),
419
+ );
420
+ });
290
421
  });
291
422
 
292
- describe('MCP registration', () => {
293
- let mockServer: {
294
- registerTool: ReturnType<typeof vi.fn>;
295
- registerResource: ReturnType<typeof vi.fn>;
296
- registerPrompt: ReturnType<typeof vi.fn>;
423
+ describe("registerPrompts", () => {
424
+ it("should register all prompts with server", () => {
425
+ adapter.registerPrompts(mockServer as never);
426
+ expect(mockServer.registerPrompt).toHaveBeenCalled();
427
+ });
428
+
429
+ it("should pass prompt name and description to server", () => {
430
+ adapter.registerPrompts(mockServer as never);
431
+
432
+ expect(mockServer.registerPrompt).toHaveBeenCalledWith(
433
+ "test_prompt",
434
+ expect.objectContaining({
435
+ description: "A test prompt",
436
+ }),
437
+ expect.any(Function),
438
+ );
439
+ });
440
+
441
+ it("should handle prompts with arguments", () => {
442
+ const promptWithArgs: PromptDefinition = {
443
+ name: "arg_prompt",
444
+ description: "desc",
445
+ arguments: [
446
+ { name: "required_arg", description: "req", required: true },
447
+ { name: "optional_arg", description: "opt", required: false },
448
+ ],
449
+ handler: async () => "result",
297
450
  };
298
451
 
299
- beforeEach(() => {
300
- mockServer = {
301
- registerTool: vi.fn(),
302
- registerResource: vi.fn(),
303
- registerPrompt: vi.fn()
304
- };
305
- });
452
+ vi.spyOn(adapter, "getPromptDefinitions").mockReturnValue([
453
+ promptWithArgs,
454
+ ]);
455
+ adapter.registerPrompts(mockServer as never);
456
+
457
+ expect(mockServer.registerPrompt).toHaveBeenCalledWith(
458
+ "arg_prompt",
459
+ expect.objectContaining({
460
+ description: "desc",
461
+ argsSchema: expect.objectContaining({
462
+ required_arg: expect.anything(),
463
+ optional_arg: expect.anything(),
464
+ }),
465
+ }),
466
+ expect.any(Function),
467
+ );
468
+ });
469
+ });
306
470
 
307
- describe('registerTools', () => {
308
- it('should register enabled tools with server', () => {
309
- const enabledTools = new Set(['test_tool']);
310
- adapter.registerTools(mockServer as never, enabledTools);
311
- expect(mockServer.registerTool).toHaveBeenCalled();
312
- });
313
-
314
- it('should not register tools not in enabled set', () => {
315
- const enabledTools = new Set(['other_tool']);
316
- adapter.registerTools(mockServer as never, enabledTools);
317
- expect(mockServer.registerTool).not.toHaveBeenCalled();
318
- });
319
-
320
- it('should pass tool name and options to server', () => {
321
- const enabledTools = new Set(['test_tool']);
322
- adapter.registerTools(mockServer as never, enabledTools);
323
-
324
- expect(mockServer.registerTool).toHaveBeenCalledWith(
325
- 'test_tool',
326
- expect.objectContaining({
327
- description: 'A test tool',
328
- title: 'Test Tool'
329
- }),
330
- expect.any(Function)
331
- );
332
- });
333
- });
471
+ describe("handler execution", () => {
472
+ it("should execute tool handler when called", async () => {
473
+ adapter.registerTools(mockServer as never, new Set(["test_tool"]));
474
+ // registerTool now takes 3 args: name, options, handler
475
+ const handler = mockServer.registerTool.mock.calls[0][2] as Function;
334
476
 
335
- describe('registerResources', () => {
336
- it('should register all resources with server', () => {
337
- adapter.registerResources(mockServer as never);
338
- expect(mockServer.registerResource).toHaveBeenCalled();
339
- });
340
-
341
- it('should pass resource name and uri to server', () => {
342
- adapter.registerResources(mockServer as never);
343
-
344
- expect(mockServer.registerResource).toHaveBeenCalledWith(
345
- 'Test Resource',
346
- 'mysql://test',
347
- expect.anything(),
348
- expect.any(Function)
349
- );
350
- });
477
+ const result = await handler({});
478
+ expect(result).toEqual({
479
+ content: [
480
+ { type: "text", text: JSON.stringify({ result: "ok" }, null, 2) },
481
+ ],
351
482
  });
483
+ });
352
484
 
485
+ it("should execute resource handler when called", async () => {
486
+ adapter.registerResources(mockServer as never);
487
+ const handler = mockServer.registerResource.mock
488
+ .calls[0][3] as Function;
353
489
 
354
- describe('registerPrompts', () => {
355
- it('should register all prompts with server', () => {
356
- adapter.registerPrompts(mockServer as never);
357
- expect(mockServer.registerPrompt).toHaveBeenCalled();
358
- });
359
-
360
- it('should pass prompt name and description to server', () => {
361
- adapter.registerPrompts(mockServer as never);
362
-
363
- expect(mockServer.registerPrompt).toHaveBeenCalledWith(
364
- 'test_prompt',
365
- expect.objectContaining({
366
- description: 'A test prompt'
367
- }),
368
- expect.any(Function)
369
- );
370
- });
371
-
372
- it('should handle prompts with arguments', () => {
373
- const promptWithArgs: PromptDefinition = {
374
- name: 'arg_prompt',
375
- description: 'desc',
376
- arguments: [
377
- { name: 'required_arg', description: 'req', required: true },
378
- { name: 'optional_arg', description: 'opt', required: false }
379
- ],
380
- handler: async () => 'result'
381
- };
382
-
383
- vi.spyOn(adapter, 'getPromptDefinitions').mockReturnValue([promptWithArgs]);
384
- adapter.registerPrompts(mockServer as never);
385
-
386
- expect(mockServer.registerPrompt).toHaveBeenCalledWith(
387
- 'arg_prompt',
388
- expect.objectContaining({
389
- description: 'desc',
390
- argsSchema: expect.objectContaining({
391
- required_arg: expect.anything(),
392
- optional_arg: expect.anything()
393
- })
394
- }),
395
- expect.any(Function)
396
- );
397
- });
398
- });
399
-
400
- describe('handler execution', () => {
401
- it('should execute tool handler when called', async () => {
402
- adapter.registerTools(mockServer as never, new Set(['test_tool']));
403
- // registerTool now takes 3 args: name, options, handler
404
- const handler = mockServer.registerTool.mock.calls[0][2] as Function;
405
-
406
- const result = await handler({});
407
- expect(result).toEqual({
408
- content: [{ type: 'text', text: JSON.stringify({ result: 'ok' }, null, 2) }]
409
- });
410
- });
411
-
412
- it('should execute resource handler when called', async () => {
413
- adapter.registerResources(mockServer as never);
414
- const handler = mockServer.registerResource.mock.calls[0][3] as Function;
415
-
416
- const result = await handler(new URL('mysql://test'));
417
- expect(result).toEqual({
418
- contents: [{
419
- uri: 'mysql://test',
420
- mimeType: 'application/json',
421
- text: JSON.stringify({ data: 'test' }, null, 2)
422
- }]
423
- });
424
- });
425
-
426
- it('should execute prompt handler when called', async () => {
427
- adapter.registerPrompts(mockServer as never);
428
- // registerPrompt takes 3 args: name, options, handler
429
- const handler = mockServer.registerPrompt.mock.calls[0][2] as Function;
430
-
431
- const result = await handler({});
432
- expect(result).toEqual({
433
- messages: [{
434
- role: 'user',
435
- content: { type: 'text', text: 'Test prompt output' }
436
- }]
437
- });
438
- });
490
+ const result = await handler(new URL("mysql://test"));
491
+ expect(result).toEqual({
492
+ contents: [
493
+ {
494
+ uri: "mysql://test",
495
+ mimeType: "application/json",
496
+ text: JSON.stringify({ data: "test" }, null, 2),
497
+ },
498
+ ],
499
+ });
500
+ });
501
+
502
+ it("should execute prompt handler when called", async () => {
503
+ adapter.registerPrompts(mockServer as never);
504
+ // registerPrompt takes 3 args: name, options, handler
505
+ const handler = mockServer.registerPrompt.mock.calls[0][2] as Function;
506
+
507
+ const result = await handler({});
508
+ expect(result).toEqual({
509
+ messages: [
510
+ {
511
+ role: "user",
512
+ content: { type: "text", text: "Test prompt output" },
513
+ },
514
+ ],
439
515
  });
516
+ });
440
517
  });
518
+ });
441
519
  });