@neverinfamous/mysql-mcp 2.1.0 → 2.3.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 (802) 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 +247 -210
  8. package/.github/workflows/publish-npm.yml +16 -6
  9. package/CHANGELOG.md +357 -22
  10. package/CODE_MODE.md +245 -0
  11. package/CODE_OF_CONDUCT.md +2 -0
  12. package/DOCKER_README.md +250 -161
  13. package/Dockerfile +2 -2
  14. package/README.md +239 -182
  15. package/SECURITY.md +0 -8
  16. package/VERSION +1 -1
  17. package/dist/__tests__/mocks/adapter.d.ts +3 -3
  18. package/dist/__tests__/mocks/adapter.d.ts.map +1 -1
  19. package/dist/__tests__/mocks/adapter.js +51 -35
  20. package/dist/__tests__/mocks/adapter.js.map +1 -1
  21. package/dist/__tests__/mocks/index.d.ts +4 -4
  22. package/dist/__tests__/mocks/index.d.ts.map +1 -1
  23. package/dist/__tests__/mocks/index.js +2 -2
  24. package/dist/__tests__/mocks/index.js.map +1 -1
  25. package/dist/__tests__/mocks/mysql.d.ts +2 -2
  26. package/dist/__tests__/mocks/mysql.d.ts.map +1 -1
  27. package/dist/__tests__/mocks/mysql.js +14 -14
  28. package/dist/__tests__/mocks/mysql.js.map +1 -1
  29. package/dist/__tests__/setup.d.ts.map +1 -1
  30. package/dist/__tests__/setup.js +7 -7
  31. package/dist/__tests__/setup.js.map +1 -1
  32. package/dist/adapters/DatabaseAdapter.d.ts +2 -2
  33. package/dist/adapters/DatabaseAdapter.d.ts.map +1 -1
  34. package/dist/adapters/DatabaseAdapter.js +69 -40
  35. package/dist/adapters/DatabaseAdapter.js.map +1 -1
  36. package/dist/adapters/mysql/MySQLAdapter.d.ts +14 -4
  37. package/dist/adapters/mysql/MySQLAdapter.d.ts.map +1 -1
  38. package/dist/adapters/mysql/MySQLAdapter.js +152 -116
  39. package/dist/adapters/mysql/MySQLAdapter.js.map +1 -1
  40. package/dist/adapters/mysql/SchemaManager.d.ts +1 -1
  41. package/dist/adapters/mysql/SchemaManager.d.ts.map +1 -1
  42. package/dist/adapters/mysql/SchemaManager.js +76 -56
  43. package/dist/adapters/mysql/SchemaManager.js.map +1 -1
  44. package/dist/adapters/mysql/index.d.ts +2 -2
  45. package/dist/adapters/mysql/index.js +2 -2
  46. package/dist/adapters/mysql/prompts/backupStrategy.d.ts +1 -1
  47. package/dist/adapters/mysql/prompts/backupStrategy.d.ts.map +1 -1
  48. package/dist/adapters/mysql/prompts/backupStrategy.js +21 -9
  49. package/dist/adapters/mysql/prompts/backupStrategy.js.map +1 -1
  50. package/dist/adapters/mysql/prompts/clusterSetup.d.ts +1 -1
  51. package/dist/adapters/mysql/prompts/clusterSetup.d.ts.map +1 -1
  52. package/dist/adapters/mysql/prompts/clusterSetup.js +3 -3
  53. package/dist/adapters/mysql/prompts/clusterSetup.js.map +1 -1
  54. package/dist/adapters/mysql/prompts/docstoreSetup.d.ts +1 -1
  55. package/dist/adapters/mysql/prompts/docstoreSetup.js +3 -3
  56. package/dist/adapters/mysql/prompts/docstoreSetup.js.map +1 -1
  57. package/dist/adapters/mysql/prompts/eventScheduler.d.ts +1 -1
  58. package/dist/adapters/mysql/prompts/eventScheduler.js +3 -3
  59. package/dist/adapters/mysql/prompts/eventScheduler.js.map +1 -1
  60. package/dist/adapters/mysql/prompts/healthCheck.d.ts +1 -1
  61. package/dist/adapters/mysql/prompts/healthCheck.d.ts.map +1 -1
  62. package/dist/adapters/mysql/prompts/healthCheck.js +10 -6
  63. package/dist/adapters/mysql/prompts/healthCheck.js.map +1 -1
  64. package/dist/adapters/mysql/prompts/index.d.ts +10 -3
  65. package/dist/adapters/mysql/prompts/index.d.ts.map +1 -1
  66. package/dist/adapters/mysql/prompts/index.js +106 -63
  67. package/dist/adapters/mysql/prompts/index.js.map +1 -1
  68. package/dist/adapters/mysql/prompts/indexTuning.d.ts +1 -1
  69. package/dist/adapters/mysql/prompts/indexTuning.d.ts.map +1 -1
  70. package/dist/adapters/mysql/prompts/indexTuning.js +11 -7
  71. package/dist/adapters/mysql/prompts/indexTuning.js.map +1 -1
  72. package/dist/adapters/mysql/prompts/mysqlshSetup.d.ts +1 -1
  73. package/dist/adapters/mysql/prompts/mysqlshSetup.js +4 -4
  74. package/dist/adapters/mysql/prompts/mysqlshSetup.js.map +1 -1
  75. package/dist/adapters/mysql/prompts/proxysqlSetup.d.ts +1 -1
  76. package/dist/adapters/mysql/prompts/proxysqlSetup.js +3 -3
  77. package/dist/adapters/mysql/prompts/proxysqlSetup.js.map +1 -1
  78. package/dist/adapters/mysql/prompts/replicationSetup.d.ts +1 -1
  79. package/dist/adapters/mysql/prompts/replicationSetup.d.ts.map +1 -1
  80. package/dist/adapters/mysql/prompts/replicationSetup.js +13 -7
  81. package/dist/adapters/mysql/prompts/replicationSetup.js.map +1 -1
  82. package/dist/adapters/mysql/prompts/routerSetup.d.ts +1 -1
  83. package/dist/adapters/mysql/prompts/routerSetup.d.ts.map +1 -1
  84. package/dist/adapters/mysql/prompts/routerSetup.js +8 -3
  85. package/dist/adapters/mysql/prompts/routerSetup.js.map +1 -1
  86. package/dist/adapters/mysql/prompts/spatialSetup.d.ts +1 -1
  87. package/dist/adapters/mysql/prompts/spatialSetup.js +3 -3
  88. package/dist/adapters/mysql/prompts/spatialSetup.js.map +1 -1
  89. package/dist/adapters/mysql/prompts/sysSchema.d.ts +1 -1
  90. package/dist/adapters/mysql/prompts/sysSchema.d.ts.map +1 -1
  91. package/dist/adapters/mysql/prompts/sysSchema.js +3 -3
  92. package/dist/adapters/mysql/prompts/sysSchema.js.map +1 -1
  93. package/dist/adapters/mysql/resources/capabilities.d.ts +2 -2
  94. package/dist/adapters/mysql/resources/capabilities.d.ts.map +1 -1
  95. package/dist/adapters/mysql/resources/capabilities.js +19 -16
  96. package/dist/adapters/mysql/resources/capabilities.js.map +1 -1
  97. package/dist/adapters/mysql/resources/cluster.d.ts +2 -2
  98. package/dist/adapters/mysql/resources/cluster.d.ts.map +1 -1
  99. package/dist/adapters/mysql/resources/cluster.js +17 -15
  100. package/dist/adapters/mysql/resources/cluster.js.map +1 -1
  101. package/dist/adapters/mysql/resources/docstore.d.ts +2 -2
  102. package/dist/adapters/mysql/resources/docstore.d.ts.map +1 -1
  103. package/dist/adapters/mysql/resources/docstore.js +12 -12
  104. package/dist/adapters/mysql/resources/docstore.js.map +1 -1
  105. package/dist/adapters/mysql/resources/events.d.ts +2 -2
  106. package/dist/adapters/mysql/resources/events.d.ts.map +1 -1
  107. package/dist/adapters/mysql/resources/events.js +12 -12
  108. package/dist/adapters/mysql/resources/events.js.map +1 -1
  109. package/dist/adapters/mysql/resources/health.d.ts +2 -2
  110. package/dist/adapters/mysql/resources/health.d.ts.map +1 -1
  111. package/dist/adapters/mysql/resources/health.js +36 -32
  112. package/dist/adapters/mysql/resources/health.js.map +1 -1
  113. package/dist/adapters/mysql/resources/index.d.ts +11 -3
  114. package/dist/adapters/mysql/resources/index.d.ts.map +1 -1
  115. package/dist/adapters/mysql/resources/index.js +28 -20
  116. package/dist/adapters/mysql/resources/index.js.map +1 -1
  117. package/dist/adapters/mysql/resources/indexes.d.ts +2 -2
  118. package/dist/adapters/mysql/resources/indexes.d.ts.map +1 -1
  119. package/dist/adapters/mysql/resources/indexes.js +12 -12
  120. package/dist/adapters/mysql/resources/indexes.js.map +1 -1
  121. package/dist/adapters/mysql/resources/innodb.d.ts +2 -2
  122. package/dist/adapters/mysql/resources/innodb.d.ts.map +1 -1
  123. package/dist/adapters/mysql/resources/innodb.js +37 -36
  124. package/dist/adapters/mysql/resources/innodb.js.map +1 -1
  125. package/dist/adapters/mysql/resources/locks.d.ts +2 -2
  126. package/dist/adapters/mysql/resources/locks.d.ts.map +1 -1
  127. package/dist/adapters/mysql/resources/locks.js +14 -14
  128. package/dist/adapters/mysql/resources/locks.js.map +1 -1
  129. package/dist/adapters/mysql/resources/performance.d.ts +2 -2
  130. package/dist/adapters/mysql/resources/performance.d.ts.map +1 -1
  131. package/dist/adapters/mysql/resources/performance.js +30 -29
  132. package/dist/adapters/mysql/resources/performance.js.map +1 -1
  133. package/dist/adapters/mysql/resources/pool.d.ts +2 -2
  134. package/dist/adapters/mysql/resources/pool.d.ts.map +1 -1
  135. package/dist/adapters/mysql/resources/pool.js +9 -9
  136. package/dist/adapters/mysql/resources/pool.js.map +1 -1
  137. package/dist/adapters/mysql/resources/processlist.d.ts +2 -2
  138. package/dist/adapters/mysql/resources/processlist.d.ts.map +1 -1
  139. package/dist/adapters/mysql/resources/processlist.js +9 -9
  140. package/dist/adapters/mysql/resources/processlist.js.map +1 -1
  141. package/dist/adapters/mysql/resources/replication.d.ts +2 -2
  142. package/dist/adapters/mysql/resources/replication.d.ts.map +1 -1
  143. package/dist/adapters/mysql/resources/replication.js +42 -35
  144. package/dist/adapters/mysql/resources/replication.js.map +1 -1
  145. package/dist/adapters/mysql/resources/schema.d.ts +2 -2
  146. package/dist/adapters/mysql/resources/schema.d.ts.map +1 -1
  147. package/dist/adapters/mysql/resources/schema.js +8 -8
  148. package/dist/adapters/mysql/resources/schema.js.map +1 -1
  149. package/dist/adapters/mysql/resources/spatial.d.ts +2 -2
  150. package/dist/adapters/mysql/resources/spatial.d.ts.map +1 -1
  151. package/dist/adapters/mysql/resources/spatial.js +9 -9
  152. package/dist/adapters/mysql/resources/spatial.js.map +1 -1
  153. package/dist/adapters/mysql/resources/status.d.ts +2 -2
  154. package/dist/adapters/mysql/resources/status.d.ts.map +1 -1
  155. package/dist/adapters/mysql/resources/status.js +10 -10
  156. package/dist/adapters/mysql/resources/status.js.map +1 -1
  157. package/dist/adapters/mysql/resources/sysschema.d.ts +2 -2
  158. package/dist/adapters/mysql/resources/sysschema.d.ts.map +1 -1
  159. package/dist/adapters/mysql/resources/sysschema.js +10 -10
  160. package/dist/adapters/mysql/resources/sysschema.js.map +1 -1
  161. package/dist/adapters/mysql/resources/tables.d.ts +2 -2
  162. package/dist/adapters/mysql/resources/tables.d.ts.map +1 -1
  163. package/dist/adapters/mysql/resources/tables.js +8 -8
  164. package/dist/adapters/mysql/resources/tables.js.map +1 -1
  165. package/dist/adapters/mysql/resources/variables.d.ts +2 -2
  166. package/dist/adapters/mysql/resources/variables.d.ts.map +1 -1
  167. package/dist/adapters/mysql/resources/variables.js +10 -10
  168. package/dist/adapters/mysql/resources/variables.js.map +1 -1
  169. package/dist/adapters/mysql/tools/admin/backup.d.ts +2 -2
  170. package/dist/adapters/mysql/tools/admin/backup.d.ts.map +1 -1
  171. package/dist/adapters/mysql/tools/admin/backup.js +193 -101
  172. package/dist/adapters/mysql/tools/admin/backup.js.map +1 -1
  173. package/dist/adapters/mysql/tools/admin/index.d.ts +2 -2
  174. package/dist/adapters/mysql/tools/admin/index.js +6 -6
  175. package/dist/adapters/mysql/tools/admin/index.js.map +1 -1
  176. package/dist/adapters/mysql/tools/admin/maintenance.d.ts +2 -2
  177. package/dist/adapters/mysql/tools/admin/maintenance.d.ts.map +1 -1
  178. package/dist/adapters/mysql/tools/admin/maintenance.js +97 -66
  179. package/dist/adapters/mysql/tools/admin/maintenance.js.map +1 -1
  180. package/dist/adapters/mysql/tools/admin/monitoring.d.ts +2 -2
  181. package/dist/adapters/mysql/tools/admin/monitoring.d.ts.map +1 -1
  182. package/dist/adapters/mysql/tools/admin/monitoring.js +215 -79
  183. package/dist/adapters/mysql/tools/admin/monitoring.js.map +1 -1
  184. package/dist/adapters/mysql/tools/cluster/group-replication.d.ts +2 -2
  185. package/dist/adapters/mysql/tools/cluster/group-replication.d.ts.map +1 -1
  186. package/dist/adapters/mysql/tools/cluster/group-replication.js +90 -74
  187. package/dist/adapters/mysql/tools/cluster/group-replication.js.map +1 -1
  188. package/dist/adapters/mysql/tools/cluster/index.d.ts +2 -2
  189. package/dist/adapters/mysql/tools/cluster/index.js +3 -3
  190. package/dist/adapters/mysql/tools/cluster/index.js.map +1 -1
  191. package/dist/adapters/mysql/tools/cluster/innodb-cluster.d.ts +2 -2
  192. package/dist/adapters/mysql/tools/cluster/innodb-cluster.d.ts.map +1 -1
  193. package/dist/adapters/mysql/tools/cluster/innodb-cluster.js +225 -97
  194. package/dist/adapters/mysql/tools/cluster/innodb-cluster.js.map +1 -1
  195. package/dist/adapters/mysql/tools/codemode/index.d.ts +38 -0
  196. package/dist/adapters/mysql/tools/codemode/index.d.ts.map +1 -0
  197. package/dist/adapters/mysql/tools/codemode/index.js +203 -0
  198. package/dist/adapters/mysql/tools/codemode/index.js.map +1 -0
  199. package/dist/adapters/mysql/tools/core.d.ts +2 -2
  200. package/dist/adapters/mysql/tools/core.d.ts.map +1 -1
  201. package/dist/adapters/mysql/tools/core.js +234 -114
  202. package/dist/adapters/mysql/tools/core.js.map +1 -1
  203. package/dist/adapters/mysql/tools/docstore.d.ts +2 -2
  204. package/dist/adapters/mysql/tools/docstore.d.ts.map +1 -1
  205. package/dist/adapters/mysql/tools/docstore.js +252 -117
  206. package/dist/adapters/mysql/tools/docstore.js.map +1 -1
  207. package/dist/adapters/mysql/tools/events.d.ts +2 -2
  208. package/dist/adapters/mysql/tools/events.d.ts.map +1 -1
  209. package/dist/adapters/mysql/tools/events.js +236 -113
  210. package/dist/adapters/mysql/tools/events.js.map +1 -1
  211. package/dist/adapters/mysql/tools/index.d.ts +19 -19
  212. package/dist/adapters/mysql/tools/index.d.ts.map +1 -1
  213. package/dist/adapters/mysql/tools/index.js +19 -19
  214. package/dist/adapters/mysql/tools/index.js.map +1 -1
  215. package/dist/adapters/mysql/tools/json/core.d.ts +2 -2
  216. package/dist/adapters/mysql/tools/json/core.d.ts.map +1 -1
  217. package/dist/adapters/mysql/tools/json/core.js +225 -131
  218. package/dist/adapters/mysql/tools/json/core.js.map +1 -1
  219. package/dist/adapters/mysql/tools/json/enhanced.d.ts +2 -2
  220. package/dist/adapters/mysql/tools/json/enhanced.d.ts.map +1 -1
  221. package/dist/adapters/mysql/tools/json/enhanced.js +274 -163
  222. package/dist/adapters/mysql/tools/json/enhanced.js.map +1 -1
  223. package/dist/adapters/mysql/tools/json/helpers.d.ts +2 -2
  224. package/dist/adapters/mysql/tools/json/helpers.d.ts.map +1 -1
  225. package/dist/adapters/mysql/tools/json/helpers.js +141 -57
  226. package/dist/adapters/mysql/tools/json/helpers.js.map +1 -1
  227. package/dist/adapters/mysql/tools/json/index.d.ts +2 -2
  228. package/dist/adapters/mysql/tools/json/index.js +6 -6
  229. package/dist/adapters/mysql/tools/json/index.js.map +1 -1
  230. package/dist/adapters/mysql/tools/partitioning.d.ts +2 -2
  231. package/dist/adapters/mysql/tools/partitioning.d.ts.map +1 -1
  232. package/dist/adapters/mysql/tools/partitioning.js +180 -64
  233. package/dist/adapters/mysql/tools/partitioning.js.map +1 -1
  234. package/dist/adapters/mysql/tools/performance/analysis.d.ts +2 -2
  235. package/dist/adapters/mysql/tools/performance/analysis.d.ts.map +1 -1
  236. package/dist/adapters/mysql/tools/performance/analysis.js +184 -101
  237. package/dist/adapters/mysql/tools/performance/analysis.js.map +1 -1
  238. package/dist/adapters/mysql/tools/performance/index.d.ts +2 -2
  239. package/dist/adapters/mysql/tools/performance/index.js +4 -4
  240. package/dist/adapters/mysql/tools/performance/index.js.map +1 -1
  241. package/dist/adapters/mysql/tools/performance/optimization.d.ts +3 -3
  242. package/dist/adapters/mysql/tools/performance/optimization.d.ts.map +1 -1
  243. package/dist/adapters/mysql/tools/performance/optimization.js +229 -77
  244. package/dist/adapters/mysql/tools/performance/optimization.js.map +1 -1
  245. package/dist/adapters/mysql/tools/proxysql.d.ts +2 -2
  246. package/dist/adapters/mysql/tools/proxysql.d.ts.map +1 -1
  247. package/dist/adapters/mysql/tools/proxysql.js +213 -125
  248. package/dist/adapters/mysql/tools/proxysql.js.map +1 -1
  249. package/dist/adapters/mysql/tools/replication.d.ts +2 -2
  250. package/dist/adapters/mysql/tools/replication.d.ts.map +1 -1
  251. package/dist/adapters/mysql/tools/replication.js +117 -66
  252. package/dist/adapters/mysql/tools/replication.js.map +1 -1
  253. package/dist/adapters/mysql/tools/roles.d.ts +2 -2
  254. package/dist/adapters/mysql/tools/roles.d.ts.map +1 -1
  255. package/dist/adapters/mysql/tools/roles.js +276 -84
  256. package/dist/adapters/mysql/tools/roles.js.map +1 -1
  257. package/dist/adapters/mysql/tools/router.d.ts +2 -2
  258. package/dist/adapters/mysql/tools/router.d.ts.map +1 -1
  259. package/dist/adapters/mysql/tools/router.js +174 -109
  260. package/dist/adapters/mysql/tools/router.js.map +1 -1
  261. package/dist/adapters/mysql/tools/schema/constraints.d.ts +2 -2
  262. package/dist/adapters/mysql/tools/schema/constraints.d.ts.map +1 -1
  263. package/dist/adapters/mysql/tools/schema/constraints.js +24 -15
  264. package/dist/adapters/mysql/tools/schema/constraints.js.map +1 -1
  265. package/dist/adapters/mysql/tools/schema/index.d.ts +2 -2
  266. package/dist/adapters/mysql/tools/schema/index.d.ts.map +1 -1
  267. package/dist/adapters/mysql/tools/schema/index.js +7 -7
  268. package/dist/adapters/mysql/tools/schema/index.js.map +1 -1
  269. package/dist/adapters/mysql/tools/schema/management.d.ts +2 -2
  270. package/dist/adapters/mysql/tools/schema/management.d.ts.map +1 -1
  271. package/dist/adapters/mysql/tools/schema/management.js +99 -42
  272. package/dist/adapters/mysql/tools/schema/management.js.map +1 -1
  273. package/dist/adapters/mysql/tools/schema/routines.d.ts +2 -2
  274. package/dist/adapters/mysql/tools/schema/routines.d.ts.map +1 -1
  275. package/dist/adapters/mysql/tools/schema/routines.js +36 -19
  276. package/dist/adapters/mysql/tools/schema/routines.js.map +1 -1
  277. package/dist/adapters/mysql/tools/schema/scheduled_events.d.ts +2 -2
  278. package/dist/adapters/mysql/tools/schema/scheduled_events.d.ts.map +1 -1
  279. package/dist/adapters/mysql/tools/schema/scheduled_events.js +26 -13
  280. package/dist/adapters/mysql/tools/schema/scheduled_events.js.map +1 -1
  281. package/dist/adapters/mysql/tools/schema/triggers.d.ts +2 -2
  282. package/dist/adapters/mysql/tools/schema/triggers.d.ts.map +1 -1
  283. package/dist/adapters/mysql/tools/schema/triggers.js +24 -13
  284. package/dist/adapters/mysql/tools/schema/triggers.js.map +1 -1
  285. package/dist/adapters/mysql/tools/schema/views.d.ts +2 -2
  286. package/dist/adapters/mysql/tools/schema/views.d.ts.map +1 -1
  287. package/dist/adapters/mysql/tools/schema/views.js +59 -28
  288. package/dist/adapters/mysql/tools/schema/views.js.map +1 -1
  289. package/dist/adapters/mysql/tools/security/audit.d.ts +2 -2
  290. package/dist/adapters/mysql/tools/security/audit.d.ts.map +1 -1
  291. package/dist/adapters/mysql/tools/security/audit.js +61 -55
  292. package/dist/adapters/mysql/tools/security/audit.js.map +1 -1
  293. package/dist/adapters/mysql/tools/security/data-protection.d.ts +2 -2
  294. package/dist/adapters/mysql/tools/security/data-protection.d.ts.map +1 -1
  295. package/dist/adapters/mysql/tools/security/data-protection.js +193 -80
  296. package/dist/adapters/mysql/tools/security/data-protection.js.map +1 -1
  297. package/dist/adapters/mysql/tools/security/encryption.d.ts +2 -2
  298. package/dist/adapters/mysql/tools/security/encryption.d.ts.map +1 -1
  299. package/dist/adapters/mysql/tools/security/encryption.js +86 -67
  300. package/dist/adapters/mysql/tools/security/encryption.js.map +1 -1
  301. package/dist/adapters/mysql/tools/security/index.d.ts +2 -2
  302. package/dist/adapters/mysql/tools/security/index.js +4 -4
  303. package/dist/adapters/mysql/tools/security/index.js.map +1 -1
  304. package/dist/adapters/mysql/tools/shell/backup.d.ts +1 -1
  305. package/dist/adapters/mysql/tools/shell/backup.d.ts.map +1 -1
  306. package/dist/adapters/mysql/tools/shell/backup.js +122 -63
  307. package/dist/adapters/mysql/tools/shell/backup.js.map +1 -1
  308. package/dist/adapters/mysql/tools/shell/common.d.ts.map +1 -1
  309. package/dist/adapters/mysql/tools/shell/common.js +61 -37
  310. package/dist/adapters/mysql/tools/shell/common.js.map +1 -1
  311. package/dist/adapters/mysql/tools/shell/data-transfer.d.ts +1 -1
  312. package/dist/adapters/mysql/tools/shell/data-transfer.d.ts.map +1 -1
  313. package/dist/adapters/mysql/tools/shell/data-transfer.js +125 -69
  314. package/dist/adapters/mysql/tools/shell/data-transfer.js.map +1 -1
  315. package/dist/adapters/mysql/tools/shell/index.d.ts +2 -2
  316. package/dist/adapters/mysql/tools/shell/index.js +6 -6
  317. package/dist/adapters/mysql/tools/shell/index.js.map +1 -1
  318. package/dist/adapters/mysql/tools/shell/info.d.ts +1 -1
  319. package/dist/adapters/mysql/tools/shell/info.d.ts.map +1 -1
  320. package/dist/adapters/mysql/tools/shell/info.js +12 -12
  321. package/dist/adapters/mysql/tools/shell/info.js.map +1 -1
  322. package/dist/adapters/mysql/tools/shell/restore.d.ts +1 -1
  323. package/dist/adapters/mysql/tools/shell/restore.d.ts.map +1 -1
  324. package/dist/adapters/mysql/tools/shell/restore.js +128 -43
  325. package/dist/adapters/mysql/tools/shell/restore.js.map +1 -1
  326. package/dist/adapters/mysql/tools/shell/utilities.d.ts +1 -1
  327. package/dist/adapters/mysql/tools/shell/utilities.d.ts.map +1 -1
  328. package/dist/adapters/mysql/tools/shell/utilities.js +42 -18
  329. package/dist/adapters/mysql/tools/shell/utilities.js.map +1 -1
  330. package/dist/adapters/mysql/tools/spatial/geometry.d.ts +2 -2
  331. package/dist/adapters/mysql/tools/spatial/geometry.d.ts.map +1 -1
  332. package/dist/adapters/mysql/tools/spatial/geometry.js +85 -46
  333. package/dist/adapters/mysql/tools/spatial/geometry.js.map +1 -1
  334. package/dist/adapters/mysql/tools/spatial/index.d.ts +2 -2
  335. package/dist/adapters/mysql/tools/spatial/index.js +5 -5
  336. package/dist/adapters/mysql/tools/spatial/index.js.map +1 -1
  337. package/dist/adapters/mysql/tools/spatial/operations.d.ts +2 -2
  338. package/dist/adapters/mysql/tools/spatial/operations.d.ts.map +1 -1
  339. package/dist/adapters/mysql/tools/spatial/operations.js +175 -106
  340. package/dist/adapters/mysql/tools/spatial/operations.js.map +1 -1
  341. package/dist/adapters/mysql/tools/spatial/queries.d.ts +2 -2
  342. package/dist/adapters/mysql/tools/spatial/queries.d.ts.map +1 -1
  343. package/dist/adapters/mysql/tools/spatial/queries.js +144 -100
  344. package/dist/adapters/mysql/tools/spatial/queries.js.map +1 -1
  345. package/dist/adapters/mysql/tools/spatial/setup.d.ts +2 -2
  346. package/dist/adapters/mysql/tools/spatial/setup.d.ts.map +1 -1
  347. package/dist/adapters/mysql/tools/spatial/setup.js +122 -34
  348. package/dist/adapters/mysql/tools/spatial/setup.js.map +1 -1
  349. package/dist/adapters/mysql/tools/stats/comparative.d.ts +2 -2
  350. package/dist/adapters/mysql/tools/stats/comparative.d.ts.map +1 -1
  351. package/dist/adapters/mysql/tools/stats/comparative.js +159 -107
  352. package/dist/adapters/mysql/tools/stats/comparative.js.map +1 -1
  353. package/dist/adapters/mysql/tools/stats/descriptive.d.ts +2 -2
  354. package/dist/adapters/mysql/tools/stats/descriptive.d.ts.map +1 -1
  355. package/dist/adapters/mysql/tools/stats/descriptive.js +268 -205
  356. package/dist/adapters/mysql/tools/stats/descriptive.js.map +1 -1
  357. package/dist/adapters/mysql/tools/stats/index.d.ts +2 -2
  358. package/dist/adapters/mysql/tools/stats/index.js +3 -3
  359. package/dist/adapters/mysql/tools/stats/index.js.map +1 -1
  360. package/dist/adapters/mysql/tools/sysschema/activity.d.ts +2 -2
  361. package/dist/adapters/mysql/tools/sysschema/activity.d.ts.map +1 -1
  362. package/dist/adapters/mysql/tools/sysschema/activity.js +23 -23
  363. package/dist/adapters/mysql/tools/sysschema/activity.js.map +1 -1
  364. package/dist/adapters/mysql/tools/sysschema/index.d.ts +2 -2
  365. package/dist/adapters/mysql/tools/sysschema/index.js +4 -4
  366. package/dist/adapters/mysql/tools/sysschema/index.js.map +1 -1
  367. package/dist/adapters/mysql/tools/sysschema/performance.d.ts +2 -2
  368. package/dist/adapters/mysql/tools/sysschema/performance.d.ts.map +1 -1
  369. package/dist/adapters/mysql/tools/sysschema/performance.js +58 -43
  370. package/dist/adapters/mysql/tools/sysschema/performance.js.map +1 -1
  371. package/dist/adapters/mysql/tools/sysschema/resources.d.ts +2 -2
  372. package/dist/adapters/mysql/tools/sysschema/resources.d.ts.map +1 -1
  373. package/dist/adapters/mysql/tools/sysschema/resources.js +58 -33
  374. package/dist/adapters/mysql/tools/sysschema/resources.js.map +1 -1
  375. package/dist/adapters/mysql/tools/text/fulltext.d.ts +4 -3
  376. package/dist/adapters/mysql/tools/text/fulltext.d.ts.map +1 -1
  377. package/dist/adapters/mysql/tools/text/fulltext.js +214 -55
  378. package/dist/adapters/mysql/tools/text/fulltext.js.map +1 -1
  379. package/dist/adapters/mysql/tools/text/index.d.ts +3 -3
  380. package/dist/adapters/mysql/tools/text/index.d.ts.map +1 -1
  381. package/dist/adapters/mysql/tools/text/index.js +6 -5
  382. package/dist/adapters/mysql/tools/text/index.js.map +1 -1
  383. package/dist/adapters/mysql/tools/text/processing.d.ts +2 -2
  384. package/dist/adapters/mysql/tools/text/processing.d.ts.map +1 -1
  385. package/dist/adapters/mysql/tools/text/processing.js +175 -122
  386. package/dist/adapters/mysql/tools/text/processing.js.map +1 -1
  387. package/dist/adapters/mysql/tools/transactions.d.ts +2 -2
  388. package/dist/adapters/mysql/tools/transactions.d.ts.map +1 -1
  389. package/dist/adapters/mysql/tools/transactions.js +162 -85
  390. package/dist/adapters/mysql/tools/transactions.js.map +1 -1
  391. package/dist/adapters/mysql/types/proxysql-types.d.ts +7 -2
  392. package/dist/adapters/mysql/types/proxysql-types.d.ts.map +1 -1
  393. package/dist/adapters/mysql/types/proxysql-types.js +52 -30
  394. package/dist/adapters/mysql/types/proxysql-types.js.map +1 -1
  395. package/dist/adapters/mysql/types/router-types.d.ts +1 -1
  396. package/dist/adapters/mysql/types/router-types.js +17 -17
  397. package/dist/adapters/mysql/types/router-types.js.map +1 -1
  398. package/dist/adapters/mysql/types/shell-types.d.ts +1 -2
  399. package/dist/adapters/mysql/types/shell-types.d.ts.map +1 -1
  400. package/dist/adapters/mysql/types/shell-types.js +255 -82
  401. package/dist/adapters/mysql/types/shell-types.js.map +1 -1
  402. package/dist/adapters/mysql/types.d.ts +976 -80
  403. package/dist/adapters/mysql/types.d.ts.map +1 -1
  404. package/dist/adapters/mysql/types.js +1317 -170
  405. package/dist/adapters/mysql/types.js.map +1 -1
  406. package/dist/auth/AuthorizationServerDiscovery.d.ts +1 -1
  407. package/dist/auth/AuthorizationServerDiscovery.d.ts.map +1 -1
  408. package/dist/auth/AuthorizationServerDiscovery.js +16 -14
  409. package/dist/auth/AuthorizationServerDiscovery.js.map +1 -1
  410. package/dist/auth/OAuthResourceServer.d.ts +1 -1
  411. package/dist/auth/OAuthResourceServer.d.ts.map +1 -1
  412. package/dist/auth/OAuthResourceServer.js +4 -4
  413. package/dist/auth/OAuthResourceServer.js.map +1 -1
  414. package/dist/auth/TokenValidator.d.ts +1 -1
  415. package/dist/auth/TokenValidator.d.ts.map +1 -1
  416. package/dist/auth/TokenValidator.js +30 -20
  417. package/dist/auth/TokenValidator.js.map +1 -1
  418. package/dist/auth/errors.d.ts.map +1 -1
  419. package/dist/auth/errors.js +24 -24
  420. package/dist/auth/errors.js.map +1 -1
  421. package/dist/auth/index.d.ts +7 -7
  422. package/dist/auth/index.d.ts.map +1 -1
  423. package/dist/auth/index.js +6 -6
  424. package/dist/auth/index.js.map +1 -1
  425. package/dist/auth/middleware.d.ts +2 -2
  426. package/dist/auth/middleware.d.ts.map +1 -1
  427. package/dist/auth/middleware.js +28 -24
  428. package/dist/auth/middleware.js.map +1 -1
  429. package/dist/auth/scopes.d.ts +2 -2
  430. package/dist/auth/scopes.d.ts.map +1 -1
  431. package/dist/auth/scopes.js +23 -16
  432. package/dist/auth/scopes.js.map +1 -1
  433. package/dist/auth/types.d.ts +2 -2
  434. package/dist/auth/types.d.ts.map +1 -1
  435. package/dist/cli/args.d.ts +1 -1
  436. package/dist/cli/args.d.ts.map +1 -1
  437. package/dist/cli/args.js +82 -68
  438. package/dist/cli/args.js.map +1 -1
  439. package/dist/cli.d.ts +1 -1
  440. package/dist/cli.d.ts.map +1 -1
  441. package/dist/cli.js +44 -34
  442. package/dist/cli.js.map +1 -1
  443. package/dist/codemode/api.d.ts +69 -0
  444. package/dist/codemode/api.d.ts.map +1 -0
  445. package/dist/codemode/api.js +1035 -0
  446. package/dist/codemode/api.js.map +1 -0
  447. package/dist/codemode/index.d.ts +13 -0
  448. package/dist/codemode/index.d.ts.map +1 -0
  449. package/dist/codemode/index.js +17 -0
  450. package/dist/codemode/index.js.map +1 -0
  451. package/dist/codemode/sandbox-factory.d.ts +72 -0
  452. package/dist/codemode/sandbox-factory.d.ts.map +1 -0
  453. package/dist/codemode/sandbox-factory.js +88 -0
  454. package/dist/codemode/sandbox-factory.js.map +1 -0
  455. package/dist/codemode/sandbox.d.ts +96 -0
  456. package/dist/codemode/sandbox.d.ts.map +1 -0
  457. package/dist/codemode/sandbox.js +345 -0
  458. package/dist/codemode/sandbox.js.map +1 -0
  459. package/dist/codemode/security.d.ts +44 -0
  460. package/dist/codemode/security.d.ts.map +1 -0
  461. package/dist/codemode/security.js +149 -0
  462. package/dist/codemode/security.js.map +1 -0
  463. package/dist/codemode/types.d.ts +137 -0
  464. package/dist/codemode/types.d.ts.map +1 -0
  465. package/dist/codemode/types.js +46 -0
  466. package/dist/codemode/types.js.map +1 -0
  467. package/dist/codemode/worker-sandbox.d.ts +82 -0
  468. package/dist/codemode/worker-sandbox.d.ts.map +1 -0
  469. package/dist/codemode/worker-sandbox.js +244 -0
  470. package/dist/codemode/worker-sandbox.js.map +1 -0
  471. package/dist/codemode/worker-script.d.ts +8 -0
  472. package/dist/codemode/worker-script.d.ts.map +1 -0
  473. package/dist/codemode/worker-script.js +113 -0
  474. package/dist/codemode/worker-script.js.map +1 -0
  475. package/dist/constants/ServerInstructions.d.ts +2 -2
  476. package/dist/constants/ServerInstructions.d.ts.map +1 -1
  477. package/dist/constants/ServerInstructions.js +252 -36
  478. package/dist/constants/ServerInstructions.js.map +1 -1
  479. package/dist/filtering/ToolConstants.d.ts +12 -12
  480. package/dist/filtering/ToolConstants.d.ts.map +1 -1
  481. package/dist/filtering/ToolConstants.js +253 -214
  482. package/dist/filtering/ToolConstants.js.map +1 -1
  483. package/dist/filtering/ToolFilter.d.ts +2 -2
  484. package/dist/filtering/ToolFilter.d.ts.map +1 -1
  485. package/dist/filtering/ToolFilter.js +47 -36
  486. package/dist/filtering/ToolFilter.js.map +1 -1
  487. package/dist/index.d.ts +9 -9
  488. package/dist/index.d.ts.map +1 -1
  489. package/dist/index.js +7 -7
  490. package/dist/index.js.map +1 -1
  491. package/dist/logging/McpLogging.d.ts +2 -2
  492. package/dist/logging/McpLogging.d.ts.map +1 -1
  493. package/dist/logging/McpLogging.js +16 -13
  494. package/dist/logging/McpLogging.js.map +1 -1
  495. package/dist/logging/index.d.ts +1 -1
  496. package/dist/logging/index.js +1 -1
  497. package/dist/pool/ConnectionPool.d.ts +3 -3
  498. package/dist/pool/ConnectionPool.d.ts.map +1 -1
  499. package/dist/pool/ConnectionPool.js +30 -26
  500. package/dist/pool/ConnectionPool.js.map +1 -1
  501. package/dist/progress/ProgressReporter.d.ts +1 -1
  502. package/dist/progress/ProgressReporter.d.ts.map +1 -1
  503. package/dist/progress/ProgressReporter.js +5 -5
  504. package/dist/progress/ProgressReporter.js.map +1 -1
  505. package/dist/progress/index.d.ts +1 -1
  506. package/dist/progress/index.d.ts.map +1 -1
  507. package/dist/progress/index.js +1 -1
  508. package/dist/progress/index.js.map +1 -1
  509. package/dist/server/McpServer.d.ts +3 -3
  510. package/dist/server/McpServer.d.ts.map +1 -1
  511. package/dist/server/McpServer.js +58 -53
  512. package/dist/server/McpServer.js.map +1 -1
  513. package/dist/transports/http.d.ts +3 -3
  514. package/dist/transports/http.d.ts.map +1 -1
  515. package/dist/transports/http.js +36 -33
  516. package/dist/transports/http.js.map +1 -1
  517. package/dist/transports/index.d.ts +1 -1
  518. package/dist/transports/index.d.ts.map +1 -1
  519. package/dist/transports/index.js +1 -1
  520. package/dist/transports/index.js.map +1 -1
  521. package/dist/types/index.d.ts +6 -6
  522. package/dist/types/index.d.ts.map +1 -1
  523. package/dist/types/index.js +1 -1
  524. package/dist/types/index.js.map +1 -1
  525. package/dist/types/modules/database.d.ts +1 -1
  526. package/dist/types/modules/database.d.ts.map +1 -1
  527. package/dist/types/modules/errors.d.ts.map +1 -1
  528. package/dist/types/modules/errors.js +15 -15
  529. package/dist/types/modules/errors.js.map +1 -1
  530. package/dist/types/modules/oauth.d.ts +1 -1
  531. package/dist/types/modules/oauth.d.ts.map +1 -1
  532. package/dist/types/modules/query.d.ts +8 -8
  533. package/dist/types/modules/query.d.ts.map +1 -1
  534. package/dist/types/modules/server.d.ts +5 -3
  535. package/dist/types/modules/server.d.ts.map +1 -1
  536. package/dist/types/modules/tools.d.ts +6 -6
  537. package/dist/types/modules/tools.d.ts.map +1 -1
  538. package/dist/utils/logger.d.ts +2 -2
  539. package/dist/utils/logger.d.ts.map +1 -1
  540. package/dist/utils/logger.js +58 -55
  541. package/dist/utils/logger.js.map +1 -1
  542. package/dist/utils/promptGenerator.d.ts +1 -1
  543. package/dist/utils/promptGenerator.d.ts.map +1 -1
  544. package/dist/utils/promptGenerator.js +24 -16
  545. package/dist/utils/promptGenerator.js.map +1 -1
  546. package/dist/utils/validators.d.ts +21 -2
  547. package/dist/utils/validators.d.ts.map +1 -1
  548. package/dist/utils/validators.js +101 -13
  549. package/dist/utils/validators.js.map +1 -1
  550. package/eslint.config.js +117 -81
  551. package/package.json +66 -64
  552. package/releases/release-notes.md +32 -26
  553. package/releases/v2.0.0-release-notes.md +99 -51
  554. package/releases/v2.1.0-release-notes.md +14 -5
  555. package/releases/v2.2.0-release-notes.md +239 -0
  556. package/releases/v2.3.0-release-notes.md +191 -0
  557. package/server.json +1 -1
  558. package/src/__tests__/cli.test.ts +302 -247
  559. package/src/__tests__/index.test.ts +21 -21
  560. package/src/__tests__/mocks/adapter.ts +204 -163
  561. package/src/__tests__/mocks/index.ts +30 -23
  562. package/src/__tests__/mocks/mysql.ts +94 -84
  563. package/src/__tests__/perf.test.ts +207 -203
  564. package/src/__tests__/performance.test.ts +173 -164
  565. package/src/__tests__/setup.ts +26 -21
  566. package/src/adapters/DatabaseAdapter.ts +386 -340
  567. package/src/adapters/__tests__/DatabaseAdapter.test.ts +455 -377
  568. package/src/adapters/mysql/MySQLAdapter.ts +560 -486
  569. package/src/adapters/mysql/SchemaManager.ts +251 -208
  570. package/src/adapters/mysql/__tests__/MySQLAdapter.integration.test.ts +150 -147
  571. package/src/adapters/mysql/__tests__/MySQLAdapter.test.ts +590 -477
  572. package/src/adapters/mysql/__tests__/SchemaManager.test.ts +196 -154
  573. package/src/adapters/mysql/index.ts +2 -2
  574. package/src/adapters/mysql/prompts/__tests__/indexTuning.test.ts +33 -26
  575. package/src/adapters/mysql/prompts/__tests__/prompts.test.ts +277 -239
  576. package/src/adapters/mysql/prompts/backupStrategy.ts +29 -17
  577. package/src/adapters/mysql/prompts/clusterSetup.ts +11 -10
  578. package/src/adapters/mysql/prompts/docstoreSetup.ts +10 -10
  579. package/src/adapters/mysql/prompts/eventScheduler.ts +10 -10
  580. package/src/adapters/mysql/prompts/healthCheck.ts +20 -15
  581. package/src/adapters/mysql/prompts/index.ts +202 -145
  582. package/src/adapters/mysql/prompts/indexTuning.ts +22 -17
  583. package/src/adapters/mysql/prompts/mysqlshSetup.ts +11 -11
  584. package/src/adapters/mysql/prompts/proxysqlSetup.ts +10 -10
  585. package/src/adapters/mysql/prompts/replicationSetup.ts +24 -16
  586. package/src/adapters/mysql/prompts/routerSetup.ts +15 -10
  587. package/src/adapters/mysql/prompts/spatialSetup.ts +10 -10
  588. package/src/adapters/mysql/prompts/sysSchema.ts +11 -10
  589. package/src/adapters/mysql/resources/__tests__/capabilities.test.ts +118 -47
  590. package/src/adapters/mysql/resources/__tests__/cluster.test.ts +163 -104
  591. package/src/adapters/mysql/resources/__tests__/docstore.test.ts +88 -81
  592. package/src/adapters/mysql/resources/__tests__/events.test.ts +94 -83
  593. package/src/adapters/mysql/resources/__tests__/health.test.ts +131 -91
  594. package/src/adapters/mysql/resources/__tests__/indexes.test.ts +125 -102
  595. package/src/adapters/mysql/resources/__tests__/innodb.test.ts +86 -62
  596. package/src/adapters/mysql/resources/__tests__/locks.test.ts +142 -104
  597. package/src/adapters/mysql/resources/__tests__/performance.test.ts +81 -58
  598. package/src/adapters/mysql/resources/__tests__/pool.test.ts +45 -40
  599. package/src/adapters/mysql/resources/__tests__/processlist.test.ts +39 -23
  600. package/src/adapters/mysql/resources/__tests__/replication.test.ts +265 -211
  601. package/src/adapters/mysql/resources/__tests__/resources.test.ts +121 -109
  602. package/src/adapters/mysql/resources/__tests__/schema.test.ts +29 -23
  603. package/src/adapters/mysql/resources/__tests__/spatial.test.ts +58 -45
  604. package/src/adapters/mysql/resources/__tests__/status.test.ts +62 -45
  605. package/src/adapters/mysql/resources/__tests__/sysschema.test.ts +99 -60
  606. package/src/adapters/mysql/resources/__tests__/tables.test.ts +41 -32
  607. package/src/adapters/mysql/resources/__tests__/variables.test.ts +77 -49
  608. package/src/adapters/mysql/resources/capabilities.ts +61 -42
  609. package/src/adapters/mysql/resources/cluster.ts +58 -49
  610. package/src/adapters/mysql/resources/docstore.ts +46 -41
  611. package/src/adapters/mysql/resources/events.ts +37 -31
  612. package/src/adapters/mysql/resources/health.ts +98 -74
  613. package/src/adapters/mysql/resources/index.ts +55 -47
  614. package/src/adapters/mysql/resources/indexes.ts +66 -51
  615. package/src/adapters/mysql/resources/innodb.ts +98 -81
  616. package/src/adapters/mysql/resources/locks.ts +43 -40
  617. package/src/adapters/mysql/resources/performance.ts +80 -67
  618. package/src/adapters/mysql/resources/pool.ts +23 -20
  619. package/src/adapters/mysql/resources/processlist.ts +23 -18
  620. package/src/adapters/mysql/resources/replication.ts +124 -105
  621. package/src/adapters/mysql/resources/schema.ts +23 -18
  622. package/src/adapters/mysql/resources/spatial.ts +31 -26
  623. package/src/adapters/mysql/resources/status.ts +27 -22
  624. package/src/adapters/mysql/resources/sysschema.ts +41 -36
  625. package/src/adapters/mysql/resources/tables.ts +23 -18
  626. package/src/adapters/mysql/resources/variables.ts +27 -22
  627. package/src/adapters/mysql/tools/__tests__/cluster.test.ts +419 -311
  628. package/src/adapters/mysql/tools/__tests__/core.test.ts +701 -382
  629. package/src/adapters/mysql/tools/__tests__/docstore.test.ts +782 -413
  630. package/src/adapters/mysql/tools/__tests__/events.test.ts +806 -486
  631. package/src/adapters/mysql/tools/__tests__/json_core.test.ts +326 -259
  632. package/src/adapters/mysql/tools/__tests__/json_enhanced.test.ts +452 -352
  633. package/src/adapters/mysql/tools/__tests__/json_helpers.test.ts +203 -128
  634. package/src/adapters/mysql/tools/__tests__/proxysql.test.ts +576 -340
  635. package/src/adapters/mysql/tools/__tests__/replication.test.ts +796 -390
  636. package/src/adapters/mysql/tools/__tests__/roles.test.ts +423 -166
  637. package/src/adapters/mysql/tools/__tests__/router.test.ts +644 -540
  638. package/src/adapters/mysql/tools/__tests__/security.test.ts +746 -421
  639. package/src/adapters/mysql/tools/__tests__/security_injection.test.ts +246 -173
  640. package/src/adapters/mysql/tools/__tests__/security_integration.test.ts +244 -205
  641. package/src/adapters/mysql/tools/__tests__/spatial.test.ts +443 -298
  642. package/src/adapters/mysql/tools/__tests__/spatial_handler.test.ts +535 -150
  643. package/src/adapters/mysql/tools/__tests__/stats.test.ts +861 -553
  644. package/src/adapters/mysql/tools/__tests__/transactions.test.ts +452 -263
  645. package/src/adapters/mysql/tools/admin/__tests__/backup.test.ts +612 -372
  646. package/src/adapters/mysql/tools/admin/__tests__/maintenance.test.ts +550 -257
  647. package/src/adapters/mysql/tools/admin/__tests__/monitoring.test.ts +549 -352
  648. package/src/adapters/mysql/tools/admin/backup.ts +339 -215
  649. package/src/adapters/mysql/tools/admin/index.ts +46 -46
  650. package/src/adapters/mysql/tools/admin/maintenance.ts +180 -130
  651. package/src/adapters/mysql/tools/admin/monitoring.ts +373 -199
  652. package/src/adapters/mysql/tools/cluster/__tests__/group-replication.test.ts +200 -186
  653. package/src/adapters/mysql/tools/cluster/__tests__/innodb-cluster.test.ts +399 -95
  654. package/src/adapters/mysql/tools/cluster/group-replication.ts +218 -183
  655. package/src/adapters/mysql/tools/cluster/index.ts +27 -27
  656. package/src/adapters/mysql/tools/cluster/innodb-cluster.ts +413 -251
  657. package/src/adapters/mysql/tools/codemode/index.ts +249 -0
  658. package/src/adapters/mysql/tools/core.ts +425 -285
  659. package/src/adapters/mysql/tools/docstore.ts +478 -276
  660. package/src/adapters/mysql/tools/events.ts +441 -285
  661. package/src/adapters/mysql/tools/index.ts +31 -20
  662. package/src/adapters/mysql/tools/json/__tests__/core.test.ts +456 -199
  663. package/src/adapters/mysql/tools/json/__tests__/enhanced.test.ts +554 -298
  664. package/src/adapters/mysql/tools/json/__tests__/helpers.test.ts +195 -74
  665. package/src/adapters/mysql/tools/json/__tests__/validation.test.ts +106 -72
  666. package/src/adapters/mysql/tools/json/core.ts +368 -263
  667. package/src/adapters/mysql/tools/json/enhanced.ts +368 -229
  668. package/src/adapters/mysql/tools/json/helpers.ts +205 -113
  669. package/src/adapters/mysql/tools/json/index.ts +46 -46
  670. package/src/adapters/mysql/tools/partitioning.ts +289 -140
  671. package/src/adapters/mysql/tools/performance/__tests__/analysis.test.ts +664 -249
  672. package/src/adapters/mysql/tools/performance/__tests__/optimization.test.ts +436 -179
  673. package/src/adapters/mysql/tools/performance/analysis.ts +319 -215
  674. package/src/adapters/mysql/tools/performance/index.ts +33 -33
  675. package/src/adapters/mysql/tools/performance/optimization.ts +438 -183
  676. package/src/adapters/mysql/tools/proxysql.ts +462 -320
  677. package/src/adapters/mysql/tools/replication.ts +233 -180
  678. package/src/adapters/mysql/tools/roles.ts +429 -171
  679. package/src/adapters/mysql/tools/router.ts +410 -292
  680. package/src/adapters/mysql/tools/schema/__tests__/constraints.test.ts +157 -82
  681. package/src/adapters/mysql/tools/schema/__tests__/management.test.ts +226 -101
  682. package/src/adapters/mysql/tools/schema/__tests__/routines.test.ts +80 -35
  683. package/src/adapters/mysql/tools/schema/__tests__/scheduled_events.test.ts +59 -40
  684. package/src/adapters/mysql/tools/schema/__tests__/triggers.test.ts +65 -40
  685. package/src/adapters/mysql/tools/schema/__tests__/views.test.ts +146 -77
  686. package/src/adapters/mysql/tools/schema/constraints.ts +61 -42
  687. package/src/adapters/mysql/tools/schema/index.ts +26 -35
  688. package/src/adapters/mysql/tools/schema/management.ts +167 -94
  689. package/src/adapters/mysql/tools/schema/routines.ts +79 -48
  690. package/src/adapters/mysql/tools/schema/scheduled_events.ts +53 -32
  691. package/src/adapters/mysql/tools/schema/triggers.ts +51 -33
  692. package/src/adapters/mysql/tools/schema/views.ts +96 -53
  693. package/src/adapters/mysql/tools/security/__tests__/audit.test.ts +216 -158
  694. package/src/adapters/mysql/tools/security/__tests__/data-protection.test.ts +154 -98
  695. package/src/adapters/mysql/tools/security/__tests__/encryption.test.ts +174 -138
  696. package/src/adapters/mysql/tools/security/audit.ts +213 -193
  697. package/src/adapters/mysql/tools/security/data-protection.ts +342 -198
  698. package/src/adapters/mysql/tools/security/encryption.ts +233 -193
  699. package/src/adapters/mysql/tools/security/index.ts +26 -26
  700. package/src/adapters/mysql/tools/shell/__tests__/backup.test.ts +443 -283
  701. package/src/adapters/mysql/tools/shell/__tests__/common.test.ts +183 -130
  702. package/src/adapters/mysql/tools/shell/__tests__/data-transfer.test.ts +516 -353
  703. package/src/adapters/mysql/tools/shell/__tests__/info.test.ts +65 -63
  704. package/src/adapters/mysql/tools/shell/__tests__/restore.test.ts +260 -174
  705. package/src/adapters/mysql/tools/shell/__tests__/utilities.test.ts +161 -143
  706. package/src/adapters/mysql/tools/shell/backup.ts +280 -188
  707. package/src/adapters/mysql/tools/shell/common.ts +203 -153
  708. package/src/adapters/mysql/tools/shell/data-transfer.ts +286 -200
  709. package/src/adapters/mysql/tools/shell/index.ts +29 -29
  710. package/src/adapters/mysql/tools/shell/info.ts +35 -31
  711. package/src/adapters/mysql/tools/shell/restore.ts +236 -121
  712. package/src/adapters/mysql/tools/shell/utilities.ts +86 -45
  713. package/src/adapters/mysql/tools/spatial/__tests__/geometry.test.ts +129 -89
  714. package/src/adapters/mysql/tools/spatial/__tests__/operations.test.ts +284 -148
  715. package/src/adapters/mysql/tools/spatial/__tests__/queries.test.ts +340 -245
  716. package/src/adapters/mysql/tools/spatial/geometry.ts +120 -74
  717. package/src/adapters/mysql/tools/spatial/index.ts +33 -33
  718. package/src/adapters/mysql/tools/spatial/operations.ts +254 -171
  719. package/src/adapters/mysql/tools/spatial/queries.ts +221 -165
  720. package/src/adapters/mysql/tools/spatial/setup.ts +180 -73
  721. package/src/adapters/mysql/tools/stats/__tests__/comparative.test.ts +188 -130
  722. package/src/adapters/mysql/tools/stats/comparative.ts +261 -187
  723. package/src/adapters/mysql/tools/stats/descriptive.ts +414 -322
  724. package/src/adapters/mysql/tools/stats/index.ts +23 -23
  725. package/src/adapters/mysql/tools/sysschema/__tests__/activity.test.ts +99 -71
  726. package/src/adapters/mysql/tools/sysschema/__tests__/io_summary_fix.test.ts +21 -18
  727. package/src/adapters/mysql/tools/sysschema/__tests__/performance.test.ts +149 -108
  728. package/src/adapters/mysql/tools/sysschema/__tests__/resources.test.ts +243 -104
  729. package/src/adapters/mysql/tools/sysschema/activity.ts +72 -64
  730. package/src/adapters/mysql/tools/sysschema/index.ts +24 -24
  731. package/src/adapters/mysql/tools/sysschema/performance.ts +140 -115
  732. package/src/adapters/mysql/tools/sysschema/resources.ts +140 -99
  733. package/src/adapters/mysql/tools/text/__tests__/fulltext.test.ts +526 -145
  734. package/src/adapters/mysql/tools/text/__tests__/processing.test.ts +452 -193
  735. package/src/adapters/mysql/tools/text/fulltext.ts +327 -123
  736. package/src/adapters/mysql/tools/text/index.ts +32 -30
  737. package/src/adapters/mysql/tools/text/processing.ts +281 -212
  738. package/src/adapters/mysql/tools/transactions.ts +288 -197
  739. package/src/adapters/mysql/types/__tests__/shell-types.test.ts +204 -202
  740. package/src/adapters/mysql/types/proxysql-types.ts +142 -109
  741. package/src/adapters/mysql/types/router-types.ts +36 -36
  742. package/src/adapters/mysql/types/shell-types.ts +280 -94
  743. package/src/adapters/mysql/types.ts +1475 -164
  744. package/src/auth/AuthorizationServerDiscovery.ts +127 -113
  745. package/src/auth/OAuthResourceServer.ts +67 -62
  746. package/src/auth/TokenValidator.ts +136 -119
  747. package/src/auth/__tests__/AuthorizationServerDiscovery.test.ts +295 -274
  748. package/src/auth/__tests__/OAuthResourceServer.test.ts +180 -169
  749. package/src/auth/__tests__/TokenValidator.test.ts +297 -285
  750. package/src/auth/__tests__/errors.test.ts +180 -175
  751. package/src/auth/__tests__/middleware.test.ts +281 -247
  752. package/src/auth/__tests__/scopes.test.ts +136 -134
  753. package/src/auth/errors.ts +56 -56
  754. package/src/auth/index.ts +23 -17
  755. package/src/auth/middleware.ts +161 -139
  756. package/src/auth/scopes.ts +134 -107
  757. package/src/auth/types.ts +155 -155
  758. package/src/cli/__tests__/args.test.ts +241 -216
  759. package/src/cli/__tests__/main.test.ts +191 -158
  760. package/src/cli/args.ts +285 -258
  761. package/src/cli.ts +150 -127
  762. package/src/codemode/api.ts +1224 -0
  763. package/src/codemode/index.ts +51 -0
  764. package/src/codemode/sandbox-factory.ts +146 -0
  765. package/src/codemode/sandbox.ts +450 -0
  766. package/src/codemode/security.ts +188 -0
  767. package/src/codemode/types.ts +194 -0
  768. package/src/codemode/worker-sandbox.ts +326 -0
  769. package/src/codemode/worker-script.ts +144 -0
  770. package/src/constants/ServerInstructions.ts +295 -70
  771. package/src/filtering/ToolConstants.ts +311 -272
  772. package/src/filtering/ToolFilter.ts +254 -220
  773. package/src/filtering/__tests__/ToolFilter.test.ts +469 -396
  774. package/src/index.ts +62 -57
  775. package/src/logging/McpLogging.ts +128 -119
  776. package/src/logging/__tests__/McpLogging.test.ts +223 -223
  777. package/src/logging/index.ts +2 -2
  778. package/src/pool/ConnectionPool.ts +260 -246
  779. package/src/pool/__tests__/ConnectionPool.test.ts +452 -418
  780. package/src/progress/ProgressReporter.ts +123 -123
  781. package/src/progress/__tests__/ProgressReporter.test.ts +235 -229
  782. package/src/progress/index.ts +6 -2
  783. package/src/server/McpServer.ts +305 -285
  784. package/src/server/__tests__/McpServer.test.ts +333 -291
  785. package/src/transports/__tests__/http.test.ts +658 -527
  786. package/src/transports/http.ts +237 -203
  787. package/src/transports/index.ts +6 -2
  788. package/src/types/__tests__/types.test.ts +197 -193
  789. package/src/types/index.ts +49 -37
  790. package/src/types/modules/database.ts +65 -63
  791. package/src/types/modules/errors.ts +41 -37
  792. package/src/types/modules/oauth.ts +46 -46
  793. package/src/types/modules/query.ts +75 -75
  794. package/src/types/modules/server.ts +21 -18
  795. package/src/types/modules/tools.ts +182 -178
  796. package/src/utils/__tests__/logger.test.ts +424 -414
  797. package/src/utils/__tests__/validators.test.ts +250 -165
  798. package/src/utils/logger.ts +344 -330
  799. package/src/utils/promptGenerator.ts +58 -47
  800. package/src/utils/validators.ts +217 -91
  801. package/tsconfig.json +41 -50
  802. package/vitest.config.ts +23 -23
