@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
@@ -4,7 +4,7 @@
4
4
  * These instructions are automatically sent to MCP clients during initialization,
5
5
  * providing guidance for AI agents on tool usage.
6
6
  */
7
- import type { ResourceDefinition, PromptDefinition } from '../types/index.js';
7
+ import type { ResourceDefinition, PromptDefinition } from "../types/index.js";
8
8
  /**
9
9
  * Generate dynamic instructions based on enabled tools, resources, and prompts
10
10
  */
@@ -13,5 +13,5 @@ export declare function generateInstructions(enabledTools: Set<string>, resource
13
13
  * Static instructions for backward compatibility
14
14
  * @deprecated Use generateInstructions() instead for dynamic content
15
15
  */
16
- export declare const SERVER_INSTRUCTIONS = "# mysql-mcp Usage Instructions\n\n## Server Identity\n\n- **Server Name**: This server is identified as `user-mysql` in MCP client configurations.\n- **Tool Invocation**: When calling tools via MCP, they are prefixed with the server name (e.g., `user-mysql-mysql_json_extract`, `user-mysql-mysql_read_query`).\n- **Resources**: \n - Resources use the `mysql://` URI scheme (e.g., `mysql://capabilities`, `mysql://schema`).\n - When listing or fetching resources, use server name `user-mysql` (e.g., `list_mcp_resources(server: \"user-mysql\")`, `fetch_mcp_resource(server: \"user-mysql\", uri: \"mysql://schema\")`).\n\n## JSON Tools (`mysql_json_*`)\n\n- **Strict Quoting**: When passing string values to JSON tools, you **must quote the string** if you intend to store it as a JSON string.\n - \u274C Incorrect: `value: \"green\"` (interpreted as invalid JSON)\n - \u2705 Correct: `value: \"\\\"green\\\"\"` (stored as string \"green\")\n - \u2705 Correct: `value: 42` (stored as number)\n - \u2705 Correct: `value: {\"key\": \"val\"}` (stored as object)\n- **Validation**: Creating or updating JSON values enforces strict JSON validity checks.\n\n## Transactions & Safety (`mysql_transaction_*`)\n\n- Use transactions for multi-step changes:\n 1. Call `mysql_transaction_begin` \u2192 get `transactionId`\n 2. Perform updates with `transactionId`\n 3. If successful, `mysql_transaction_commit`\n 4. If error, `mysql_transaction_rollback`\n\n## Document Store (`mysql_doc_*`)\n\n- **Filter Syntax** (for `mysql_doc_modify`, `mysql_doc_remove`):\n - **By _id**: Pass the 32-character hex _id directly: `filter: \"686dd247b9724bcfa08ce6f1efed8b77\"`\n - **By field value**: Use `field=value` format: `filter: \"name=Alice\"` or `filter: \"age=30\"`\n - **By existence**: Use JSON path: `filter: \"$.address\"` (matches docs where address field exists)\n - \u274C Incorrect: `filter: \"$.name == 'Alice'\"` (comparison operators not supported in path)\n - \u2705 Correct: `filter: \"name=Alice\"` (field=value format)\n- **Find Filters** (`mysql_doc_find`): The filter parameter checks for field existence using JSON path (e.g., `$.address.zip`).\n\n## Fulltext Search (`mysql_fulltext_boolean`)\n\n- Uses MySQL boolean operators: `+word` (AND), `-word` (NOT), `word*` (wildcard), `> <` (relevance weighting)\n\n## DDL Statements (`mysql_write_query`)\n\n- DDL statements (like `CREATE TABLE`) are automatically handled via text protocol fallback.\n\n## Role Management\n\n- Role tools require appropriate privileges.\n- `mysql_role_grant` supports `db.table` syntax (e.g., `GRANT SELECT ON my_schema.my_table`).\n\n## Group Replication (`mysql_gr_*`)\n\n- Tools check for `group_replication` plugin status and return \"not active\" if plugin is not active.\n\n## MySQL Router Tools (`mysql_router_*`)\n\n- **Prerequisites**: Router REST API requires InnoDB Cluster to be running (authentication uses `metadata_cache` backend)\n- **Self-signed certificates**: Set `MYSQL_ROUTER_INSECURE=true` to bypass TLS certificate verification for development/testing\n- **Route names**: Use `mysql_router_routes` to list available routes (e.g., `bootstrap_rw`, `bootstrap_ro`)\n- **Metadata cache**: The `metadataName` parameter is typically `bootstrap` for bootstrapped routers\n\n## Partitioning Tools (`mysql_partition_*`, `mysql_add_partition`, `mysql_drop_partition`, `mysql_reorganize_partition`)\n\n- **Value Parameter**: The `value` parameter expects only the boundary value, NOT the full SQL clause.\n - \u274C Incorrect: `value: \"LESS THAN (2024)\"` (SQL syntax error - duplicates keywords)\n - \u2705 Correct: `value: \"2024\"` for RANGE partitions\n - \u2705 Correct: `value: \"1,2,3\"` for LIST partitions\n - \u2705 Correct: `value: \"4\"` for HASH/KEY (number of partitions to add)\n- **Reorganize**: Requires `partitionType` parameter (RANGE or LIST). HASH/KEY partitions cannot be reorganized.\n- **Drop Warning**: `mysql_drop_partition` permanently deletes all data in the partition.\n\n## Spatial Tools (`mysql_spatial_*`)\n\n- **Coordinate Order**: All spatial tools use standard **longitude, latitude** parameter order (X, Y), matching GeoJSON and common mapping conventions.\n - \u2705 Example: `{ longitude: -122.4194, latitude: 37.7749 }` for San Francisco\n - MySQL 8.0+ uses EPSG standard axis order (latitude, longitude) internally for SRID 4326, but tools handle this conversion automatically using `axis-order=long-lat` option.\n- **SRID 4326**: Default spatial reference system is WGS 84 (GPS coordinates). Use `srid` parameter to specify other coordinate systems.\n";
16
+ export declare const SERVER_INSTRUCTIONS = "# mysql-mcp Usage Instructions\n\n## Server Identity\n\n- **Server Name**: This server is identified as `user-mysql` in MCP client configurations.\n- **Tool Invocation**: When calling tools via MCP, they are prefixed with the server name (e.g., `user-mysql-mysql_json_extract`, `user-mysql-mysql_read_query`).\n- **Resources**: \n - Resources use the `mysql://` URI scheme (e.g., `mysql://capabilities`, `mysql://schema`).\n - When listing or fetching resources, use server name `user-mysql` (e.g., `list_mcp_resources(server: \"user-mysql\")`, `fetch_mcp_resource(server: \"user-mysql\", uri: \"mysql://schema\")`).\n\n## JSON Tools (`mysql_json_*`)\n\n- **Automatic String Handling**: JSON tools automatically convert bare strings to valid JSON.\n - \u2705 `value: \"green\"` \u2192 stored as JSON string `\"green\"`\n - \u2705 `value: 42` \u2192 stored as number `42`\n - \u2705 `value: {\"key\": \"val\"}` \u2192 stored as object\n - \u2705 `value: \"[1,2,3]\"` \u2192 stored as array (already valid JSON)\n- **Validation**: Creating or updating JSON values enforces JSON validity after auto-conversion.\n- **Error Handling**: All table-querying JSON tools return `{ exists: false, table }` for nonexistent tables and `{ success: false, error }` for other query errors, instead of throwing raw exceptions. `mysql_json_merge` and `mysql_json_diff` (literal JSON, no table) return `{ success: false, error }` for invalid input.\n\n## Transactions & Safety (`mysql_transaction_*`)\n\n- **Interactive transactions**: Use `mysql_transaction_begin` \u2192 get `transactionId` \u2192 pass it to `mysql_read_query` or `mysql_write_query` for queries within the transaction \u2192 `mysql_transaction_commit` or `mysql_transaction_rollback`.\n- **Atomic execution**: `mysql_transaction_execute` runs multiple SQL statements in a single atomic transaction. All succeed or all are rolled back. Returns `rows` and `rowCount` for SELECT statements, `rowsAffected` for write statements. Returns `{ success: false, reason }` if the `statements` array is empty. Returns `{ success: false, reason, rolledBack: true }` if any statement fails.\n- **Isolation levels**: `mysql_transaction_begin` and `mysql_transaction_execute` accept optional `isolationLevel`: `READ UNCOMMITTED`, `READ COMMITTED`, `REPEATABLE READ` (default), `SERIALIZABLE`.\n- **Savepoints**: Within an active transaction, use `mysql_transaction_savepoint` to create checkpoints, `mysql_transaction_rollback_to` for partial rollback, and `mysql_transaction_release` to remove a savepoint.\n- **Graceful error handling**: `mysql_transaction_commit` and `mysql_transaction_rollback` return `{ success: false, reason }` for invalid or expired transaction IDs. Savepoint tools (`mysql_transaction_savepoint`, `mysql_transaction_release`, `mysql_transaction_rollback_to`) return `{ success: false, reason }` when the transaction or savepoint does not exist.\n\n## Document Store (`mysql_doc_*`)\n\n- **Collection creation**: `mysql_doc_create_collection` creates a JSON document collection. Use `ifNotExists: true` to avoid errors when the collection already exists. Returns `{ success: false, reason }` if collection already exists (without `ifNotExists`).\n- **Collection drop**: `mysql_doc_drop_collection` removes a collection. Returns `{ success: false, reason }` if collection does not exist (without `ifExists`). With `ifExists: true` (default), returns `{ success: true, message: \"Collection did not exist\" }` when the collection was already absent.\n- **Collection detection**: Tools identify document collections as tables containing a `doc JSON` column with an `_id` field. Manually created JSON tables may appear in collection listings.\n- **Nonexistent collection handling**: `mysql_doc_collection_info`, `mysql_doc_add`, `mysql_doc_modify`, `mysql_doc_remove`, and `mysql_doc_create_index` return `{ exists: false, collection }` when the target collection does not exist.\n- **Index creation**: `mysql_doc_create_index` returns `{ success: false, reason }` if the index or its generated columns already exist.\n- **Filter Syntax** (for `mysql_doc_modify`, `mysql_doc_remove`):\n - **By _id**: Pass the 32-character hex _id directly: `filter: \"686dd247b9724bcfa08ce6f1efed8b77\"`\n - **By field value**: Use `field=value` format: `filter: \"name=Alice\"` or `filter: \"age=30\"`\n - **By existence**: Use JSON path: `filter: \"$.address\"` (matches docs where address field exists)\n - \u274C Incorrect: `filter: \"$.name == 'Alice'\"` (comparison operators not supported in path)\n - \u2705 Correct: `filter: \"name=Alice\"` (field=value format)\n- **Schema existence**: `mysql_doc_list_collections` returns `{ exists: false, schema }` when a nonexistent schema is explicitly provided, matching the P154 pattern used by schema introspection and event tools.\n- **Find Filters** (`mysql_doc_find`): The filter parameter checks for field existence using JSON path only (e.g., `$.address.zip`). Does NOT support `_id` or `field=value` formats. Returns `{ exists: false, collection, documents: [], count: 0 }` gracefully if the collection does not exist.\n\n\n## Fulltext Search (`mysql_fulltext_*`)\n\n- **Index management**: `mysql_fulltext_create` creates a FULLTEXT index (returns `{ success: false, reason }` if index already exists), `mysql_fulltext_drop` removes it (returns `{ success: false, reason }` if index does not exist).\n- **Search modes**: `mysql_fulltext_search` supports NATURAL (default), BOOLEAN, and EXPANSION modes.\n- **Boolean operators** (`mysql_fulltext_boolean`): `+word` (required), `-word` (excluded), `word*` (prefix wildcard), `>word`/`<word` (relevance weighting).\n- **Query expansion** (`mysql_fulltext_expand`): Finds related terms - may return more rows than exact match.\n- **Column matching**: MATCH column list must exactly match the columns of an existing FULLTEXT index. Searching a subset of indexed columns will fail.\n- **Output**: Tools return only `id`, searched column(s), and `relevance` score. Use `maxLength` parameter to truncate long text columns in results (e.g., `maxLength: 200` truncates values over 200 characters with `...`).\n- **Error handling**: All fulltext tools return `{ exists: false, table }` for nonexistent tables. Search tools (`mysql_fulltext_search`, `mysql_fulltext_boolean`, `mysql_fulltext_expand`) also return `{ success: false, error }` for other query errors (e.g., FULLTEXT index column mismatch). No raw MySQL errors are thrown.\n\n\n## Backup Tools (`mysql_export_table`, `mysql_import_data`, etc.)\n\n- **Export formats**: `mysql_export_table` supports SQL (INSERT statements) and CSV formats.\n- **Default limit**: `mysql_export_table` returns at most 100 rows by default. Use `limit` parameter to override.\n- **WHERE filtering**: Use `where` parameter to export subsets: `where: \"category = 'electronics'\"`.\n- **CSV and JSON columns**: CSV export escapes JSON columns with double-quote encoding\u2014valid but complex. Consider SQL format for JSON-heavy tables.\n- **Export error handling**: `mysql_export_table` returns `{ exists: false, table }` for nonexistent tables and `{ success: false, error }` for other query errors (e.g., invalid WHERE clause, unknown column). No raw exceptions are thrown.\n- **Import prerequisite**: `mysql_import_data` requires the target table to already exist. Returns `{ exists: false, table }` gracefully if the table does not exist.\n- **Import error handling**: `mysql_import_data` returns `{ success: false, error, rowsInserted }` for all insertion failures (duplicate keys, unknown columns, data truncation) instead of throwing, reporting how many rows were successfully inserted before the error.\n- **Dump commands**: `mysql_create_dump` and `mysql_restore_dump` generate CLI commands\u2014they do not execute directly.\n\n## Core Tools (`mysql_read_query`, `mysql_write_query`, `mysql_create_table`, etc.)\n\n- **Prepared statements**: `mysql_read_query` and `mysql_write_query` support parameterized queries via the `params` array. Use `?` placeholders: `query: \"SELECT * FROM users WHERE id = ?\", params: [123]`.\n- **DDL statements**: DDL (e.g., `CREATE TABLE`, `ALTER TABLE`) is automatically handled via text protocol fallback in `mysql_write_query`.\n- **Query error handling**: `mysql_read_query` and `mysql_write_query` return `{ success: false, error }` for all query errors (nonexistent table, syntax, permissions, etc.), instead of throwing raw errors.\n- **Boolean defaults**: `mysql_create_table` auto-converts boolean `default: true` to `1` and `default: false` to `0` for MySQL compatibility. Alternatively, use `TINYINT(1)` with numeric defaults directly.\n- **Existence checks**: `mysql_describe_table` and `mysql_get_indexes` return `{ exists: false, table: \"...\" }` gracefully when the table does not exist, avoiding raw SQL errors.\n- **Create/Drop safety**: `mysql_create_table` returns `{ success: false, reason }` when the table already exists (without `ifNotExists`). `mysql_drop_table` returns `{ success: false, reason }` when the table does not exist (without `ifExists`). With `ifExists: true`, dropping a nonexistent table returns `{ success: true, skipped: true, reason: \"Table did not exist\" }`.\n- **Index creation**: `mysql_create_index` supports BTREE (default), HASH, FULLTEXT, and SPATIAL types. Use `ifNotExists: true` to skip if the index already exists. Returns `{ success: false, reason }` when the index already exists (without `ifNotExists`). Returns `{ exists: false, table }` when the target table does not exist. Note: InnoDB only supports BTREE indexes; HASH type is silently converted to BTREE (the response includes a `warning` field). HASH is only effective with the MEMORY engine.\n- **Table names**: All core tools support qualified names (`schema.table` format) for cross-database operations.\n\n## Role Management (`mysql_role_*`, `mysql_user_roles`)\n\n- **Privilege requirements**: Role management requires `CREATE ROLE`, `DROP ROLE`, `GRANT`, and `REVOKE` privileges.\n- **Role lifecycle**: Create roles with `mysql_role_create`, grant privileges with `mysql_role_grant`, then assign to users with `mysql_role_assign`.\n- **Listing roles**: `mysql_role_list` shows all defined roles. Use `pattern` parameter for LIKE-style filtering (e.g., `pattern: \"admin%\"`).\n- **Create/Drop safety**: `mysql_role_create` with `ifNotExists: true` (default) returns `{ success: true, skipped: true, reason: \"Role already exists\" }` for existing roles. `mysql_role_drop` with `ifExists: true` (default) returns `{ success: true, skipped: true, reason: \"Role did not exist\" }` for nonexistent roles.\n- **Graceful create/drop errors**: `mysql_role_create` returns `{ success: false, reason }` when the role already exists (without `ifNotExists`). `mysql_role_drop` returns `{ success: false, reason }` when the role does not exist (without `ifExists`).\n- **Privilege grants**: `mysql_role_grant` supports `database.table` syntax (e.g., `table: \"my_schema.my_table\"`). Use `table: \"*\"` for schema-wide privileges (e.g., `testdb.*`). Use `privileges: [\"SELECT\", \"INSERT\"]`. Returns `{ success: false, error }` for nonexistent tables.\n- **Role assignment**: `mysql_role_assign` assigns a role to a user. Use `withAdminOption: true` to allow the user to grant the role to others. Returns `{ success: false, error }` when the target user does not exist.\n- **Role revocation**: `mysql_role_revoke` pre-checks `mysql.role_edges` and returns `{ success: false, reason } ` when the role is not currently assigned to the user. Also returns `{ success: false, error } ` when the target user does not exist.\n- **User roles**: `mysql_user_roles` lists roles assigned to a user, including the `admin` flag (Y/N) indicating admin option status. Returns `{ exists: false }` when the user does not exist.\n- **Existence checks**: `mysql_role_grants` returns `exists: false` if the role does not exist, avoiding raw SQL errors. `mysql_role_grant`, `mysql_role_assign`, and `mysql_role_revoke` also check role existence and return `{ exists: false }` gracefully.\n\n## Group Replication (`mysql_gr_*`)\n\n- Tools check for `group_replication` plugin status and return `{ enabled: false }` if the plugin is not active.\n\n## InnoDB Cluster Tools (`mysql_cluster_*`)\n\n- **Prerequisites**: Requires InnoDB Cluster infrastructure. Connect to a cluster node (typically via MySQL Router or directly). Cluster metadata schema (`mysql_innodb_cluster_metadata`) must exist.\n- **Cluster status**: `mysql_cluster_status` returns cluster metadata. Use `summary: true` for condensed output without Router configuration schemas. Returns `isInnoDBCluster: false` if not in a cluster.\n- **Instance list**: `mysql_cluster_instances` lists all configured instances with their current member state and role.\n- **Topology**: `mysql_cluster_topology` returns a structured `topology` object (with `primary`, `secondaries`, `recovering`, `offline` arrays) and a `visualization` string grouping members by role.\n- **Router status**: `mysql_cluster_router_status` lists registered routers from cluster metadata. Use `summary: true` to return routerId, routerName, address, version, lastCheckIn, roPort, rwPort, and localCluster. Each router includes `isStale` (true if lastCheckIn is null or >1 hour old). The response includes `staleCount` for quick filtering.\n- **Switchover analysis**: `mysql_cluster_switchover` evaluates replication lag on secondaries and rates each as GOOD (fully synced), ACCEPTABLE (<100 pending), or NOT_RECOMMENDED (>=100 pending). Returns `canSwitchover: false` with a `warning` field if no viable candidates exist.\n\n## MySQL Router Tools (`mysql_router_*`)\n\n- **Prerequisites**: MySQL Router must be running with REST API enabled. The REST API requires an InnoDB Cluster backend for authentication (uses `metadata_cache` credentials).\n- **Self-signed certificates**: Set `MYSQL_ROUTER_INSECURE=true` to bypass TLS certificate verification for development/testing environments.\n- **Route names**: Use `mysql_router_routes` to list available routes (e.g., `bootstrap_rw`, `bootstrap_ro`).\n- **Metadata cache**: The `metadataName` parameter is typically `bootstrap` for bootstrapped routers.\n- **Connection pools**: `mysql_router_pool_status` requires the `[rest_connection_pool]` REST plugin AND `connection_sharing=1` on routes. Without these, the endpoint returns 404. When enabled, pool name is `main`.\n- **Unavailability handling**: When Router REST API is unreachable, tools return `{ available: false, reason: \"...\" }` with descriptive error message instead of throwing.\n\n## Partitioning Tools (`mysql_partition_*`, `mysql_add_partition`, `mysql_drop_partition`, `mysql_reorganize_partition`)\n\n- **Existence Check**: `mysql_partition_info` returns `{ exists: false, table }` when the table does not exist. Returns `{ partitioned: false }` for existing non-partitioned tables.\n- **Value Parameter**: The `value` parameter expects only the boundary value, NOT the full SQL clause.\n - \u274C Incorrect: `value: \"LESS THAN (2024)\"` (SQL syntax error - duplicates keywords)\n - \u2705 Correct: `value: \"2024\"` for RANGE partitions\n - \u2705 Correct: `value: \"1,2,3\"` for LIST partitions (integer values)\n - \u2705 Correct: `value: \"'region1','region2'\"` for LIST COLUMNS (quoted string values)\n - \u2705 Correct: `value: \"4\"` for HASH/KEY (number of partitions to add)\n- **Error Handling**: Write tools return `{ success: false, error }` for common failures (non-partitioned table, nonexistent partition, MAXVALUE conflicts) instead of throwing raw errors.\n- **RANGE + MAXVALUE**: Adding a RANGE partition when a MAXVALUE catch-all exists returns a structured error suggesting `mysql_reorganize_partition` instead.\n- **Reorganize**: Requires `partitionType` parameter (RANGE or LIST). HASH/KEY partitions cannot be reorganized.\n- **Drop Warning**: `mysql_drop_partition` permanently deletes all data in the partition.\n\n## Spatial Tools (`mysql_spatial_*`)\n\n- **Coordinate Order**: All spatial tools use standard **longitude, latitude** parameter order (X, Y), matching GeoJSON and common mapping conventions.\n - \u2705 Example: `{ longitude: -122.4194, latitude: 37.7749 }` for San Francisco\n - MySQL 8.0+ uses EPSG standard axis order (latitude, longitude) internally for SRID 4326, but tools handle this conversion automatically using `axis-order=long-lat` option.\n- **SRID 4326**: Default spatial reference system is WGS 84 (GPS coordinates). Use `srid` parameter to specify other coordinate systems.\n- **WKT Input**: When providing WKT geometry strings, use **longitude first** order: `POINT(-122.4194 37.7749)`.\n- **SPATIAL Indexes**: `mysql_spatial_create_index` requires the column to be NOT NULL. The tool validates this and provides an ALTER TABLE suggestion if needed.\n- **GeoJSON Conversion**: `mysql_spatial_geojson` converts between WKT and GeoJSON formats. `mysql_spatial_point`, `mysql_spatial_polygon`, `mysql_spatial_intersection`, `mysql_spatial_buffer`, and `mysql_spatial_transform` also return GeoJSON representations.\n- **Buffer Segments**: `mysql_spatial_buffer` accepts an optional `segments` parameter (default: 8, MySQL default: 32) controlling the number of segments per quarter-circle in the buffer polygon approximation. Lower values produce simpler polygons with smaller payloads. Note: `segments` only takes effect with Cartesian geometries (SRID 0); geographic SRIDs (e.g., 4326) use MySQL's internal geographic buffer algorithm which does not support custom segment counts. The response includes `segmentsApplied: true/false` to indicate whether the parameter was effective.\n- **Error Handling (P154)**: Table-querying tools (`distance`, `distance_sphere`, `contains`, `within`, `create_column`, `create_index`) return `{ exists: false, table }` for nonexistent tables. `create_column` returns `{ success: false, reason }` for duplicate columns. All tools return `{ success: false, error }` for invalid WKT, coordinates, SRIDs, or other MySQL errors instead of raw exceptions.\n\n## Text Tools (`mysql_like_search`, `mysql_regexp_match`, etc.)\n\n- **LIKE patterns**: `%` matches any characters, `_` matches single character.\n- **Regex**: Uses MySQL regex syntax (not PCRE). Example: `^[A-Z].*@.*\\.com$`\n- **SOUNDEX**: Finds phonetically similar values - matches alternative spellings (e.g., `johndoe` matches `jonedoe`).\n- **WHERE clause**: All text tools support optional `where` parameter to filter rows. For pattern-matching tools (`mysql_regexp_match`, `mysql_like_search`, `mysql_soundex`), the `where` clause is combined with the pattern match using AND.\n- **Concat columns**: `mysql_concat` includes source columns by default. Use `includeSourceColumns: false` for minimal payload (only id and concatenated result).\n- **Minimal output**: Tools return only `id`, target column(s), and computed result with `count`.\n- **Error handling**: All text tools return `{ exists: false, table }` for nonexistent tables and `{ success: false, error }` for other query errors (e.g., unknown column, invalid regex, invalid charset). No raw MySQL errors are thrown.\n\n## Performance Tools (`mysql_explain`, `mysql_query_stats`, etc.)\n\n- **EXPLAIN formats**: `mysql_explain` supports JSON (default), TREE, and TRADITIONAL formats.\n- **EXPLAIN ANALYZE**: `mysql_explain_analyze` shows actual execution times (MySQL 8.0+). Only TREE format is supported; JSON format returns `{ supported: false, reason }`.\n- **Performance schema**: `mysql_slow_queries`, `mysql_query_stats`, and `mysql_index_usage` require `performance_schema` enabled. `mysql_slow_queries` and `mysql_query_stats` truncate query digests to 200 characters for payload efficiency. Timer values exceeding 24 hours are clamped to `-1` with `overflow: true` on the row (indicates a `performance_schema` counter overflow artifact, not a real value).\n- **Index usage**: `mysql_index_usage` filters to the current database by default. Use `table` parameter to filter further. Use `limit` (default: 10) to cap results. Returns `{ exists: false, table }` when the specified table does not exist.\n- **Table stats**: `mysql_table_stats` returns `{ exists: false, table: \"...\" }` gracefully when the table does not exist.\n- **Server-level tools**: `mysql_slow_queries`, `mysql_query_stats`, `mysql_buffer_pool_stats`, and `mysql_thread_stats` query server-level `performance_schema` metadata. They do not take a table parameter and return empty results when no data is available. No table existence checks apply.\n- **Buffer pool**: `mysql_buffer_pool_stats` shows InnoDB memory usage and hit rates.\n- **Thread stats**: `mysql_thread_stats` shows active threads with user, host, database, command, and connection type.\n- **Error handling**: `mysql_explain` and `mysql_explain_analyze` return `{ exists: false, error }` for nonexistent tables and `{ success: false, error }` for other query errors (e.g., syntax errors). No raw MySQL errors are thrown.\n\n## Optimization Tools (`mysql_index_recommendation`, `mysql_query_rewrite`, etc.)\n\n- **Index recommendations**: `mysql_index_recommendation` analyzes table structure and suggests missing indexes. Returns `{ exists: false, table }` when the table does not exist.\n- **Query optimization**: `mysql_query_rewrite` analyzes queries for common anti-patterns (SELECT *, missing LIMIT, OR conditions, leading wildcards) and includes EXPLAIN output. Returns `explainPlan: null` with `explainError` when EXPLAIN fails (e.g., nonexistent table).\n- **Force index**: `mysql_force_index` generates a query with `FORCE INDEX` hint for testing index behavior. Returns `{ exists: false, table }` when the table does not exist. Validates index existence and returns a `warning` if the index is not found on the table.\n- **Optimizer trace**: `mysql_optimizer_trace` returns detailed MySQL optimizer decisions. Use `summary: true` for compact output with only key decisions (recommended for most cases).\n\n## Admin Tools (`mysql_optimize_table`, `mysql_repair_table`, etc.)\n\n- **Optimize**: `mysql_optimize_table` reclaims unused space (InnoDB does recreate + analyze).\n- **Analyze**: `mysql_analyze_table` updates index statistics for the query optimizer.\n- **Check**: `mysql_check_table` verifies table integrity. Options: QUICK, FAST, MEDIUM, EXTENDED, CHANGED.\n- **Repair**: `mysql_repair_table` only works for MyISAM tables; InnoDB reports \"not supported.\"\n- **Flush**: `mysql_flush_tables` writes cached changes to disk. When some specified tables do not exist, valid tables are still flushed; the response returns `{ success: false, notFound, flushed }` listing both missing and successfully flushed tables. Global flush (no tables) always succeeds.\n- **Kill**: `mysql_kill_query` terminates queries by process ID. Use `connection: true` to kill the entire connection. Returns `{ success: false, error }` for invalid process IDs.\n- **Error handling**: `mysql_optimize_table`, `mysql_analyze_table`, `mysql_check_table`, and `mysql_repair_table` return MySQL's native per-table `results` array. Nonexistent tables appear as rows with `Msg_type: \"Error\"` and `Msg_text: \"Table does not exist\"` (no P154 wrapping\u2014these are multi-table DDL commands).\n\n## Monitoring Tools (`mysql_show_processlist`, `mysql_server_health`, etc.)\n\n- **Process list**: `mysql_show_processlist` shows active queries. Use `full: true` for complete query text.\n- **Status/Variables**: `mysql_show_status` and `mysql_show_variables` accept `like` for filtering (e.g., `like: \"%connections%\"`) and `limit` to cap rows (default: 100). Response includes `totalAvailable` and `limited: true` when truncated. RSA public key values in status output are automatically redacted.\n- **Server health**: `mysql_server_health` returns latency, version, uptime, and pool stats in a single call.\n- **InnoDB status**: `mysql_innodb_status` returns InnoDB engine monitor output. Use `summary: true` for parsed key metrics (buffer pool, row ops, transactions).\n- **Replication**: `mysql_replication_status` shows replica/slave status. Returns `configured: false` if replication is not set up.\n- **Pool stats**: `mysql_pool_stats` returns connection pool metrics (total, active, idle, waiting connections).\n\n## Replication Tools (`mysql_master_status`, `mysql_slave_status`, etc.)\n\n- **Master status**: `mysql_master_status` returns current binlog file, position, and GTID set from the source server.\n- **Slave status**: `mysql_slave_status` returns detailed replica status. Returns `configured: false` if not a replica.\n- **Binlog events**: `mysql_binlog_events` shows binary log events. Use `logFile`, `position`, and `limit` (default: 20) to filter. Defaults to the **current** binlog file when `logFile` is omitted. Returns `{ success: false, error }` gracefully for nonexistent binlog files.\n- **GTID status**: `mysql_gtid_status` shows GTID mode (ON/OFF) and executed/purged transaction sets.\n- **Replication lag**: `mysql_replication_lag` calculates delay in seconds. Returns `lagSeconds: null` if not a replica.\n\n## Events Tools (`mysql_event_*`, `mysql_scheduler_status`)\n\n- **Scheduler status**: `mysql_scheduler_status` shows global scheduler state (ON/OFF), event counts, and recently executed events.\n- **Event types**: `mysql_event_create` supports ONE TIME (specify `executeAt`) and RECURRING (specify `interval`, `intervalUnit`, optional `starts`/`ends`). Use `ifNotExists: true` to skip creation if the event already exists.\n- **Graceful error handling**: `mysql_event_create` returns `{ success: false, reason }` when the event already exists (without `ifNotExists`). `mysql_event_alter` and `mysql_event_drop` (without `ifExists`) return `{ success: false, reason }` when the event does not exist. `mysql_event_drop` with `ifExists: true` returns `{ success: true, skipped: true, reason: \"Event did not exist\" }` when the event was already absent.\n- **Event status**: `mysql_event_status` returns `{ exists: false, name }` gracefully when the event is not found, instead of throwing an error.\n- **Event lifecycle**: Use `enabled: false` when creating/testing events. `onCompletion: \"PRESERVE\"` keeps events after expiry.\n- **Alter operations**: `mysql_event_alter` can enable/disable, change schedule/body, change `onCompletion` (PRESERVE/NOT PRESERVE), update comment, or rename (via `newName`).\n- **Cross-schema**: Both `mysql_event_list` and `mysql_event_status` accept `schema` parameter to query other databases. Both return `{ exists: false, schema }` when the specified schema does not exist.\n\n## Schema Tools (`mysql_list_schemas`, `mysql_create_view`, etc.)\n\n- **Schema management**: `mysql_list_schemas` lists databases with charset/collation. Use `pattern` for LIKE filtering (e.g., `pattern: \"app_%\"`). `mysql_create_schema` and `mysql_drop_schema` manage databases.\n- **Graceful schema errors**: `mysql_create_schema` returns `{ success: false, reason }` when the schema already exists (with `ifNotExists: false`). With `ifNotExists: true` (default), returns `{ success: true, skipped: true, reason: \"Schema already exists\" }` for existing schemas. `mysql_drop_schema` returns `{ success: false, reason }` when the schema does not exist (with `ifExists: false`). With `ifExists: true` (default), returns `{ success: true, skipped: true, reason: \"Schema did not exist\" }` for nonexistent schemas.\n- **Views**: `mysql_create_view` supports `orReplace` (default: false), `algorithm` (UNDEFINED/MERGE/TEMPTABLE), and `checkOption` (NONE/CASCADED/LOCAL). Returns `{ success: false, reason }` when the view already exists without `orReplace` or when the SQL definition is invalid (e.g., referencing nonexistent tables). `mysql_list_views` shows definitions, security type, and updatability.\n- **Constraints**: `mysql_list_constraints` returns primary keys, foreign keys, unique, and check constraints. Use `type` parameter to filter (e.g., `type: \"FOREIGN KEY\"`). Returns `{ exists: false, table }` when the table does not exist.\n- **Introspection**: `mysql_list_stored_procedures`, `mysql_list_functions`, `mysql_list_triggers`, `mysql_list_events` enumerate database objects. All accept optional `schema` parameter for cross-database inspection. `mysql_list_events` also accepts `status` filter (`ENABLED`, `DISABLED`, `SLAVESIDE_DISABLED`). Returns `{ exists: false, schema }` when the specified schema does not exist.\n\n## Sys Schema Tools (`mysql_sys_*`)\n\n- **User/Host activity**: `mysql_sys_user_summary` and `mysql_sys_host_summary` show connection counts, statement latency, and I/O metrics. Filter with `user` or `host` parameters.\n- **Statement analysis**: `mysql_sys_statement_summary` returns query digest stats (default `limit: 20`). Order by `total_latency` (default), `exec_count`, `avg_latency`, `rows_sent`, or `rows_examined`.\n- **I/O analysis**: `mysql_sys_io_summary` supports `table` (default), `file`, and `global` types for I/O breakdown (default `limit: 20`).\n- **Wait events**: `mysql_sys_wait_summary` supports `global` (default), `by_host`, `by_user`, and `by_instance` types for wait analysis. The `by_instance` type queries `performance_schema` directly (no sys view exists) and returns `event`, `total`, `total_latency`, and `avg_latency` columns with formatted latencies.\n- **Lock contention**: `mysql_sys_innodb_lock_waits` shows active lock waits. Returns `hasContention: false` when none.\n- **Memory usage**: `mysql_sys_memory_summary` returns `globalMemory` (by event type) and `memoryByUser` arrays with corresponding `globalMemoryCount` and `memoryByUserCount` fields. The `limit` parameter (default 10) applies to both arrays.\n- **Schema stats**: `mysql_sys_schema_stats` returns 3 arrays: `tableStatistics` (DML and I/O per table), `indexStatistics` (per-index usage), and `autoIncrementStatus` (usage ratios), each with a corresponding count field (`tableStatisticsCount`, `indexStatisticsCount`, `autoIncrementStatusCount`). Filter by `schema` (defaults to current database). Returns `{ exists: false, schema }` when the specified schema does not exist. The `limit` parameter (default 10) applies per array.\n\n## Stats Tools (`mysql_stats_*`)\n\n- **Descriptive statistics**: `mysql_stats_descriptive` returns mean, median, stddev, min, max, count for numeric columns. Supports `where` filtering.\n- **Percentiles**: `mysql_stats_percentiles` calculates custom percentile values (default: p25, p50, p75, p90, p95, p99).\n- **Correlation**: `mysql_stats_correlation` calculates Pearson correlation between two numeric columns with interpretation.\n- **Distribution**: `mysql_stats_distribution` analyzes value distribution with configurable histogram buckets.\n- **Time series**: `mysql_stats_time_series` aggregates data by time intervals (minute/hour/day/week/month) with sum/avg/count/min/max.\n- **Regression**: `mysql_stats_regression` performs simple linear regression (y = mx + b) with R\u00B2 fit analysis.\n- **Sampling**: `mysql_stats_sampling` returns random rows. Use `seed` for reproducibility, `columns` to limit output.\n- **Histogram**: `mysql_stats_histogram` views MySQL 8.0+ optimizer histogram statistics. Use `update: true` to create/refresh. Returns `{ exists: false, table }` when the table does not exist, and `{ exists: false, column, table, message }` when the column does not exist on the table.\n- **Error handling**: All stats tools return `{ exists: false, table }` gracefully when the table does not exist, and `{ success: false, error }` for other query errors (e.g., unknown column). No raw MySQL errors are thrown.\n\n## Security Tools (`mysql_security_*`)\n\n- **SSL status**: `mysql_security_ssl_status` returns SSL/TLS connection status, cipher, certificate paths, and session statistics.\n- **Encryption status**: `mysql_security_encryption_status` checks TDE availability, keyring plugins, encrypted tablespaces, and encryption settings.\n- **Password validation**: `mysql_security_password_validate` uses MySQL `validate_password` component to check password strength (0-100 scale). Returns `available: false` if component not installed.\n- **Data masking**: `mysql_security_mask_data` masks sensitive data. Types: `email` (preserves domain), `phone` (shows last 4), `ssn` (shows last 4), `credit_card` (shows first/last 4), `partial` (uses `keepFirst`/`keepLast`). Credit card masking requires more than 8 digits; values with 8 or fewer digits are fully masked with a `warning` field.\n- **User privileges**: `mysql_security_user_privileges` returns comprehensive user privilege report. Filter with `user` parameter to reduce payload. Returns `{ exists: false, user }` for nonexistent users (P154). Use `summary: true` for condensed output (privilege counts instead of raw GRANT strings). Summary mode caps `globalPrivileges` at 10 entries and includes `totalGlobalPrivileges` for the full count.\n- **Sensitive tables**: `mysql_security_sensitive_tables` identifies columns matching sensitive patterns (password, email, ssn, etc.). Use `schema` parameter to limit scope. Returns `{ exists: false, schema }` for nonexistent schemas (P154).\n- **Enterprise features**: `mysql_security_audit`, `mysql_security_firewall_status`, `mysql_security_firewall_rules` report availability and suggest installation for MySQL Enterprise Edition.\n\n## ProxySQL Tools (`mysql_proxysql_*`)\n\n- **Prerequisites**: ProxySQL must be running with admin interface accessible (default port 6032). Connection is configured via `PROXYSQL_HOST`, `PROXYSQL_PORT`, `PROXYSQL_USER`, `PROXYSQL_PASSWORD` environment variables (defaults: `localhost`, `6032`, `admin`, `admin`). The Docker test environment uses `radmin`/`radmin`.\n- **Status monitoring**: `proxysql_status` returns global status variables. Use `summary: true` for key metrics only (uptime, queries, connections). Both modes include `summary` (boolean) and `totalVarsAvailable` (count of all available status variables) for response clarity.\n- **Global variables**: `proxysql_global_variables` supports `prefix` filter (`mysql`, `admin`, or `all`) and `like` pattern for variable name matching. Use `limit` (default: 50) to control payload size. Response includes `totalVarsAvailable` count for truncation awareness. Variables containing passwords or credentials are automatically redacted.\n- **Runtime status**: `proxysql_runtime_status` returns version and admin variables. Use `summary: true` for condensed output (version, read_only, cluster, interfaces). Sensitive variables (passwords, credentials) are automatically redacted. Both modes include `totalAdminVarsAvailable` count.\n- **Backend servers**: `proxysql_servers` and `proxysql_connection_pool` show backend MySQL server configurations and connection pool stats. Filter with `hostgroup_id`. Nonexistent `hostgroup_id` values return empty arrays (`count: 0`) gracefully.\n- **Query analysis**: `proxysql_query_rules` lists routing rules; `proxysql_query_digest` shows top queries by execution count.\n- **Admin commands**: `proxysql_commands` executes LOAD/SAVE for users, servers, query rules, variables, and FLUSH operations.\n- **Memory/Process**: `proxysql_memory_stats` shows memory allocation; `proxysql_process_list` shows active client sessions.\n- **Error handling**: ProxySQL tools propagate connection errors when the admin interface is unreachable. All read tools return structured responses with `success: true` and appropriate data arrays.\n\n## MySQL Shell Tools (`mysqlsh_*`)\n\n- **Prerequisites**: MySQL Shell must be installed and accessible via `MYSQLSH_PATH` environment variable or system PATH.\n- **Version check**: `mysqlsh_version` verifies MySQL Shell availability before running other shell tools.\n- **Upgrade checking**: `mysqlsh_check_upgrade` analyzes MySQL server for upgrade compatibility issues. Returns `errorCount`, `warningCount`, and `noticeCount` summary with full JSON report. **Note**: Returns `{ success: false, error }` when MySQL Shell's version is lower than the current server version\u2014Shell cannot analyze a server newer than itself. Also fails when `targetVersion` is lower than the current server version (no downgrade analysis).\n- **Script execution**: `mysqlsh_run_script` supports JavaScript (`js`), Python (`py`), and SQL (`sql`) languages with full access to MySQL Shell APIs. SQL scripts support comments and multi-statement syntax.\n- **Table export**: `mysqlsh_export_table` uses `util.exportTable()` for CSV or TSV export. Use `where` parameter for filtered exports. Returns structured error for privilege issues.\n- **Parallel import**: `mysqlsh_import_table` uses `util.importTable()` for high-performance parallel import. **Important**: For CSV files, explicitly set `fieldsTerminatedBy: \",\"` as the delimiter is not auto-detected. Requires `local_infile` enabled on server (use `updateServerSettings: true` to auto-enable). Use `skipRows: 1` to skip header row. The `columns` parameter maps input fields **by position** to the specified table columns. **Note**: On InnoDB Cluster (Group Replication), target tables must have a PRIMARY KEY.\n- **JSON import**: `mysqlsh_import_json` uses `util.importJson()` for document import. Supports both NDJSON (one JSON object per line) and multi-line JSON objects. **Does NOT support JSON arrays.** **Requires X Protocol (port 33060)**.\n- **Dump utilities**: `mysqlsh_dump_instance`, `mysqlsh_dump_schemas`, `mysqlsh_dump_tables` create compressed parallel dumps. Use `dryRun: true` to preview. All dump tools return structured error messages for privilege issues with actionable guidance.\n- **Load utility**: `mysqlsh_load_dump` restores dumps. Requires `local_infile` enabled or `updateServerSettings: true`. Use `dryRun: true` to preview what would be loaded without applying changes. Returns `{ success: false, error, hint }` for duplicate object conflicts.\n- **Privilege note**: Dump operations may require EVENT, TRIGGER, or ROUTINE privileges. Use `ddlOnly: true` (schemas) or `all: false` (tables) to skip restricted metadata.\n- **Error handling**: All shell tools return `{ success: false, error }` for operational failures instead of throwing raw exceptions. Privilege, local_infile, and X Protocol errors include a `hint` field with actionable remediation guidance.\n\n## Parameter Aliases\n\nMany tools accept **alternative parameter names** (aliases) for commonly used fields. The server normalizes these automatically\u2014use whichever feels most natural:\n\n- **Table name**: `table`, `tableName`, or `name` \u2014 accepted by Core tools (`mysql_describe_table`, `mysql_get_indexes`, `mysql_drop_table`, `mysql_create_index`), Text tools (`mysql_like_search`, `mysql_regexp_match`, `mysql_soundex`, `mysql_substring`, `mysql_concat`, `mysql_collation_convert`), Backup tools (`mysql_export_table`, `mysql_import_data`), Partitioning tools (`mysql_partition_info`, `mysql_add_partition`, `mysql_drop_partition`, `mysql_reorganize_partition`), Performance tools (`mysql_table_stats`, `mysql_index_usage`), and Admin tools (`mysql_optimize_table`, `mysql_analyze_table`, `mysql_check_table`, `mysql_flush_tables`).\n- **Query/SQL**: `query` or `sql` \u2014 accepted by `mysql_read_query`, `mysql_write_query`, `mysql_explain`, `mysql_explain_analyze`, `mysql_query_rewrite`, and `mysql_optimizer_trace`.\n- **WHERE clause**: `where` or `filter` \u2014 accepted by `mysql_export_table` and Text tools (`mysql_like_search`, `mysql_regexp_match`, `mysql_soundex`, `mysql_substring`, `mysql_concat`, `mysql_collation_convert`).\n- **Column name**: `column` or `col` \u2014 accepted by Text tools (`mysql_like_search`, `mysql_regexp_match`, `mysql_soundex`, `mysql_substring`, `mysql_collation_convert`).\n- **Admin tables array**: Admin maintenance tools accept a singular `table` (or `tableName`/`name`) as an alias for the `tables` array parameter, automatically wrapping it in an array.\n\n## Code Mode (`mysql_execute_code`)\n\n- **Purpose**: Execute JavaScript/TypeScript code in a sandboxed VM with access to all MySQL tools via the `mysql.*` API namespace. Ideal for multi-step workflows, data aggregation, conditional logic, and complex orchestrations that would otherwise require many sequential tool calls.\n- **When to use**: Prefer Code Mode when a task requires 3+ sequential tool calls, conditional branching based on query results, data transformation between steps, or aggregation across multiple tables.\n- **API namespace**: The `mysql` object exposes 24 groups matching the tool groups: `mysql.core`, `mysql.json`, `mysql.transactions`, `mysql.text`, `mysql.fulltext`, `mysql.performance`, `mysql.optimization`, `mysql.admin`, `mysql.monitoring`, `mysql.backup`, `mysql.replication`, `mysql.partitioning`, `mysql.schema`, `mysql.shell`, `mysql.events`, `mysql.sysschema`, `mysql.stats`, `mysql.spatial`, `mysql.security`, `mysql.roles`, `mysql.docstore`, `mysql.cluster`, `mysql.proxysql`, `mysql.router`.\n- **Method naming**: Tool names map to methods by stripping the prefix: `mysql_read_query` \u2192 `mysql.core.readQuery(sql)`, `mysql_json_extract` \u2192 `mysql.json.extract({...})`, `mysqlsh_version` \u2192 `mysql.shell.version()`.\n- **Positional shorthand**: Common tools accept positional arguments: `mysql.core.readQuery(\"SELECT 1\")` instead of `mysql.core.readQuery({ query: \"SELECT 1\" })`.\n- **Help**: Call `mysql.help()` for a full API overview, or `mysql.<group>.help()` for group-specific methods and examples.\n- **Return value**: The last expression in the code block is returned as the result. Use `return` in async functions or let the final expression evaluate.\n- **Security**: Code runs in an isolated VM sandbox. Blocked patterns include `require`, `import`, `process`, `eval`, `Function`, filesystem/network access. Rate-limited to prevent abuse.\n- **Transaction cleanup**: Any transactions opened but not committed are automatically rolled back when execution completes.\n- **Scope**: Requires `admin` scope.\n";
17
17
  //# sourceMappingURL=ServerInstructions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ServerInstructions.d.ts","sourceRoot":"","sources":["../../src/constants/ServerInstructions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAa,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAqFzF;;GAEG;AACH,wBAAgB,oBAAoB,CAChC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,EACzB,SAAS,EAAE,kBAAkB,EAAE,EAC/B,OAAO,EAAE,gBAAgB,EAAE,GAC5B,MAAM,CAqCR;AAkBD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,mgJAAoB,CAAC"}
1
+ {"version":3,"file":"ServerInstructions.d.ts","sourceRoot":"","sources":["../../src/constants/ServerInstructions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAEV,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AA6S3B;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,EACzB,SAAS,EAAE,kBAAkB,EAAE,EAC/B,OAAO,EAAE,gBAAgB,EAAE,GAC1B,MAAM,CAqCR;AAuBD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,0myCAAoB,CAAC"}
@@ -4,7 +4,7 @@
4
4
  * These instructions are automatically sent to MCP clients during initialization,
5
5
  * providing guidance for AI agents on tool usage.
6
6
  */
7
- import { TOOL_GROUPS } from '../filtering/ToolConstants.js';
7
+ import { TOOL_GROUPS } from "../filtering/ToolConstants.js";
8
8
  /**
9
9
  * Base instructions that are always included
10
10
  */
@@ -20,62 +20,118 @@ const BASE_INSTRUCTIONS = `# mysql-mcp Usage Instructions
20
20
 
21
21
  ## JSON Tools (\`mysql_json_*\`)
22
22
 
23
- - **Strict Quoting**: When passing string values to JSON tools, you **must quote the string** if you intend to store it as a JSON string.
24
- - Incorrect: \`value: "green"\` (interpreted as invalid JSON)
25
- - ✅ Correct: \`value: "\\"green\\""\` (stored as string "green")
26
- - ✅ Correct: \`value: 42\` (stored as number)
27
- - ✅ Correct: \`value: {"key": "val"}\` (stored as object)
28
- - **Validation**: Creating or updating JSON values enforces strict JSON validity checks.
23
+ - **Automatic String Handling**: JSON tools automatically convert bare strings to valid JSON.
24
+ - \`value: "green"\` stored as JSON string \`"green"\`
25
+ - ✅ \`value: 42\` stored as number \`42\`
26
+ - ✅ \`value: {"key": "val"}\` stored as object
27
+ - ✅ \`value: "[1,2,3]"\` stored as array (already valid JSON)
28
+ - **Validation**: Creating or updating JSON values enforces JSON validity after auto-conversion.
29
+ - **Error Handling**: All table-querying JSON tools return \`{ exists: false, table }\` for nonexistent tables and \`{ success: false, error }\` for other query errors, instead of throwing raw exceptions. \`mysql_json_merge\` and \`mysql_json_diff\` (literal JSON, no table) return \`{ success: false, error }\` for invalid input.
29
30
 
30
31
  ## Transactions & Safety (\`mysql_transaction_*\`)
31
32
 
32
- - Use transactions for multi-step changes:
33
- 1. Call \`mysql_transaction_begin\` get \`transactionId\`
34
- 2. Perform updates with \`transactionId\`
35
- 3. If successful, \`mysql_transaction_commit\`
36
- 4. If error, \`mysql_transaction_rollback\`
33
+ - **Interactive transactions**: Use \`mysql_transaction_begin\` → get \`transactionId\` → pass it to \`mysql_read_query\` or \`mysql_write_query\` for queries within the transaction → \`mysql_transaction_commit\` or \`mysql_transaction_rollback\`.
34
+ - **Atomic execution**: \`mysql_transaction_execute\` runs multiple SQL statements in a single atomic transaction. All succeed or all are rolled back. Returns \`rows\` and \`rowCount\` for SELECT statements, \`rowsAffected\` for write statements. Returns \`{ success: false, reason }\` if the \`statements\` array is empty. Returns \`{ success: false, reason, rolledBack: true }\` if any statement fails.
35
+ - **Isolation levels**: \`mysql_transaction_begin\` and \`mysql_transaction_execute\` accept optional \`isolationLevel\`: \`READ UNCOMMITTED\`, \`READ COMMITTED\`, \`REPEATABLE READ\` (default), \`SERIALIZABLE\`.
36
+ - **Savepoints**: Within an active transaction, use \`mysql_transaction_savepoint\` to create checkpoints, \`mysql_transaction_rollback_to\` for partial rollback, and \`mysql_transaction_release\` to remove a savepoint.
37
+ - **Graceful error handling**: \`mysql_transaction_commit\` and \`mysql_transaction_rollback\` return \`{ success: false, reason }\` for invalid or expired transaction IDs. Savepoint tools (\`mysql_transaction_savepoint\`, \`mysql_transaction_release\`, \`mysql_transaction_rollback_to\`) return \`{ success: false, reason }\` when the transaction or savepoint does not exist.
37
38
 
38
39
  ## Document Store (\`mysql_doc_*\`)
39
40
 
41
+ - **Collection creation**: \`mysql_doc_create_collection\` creates a JSON document collection. Use \`ifNotExists: true\` to avoid errors when the collection already exists. Returns \`{ success: false, reason }\` if collection already exists (without \`ifNotExists\`).
42
+ - **Collection drop**: \`mysql_doc_drop_collection\` removes a collection. Returns \`{ success: false, reason }\` if collection does not exist (without \`ifExists\`). With \`ifExists: true\` (default), returns \`{ success: true, message: "Collection did not exist" }\` when the collection was already absent.
43
+ - **Collection detection**: Tools identify document collections as tables containing a \`doc JSON\` column with an \`_id\` field. Manually created JSON tables may appear in collection listings.
44
+ - **Nonexistent collection handling**: \`mysql_doc_collection_info\`, \`mysql_doc_add\`, \`mysql_doc_modify\`, \`mysql_doc_remove\`, and \`mysql_doc_create_index\` return \`{ exists: false, collection }\` when the target collection does not exist.
45
+ - **Index creation**: \`mysql_doc_create_index\` returns \`{ success: false, reason }\` if the index or its generated columns already exist.
40
46
  - **Filter Syntax** (for \`mysql_doc_modify\`, \`mysql_doc_remove\`):
41
47
  - **By _id**: Pass the 32-character hex _id directly: \`filter: "686dd247b9724bcfa08ce6f1efed8b77"\`
42
48
  - **By field value**: Use \`field=value\` format: \`filter: "name=Alice"\` or \`filter: "age=30"\`
43
49
  - **By existence**: Use JSON path: \`filter: "$.address"\` (matches docs where address field exists)
44
50
  - ❌ Incorrect: \`filter: "$.name == 'Alice'"\` (comparison operators not supported in path)
45
51
  - ✅ Correct: \`filter: "name=Alice"\` (field=value format)
46
- - **Find Filters** (\`mysql_doc_find\`): The filter parameter checks for field existence using JSON path (e.g., \`$.address.zip\`).
52
+ - **Schema existence**: \`mysql_doc_list_collections\` returns \`{ exists: false, schema }\` when a nonexistent schema is explicitly provided, matching the P154 pattern used by schema introspection and event tools.
53
+ - **Find Filters** (\`mysql_doc_find\`): The filter parameter checks for field existence using JSON path only (e.g., \`$.address.zip\`). Does NOT support \`_id\` or \`field=value\` formats. Returns \`{ exists: false, collection, documents: [], count: 0 }\` gracefully if the collection does not exist.
47
54
 
48
- ## Fulltext Search (\`mysql_fulltext_boolean\`)
49
55
 
50
- - Uses MySQL boolean operators: \`+word\` (AND), \`-word\` (NOT), \`word*\` (wildcard), \`> <\` (relevance weighting)
56
+ ## Fulltext Search (\`mysql_fulltext_*\`)
51
57
 
52
- ## DDL Statements (\`mysql_write_query\`)
58
+ - **Index management**: \`mysql_fulltext_create\` creates a FULLTEXT index (returns \`{ success: false, reason }\` if index already exists), \`mysql_fulltext_drop\` removes it (returns \`{ success: false, reason }\` if index does not exist).
59
+ - **Search modes**: \`mysql_fulltext_search\` supports NATURAL (default), BOOLEAN, and EXPANSION modes.
60
+ - **Boolean operators** (\`mysql_fulltext_boolean\`): \`+word\` (required), \`-word\` (excluded), \`word*\` (prefix wildcard), \`>word\`/\`<word\` (relevance weighting).
61
+ - **Query expansion** (\`mysql_fulltext_expand\`): Finds related terms - may return more rows than exact match.
62
+ - **Column matching**: MATCH column list must exactly match the columns of an existing FULLTEXT index. Searching a subset of indexed columns will fail.
63
+ - **Output**: Tools return only \`id\`, searched column(s), and \`relevance\` score. Use \`maxLength\` parameter to truncate long text columns in results (e.g., \`maxLength: 200\` truncates values over 200 characters with \`...\`).
64
+ - **Error handling**: All fulltext tools return \`{ exists: false, table }\` for nonexistent tables. Search tools (\`mysql_fulltext_search\`, \`mysql_fulltext_boolean\`, \`mysql_fulltext_expand\`) also return \`{ success: false, error }\` for other query errors (e.g., FULLTEXT index column mismatch). No raw MySQL errors are thrown.
53
65
 
54
- - DDL statements (like \`CREATE TABLE\`) are automatically handled via text protocol fallback.
55
66
 
56
- ## Role Management
67
+ ## Backup Tools (\`mysql_export_table\`, \`mysql_import_data\`, etc.)
57
68
 
58
- - Role tools require appropriate privileges.
59
- - \`mysql_role_grant\` supports \`db.table\` syntax (e.g., \`GRANT SELECT ON my_schema.my_table\`).
69
+ - **Export formats**: \`mysql_export_table\` supports SQL (INSERT statements) and CSV formats.
70
+ - **Default limit**: \`mysql_export_table\` returns at most 100 rows by default. Use \`limit\` parameter to override.
71
+ - **WHERE filtering**: Use \`where\` parameter to export subsets: \`where: "category = 'electronics'"\`.
72
+ - **CSV and JSON columns**: CSV export escapes JSON columns with double-quote encoding—valid but complex. Consider SQL format for JSON-heavy tables.
73
+ - **Export error handling**: \`mysql_export_table\` returns \`{ exists: false, table }\` for nonexistent tables and \`{ success: false, error }\` for other query errors (e.g., invalid WHERE clause, unknown column). No raw exceptions are thrown.
74
+ - **Import prerequisite**: \`mysql_import_data\` requires the target table to already exist. Returns \`{ exists: false, table }\` gracefully if the table does not exist.
75
+ - **Import error handling**: \`mysql_import_data\` returns \`{ success: false, error, rowsInserted }\` for all insertion failures (duplicate keys, unknown columns, data truncation) instead of throwing, reporting how many rows were successfully inserted before the error.
76
+ - **Dump commands**: \`mysql_create_dump\` and \`mysql_restore_dump\` generate CLI commands—they do not execute directly.
77
+
78
+ ## Core Tools (\`mysql_read_query\`, \`mysql_write_query\`, \`mysql_create_table\`, etc.)
79
+
80
+ - **Prepared statements**: \`mysql_read_query\` and \`mysql_write_query\` support parameterized queries via the \`params\` array. Use \`?\` placeholders: \`query: "SELECT * FROM users WHERE id = ?", params: [123]\`.
81
+ - **DDL statements**: DDL (e.g., \`CREATE TABLE\`, \`ALTER TABLE\`) is automatically handled via text protocol fallback in \`mysql_write_query\`.
82
+ - **Query error handling**: \`mysql_read_query\` and \`mysql_write_query\` return \`{ success: false, error }\` for all query errors (nonexistent table, syntax, permissions, etc.), instead of throwing raw errors.
83
+ - **Boolean defaults**: \`mysql_create_table\` auto-converts boolean \`default: true\` to \`1\` and \`default: false\` to \`0\` for MySQL compatibility. Alternatively, use \`TINYINT(1)\` with numeric defaults directly.
84
+ - **Existence checks**: \`mysql_describe_table\` and \`mysql_get_indexes\` return \`{ exists: false, table: "..." }\` gracefully when the table does not exist, avoiding raw SQL errors.
85
+ - **Create/Drop safety**: \`mysql_create_table\` returns \`{ success: false, reason }\` when the table already exists (without \`ifNotExists\`). \`mysql_drop_table\` returns \`{ success: false, reason }\` when the table does not exist (without \`ifExists\`). With \`ifExists: true\`, dropping a nonexistent table returns \`{ success: true, skipped: true, reason: "Table did not exist" }\`.
86
+ - **Index creation**: \`mysql_create_index\` supports BTREE (default), HASH, FULLTEXT, and SPATIAL types. Use \`ifNotExists: true\` to skip if the index already exists. Returns \`{ success: false, reason }\` when the index already exists (without \`ifNotExists\`). Returns \`{ exists: false, table }\` when the target table does not exist. Note: InnoDB only supports BTREE indexes; HASH type is silently converted to BTREE (the response includes a \`warning\` field). HASH is only effective with the MEMORY engine.
87
+ - **Table names**: All core tools support qualified names (\`schema.table\` format) for cross-database operations.
88
+
89
+ ## Role Management (\`mysql_role_*\`, \`mysql_user_roles\`)
90
+
91
+ - **Privilege requirements**: Role management requires \`CREATE ROLE\`, \`DROP ROLE\`, \`GRANT\`, and \`REVOKE\` privileges.
92
+ - **Role lifecycle**: Create roles with \`mysql_role_create\`, grant privileges with \`mysql_role_grant\`, then assign to users with \`mysql_role_assign\`.
93
+ - **Listing roles**: \`mysql_role_list\` shows all defined roles. Use \`pattern\` parameter for LIKE-style filtering (e.g., \`pattern: "admin%"\`).
94
+ - **Create/Drop safety**: \`mysql_role_create\` with \`ifNotExists: true\` (default) returns \`{ success: true, skipped: true, reason: "Role already exists" }\` for existing roles. \`mysql_role_drop\` with \`ifExists: true\` (default) returns \`{ success: true, skipped: true, reason: "Role did not exist" }\` for nonexistent roles.
95
+ - **Graceful create/drop errors**: \`mysql_role_create\` returns \`{ success: false, reason }\` when the role already exists (without \`ifNotExists\`). \`mysql_role_drop\` returns \`{ success: false, reason }\` when the role does not exist (without \`ifExists\`).
96
+ - **Privilege grants**: \`mysql_role_grant\` supports \`database.table\` syntax (e.g., \`table: "my_schema.my_table"\`). Use \`table: "*"\` for schema-wide privileges (e.g., \`testdb.*\`). Use \`privileges: ["SELECT", "INSERT"]\`. Returns \`{ success: false, error }\` for nonexistent tables.
97
+ - **Role assignment**: \`mysql_role_assign\` assigns a role to a user. Use \`withAdminOption: true\` to allow the user to grant the role to others. Returns \`{ success: false, error }\` when the target user does not exist.
98
+ - **Role revocation**: \`mysql_role_revoke\` pre-checks \`mysql.role_edges\` and returns \`{ success: false, reason } \` when the role is not currently assigned to the user. Also returns \`{ success: false, error } \` when the target user does not exist.
99
+ - **User roles**: \`mysql_user_roles\` lists roles assigned to a user, including the \`admin\` flag (Y/N) indicating admin option status. Returns \`{ exists: false }\` when the user does not exist.
100
+ - **Existence checks**: \`mysql_role_grants\` returns \`exists: false\` if the role does not exist, avoiding raw SQL errors. \`mysql_role_grant\`, \`mysql_role_assign\`, and \`mysql_role_revoke\` also check role existence and return \`{ exists: false }\` gracefully.
60
101
 
61
102
  ## Group Replication (\`mysql_gr_*\`)
62
103
 
63
- - Tools check for \`group_replication\` plugin status and return "not active" if plugin is not active.
104
+ - Tools check for \`group_replication\` plugin status and return \`{ enabled: false }\` if the plugin is not active.
105
+
106
+ ## InnoDB Cluster Tools (\`mysql_cluster_*\`)
107
+
108
+ - **Prerequisites**: Requires InnoDB Cluster infrastructure. Connect to a cluster node (typically via MySQL Router or directly). Cluster metadata schema (\`mysql_innodb_cluster_metadata\`) must exist.
109
+ - **Cluster status**: \`mysql_cluster_status\` returns cluster metadata. Use \`summary: true\` for condensed output without Router configuration schemas. Returns \`isInnoDBCluster: false\` if not in a cluster.
110
+ - **Instance list**: \`mysql_cluster_instances\` lists all configured instances with their current member state and role.
111
+ - **Topology**: \`mysql_cluster_topology\` returns a structured \`topology\` object (with \`primary\`, \`secondaries\`, \`recovering\`, \`offline\` arrays) and a \`visualization\` string grouping members by role.
112
+ - **Router status**: \`mysql_cluster_router_status\` lists registered routers from cluster metadata. Use \`summary: true\` to return routerId, routerName, address, version, lastCheckIn, roPort, rwPort, and localCluster. Each router includes \`isStale\` (true if lastCheckIn is null or >1 hour old). The response includes \`staleCount\` for quick filtering.
113
+ - **Switchover analysis**: \`mysql_cluster_switchover\` evaluates replication lag on secondaries and rates each as GOOD (fully synced), ACCEPTABLE (<100 pending), or NOT_RECOMMENDED (>=100 pending). Returns \`canSwitchover: false\` with a \`warning\` field if no viable candidates exist.
64
114
 
65
115
  ## MySQL Router Tools (\`mysql_router_*\`)
66
116
 
67
- - **Prerequisites**: Router REST API requires InnoDB Cluster to be running (authentication uses \`metadata_cache\` backend)
68
- - **Self-signed certificates**: Set \`MYSQL_ROUTER_INSECURE=true\` to bypass TLS certificate verification for development/testing
69
- - **Route names**: Use \`mysql_router_routes\` to list available routes (e.g., \`bootstrap_rw\`, \`bootstrap_ro\`)
70
- - **Metadata cache**: The \`metadataName\` parameter is typically \`bootstrap\` for bootstrapped routers
117
+ - **Prerequisites**: MySQL Router must be running with REST API enabled. The REST API requires an InnoDB Cluster backend for authentication (uses \`metadata_cache\` credentials).
118
+ - **Self-signed certificates**: Set \`MYSQL_ROUTER_INSECURE=true\` to bypass TLS certificate verification for development/testing environments.
119
+ - **Route names**: Use \`mysql_router_routes\` to list available routes (e.g., \`bootstrap_rw\`, \`bootstrap_ro\`).
120
+ - **Metadata cache**: The \`metadataName\` parameter is typically \`bootstrap\` for bootstrapped routers.
121
+ - **Connection pools**: \`mysql_router_pool_status\` requires the \`[rest_connection_pool]\` REST plugin AND \`connection_sharing=1\` on routes. Without these, the endpoint returns 404. When enabled, pool name is \`main\`.
122
+ - **Unavailability handling**: When Router REST API is unreachable, tools return \`{ available: false, reason: "..." }\` with descriptive error message instead of throwing.
71
123
 
72
124
  ## Partitioning Tools (\`mysql_partition_*\`, \`mysql_add_partition\`, \`mysql_drop_partition\`, \`mysql_reorganize_partition\`)
73
125
 
126
+ - **Existence Check**: \`mysql_partition_info\` returns \`{ exists: false, table }\` when the table does not exist. Returns \`{ partitioned: false }\` for existing non-partitioned tables.
74
127
  - **Value Parameter**: The \`value\` parameter expects only the boundary value, NOT the full SQL clause.
75
128
  - ❌ Incorrect: \`value: "LESS THAN (2024)"\` (SQL syntax error - duplicates keywords)
76
129
  - ✅ Correct: \`value: "2024"\` for RANGE partitions
77
- - ✅ Correct: \`value: "1,2,3"\` for LIST partitions
130
+ - ✅ Correct: \`value: "1,2,3"\` for LIST partitions (integer values)
131
+ - ✅ Correct: \`value: "'region1','region2'"\` for LIST COLUMNS (quoted string values)
78
132
  - ✅ Correct: \`value: "4"\` for HASH/KEY (number of partitions to add)
133
+ - **Error Handling**: Write tools return \`{ success: false, error }\` for common failures (non-partitioned table, nonexistent partition, MAXVALUE conflicts) instead of throwing raw errors.
134
+ - **RANGE + MAXVALUE**: Adding a RANGE partition when a MAXVALUE catch-all exists returns a structured error suggesting \`mysql_reorganize_partition\` instead.
79
135
  - **Reorganize**: Requires \`partitionType\` parameter (RANGE or LIST). HASH/KEY partitions cannot be reorganized.
80
136
  - **Drop Warning**: \`mysql_drop_partition\` permanently deletes all data in the partition.
81
137
 
@@ -85,6 +141,166 @@ const BASE_INSTRUCTIONS = `# mysql-mcp Usage Instructions
85
141
  - ✅ Example: \`{ longitude: -122.4194, latitude: 37.7749 }\` for San Francisco
86
142
  - MySQL 8.0+ uses EPSG standard axis order (latitude, longitude) internally for SRID 4326, but tools handle this conversion automatically using \`axis-order=long-lat\` option.
87
143
  - **SRID 4326**: Default spatial reference system is WGS 84 (GPS coordinates). Use \`srid\` parameter to specify other coordinate systems.
144
+ - **WKT Input**: When providing WKT geometry strings, use **longitude first** order: \`POINT(-122.4194 37.7749)\`.
145
+ - **SPATIAL Indexes**: \`mysql_spatial_create_index\` requires the column to be NOT NULL. The tool validates this and provides an ALTER TABLE suggestion if needed.
146
+ - **GeoJSON Conversion**: \`mysql_spatial_geojson\` converts between WKT and GeoJSON formats. \`mysql_spatial_point\`, \`mysql_spatial_polygon\`, \`mysql_spatial_intersection\`, \`mysql_spatial_buffer\`, and \`mysql_spatial_transform\` also return GeoJSON representations.
147
+ - **Buffer Segments**: \`mysql_spatial_buffer\` accepts an optional \`segments\` parameter (default: 8, MySQL default: 32) controlling the number of segments per quarter-circle in the buffer polygon approximation. Lower values produce simpler polygons with smaller payloads. Note: \`segments\` only takes effect with Cartesian geometries (SRID 0); geographic SRIDs (e.g., 4326) use MySQL's internal geographic buffer algorithm which does not support custom segment counts. The response includes \`segmentsApplied: true/false\` to indicate whether the parameter was effective.
148
+ - **Error Handling (P154)**: Table-querying tools (\`distance\`, \`distance_sphere\`, \`contains\`, \`within\`, \`create_column\`, \`create_index\`) return \`{ exists: false, table }\` for nonexistent tables. \`create_column\` returns \`{ success: false, reason }\` for duplicate columns. All tools return \`{ success: false, error }\` for invalid WKT, coordinates, SRIDs, or other MySQL errors instead of raw exceptions.
149
+
150
+ ## Text Tools (\`mysql_like_search\`, \`mysql_regexp_match\`, etc.)
151
+
152
+ - **LIKE patterns**: \`%\` matches any characters, \`_\` matches single character.
153
+ - **Regex**: Uses MySQL regex syntax (not PCRE). Example: \`^[A-Z].*@.*\\.com$\`
154
+ - **SOUNDEX**: Finds phonetically similar values - matches alternative spellings (e.g., \`johndoe\` matches \`jonedoe\`).
155
+ - **WHERE clause**: All text tools support optional \`where\` parameter to filter rows. For pattern-matching tools (\`mysql_regexp_match\`, \`mysql_like_search\`, \`mysql_soundex\`), the \`where\` clause is combined with the pattern match using AND.
156
+ - **Concat columns**: \`mysql_concat\` includes source columns by default. Use \`includeSourceColumns: false\` for minimal payload (only id and concatenated result).
157
+ - **Minimal output**: Tools return only \`id\`, target column(s), and computed result with \`count\`.
158
+ - **Error handling**: All text tools return \`{ exists: false, table }\` for nonexistent tables and \`{ success: false, error }\` for other query errors (e.g., unknown column, invalid regex, invalid charset). No raw MySQL errors are thrown.
159
+
160
+ ## Performance Tools (\`mysql_explain\`, \`mysql_query_stats\`, etc.)
161
+
162
+ - **EXPLAIN formats**: \`mysql_explain\` supports JSON (default), TREE, and TRADITIONAL formats.
163
+ - **EXPLAIN ANALYZE**: \`mysql_explain_analyze\` shows actual execution times (MySQL 8.0+). Only TREE format is supported; JSON format returns \`{ supported: false, reason }\`.
164
+ - **Performance schema**: \`mysql_slow_queries\`, \`mysql_query_stats\`, and \`mysql_index_usage\` require \`performance_schema\` enabled. \`mysql_slow_queries\` and \`mysql_query_stats\` truncate query digests to 200 characters for payload efficiency. Timer values exceeding 24 hours are clamped to \`-1\` with \`overflow: true\` on the row (indicates a \`performance_schema\` counter overflow artifact, not a real value).
165
+ - **Index usage**: \`mysql_index_usage\` filters to the current database by default. Use \`table\` parameter to filter further. Use \`limit\` (default: 10) to cap results. Returns \`{ exists: false, table }\` when the specified table does not exist.
166
+ - **Table stats**: \`mysql_table_stats\` returns \`{ exists: false, table: "..." }\` gracefully when the table does not exist.
167
+ - **Server-level tools**: \`mysql_slow_queries\`, \`mysql_query_stats\`, \`mysql_buffer_pool_stats\`, and \`mysql_thread_stats\` query server-level \`performance_schema\` metadata. They do not take a table parameter and return empty results when no data is available. No table existence checks apply.
168
+ - **Buffer pool**: \`mysql_buffer_pool_stats\` shows InnoDB memory usage and hit rates.
169
+ - **Thread stats**: \`mysql_thread_stats\` shows active threads with user, host, database, command, and connection type.
170
+ - **Error handling**: \`mysql_explain\` and \`mysql_explain_analyze\` return \`{ exists: false, error }\` for nonexistent tables and \`{ success: false, error }\` for other query errors (e.g., syntax errors). No raw MySQL errors are thrown.
171
+
172
+ ## Optimization Tools (\`mysql_index_recommendation\`, \`mysql_query_rewrite\`, etc.)
173
+
174
+ - **Index recommendations**: \`mysql_index_recommendation\` analyzes table structure and suggests missing indexes. Returns \`{ exists: false, table }\` when the table does not exist.
175
+ - **Query optimization**: \`mysql_query_rewrite\` analyzes queries for common anti-patterns (SELECT *, missing LIMIT, OR conditions, leading wildcards) and includes EXPLAIN output. Returns \`explainPlan: null\` with \`explainError\` when EXPLAIN fails (e.g., nonexistent table).
176
+ - **Force index**: \`mysql_force_index\` generates a query with \`FORCE INDEX\` hint for testing index behavior. Returns \`{ exists: false, table }\` when the table does not exist. Validates index existence and returns a \`warning\` if the index is not found on the table.
177
+ - **Optimizer trace**: \`mysql_optimizer_trace\` returns detailed MySQL optimizer decisions. Use \`summary: true\` for compact output with only key decisions (recommended for most cases).
178
+
179
+ ## Admin Tools (\`mysql_optimize_table\`, \`mysql_repair_table\`, etc.)
180
+
181
+ - **Optimize**: \`mysql_optimize_table\` reclaims unused space (InnoDB does recreate + analyze).
182
+ - **Analyze**: \`mysql_analyze_table\` updates index statistics for the query optimizer.
183
+ - **Check**: \`mysql_check_table\` verifies table integrity. Options: QUICK, FAST, MEDIUM, EXTENDED, CHANGED.
184
+ - **Repair**: \`mysql_repair_table\` only works for MyISAM tables; InnoDB reports "not supported."
185
+ - **Flush**: \`mysql_flush_tables\` writes cached changes to disk. When some specified tables do not exist, valid tables are still flushed; the response returns \`{ success: false, notFound, flushed }\` listing both missing and successfully flushed tables. Global flush (no tables) always succeeds.
186
+ - **Kill**: \`mysql_kill_query\` terminates queries by process ID. Use \`connection: true\` to kill the entire connection. Returns \`{ success: false, error }\` for invalid process IDs.
187
+ - **Error handling**: \`mysql_optimize_table\`, \`mysql_analyze_table\`, \`mysql_check_table\`, and \`mysql_repair_table\` return MySQL's native per-table \`results\` array. Nonexistent tables appear as rows with \`Msg_type: "Error"\` and \`Msg_text: "Table does not exist"\` (no P154 wrapping—these are multi-table DDL commands).
188
+
189
+ ## Monitoring Tools (\`mysql_show_processlist\`, \`mysql_server_health\`, etc.)
190
+
191
+ - **Process list**: \`mysql_show_processlist\` shows active queries. Use \`full: true\` for complete query text.
192
+ - **Status/Variables**: \`mysql_show_status\` and \`mysql_show_variables\` accept \`like\` for filtering (e.g., \`like: "%connections%"\`) and \`limit\` to cap rows (default: 100). Response includes \`totalAvailable\` and \`limited: true\` when truncated. RSA public key values in status output are automatically redacted.
193
+ - **Server health**: \`mysql_server_health\` returns latency, version, uptime, and pool stats in a single call.
194
+ - **InnoDB status**: \`mysql_innodb_status\` returns InnoDB engine monitor output. Use \`summary: true\` for parsed key metrics (buffer pool, row ops, transactions).
195
+ - **Replication**: \`mysql_replication_status\` shows replica/slave status. Returns \`configured: false\` if replication is not set up.
196
+ - **Pool stats**: \`mysql_pool_stats\` returns connection pool metrics (total, active, idle, waiting connections).
197
+
198
+ ## Replication Tools (\`mysql_master_status\`, \`mysql_slave_status\`, etc.)
199
+
200
+ - **Master status**: \`mysql_master_status\` returns current binlog file, position, and GTID set from the source server.
201
+ - **Slave status**: \`mysql_slave_status\` returns detailed replica status. Returns \`configured: false\` if not a replica.
202
+ - **Binlog events**: \`mysql_binlog_events\` shows binary log events. Use \`logFile\`, \`position\`, and \`limit\` (default: 20) to filter. Defaults to the **current** binlog file when \`logFile\` is omitted. Returns \`{ success: false, error }\` gracefully for nonexistent binlog files.
203
+ - **GTID status**: \`mysql_gtid_status\` shows GTID mode (ON/OFF) and executed/purged transaction sets.
204
+ - **Replication lag**: \`mysql_replication_lag\` calculates delay in seconds. Returns \`lagSeconds: null\` if not a replica.
205
+
206
+ ## Events Tools (\`mysql_event_*\`, \`mysql_scheduler_status\`)
207
+
208
+ - **Scheduler status**: \`mysql_scheduler_status\` shows global scheduler state (ON/OFF), event counts, and recently executed events.
209
+ - **Event types**: \`mysql_event_create\` supports ONE TIME (specify \`executeAt\`) and RECURRING (specify \`interval\`, \`intervalUnit\`, optional \`starts\`/\`ends\`). Use \`ifNotExists: true\` to skip creation if the event already exists.
210
+ - **Graceful error handling**: \`mysql_event_create\` returns \`{ success: false, reason }\` when the event already exists (without \`ifNotExists\`). \`mysql_event_alter\` and \`mysql_event_drop\` (without \`ifExists\`) return \`{ success: false, reason }\` when the event does not exist. \`mysql_event_drop\` with \`ifExists: true\` returns \`{ success: true, skipped: true, reason: "Event did not exist" }\` when the event was already absent.
211
+ - **Event status**: \`mysql_event_status\` returns \`{ exists: false, name }\` gracefully when the event is not found, instead of throwing an error.
212
+ - **Event lifecycle**: Use \`enabled: false\` when creating/testing events. \`onCompletion: "PRESERVE"\` keeps events after expiry.
213
+ - **Alter operations**: \`mysql_event_alter\` can enable/disable, change schedule/body, change \`onCompletion\` (PRESERVE/NOT PRESERVE), update comment, or rename (via \`newName\`).
214
+ - **Cross-schema**: Both \`mysql_event_list\` and \`mysql_event_status\` accept \`schema\` parameter to query other databases. Both return \`{ exists: false, schema }\` when the specified schema does not exist.
215
+
216
+ ## Schema Tools (\`mysql_list_schemas\`, \`mysql_create_view\`, etc.)
217
+
218
+ - **Schema management**: \`mysql_list_schemas\` lists databases with charset/collation. Use \`pattern\` for LIKE filtering (e.g., \`pattern: "app_%"\`). \`mysql_create_schema\` and \`mysql_drop_schema\` manage databases.
219
+ - **Graceful schema errors**: \`mysql_create_schema\` returns \`{ success: false, reason }\` when the schema already exists (with \`ifNotExists: false\`). With \`ifNotExists: true\` (default), returns \`{ success: true, skipped: true, reason: "Schema already exists" }\` for existing schemas. \`mysql_drop_schema\` returns \`{ success: false, reason }\` when the schema does not exist (with \`ifExists: false\`). With \`ifExists: true\` (default), returns \`{ success: true, skipped: true, reason: "Schema did not exist" }\` for nonexistent schemas.
220
+ - **Views**: \`mysql_create_view\` supports \`orReplace\` (default: false), \`algorithm\` (UNDEFINED/MERGE/TEMPTABLE), and \`checkOption\` (NONE/CASCADED/LOCAL). Returns \`{ success: false, reason }\` when the view already exists without \`orReplace\` or when the SQL definition is invalid (e.g., referencing nonexistent tables). \`mysql_list_views\` shows definitions, security type, and updatability.
221
+ - **Constraints**: \`mysql_list_constraints\` returns primary keys, foreign keys, unique, and check constraints. Use \`type\` parameter to filter (e.g., \`type: "FOREIGN KEY"\`). Returns \`{ exists: false, table }\` when the table does not exist.
222
+ - **Introspection**: \`mysql_list_stored_procedures\`, \`mysql_list_functions\`, \`mysql_list_triggers\`, \`mysql_list_events\` enumerate database objects. All accept optional \`schema\` parameter for cross-database inspection. \`mysql_list_events\` also accepts \`status\` filter (\`ENABLED\`, \`DISABLED\`, \`SLAVESIDE_DISABLED\`). Returns \`{ exists: false, schema }\` when the specified schema does not exist.
223
+
224
+ ## Sys Schema Tools (\`mysql_sys_*\`)
225
+
226
+ - **User/Host activity**: \`mysql_sys_user_summary\` and \`mysql_sys_host_summary\` show connection counts, statement latency, and I/O metrics. Filter with \`user\` or \`host\` parameters.
227
+ - **Statement analysis**: \`mysql_sys_statement_summary\` returns query digest stats (default \`limit: 20\`). Order by \`total_latency\` (default), \`exec_count\`, \`avg_latency\`, \`rows_sent\`, or \`rows_examined\`.
228
+ - **I/O analysis**: \`mysql_sys_io_summary\` supports \`table\` (default), \`file\`, and \`global\` types for I/O breakdown (default \`limit: 20\`).
229
+ - **Wait events**: \`mysql_sys_wait_summary\` supports \`global\` (default), \`by_host\`, \`by_user\`, and \`by_instance\` types for wait analysis. The \`by_instance\` type queries \`performance_schema\` directly (no sys view exists) and returns \`event\`, \`total\`, \`total_latency\`, and \`avg_latency\` columns with formatted latencies.
230
+ - **Lock contention**: \`mysql_sys_innodb_lock_waits\` shows active lock waits. Returns \`hasContention: false\` when none.
231
+ - **Memory usage**: \`mysql_sys_memory_summary\` returns \`globalMemory\` (by event type) and \`memoryByUser\` arrays with corresponding \`globalMemoryCount\` and \`memoryByUserCount\` fields. The \`limit\` parameter (default 10) applies to both arrays.
232
+ - **Schema stats**: \`mysql_sys_schema_stats\` returns 3 arrays: \`tableStatistics\` (DML and I/O per table), \`indexStatistics\` (per-index usage), and \`autoIncrementStatus\` (usage ratios), each with a corresponding count field (\`tableStatisticsCount\`, \`indexStatisticsCount\`, \`autoIncrementStatusCount\`). Filter by \`schema\` (defaults to current database). Returns \`{ exists: false, schema }\` when the specified schema does not exist. The \`limit\` parameter (default 10) applies per array.
233
+
234
+ ## Stats Tools (\`mysql_stats_*\`)
235
+
236
+ - **Descriptive statistics**: \`mysql_stats_descriptive\` returns mean, median, stddev, min, max, count for numeric columns. Supports \`where\` filtering.
237
+ - **Percentiles**: \`mysql_stats_percentiles\` calculates custom percentile values (default: p25, p50, p75, p90, p95, p99).
238
+ - **Correlation**: \`mysql_stats_correlation\` calculates Pearson correlation between two numeric columns with interpretation.
239
+ - **Distribution**: \`mysql_stats_distribution\` analyzes value distribution with configurable histogram buckets.
240
+ - **Time series**: \`mysql_stats_time_series\` aggregates data by time intervals (minute/hour/day/week/month) with sum/avg/count/min/max.
241
+ - **Regression**: \`mysql_stats_regression\` performs simple linear regression (y = mx + b) with R² fit analysis.
242
+ - **Sampling**: \`mysql_stats_sampling\` returns random rows. Use \`seed\` for reproducibility, \`columns\` to limit output.
243
+ - **Histogram**: \`mysql_stats_histogram\` views MySQL 8.0+ optimizer histogram statistics. Use \`update: true\` to create/refresh. Returns \`{ exists: false, table }\` when the table does not exist, and \`{ exists: false, column, table, message }\` when the column does not exist on the table.
244
+ - **Error handling**: All stats tools return \`{ exists: false, table }\` gracefully when the table does not exist, and \`{ success: false, error }\` for other query errors (e.g., unknown column). No raw MySQL errors are thrown.
245
+
246
+ ## Security Tools (\`mysql_security_*\`)
247
+
248
+ - **SSL status**: \`mysql_security_ssl_status\` returns SSL/TLS connection status, cipher, certificate paths, and session statistics.
249
+ - **Encryption status**: \`mysql_security_encryption_status\` checks TDE availability, keyring plugins, encrypted tablespaces, and encryption settings.
250
+ - **Password validation**: \`mysql_security_password_validate\` uses MySQL \`validate_password\` component to check password strength (0-100 scale). Returns \`available: false\` if component not installed.
251
+ - **Data masking**: \`mysql_security_mask_data\` masks sensitive data. Types: \`email\` (preserves domain), \`phone\` (shows last 4), \`ssn\` (shows last 4), \`credit_card\` (shows first/last 4), \`partial\` (uses \`keepFirst\`/\`keepLast\`). Credit card masking requires more than 8 digits; values with 8 or fewer digits are fully masked with a \`warning\` field.
252
+ - **User privileges**: \`mysql_security_user_privileges\` returns comprehensive user privilege report. Filter with \`user\` parameter to reduce payload. Returns \`{ exists: false, user }\` for nonexistent users (P154). Use \`summary: true\` for condensed output (privilege counts instead of raw GRANT strings). Summary mode caps \`globalPrivileges\` at 10 entries and includes \`totalGlobalPrivileges\` for the full count.
253
+ - **Sensitive tables**: \`mysql_security_sensitive_tables\` identifies columns matching sensitive patterns (password, email, ssn, etc.). Use \`schema\` parameter to limit scope. Returns \`{ exists: false, schema }\` for nonexistent schemas (P154).
254
+ - **Enterprise features**: \`mysql_security_audit\`, \`mysql_security_firewall_status\`, \`mysql_security_firewall_rules\` report availability and suggest installation for MySQL Enterprise Edition.
255
+
256
+ ## ProxySQL Tools (\`mysql_proxysql_*\`)
257
+
258
+ - **Prerequisites**: ProxySQL must be running with admin interface accessible (default port 6032). Connection is configured via \`PROXYSQL_HOST\`, \`PROXYSQL_PORT\`, \`PROXYSQL_USER\`, \`PROXYSQL_PASSWORD\` environment variables (defaults: \`localhost\`, \`6032\`, \`admin\`, \`admin\`). The Docker test environment uses \`radmin\`/\`radmin\`.
259
+ - **Status monitoring**: \`proxysql_status\` returns global status variables. Use \`summary: true\` for key metrics only (uptime, queries, connections). Both modes include \`summary\` (boolean) and \`totalVarsAvailable\` (count of all available status variables) for response clarity.
260
+ - **Global variables**: \`proxysql_global_variables\` supports \`prefix\` filter (\`mysql\`, \`admin\`, or \`all\`) and \`like\` pattern for variable name matching. Use \`limit\` (default: 50) to control payload size. Response includes \`totalVarsAvailable\` count for truncation awareness. Variables containing passwords or credentials are automatically redacted.
261
+ - **Runtime status**: \`proxysql_runtime_status\` returns version and admin variables. Use \`summary: true\` for condensed output (version, read_only, cluster, interfaces). Sensitive variables (passwords, credentials) are automatically redacted. Both modes include \`totalAdminVarsAvailable\` count.
262
+ - **Backend servers**: \`proxysql_servers\` and \`proxysql_connection_pool\` show backend MySQL server configurations and connection pool stats. Filter with \`hostgroup_id\`. Nonexistent \`hostgroup_id\` values return empty arrays (\`count: 0\`) gracefully.
263
+ - **Query analysis**: \`proxysql_query_rules\` lists routing rules; \`proxysql_query_digest\` shows top queries by execution count.
264
+ - **Admin commands**: \`proxysql_commands\` executes LOAD/SAVE for users, servers, query rules, variables, and FLUSH operations.
265
+ - **Memory/Process**: \`proxysql_memory_stats\` shows memory allocation; \`proxysql_process_list\` shows active client sessions.
266
+ - **Error handling**: ProxySQL tools propagate connection errors when the admin interface is unreachable. All read tools return structured responses with \`success: true\` and appropriate data arrays.
267
+
268
+ ## MySQL Shell Tools (\`mysqlsh_*\`)
269
+
270
+ - **Prerequisites**: MySQL Shell must be installed and accessible via \`MYSQLSH_PATH\` environment variable or system PATH.
271
+ - **Version check**: \`mysqlsh_version\` verifies MySQL Shell availability before running other shell tools.
272
+ - **Upgrade checking**: \`mysqlsh_check_upgrade\` analyzes MySQL server for upgrade compatibility issues. Returns \`errorCount\`, \`warningCount\`, and \`noticeCount\` summary with full JSON report. **Note**: Returns \`{ success: false, error }\` when MySQL Shell's version is lower than the current server version—Shell cannot analyze a server newer than itself. Also fails when \`targetVersion\` is lower than the current server version (no downgrade analysis).
273
+ - **Script execution**: \`mysqlsh_run_script\` supports JavaScript (\`js\`), Python (\`py\`), and SQL (\`sql\`) languages with full access to MySQL Shell APIs. SQL scripts support comments and multi-statement syntax.
274
+ - **Table export**: \`mysqlsh_export_table\` uses \`util.exportTable()\` for CSV or TSV export. Use \`where\` parameter for filtered exports. Returns structured error for privilege issues.
275
+ - **Parallel import**: \`mysqlsh_import_table\` uses \`util.importTable()\` for high-performance parallel import. **Important**: For CSV files, explicitly set \`fieldsTerminatedBy: ","\` as the delimiter is not auto-detected. Requires \`local_infile\` enabled on server (use \`updateServerSettings: true\` to auto-enable). Use \`skipRows: 1\` to skip header row. The \`columns\` parameter maps input fields **by position** to the specified table columns. **Note**: On InnoDB Cluster (Group Replication), target tables must have a PRIMARY KEY.
276
+ - **JSON import**: \`mysqlsh_import_json\` uses \`util.importJson()\` for document import. Supports both NDJSON (one JSON object per line) and multi-line JSON objects. **Does NOT support JSON arrays.** **Requires X Protocol (port 33060)**.
277
+ - **Dump utilities**: \`mysqlsh_dump_instance\`, \`mysqlsh_dump_schemas\`, \`mysqlsh_dump_tables\` create compressed parallel dumps. Use \`dryRun: true\` to preview. All dump tools return structured error messages for privilege issues with actionable guidance.
278
+ - **Load utility**: \`mysqlsh_load_dump\` restores dumps. Requires \`local_infile\` enabled or \`updateServerSettings: true\`. Use \`dryRun: true\` to preview what would be loaded without applying changes. Returns \`{ success: false, error, hint }\` for duplicate object conflicts.
279
+ - **Privilege note**: Dump operations may require EVENT, TRIGGER, or ROUTINE privileges. Use \`ddlOnly: true\` (schemas) or \`all: false\` (tables) to skip restricted metadata.
280
+ - **Error handling**: All shell tools return \`{ success: false, error }\` for operational failures instead of throwing raw exceptions. Privilege, local_infile, and X Protocol errors include a \`hint\` field with actionable remediation guidance.
281
+
282
+ ## Parameter Aliases
283
+
284
+ Many tools accept **alternative parameter names** (aliases) for commonly used fields. The server normalizes these automatically—use whichever feels most natural:
285
+
286
+ - **Table name**: \`table\`, \`tableName\`, or \`name\` — accepted by Core tools (\`mysql_describe_table\`, \`mysql_get_indexes\`, \`mysql_drop_table\`, \`mysql_create_index\`), Text tools (\`mysql_like_search\`, \`mysql_regexp_match\`, \`mysql_soundex\`, \`mysql_substring\`, \`mysql_concat\`, \`mysql_collation_convert\`), Backup tools (\`mysql_export_table\`, \`mysql_import_data\`), Partitioning tools (\`mysql_partition_info\`, \`mysql_add_partition\`, \`mysql_drop_partition\`, \`mysql_reorganize_partition\`), Performance tools (\`mysql_table_stats\`, \`mysql_index_usage\`), and Admin tools (\`mysql_optimize_table\`, \`mysql_analyze_table\`, \`mysql_check_table\`, \`mysql_flush_tables\`).
287
+ - **Query/SQL**: \`query\` or \`sql\` — accepted by \`mysql_read_query\`, \`mysql_write_query\`, \`mysql_explain\`, \`mysql_explain_analyze\`, \`mysql_query_rewrite\`, and \`mysql_optimizer_trace\`.
288
+ - **WHERE clause**: \`where\` or \`filter\` — accepted by \`mysql_export_table\` and Text tools (\`mysql_like_search\`, \`mysql_regexp_match\`, \`mysql_soundex\`, \`mysql_substring\`, \`mysql_concat\`, \`mysql_collation_convert\`).
289
+ - **Column name**: \`column\` or \`col\` — accepted by Text tools (\`mysql_like_search\`, \`mysql_regexp_match\`, \`mysql_soundex\`, \`mysql_substring\`, \`mysql_collation_convert\`).
290
+ - **Admin tables array**: Admin maintenance tools accept a singular \`table\` (or \`tableName\`/\`name\`) as an alias for the \`tables\` array parameter, automatically wrapping it in an array.
291
+
292
+ ## Code Mode (\`mysql_execute_code\`)
293
+
294
+ - **Purpose**: Execute JavaScript/TypeScript code in a sandboxed VM with access to all MySQL tools via the \`mysql.*\` API namespace. Ideal for multi-step workflows, data aggregation, conditional logic, and complex orchestrations that would otherwise require many sequential tool calls.
295
+ - **When to use**: Prefer Code Mode when a task requires 3+ sequential tool calls, conditional branching based on query results, data transformation between steps, or aggregation across multiple tables.
296
+ - **API namespace**: The \`mysql\` object exposes 24 groups matching the tool groups: \`mysql.core\`, \`mysql.json\`, \`mysql.transactions\`, \`mysql.text\`, \`mysql.fulltext\`, \`mysql.performance\`, \`mysql.optimization\`, \`mysql.admin\`, \`mysql.monitoring\`, \`mysql.backup\`, \`mysql.replication\`, \`mysql.partitioning\`, \`mysql.schema\`, \`mysql.shell\`, \`mysql.events\`, \`mysql.sysschema\`, \`mysql.stats\`, \`mysql.spatial\`, \`mysql.security\`, \`mysql.roles\`, \`mysql.docstore\`, \`mysql.cluster\`, \`mysql.proxysql\`, \`mysql.router\`.
297
+ - **Method naming**: Tool names map to methods by stripping the prefix: \`mysql_read_query\` → \`mysql.core.readQuery(sql)\`, \`mysql_json_extract\` → \`mysql.json.extract({...})\`, \`mysqlsh_version\` → \`mysql.shell.version()\`.
298
+ - **Positional shorthand**: Common tools accept positional arguments: \`mysql.core.readQuery("SELECT 1")\` instead of \`mysql.core.readQuery({ query: "SELECT 1" })\`.
299
+ - **Help**: Call \`mysql.help()\` for a full API overview, or \`mysql.<group>.help()\` for group-specific methods and examples.
300
+ - **Return value**: The last expression in the code block is returned as the result. Use \`return\` in async functions or let the final expression evaluate.
301
+ - **Security**: Code runs in an isolated VM sandbox. Blocked patterns include \`require\`, \`import\`, \`process\`, \`eval\`, \`Function\`, filesystem/network access. Rate-limited to prevent abuse.
302
+ - **Transaction cleanup**: Any transactions opened but not committed are automatically rolled back when execution completes.
303
+ - **Scope**: Requires \`admin\` scope.
88
304
  `;
89
305
  /**
90
306
  * Generate dynamic instructions based on enabled tools, resources, and prompts
@@ -94,31 +310,31 @@ export function generateInstructions(enabledTools, resources, prompts) {
94
310
  // Add active tools section
95
311
  const activeGroups = getActiveToolGroups(enabledTools);
96
312
  if (activeGroups.length > 0) {
97
- instructions += '\n## Active Tools\n\n';
98
- instructions += `This server instance has ${enabledTools.size} tools enabled across ${activeGroups.length} groups:\n\n`;
313
+ instructions += "\n## Active Tools\n\n";
314
+ instructions += `This server instance has ${enabledTools.size} tools enabled across ${activeGroups.length} groups: \n\n`;
99
315
  for (const { group, tools } of activeGroups) {
100
- instructions += `### ${group} (${tools.length} tools)\n`;
101
- instructions += tools.map(t => `- \`${t}\``).join('\n');
102
- instructions += '\n\n';
316
+ instructions += `### ${group} (${tools.length} tools) \n`;
317
+ instructions += tools.map((t) => `- \`${t}\``).join("\n");
318
+ instructions += "\n\n";
103
319
  }
104
320
  }
105
321
  // Add resources section
106
322
  if (resources.length > 0) {
107
323
  instructions += `## Active Resources (${resources.length})\n\n`;
108
- instructions += 'Read-only resources for database metadata:\n\n';
324
+ instructions += "Read-only resources for database metadata:\n\n";
109
325
  for (const resource of resources) {
110
326
  instructions += `- \`${resource.uri}\` - ${resource.description}\n`;
111
327
  }
112
- instructions += '\n';
328
+ instructions += "\n";
113
329
  }
114
330
  // Add prompts section
115
331
  if (prompts.length > 0) {
116
332
  instructions += `## Active Prompts (${prompts.length})\n\n`;
117
- instructions += 'Pre-built query templates and guided workflows:\n\n';
333
+ instructions += "Pre-built query templates and guided workflows:\n\n";
118
334
  for (const prompt of prompts) {
119
335
  instructions += `- \`${prompt.name}\` - ${prompt.description}\n`;
120
336
  }
121
- instructions += '\n';
337
+ instructions += "\n";
122
338
  }
123
339
  return instructions;
124
340
  }
@@ -128,7 +344,7 @@ export function generateInstructions(enabledTools, resources, prompts) {
128
344
  function getActiveToolGroups(enabledTools) {
129
345
  const activeGroups = [];
130
346
  for (const [group, allTools] of Object.entries(TOOL_GROUPS)) {
131
- const enabledInGroup = allTools.filter(tool => enabledTools.has(tool));
347
+ const enabledInGroup = allTools.filter((tool) => enabledTools.has(tool));
132
348
  if (enabledInGroup.length > 0) {
133
349
  activeGroups.push({ group, tools: enabledInGroup });
134
350
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ServerInstructions.js","sourceRoot":"","sources":["../../src/constants/ServerInstructions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAE5D;;GAEG;AACH,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6EzB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAChC,YAAyB,EACzB,SAA+B,EAC/B,OAA2B;IAE3B,IAAI,YAAY,GAAG,iBAAiB,CAAC;IAErC,2BAA2B;IAC3B,MAAM,YAAY,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;IACvD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,YAAY,IAAI,uBAAuB,CAAC;QACxC,YAAY,IAAI,4BAA4B,YAAY,CAAC,IAAI,yBAAyB,YAAY,CAAC,MAAM,cAAc,CAAC;QAExH,KAAK,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,YAAY,EAAE,CAAC;YAC1C,YAAY,IAAI,OAAO,KAAK,KAAK,KAAK,CAAC,MAAM,WAAW,CAAC;YACzD,YAAY,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxD,YAAY,IAAI,MAAM,CAAC;QAC3B,CAAC;IACL,CAAC;IAED,wBAAwB;IACxB,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,YAAY,IAAI,wBAAwB,SAAS,CAAC,MAAM,OAAO,CAAC;QAChE,YAAY,IAAI,gDAAgD,CAAC;QACjE,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC/B,YAAY,IAAI,OAAO,QAAQ,CAAC,GAAG,QAAQ,QAAQ,CAAC,WAAW,IAAI,CAAC;QACxE,CAAC;QACD,YAAY,IAAI,IAAI,CAAC;IACzB,CAAC;IAED,sBAAsB;IACtB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,YAAY,IAAI,sBAAsB,OAAO,CAAC,MAAM,OAAO,CAAC;QAC5D,YAAY,IAAI,qDAAqD,CAAC;QACtE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC3B,YAAY,IAAI,OAAO,MAAM,CAAC,IAAI,QAAQ,MAAM,CAAC,WAAW,IAAI,CAAC;QACrE,CAAC;QACD,YAAY,IAAI,IAAI,CAAC;IACzB,CAAC;IAED,OAAO,YAAY,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,YAAyB;IAClD,MAAM,YAAY,GAA4C,EAAE,CAAC;IAEjE,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAA4B,EAAE,CAAC;QACrF,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACvE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QACxD,CAAC;IACL,CAAC;IAED,OAAO,YAAY,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAAiB,CAAC"}
1
+ {"version":3,"file":"ServerInstructions.js","sourceRoot":"","sources":["../../src/constants/ServerInstructions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAE5D;;GAEG;AACH,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqSzB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,YAAyB,EACzB,SAA+B,EAC/B,OAA2B;IAE3B,IAAI,YAAY,GAAG,iBAAiB,CAAC;IAErC,2BAA2B;IAC3B,MAAM,YAAY,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;IACvD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,YAAY,IAAI,uBAAuB,CAAC;QACxC,YAAY,IAAI,4BAA4B,YAAY,CAAC,IAAI,yBAAyB,YAAY,CAAC,MAAM,eAAe,CAAC;QAEzH,KAAK,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,YAAY,EAAE,CAAC;YAC5C,YAAY,IAAI,OAAO,KAAK,KAAK,KAAK,CAAC,MAAM,YAAY,CAAC;YAC1D,YAAY,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1D,YAAY,IAAI,MAAM,CAAC;QACzB,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,YAAY,IAAI,wBAAwB,SAAS,CAAC,MAAM,OAAO,CAAC;QAChE,YAAY,IAAI,gDAAgD,CAAC;QACjE,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,YAAY,IAAI,OAAO,QAAQ,CAAC,GAAG,QAAQ,QAAQ,CAAC,WAAW,IAAI,CAAC;QACtE,CAAC;QACD,YAAY,IAAI,IAAI,CAAC;IACvB,CAAC;IAED,sBAAsB;IACtB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,YAAY,IAAI,sBAAsB,OAAO,CAAC,MAAM,OAAO,CAAC;QAC5D,YAAY,IAAI,qDAAqD,CAAC;QACtE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,YAAY,IAAI,OAAO,MAAM,CAAC,IAAI,QAAQ,MAAM,CAAC,WAAW,IAAI,CAAC;QACnE,CAAC;QACD,YAAY,IAAI,IAAI,CAAC;IACvB,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAC1B,YAAyB;IAEzB,MAAM,YAAY,GAA4C,EAAE,CAAC;IAEjE,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAGvD,EAAE,CAAC;QACJ,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACzE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAAiB,CAAC"}
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Defines the tool groups and meta-groups used for filtering.
5
5
  */
6
- import type { ToolGroup, MetaGroup } from '../types/index.js';
6
+ import type { ToolGroup, MetaGroup } from "../types/index.js";
7
7
  /**
8
8
  * Default tool groups and their member tools.
9
9
  * This serves as the canonical mapping of tools to groups.
@@ -16,17 +16,17 @@ export declare const TOOL_GROUPS: Record<ToolGroup, string[]>;
16
16
  * STRICT LIMIT: NO group may exceed 50 tools.
17
17
  *
18
18
  * Tool counts (verified):
19
- * starter: 38
20
- * essential: 15
21
- * dev-power: 45 (core:8 + schema:10 + performance:8 + stats:8 + fulltext:4 + transactions:7)
22
- * ai-data: 44 (core:8 + json:17 + docstore:9 + text:6 + fulltext:4)
23
- * ai-spatial: 43 (core:8 + spatial:12 + stats:8 + performance:8 + transactions:7)
24
- * dba-monitor: 35 (core:8 + monitoring:7 + performance:8 + sysschema:8 + optimization:4)
25
- * dba-manage: 33 (core:8 + admin:6 + backup:4 + replication:5 + partitioning:4 + events:6)
26
- * dba-secure: 42 (core:8 + security:9 + roles:8 + cluster:10 + transactions:7)
27
- * base-core: 48 (core:8 + json:17 + transactions:7 + text:6 + schema:10)
28
- * base-advanced: 39 (docstore:9 + spatial:12 + stats:8 + fulltext:4 + events:6)
29
- * ecosystem: 31
19
+ * starter: 39 (core:8 + json:17 + transactions:7 + text:6 + codemode:1)
20
+ * essential: 16 (core:8 + transactions:7 + codemode:1)
21
+ * dev-power: 47 (core:8 + schema:10 + performance:8 + stats:8 + fulltext:5 + transactions:7 + codemode:1)
22
+ * ai-data: 46 (core:8 + json:17 + docstore:9 + text:6 + fulltext:5 + codemode:1)
23
+ * ai-spatial: 44 (core:8 + spatial:12 + stats:8 + performance:8 + transactions:7 + codemode:1)
24
+ * dba-monitor: 36 (core:8 + monitoring:7 + performance:8 + sysschema:8 + optimization:4 + codemode:1)
25
+ * dba-manage: 34 (core:8 + admin:6 + backup:4 + replication:5 + partitioning:4 + events:6 + codemode:1)
26
+ * dba-secure: 33 (core:8 + security:9 + roles:8 + transactions:7 + codemode:1)
27
+ * base-core: 49 (core:8 + json:17 + transactions:7 + text:6 + schema:10 + codemode:1)
28
+ * base-advanced: 41 (docstore:9 + spatial:12 + stats:8 + fulltext:5 + events:6 + codemode:1)
29
+ * ecosystem: 42 (router:9 + proxysql:12 + shell:10 + cluster:10 + codemode:1)
30
30
  */
31
31
  export declare const META_GROUPS: Record<MetaGroup, ToolGroup[]>;
32
32
  //# sourceMappingURL=ToolConstants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ToolConstants.d.ts","sourceRoot":"","sources":["../../src/filtering/ToolConstants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9D;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,CAkPnD,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,CAqBtD,CAAC"}
1
+ {"version":3,"file":"ToolConstants.d.ts","sourceRoot":"","sources":["../../src/filtering/ToolConstants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9D;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,CAoPnD,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,CA0DtD,CAAC"}