@@ -1,122 +1,190 @@
1
1
  /**
2
2
  * MySQL Router Management Tools
3
- *
3
+ *
4
4
  * Tools for monitoring and managing MySQL Router via its REST API.
5
5
  * 9 tools total.
6
- *
6
+ *
7
7
  * Router REST API documentation:
8
8
  * https://dev.mysql.com/doc/mysql-router/8.0/en/mysql-router-rest-api.html
9
9
  */
10
10
 
11
- import type { ToolDefinition, RequestContext, RouterConfig } from '../../../types/index.js';
12
- import type { MySQLAdapter } from '../MySQLAdapter.js';
13
- import https from 'node:https';
11
+ import type {
12
+ ToolDefinition,
13
+ RequestContext,
14
+ RouterConfig,
15
+ } from "../../../types/index.js";
16
+ import type { MySQLAdapter } from "../MySQLAdapter.js";
17
+ import https from "node:https";
14
18
  import {
15
- RouterBaseInputSchema,
16
- RouteNameInputSchema,
17
- MetadataNameInputSchema,
18
- ConnectionPoolNameInputSchema
19
- } from '../types/router-types.js';
19
+ RouterBaseInputSchema,
20
+ RouteNameInputSchema,
21
+ MetadataNameInputSchema,
22
+ ConnectionPoolNameInputSchema,
23
+ } from "../types/router-types.js";
20
24
 
21
25
  // =============================================================================
22
26
  // Router HTTP Client Helper
23
27
  // =============================================================================
24
28
 
29
+ /**
30
+ * Response type for graceful Router API unavailability
31
+ */
32
+ interface RouterUnavailableResponse {
33
+ available: false;
34
+ reason: string;
35
+ }
36
+
37
+ /**
38
+ * Result type for safe Router API calls
39
+ */
40
+ type SafeRouterResult<T> =
41
+ | { success: true; data: T }
42
+ | { success: false; response: RouterUnavailableResponse };
43
+
25
44
  /**
26
45
  * Get Router configuration from environment variables
27
46
  */
28
47
  function getRouterConfig(): RouterConfig {
29
- return {
30
- url: process.env['MYSQL_ROUTER_URL'] ?? 'https://localhost:8443',
31
- username: process.env['MYSQL_ROUTER_USER'] ?? '',
32
- password: process.env['MYSQL_ROUTER_PASSWORD'] ?? '',
33
- insecure: process.env['MYSQL_ROUTER_INSECURE'] === 'true',
34
- apiVersion: process.env['MYSQL_ROUTER_API_VERSION'] ?? '/api/20190715'
35
- };
48
+ return {
49
+ url: process.env["MYSQL_ROUTER_URL"] ?? "https://localhost:8443",
50
+ username: process.env["MYSQL_ROUTER_USER"] ?? "",
51
+ password: process.env["MYSQL_ROUTER_PASSWORD"] ?? "",
52
+ insecure: process.env["MYSQL_ROUTER_INSECURE"] === "true",
53
+ apiVersion: process.env["MYSQL_ROUTER_API_VERSION"] ?? "/api/20190715",
54
+ };
36
55
  }
37
56
 
38
57
  /**
39
58
  * Fetch data from MySQL Router REST API using native https module.
40
- *
59
+ *
41
60
  * Note: We use the https module instead of fetch() because Node.js native fetch
42
61
  * uses undici under the hood, which doesn't support the rejectUnauthorized option
43
62
  * in the same way as https.Agent. This ensures proper handling of self-signed
44
63
  * certificates when MYSQL_ROUTER_INSECURE=true.
45
64
  */
46
65
  async function routerFetch(
47
- path: string,
48
- config?: RouterConfig
66
+ path: string,
67
+ config?: RouterConfig,
49
68
  ): Promise<unknown> {
50
- const cfg = config ?? getRouterConfig();
51
- const baseUrl = cfg.url ?? 'https://localhost:8443';
52
- const apiVersion = cfg.apiVersion ?? '/api/20190715';
53
- const username = cfg.username ?? '';
54
- const password = cfg.password ?? '';
55
- const insecure = cfg.insecure ?? false;
56
-
57
- const fullUrl = `${baseUrl}${apiVersion}${path}`;
58
- const parsedUrl = new URL(fullUrl);
59
-
60
- return new Promise((resolve, reject) => {
61
- const headers: Record<string, string> = {
62
- 'Accept': 'application/json'
63
- };
64
-
65
- if (username && password) {
66
- const auth = Buffer.from(`${username}:${password}`).toString('base64');
67
- headers['Authorization'] = `Basic ${auth}`;
69
+ const cfg = config ?? getRouterConfig();
70
+ const baseUrl = cfg.url ?? "https://localhost:8443";
71
+ const apiVersion = cfg.apiVersion ?? "/api/20190715";
72
+ const username = cfg.username ?? "";
73
+ const password = cfg.password ?? "";
74
+ const insecure = cfg.insecure ?? false;
75
+
76
+ const fullUrl = `${baseUrl}${apiVersion}${path}`;
77
+ const parsedUrl = new URL(fullUrl);
78
+
79
+ return new Promise((resolve, reject) => {
80
+ const headers: Record<string, string> = {
81
+ Accept: "application/json",
82
+ };
83
+
84
+ if (username && password) {
85
+ const auth = Buffer.from(`${username}:${password}`).toString("base64");
86
+ headers["Authorization"] = `Basic ${auth}`;
87
+ }
88
+
89
+ // Build request options
90
+ // SECURITY NOTE: rejectUnauthorized=false is INTENTIONAL for development/testing
91
+ // environments where MySQL Router uses self-signed certificates. It is only
92
+ // activated when the user explicitly sets MYSQL_ROUTER_INSECURE=true.
93
+ // In production, users should configure proper TLS certificates on MySQL Router.
94
+ // @see https://dev.mysql.com/doc/mysql-router/8.0/en/mysql-router-conf-options.html#option_mysqlrouter_server_ssl_key
95
+ const requestOptions: https.RequestOptions = {
96
+ hostname: parsedUrl.hostname,
97
+ port: parsedUrl.port || 8443,
98
+ path: parsedUrl.pathname,
99
+ method: "GET",
100
+ headers,
101
+ // CodeQL: This is intentional - see SECURITY NOTE above
102
+ // nosemgrep: nodejs.lang.security.audit.tls-connection-insecure.tls-connection-insecure
103
+ rejectUnauthorized: !insecure, // codeql-ignore js/disabling-certificate-validation
104
+ timeout: 10000, // 10 second timeout
105
+ };
106
+
107
+ const req = https.request(requestOptions, (res) => {
108
+ let data = "";
109
+
110
+ res.on("data", (chunk) => {
111
+ data += chunk;
112
+ });
113
+
114
+ res.on("end", () => {
115
+ const statusCode = res.statusCode ?? 0;
116
+ if (statusCode >= 200 && statusCode < 300) {
117
+ try {
118
+ resolve(JSON.parse(data));
119
+ } catch {
120
+ reject(new Error(`Invalid JSON response: ${data}`));
121
+ }
122
+ } else {
123
+ reject(
124
+ new Error(
125
+ `Router API error: ${statusCode} ${res.statusMessage ?? "Unknown"}`,
126
+ ),
127
+ );
68
128
  }
129
+ });
130
+ });
131
+
132
+ req.on("error", (error) => {
133
+ // Provide more descriptive error messages for common connection issues
134
+ const errorCode = (error as NodeJS.ErrnoException).code;
135
+ let message = error.message;
136
+ if (errorCode === "ECONNREFUSED") {
137
+ message = `Connection refused - MySQL Router REST API is not reachable at ${baseUrl}`;
138
+ } else if (errorCode === "ETIMEDOUT" || errorCode === "ESOCKETTIMEDOUT") {
139
+ message = `Connection timed out - MySQL Router REST API at ${baseUrl} is not responding`;
140
+ } else if (errorCode === "ENOTFOUND") {
141
+ message = `Host not found - cannot resolve ${parsedUrl.hostname}`;
142
+ } else if (
143
+ errorCode === "UNABLE_TO_VERIFY_LEAF_SIGNATURE" ||
144
+ errorCode === "CERT_HAS_EXPIRED" ||
145
+ errorCode === "DEPTH_ZERO_SELF_SIGNED_CERT" ||
146
+ error.message.includes("self-signed") ||
147
+ error.message.includes("certificate")
148
+ ) {
149
+ message = `TLS certificate error: ${error.message}. Set MYSQL_ROUTER_INSECURE=true for self-signed certificates`;
150
+ }
151
+ reject(new Error(`Router API request failed: ${message}`));
152
+ });
69
153
 
70
- // Build request options
71
- // SECURITY NOTE: rejectUnauthorized=false is INTENTIONAL for development/testing
72
- // environments where MySQL Router uses self-signed certificates. It is only
73
- // activated when the user explicitly sets MYSQL_ROUTER_INSECURE=true.
74
- // In production, users should configure proper TLS certificates on MySQL Router.
75
- // @see https://dev.mysql.com/doc/mysql-router/8.0/en/mysql-router-conf-options.html#option_mysqlrouter_server_ssl_key
76
- const requestOptions: https.RequestOptions = {
77
- hostname: parsedUrl.hostname,
78
- port: parsedUrl.port || 8443,
79
- path: parsedUrl.pathname,
80
- method: 'GET',
81
- headers,
82
- // CodeQL: This is intentional - see SECURITY NOTE above
83
- // nosemgrep: nodejs.lang.security.audit.tls-connection-insecure.tls-connection-insecure
84
- rejectUnauthorized: !insecure, // codeql-ignore js/disabling-certificate-validation
85
- timeout: 10000 // 10 second timeout
86
- };
87
-
88
- const req = https.request(requestOptions, (res) => {
89
- let data = '';
90
-
91
- res.on('data', (chunk) => {
92
- data += chunk;
93
- });
94
-
95
- res.on('end', () => {
96
- const statusCode = res.statusCode ?? 0;
97
- if (statusCode >= 200 && statusCode < 300) {
98
- try {
99
- resolve(JSON.parse(data));
100
- } catch {
101
- reject(new Error(`Invalid JSON response: ${data}`));
102
- }
103
- } else {
104
- reject(new Error(`Router API error: ${statusCode} ${res.statusMessage ?? 'Unknown'}`));
105
- }
106
- });
107
- });
108
-
109
- req.on('error', (error) => {
110
- reject(new Error(`Router API request failed: ${error.message}`));
111
- });
112
-
113
- req.on('timeout', () => {
114
- req.destroy();
115
- reject(new Error('Router API request timed out'));
116
- });
117
-
118
- req.end();
154
+ req.on("timeout", () => {
155
+ req.destroy();
156
+ reject(
157
+ new Error(
158
+ `Router API request timed out after 10 seconds - MySQL Router at ${baseUrl} is not responding`,
159
+ ),
160
+ );
119
161
  });
162
+
163
+ req.end();
164
+ });
165
+ }
166
+
167
+ /**
168
+ * Safe wrapper for routerFetch that returns graceful responses instead of throwing.
169
+ * Returns { success: true, data } on success or { success: false, response: { available: false, reason } } on failure.
170
+ */
171
+ async function safeRouterFetch<T>(path: string): Promise<SafeRouterResult<T>> {
172
+ try {
173
+ const data = (await routerFetch(path)) as T;
174
+ return { success: true, data };
175
+ } catch (error) {
176
+ const reason =
177
+ error instanceof Error
178
+ ? error.message
179
+ : "Unknown error connecting to Router API";
180
+ return {
181
+ success: false,
182
+ response: {
183
+ available: false,
184
+ reason,
185
+ },
186
+ };
187
+ }
120
188
  }
121
189
 
122
190
  // =============================================================================
@@ -127,17 +195,17 @@ async function routerFetch(
127
195
  * Get all Router management tools
128
196
  */
129
197
  export function getRouterTools(_adapter: MySQLAdapter): ToolDefinition[] {
130
- return [
131
- createRouterStatusTool(),
132
- createRouterRoutesTool(),
133
- createRouterRouteStatusTool(),
134
- createRouterRouteHealthTool(),
135
- createRouterRouteConnectionsTool(),
136
- createRouterRouteDestinationsTool(),
137
- createRouterRouteBlockedHostsTool(),
138
- createRouterMetadataStatusTool(),
139
- createRouterPoolStatusTool()
140
- ];
198
+ return [
199
+ createRouterStatusTool(),
200
+ createRouterRoutesTool(),
201
+ createRouterRouteStatusTool(),
202
+ createRouterRouteHealthTool(),
203
+ createRouterRouteConnectionsTool(),
204
+ createRouterRouteDestinationsTool(),
205
+ createRouterRouteBlockedHostsTool(),
206
+ createRouterMetadataStatusTool(),
207
+ createRouterPoolStatusTool(),
208
+ ];
141
209
  }
142
210
 
143
211
  // =============================================================================
@@ -148,52 +216,60 @@ export function getRouterTools(_adapter: MySQLAdapter): ToolDefinition[] {
148
216
  * Get MySQL Router status
149
217
  */
150
218
  function createRouterStatusTool(): ToolDefinition {
151
- return {
152
- name: 'mysql_router_status',
153
- title: 'MySQL Router Status',
154
- description: 'Get MySQL Router process status including version, hostname, and uptime. Requires Router REST API access.',
155
- group: 'router',
156
- inputSchema: RouterBaseInputSchema,
157
- requiredScopes: ['read'],
158
- annotations: {
159
- readOnlyHint: true,
160
- idempotentHint: true,
161
- openWorldHint: true
162
- },
163
- handler: async (_params: unknown, _context: RequestContext) => {
164
- const result = await routerFetch('/router/status');
165
- return {
166
- success: true,
167
- status: result
168
- };
169
- }
170
- };
219
+ return {
220
+ name: "mysql_router_status",
221
+ title: "MySQL Router Status",
222
+ description:
223
+ "Get MySQL Router process status including version, hostname, and uptime. Requires Router REST API access.",
224
+ group: "router",
225
+ inputSchema: RouterBaseInputSchema,
226
+ requiredScopes: ["read"],
227
+ annotations: {
228
+ readOnlyHint: true,
229
+ idempotentHint: true,
230
+ openWorldHint: true,
231
+ },
232
+ handler: async (_params: unknown, _context: RequestContext) => {
233
+ const result = await safeRouterFetch<unknown>("/router/status");
234
+ if (!result.success) {
235
+ return result.response;
236
+ }
237
+ return {
238
+ success: true,
239
+ status: result.data,
240
+ };
241
+ },
242
+ };
171
243
  }
172
244
 
173
245
  /**
174
246
  * List all configured routes
175
247
  */
176
248
  function createRouterRoutesTool(): ToolDefinition {
177
- return {
178
- name: 'mysql_router_routes',
179
- title: 'MySQL Router Routes',
180
- description: 'List all configured routes in MySQL Router. Returns route names that can be used with other router tools.',
181
- group: 'router',
182
- inputSchema: RouterBaseInputSchema,
183
- requiredScopes: ['read'],
184
- annotations: {
185
- readOnlyHint: true,
186
- idempotentHint: true,
187
- openWorldHint: true
188
- },
189
- handler: async (_params: unknown, _context: RequestContext) => {
190
- const result = await routerFetch('/routes');
191
- return {
192
- success: true,
193
- routes: result
194
- };
195
- }
196
- };
249
+ return {
250
+ name: "mysql_router_routes",
251
+ title: "MySQL Router Routes",
252
+ description:
253
+ "List all configured routes in MySQL Router. Returns route names that can be used with other router tools.",
254
+ group: "router",
255
+ inputSchema: RouterBaseInputSchema,
256
+ requiredScopes: ["read"],
257
+ annotations: {
258
+ readOnlyHint: true,
259
+ idempotentHint: true,
260
+ openWorldHint: true,
261
+ },
262
+ handler: async (_params: unknown, _context: RequestContext) => {
263
+ const result = await safeRouterFetch<unknown>("/routes");
264
+ if (!result.success) {
265
+ return result.response;
266
+ }
267
+ return {
268
+ success: true,
269
+ routes: result.data,
270
+ };
271
+ },
272
+ };
197
273
  }
198
274
 
199
275
  // =============================================================================
@@ -204,140 +280,170 @@ function createRouterRoutesTool(): ToolDefinition {
204
280
  * Get status of a specific route
205
281
  */
206
282
  function createRouterRouteStatusTool(): ToolDefinition {
207
- return {
208
- name: 'mysql_router_route_status',
209
- title: 'MySQL Router Route Status',
210
- description: 'Get operational status of a specific route including active connections, total connections, and blocked hosts count.',
211
- group: 'router',
212
- inputSchema: RouteNameInputSchema,
213
- requiredScopes: ['read'],
214
- annotations: {
215
- readOnlyHint: true,
216
- idempotentHint: true,
217
- openWorldHint: true
218
- },
219
- handler: async (params: unknown, _context: RequestContext) => {
220
- const { routeName } = RouteNameInputSchema.parse(params);
221
- const result = await routerFetch(`/routes/${encodeURIComponent(routeName)}/status`);
222
- return {
223
- success: true,
224
- routeName,
225
- status: result
226
- };
227
- }
228
- };
283
+ return {
284
+ name: "mysql_router_route_status",
285
+ title: "MySQL Router Route Status",
286
+ description:
287
+ "Get operational status of a specific route including active connections, total connections, and blocked hosts count.",
288
+ group: "router",
289
+ inputSchema: RouteNameInputSchema,
290
+ requiredScopes: ["read"],
291
+ annotations: {
292
+ readOnlyHint: true,
293
+ idempotentHint: true,
294
+ openWorldHint: true,
295
+ },
296
+ handler: async (params: unknown, _context: RequestContext) => {
297
+ const { routeName } = RouteNameInputSchema.parse(params);
298
+ const result = await safeRouterFetch<unknown>(
299
+ `/routes/${encodeURIComponent(routeName)}/status`,
300
+ );
301
+ if (!result.success) {
302
+ return result.response;
303
+ }
304
+ return {
305
+ success: true,
306
+ routeName,
307
+ status: result.data,
308
+ };
309
+ },
310
+ };
229
311
  }
230
312
 
231
313
  /**
232
314
  * Check health of a specific route
233
315
  */
234
316
  function createRouterRouteHealthTool(): ToolDefinition {
235
- return {
236
- name: 'mysql_router_route_health',
237
- title: 'MySQL Router Route Health',
238
- description: 'Check if a route is alive and functioning. Returns isAlive boolean indicating route health.',
239
- group: 'router',
240
- inputSchema: RouteNameInputSchema,
241
- requiredScopes: ['read'],
242
- annotations: {
243
- readOnlyHint: true,
244
- idempotentHint: true,
245
- openWorldHint: true
246
- },
247
- handler: async (params: unknown, _context: RequestContext) => {
248
- const { routeName } = RouteNameInputSchema.parse(params);
249
- const result = await routerFetch(`/routes/${encodeURIComponent(routeName)}/health`);
250
- return {
251
- success: true,
252
- routeName,
253
- health: result
254
- };
255
- }
256
- };
317
+ return {
318
+ name: "mysql_router_route_health",
319
+ title: "MySQL Router Route Health",
320
+ description:
321
+ "Check if a route is alive and functioning. Returns isAlive boolean indicating route health.",
322
+ group: "router",
323
+ inputSchema: RouteNameInputSchema,
324
+ requiredScopes: ["read"],
325
+ annotations: {
326
+ readOnlyHint: true,
327
+ idempotentHint: true,
328
+ openWorldHint: true,
329
+ },
330
+ handler: async (params: unknown, _context: RequestContext) => {
331
+ const { routeName } = RouteNameInputSchema.parse(params);
332
+ const result = await safeRouterFetch<unknown>(
333
+ `/routes/${encodeURIComponent(routeName)}/health`,
334
+ );
335
+ if (!result.success) {
336
+ return result.response;
337
+ }
338
+ return {
339
+ success: true,
340
+ routeName,
341
+ health: result.data,
342
+ };
343
+ },
344
+ };
257
345
  }
258
346
 
259
347
  /**
260
348
  * List active connections on a route
261
349
  */
262
350
  function createRouterRouteConnectionsTool(): ToolDefinition {
263
- return {
264
- name: 'mysql_router_route_connections',
265
- title: 'MySQL Router Route Connections',
266
- description: 'List active connections on a route including source/destination addresses, bytes transferred, and connection times.',
267
- group: 'router',
268
- inputSchema: RouteNameInputSchema,
269
- requiredScopes: ['read'],
270
- annotations: {
271
- readOnlyHint: true,
272
- idempotentHint: true,
273
- openWorldHint: true
274
- },
275
- handler: async (params: unknown, _context: RequestContext) => {
276
- const { routeName } = RouteNameInputSchema.parse(params);
277
- const result = await routerFetch(`/routes/${encodeURIComponent(routeName)}/connections`);
278
- return {
279
- success: true,
280
- routeName,
281
- connections: result
282
- };
283
- }
284
- };
351
+ return {
352
+ name: "mysql_router_route_connections",
353
+ title: "MySQL Router Route Connections",
354
+ description:
355
+ "List active connections on a route including source/destination addresses, bytes transferred, and connection times.",
356
+ group: "router",
357
+ inputSchema: RouteNameInputSchema,
358
+ requiredScopes: ["read"],
359
+ annotations: {
360
+ readOnlyHint: true,
361
+ idempotentHint: true,
362
+ openWorldHint: true,
363
+ },
364
+ handler: async (params: unknown, _context: RequestContext) => {
365
+ const { routeName } = RouteNameInputSchema.parse(params);
366
+ const result = await safeRouterFetch<unknown>(
367
+ `/routes/${encodeURIComponent(routeName)}/connections`,
368
+ );
369
+ if (!result.success) {
370
+ return result.response;
371
+ }
372
+ return {
373
+ success: true,
374
+ routeName,
375
+ connections: result.data,
376
+ };
377
+ },
378
+ };
285
379
  }
286
380
 
287
381
  /**
288
382
  * List backend destinations for a route
289
383
  */
290
384
  function createRouterRouteDestinationsTool(): ToolDefinition {
291
- return {
292
- name: 'mysql_router_route_destinations',
293
- title: 'MySQL Router Route Destinations',
294
- description: 'List backend MySQL server destinations for a route. Shows address and port of each destination server.',
295
- group: 'router',
296
- inputSchema: RouteNameInputSchema,
297
- requiredScopes: ['read'],
298
- annotations: {
299
- readOnlyHint: true,
300
- idempotentHint: true,
301
- openWorldHint: true
302
- },
303
- handler: async (params: unknown, _context: RequestContext) => {
304
- const { routeName } = RouteNameInputSchema.parse(params);
305
- const result = await routerFetch(`/routes/${encodeURIComponent(routeName)}/destinations`);
306
- return {
307
- success: true,
308
- routeName,
309
- destinations: result
310
- };
311
- }
312
- };
385
+ return {
386
+ name: "mysql_router_route_destinations",
387
+ title: "MySQL Router Route Destinations",
388
+ description:
389
+ "List backend MySQL server destinations for a route. Shows address and port of each destination server.",
390
+ group: "router",
391
+ inputSchema: RouteNameInputSchema,
392
+ requiredScopes: ["read"],
393
+ annotations: {
394
+ readOnlyHint: true,
395
+ idempotentHint: true,
396
+ openWorldHint: true,
397
+ },
398
+ handler: async (params: unknown, _context: RequestContext) => {
399
+ const { routeName } = RouteNameInputSchema.parse(params);
400
+ const result = await safeRouterFetch<unknown>(
401
+ `/routes/${encodeURIComponent(routeName)}/destinations`,
402
+ );
403
+ if (!result.success) {
404
+ return result.response;
405
+ }
406
+ return {
407
+ success: true,
408
+ routeName,
409
+ destinations: result.data,
410
+ };
411
+ },
412
+ };
313
413
  }
314
414
 
315
415
  /**
316
416
  * List blocked hosts for a route
317
417
  */
318
418
  function createRouterRouteBlockedHostsTool(): ToolDefinition {
319
- return {
320
- name: 'mysql_router_route_blocked_hosts',
321
- title: 'MySQL Router Blocked Hosts',
322
- description: 'List IP addresses that have been blocked for a route due to too many failed connection attempts.',
323
- group: 'router',
324
- inputSchema: RouteNameInputSchema,
325
- requiredScopes: ['read'],
326
- annotations: {
327
- readOnlyHint: true,
328
- idempotentHint: true,
329
- openWorldHint: true
330
- },
331
- handler: async (params: unknown, _context: RequestContext) => {
332
- const { routeName } = RouteNameInputSchema.parse(params);
333
- const result = await routerFetch(`/routes/${encodeURIComponent(routeName)}/blockedHosts`);
334
- return {
335
- success: true,
336
- routeName,
337
- blockedHosts: result
338
- };
339
- }
340
- };
419
+ return {
420
+ name: "mysql_router_route_blocked_hosts",
421
+ title: "MySQL Router Blocked Hosts",
422
+ description:
423
+ "List IP addresses that have been blocked for a route due to too many failed connection attempts.",
424
+ group: "router",
425
+ inputSchema: RouteNameInputSchema,
426
+ requiredScopes: ["read"],
427
+ annotations: {
428
+ readOnlyHint: true,
429
+ idempotentHint: true,
430
+ openWorldHint: true,
431
+ },
432
+ handler: async (params: unknown, _context: RequestContext) => {
433
+ const { routeName } = RouteNameInputSchema.parse(params);
434
+ const result = await safeRouterFetch<unknown>(
435
+ `/routes/${encodeURIComponent(routeName)}/blockedHosts`,
436
+ );
437
+ if (!result.success) {
438
+ return result.response;
439
+ }
440
+ return {
441
+ success: true,
442
+ routeName,
443
+ blockedHosts: result.data,
444
+ };
445
+ },
446
+ };
341
447
  }
342
448
 
343
449
  // =============================================================================
@@ -348,28 +454,34 @@ function createRouterRouteBlockedHostsTool(): ToolDefinition {
348
454
  * Get metadata cache status
349
455
  */
350
456
  function createRouterMetadataStatusTool(): ToolDefinition {
351
- return {
352
- name: 'mysql_router_metadata_status',
353
- title: 'MySQL Router Metadata Status',
354
- description: 'Get InnoDB Cluster metadata cache status including refresh statistics and last refresh host.',
355
- group: 'router',
356
- inputSchema: MetadataNameInputSchema,
357
- requiredScopes: ['read'],
358
- annotations: {
359
- readOnlyHint: true,
360
- idempotentHint: true,
361
- openWorldHint: true
362
- },
363
- handler: async (params: unknown, _context: RequestContext) => {
364
- const { metadataName } = MetadataNameInputSchema.parse(params);
365
- const result = await routerFetch(`/metadata/${encodeURIComponent(metadataName)}/status`);
366
- return {
367
- success: true,
368
- metadataName,
369
- status: result
370
- };
371
- }
372
- };
457
+ return {
458
+ name: "mysql_router_metadata_status",
459
+ title: "MySQL Router Metadata Status",
460
+ description:
461
+ "Get InnoDB Cluster metadata cache status including refresh statistics and last refresh host.",
462
+ group: "router",
463
+ inputSchema: MetadataNameInputSchema,
464
+ requiredScopes: ["read"],
465
+ annotations: {
466
+ readOnlyHint: true,
467
+ idempotentHint: true,
468
+ openWorldHint: true,
469
+ },
470
+ handler: async (params: unknown, _context: RequestContext) => {
471
+ const { metadataName } = MetadataNameInputSchema.parse(params);
472
+ const result = await safeRouterFetch<unknown>(
473
+ `/metadata/${encodeURIComponent(metadataName)}/status`,
474
+ );
475
+ if (!result.success) {
476
+ return result.response;
477
+ }
478
+ return {
479
+ success: true,
480
+ metadataName,
481
+ status: result.data,
482
+ };
483
+ },
484
+ };
373
485
  }
374
486
 
375
487
  // =============================================================================
@@ -380,26 +492,32 @@ function createRouterMetadataStatusTool(): ToolDefinition {
380
492
  * Get connection pool status
381
493
  */
382
494
  function createRouterPoolStatusTool(): ToolDefinition {
383
- return {
384
- name: 'mysql_router_pool_status',
385
- title: 'MySQL Router Pool Status',
386
- description: 'Get MySQL Router connection pool status including reused connections and idle server connections.',
387
- group: 'router',
388
- inputSchema: ConnectionPoolNameInputSchema,
389
- requiredScopes: ['read'],
390
- annotations: {
391
- readOnlyHint: true,
392
- idempotentHint: true,
393
- openWorldHint: true
394
- },
395
- handler: async (params: unknown, _context: RequestContext) => {
396
- const { poolName } = ConnectionPoolNameInputSchema.parse(params);
397
- const result = await routerFetch(`/connection_pool/${encodeURIComponent(poolName)}/status`);
398
- return {
399
- success: true,
400
- poolName,
401
- status: result
402
- };
403
- }
404
- };
495
+ return {
496
+ name: "mysql_router_pool_status",
497
+ title: "MySQL Router Pool Status",
498
+ description:
499
+ "Get MySQL Router connection pool status including idle and stashed server connections.",
500
+ group: "router",
501
+ inputSchema: ConnectionPoolNameInputSchema,
502
+ requiredScopes: ["read"],
503
+ annotations: {
504
+ readOnlyHint: true,
505
+ idempotentHint: true,
506
+ openWorldHint: true,
507
+ },
508
+ handler: async (params: unknown, _context: RequestContext) => {
509
+ const { poolName } = ConnectionPoolNameInputSchema.parse(params);
510
+ const result = await safeRouterFetch<unknown>(
511
+ `/connection_pool/${encodeURIComponent(poolName)}/status`,
512
+ );
513
+ if (!result.success) {
514
+ return result.response;
515
+ }
516
+ return {
517
+ success: true,
518
+ poolName,
519
+ status: result.data,
520
+ };
521
+ },
522
+ };
405
523
  }