@neverinfamous/mysql-mcp 2.1.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.
- package/.dockerignore +41 -0
- package/.env.example +33 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +29 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +21 -0
- package/.github/dependabot.yml +19 -0
- package/.github/pull_request_template.md +23 -0
- package/.github/workflows/codeql.yml +64 -0
- package/.github/workflows/docker-publish.yml +285 -0
- package/.github/workflows/publish-npm.yml +75 -0
- package/CHANGELOG.md +481 -0
- package/CODE_OF_CONDUCT.md +29 -0
- package/CONTRIBUTING.md +57 -0
- package/DOCKER_README.md +482 -0
- package/Dockerfile +78 -0
- package/LICENSE +21 -0
- package/README.md +594 -0
- package/SECURITY.md +66 -0
- package/VERSION +1 -0
- package/dist/__tests__/mocks/adapter.d.ts +80 -0
- package/dist/__tests__/mocks/adapter.d.ts.map +1 -0
- package/dist/__tests__/mocks/adapter.js +202 -0
- package/dist/__tests__/mocks/adapter.js.map +1 -0
- package/dist/__tests__/mocks/index.d.ts +11 -0
- package/dist/__tests__/mocks/index.d.ts.map +1 -0
- package/dist/__tests__/mocks/index.js +11 -0
- package/dist/__tests__/mocks/index.js.map +1 -0
- package/dist/__tests__/mocks/mysql.d.ts +36 -0
- package/dist/__tests__/mocks/mysql.d.ts.map +1 -0
- package/dist/__tests__/mocks/mysql.js +110 -0
- package/dist/__tests__/mocks/mysql.js.map +1 -0
- package/dist/__tests__/setup.d.ts +40 -0
- package/dist/__tests__/setup.d.ts.map +1 -0
- package/dist/__tests__/setup.js +45 -0
- package/dist/__tests__/setup.js.map +1 -0
- package/dist/adapters/DatabaseAdapter.d.ts +134 -0
- package/dist/adapters/DatabaseAdapter.d.ts.map +1 -0
- package/dist/adapters/DatabaseAdapter.js +211 -0
- package/dist/adapters/DatabaseAdapter.js.map +1 -0
- package/dist/adapters/mysql/MySQLAdapter.d.ts +88 -0
- package/dist/adapters/mysql/MySQLAdapter.d.ts.map +1 -0
- package/dist/adapters/mysql/MySQLAdapter.js +469 -0
- package/dist/adapters/mysql/MySQLAdapter.js.map +1 -0
- package/dist/adapters/mysql/SchemaManager.d.ts +36 -0
- package/dist/adapters/mysql/SchemaManager.d.ts.map +1 -0
- package/dist/adapters/mysql/SchemaManager.js +260 -0
- package/dist/adapters/mysql/SchemaManager.js.map +1 -0
- package/dist/adapters/mysql/index.d.ts +6 -0
- package/dist/adapters/mysql/index.d.ts.map +1 -0
- package/dist/adapters/mysql/index.js +7 -0
- package/dist/adapters/mysql/index.js.map +1 -0
- package/dist/adapters/mysql/prompts/backupStrategy.d.ts +8 -0
- package/dist/adapters/mysql/prompts/backupStrategy.d.ts.map +1 -0
- package/dist/adapters/mysql/prompts/backupStrategy.js +74 -0
- package/dist/adapters/mysql/prompts/backupStrategy.js.map +1 -0
- package/dist/adapters/mysql/prompts/clusterSetup.d.ts +8 -0
- package/dist/adapters/mysql/prompts/clusterSetup.d.ts.map +1 -0
- package/dist/adapters/mysql/prompts/clusterSetup.js +112 -0
- package/dist/adapters/mysql/prompts/clusterSetup.js.map +1 -0
- package/dist/adapters/mysql/prompts/docstoreSetup.d.ts +8 -0
- package/dist/adapters/mysql/prompts/docstoreSetup.d.ts.map +1 -0
- package/dist/adapters/mysql/prompts/docstoreSetup.js +117 -0
- package/dist/adapters/mysql/prompts/docstoreSetup.js.map +1 -0
- package/dist/adapters/mysql/prompts/eventScheduler.d.ts +8 -0
- package/dist/adapters/mysql/prompts/eventScheduler.d.ts.map +1 -0
- package/dist/adapters/mysql/prompts/eventScheduler.js +97 -0
- package/dist/adapters/mysql/prompts/eventScheduler.js.map +1 -0
- package/dist/adapters/mysql/prompts/healthCheck.d.ts +8 -0
- package/dist/adapters/mysql/prompts/healthCheck.d.ts.map +1 -0
- package/dist/adapters/mysql/prompts/healthCheck.js +49 -0
- package/dist/adapters/mysql/prompts/healthCheck.js.map +1 -0
- package/dist/adapters/mysql/prompts/index.d.ts +31 -0
- package/dist/adapters/mysql/prompts/index.d.ts.map +1 -0
- package/dist/adapters/mysql/prompts/index.js +308 -0
- package/dist/adapters/mysql/prompts/index.js.map +1 -0
- package/dist/adapters/mysql/prompts/indexTuning.d.ts +8 -0
- package/dist/adapters/mysql/prompts/indexTuning.d.ts.map +1 -0
- package/dist/adapters/mysql/prompts/indexTuning.js +83 -0
- package/dist/adapters/mysql/prompts/indexTuning.js.map +1 -0
- package/dist/adapters/mysql/prompts/mysqlshSetup.d.ts +8 -0
- package/dist/adapters/mysql/prompts/mysqlshSetup.d.ts.map +1 -0
- package/dist/adapters/mysql/prompts/mysqlshSetup.js +113 -0
- package/dist/adapters/mysql/prompts/mysqlshSetup.js.map +1 -0
- package/dist/adapters/mysql/prompts/proxysqlSetup.d.ts +8 -0
- package/dist/adapters/mysql/prompts/proxysqlSetup.d.ts.map +1 -0
- package/dist/adapters/mysql/prompts/proxysqlSetup.js +109 -0
- package/dist/adapters/mysql/prompts/proxysqlSetup.js.map +1 -0
- package/dist/adapters/mysql/prompts/replicationSetup.d.ts +8 -0
- package/dist/adapters/mysql/prompts/replicationSetup.d.ts.map +1 -0
- package/dist/adapters/mysql/prompts/replicationSetup.js +140 -0
- package/dist/adapters/mysql/prompts/replicationSetup.js.map +1 -0
- package/dist/adapters/mysql/prompts/routerSetup.d.ts +8 -0
- package/dist/adapters/mysql/prompts/routerSetup.d.ts.map +1 -0
- package/dist/adapters/mysql/prompts/routerSetup.js +100 -0
- package/dist/adapters/mysql/prompts/routerSetup.js.map +1 -0
- package/dist/adapters/mysql/prompts/spatialSetup.d.ts +8 -0
- package/dist/adapters/mysql/prompts/spatialSetup.d.ts.map +1 -0
- package/dist/adapters/mysql/prompts/spatialSetup.js +103 -0
- package/dist/adapters/mysql/prompts/spatialSetup.js.map +1 -0
- package/dist/adapters/mysql/prompts/sysSchema.d.ts +8 -0
- package/dist/adapters/mysql/prompts/sysSchema.d.ts.map +1 -0
- package/dist/adapters/mysql/prompts/sysSchema.js +103 -0
- package/dist/adapters/mysql/prompts/sysSchema.js.map +1 -0
- package/dist/adapters/mysql/resources/capabilities.d.ts +9 -0
- package/dist/adapters/mysql/resources/capabilities.d.ts.map +1 -0
- package/dist/adapters/mysql/resources/capabilities.js +41 -0
- package/dist/adapters/mysql/resources/capabilities.js.map +1 -0
- package/dist/adapters/mysql/resources/cluster.d.ts +7 -0
- package/dist/adapters/mysql/resources/cluster.d.ts.map +1 -0
- package/dist/adapters/mysql/resources/cluster.js +61 -0
- package/dist/adapters/mysql/resources/cluster.js.map +1 -0
- package/dist/adapters/mysql/resources/docstore.d.ts +7 -0
- package/dist/adapters/mysql/resources/docstore.d.ts.map +1 -0
- package/dist/adapters/mysql/resources/docstore.js +61 -0
- package/dist/adapters/mysql/resources/docstore.js.map +1 -0
- package/dist/adapters/mysql/resources/events.d.ts +7 -0
- package/dist/adapters/mysql/resources/events.d.ts.map +1 -0
- package/dist/adapters/mysql/resources/events.js +41 -0
- package/dist/adapters/mysql/resources/events.js.map +1 -0
- package/dist/adapters/mysql/resources/health.d.ts +10 -0
- package/dist/adapters/mysql/resources/health.d.ts.map +1 -0
- package/dist/adapters/mysql/resources/health.js +76 -0
- package/dist/adapters/mysql/resources/health.js.map +1 -0
- package/dist/adapters/mysql/resources/index.d.ts +29 -0
- package/dist/adapters/mysql/resources/index.d.ts.map +1 -0
- package/dist/adapters/mysql/resources/index.js +66 -0
- package/dist/adapters/mysql/resources/index.js.map +1 -0
- package/dist/adapters/mysql/resources/indexes.d.ts +9 -0
- package/dist/adapters/mysql/resources/indexes.d.ts.map +1 -0
- package/dist/adapters/mysql/resources/indexes.js +88 -0
- package/dist/adapters/mysql/resources/indexes.js.map +1 -0
- package/dist/adapters/mysql/resources/innodb.d.ts +9 -0
- package/dist/adapters/mysql/resources/innodb.d.ts.map +1 -0
- package/dist/adapters/mysql/resources/innodb.js +95 -0
- package/dist/adapters/mysql/resources/innodb.js.map +1 -0
- package/dist/adapters/mysql/resources/locks.d.ts +7 -0
- package/dist/adapters/mysql/resources/locks.d.ts.map +1 -0
- package/dist/adapters/mysql/resources/locks.js +57 -0
- package/dist/adapters/mysql/resources/locks.js.map +1 -0
- package/dist/adapters/mysql/resources/performance.d.ts +9 -0
- package/dist/adapters/mysql/resources/performance.d.ts.map +1 -0
- package/dist/adapters/mysql/resources/performance.js +89 -0
- package/dist/adapters/mysql/resources/performance.js.map +1 -0
- package/dist/adapters/mysql/resources/pool.d.ts +7 -0
- package/dist/adapters/mysql/resources/pool.d.ts.map +1 -0
- package/dist/adapters/mysql/resources/pool.js +21 -0
- package/dist/adapters/mysql/resources/pool.js.map +1 -0
- package/dist/adapters/mysql/resources/processlist.d.ts +7 -0
- package/dist/adapters/mysql/resources/processlist.d.ts.map +1 -0
- package/dist/adapters/mysql/resources/processlist.js +18 -0
- package/dist/adapters/mysql/resources/processlist.js.map +1 -0
- package/dist/adapters/mysql/resources/replication.d.ts +9 -0
- package/dist/adapters/mysql/resources/replication.d.ts.map +1 -0
- package/dist/adapters/mysql/resources/replication.js +116 -0
- package/dist/adapters/mysql/resources/replication.js.map +1 -0
- package/dist/adapters/mysql/resources/schema.d.ts +7 -0
- package/dist/adapters/mysql/resources/schema.d.ts.map +1 -0
- package/dist/adapters/mysql/resources/schema.js +18 -0
- package/dist/adapters/mysql/resources/schema.js.map +1 -0
- package/dist/adapters/mysql/resources/spatial.d.ts +7 -0
- package/dist/adapters/mysql/resources/spatial.d.ts.map +1 -0
- package/dist/adapters/mysql/resources/spatial.js +47 -0
- package/dist/adapters/mysql/resources/spatial.js.map +1 -0
- package/dist/adapters/mysql/resources/status.d.ts +7 -0
- package/dist/adapters/mysql/resources/status.d.ts.map +1 -0
- package/dist/adapters/mysql/resources/status.js +22 -0
- package/dist/adapters/mysql/resources/status.js.map +1 -0
- package/dist/adapters/mysql/resources/sysschema.d.ts +7 -0
- package/dist/adapters/mysql/resources/sysschema.d.ts.map +1 -0
- package/dist/adapters/mysql/resources/sysschema.js +50 -0
- package/dist/adapters/mysql/resources/sysschema.js.map +1 -0
- package/dist/adapters/mysql/resources/tables.d.ts +7 -0
- package/dist/adapters/mysql/resources/tables.d.ts.map +1 -0
- package/dist/adapters/mysql/resources/tables.js +18 -0
- package/dist/adapters/mysql/resources/tables.js.map +1 -0
- package/dist/adapters/mysql/resources/variables.d.ts +7 -0
- package/dist/adapters/mysql/resources/variables.d.ts.map +1 -0
- package/dist/adapters/mysql/resources/variables.js +22 -0
- package/dist/adapters/mysql/resources/variables.js.map +1 -0
- package/dist/adapters/mysql/tools/admin/backup.d.ts +13 -0
- package/dist/adapters/mysql/tools/admin/backup.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/admin/backup.js +208 -0
- package/dist/adapters/mysql/tools/admin/backup.js.map +1 -0
- package/dist/adapters/mysql/tools/admin/index.d.ts +21 -0
- package/dist/adapters/mysql/tools/admin/index.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/admin/index.js +49 -0
- package/dist/adapters/mysql/tools/admin/index.js.map +1 -0
- package/dist/adapters/mysql/tools/admin/maintenance.d.ts +15 -0
- package/dist/adapters/mysql/tools/admin/maintenance.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/admin/maintenance.js +143 -0
- package/dist/adapters/mysql/tools/admin/maintenance.js.map +1 -0
- package/dist/adapters/mysql/tools/admin/monitoring.d.ts +16 -0
- package/dist/adapters/mysql/tools/admin/monitoring.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/admin/monitoring.js +199 -0
- package/dist/adapters/mysql/tools/admin/monitoring.js.map +1 -0
- package/dist/adapters/mysql/tools/cluster/group-replication.d.ts +29 -0
- package/dist/adapters/mysql/tools/cluster/group-replication.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/cluster/group-replication.js +290 -0
- package/dist/adapters/mysql/tools/cluster/group-replication.js.map +1 -0
- package/dist/adapters/mysql/tools/cluster/index.d.ts +13 -0
- package/dist/adapters/mysql/tools/cluster/index.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/cluster/index.js +27 -0
- package/dist/adapters/mysql/tools/cluster/index.js.map +1 -0
- package/dist/adapters/mysql/tools/cluster/innodb-cluster.d.ts +29 -0
- package/dist/adapters/mysql/tools/cluster/innodb-cluster.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/cluster/innodb-cluster.js +351 -0
- package/dist/adapters/mysql/tools/cluster/innodb-cluster.js.map +1 -0
- package/dist/adapters/mysql/tools/core.d.ts +13 -0
- package/dist/adapters/mysql/tools/core.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/core.js +308 -0
- package/dist/adapters/mysql/tools/core.js.map +1 -0
- package/dist/adapters/mysql/tools/docstore.d.ts +10 -0
- package/dist/adapters/mysql/tools/docstore.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/docstore.js +320 -0
- package/dist/adapters/mysql/tools/docstore.js.map +1 -0
- package/dist/adapters/mysql/tools/events.d.ts +13 -0
- package/dist/adapters/mysql/tools/events.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/events.js +367 -0
- package/dist/adapters/mysql/tools/events.js.map +1 -0
- package/dist/adapters/mysql/tools/index.d.ts +25 -0
- package/dist/adapters/mysql/tools/index.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/index.js +43 -0
- package/dist/adapters/mysql/tools/index.js.map +1 -0
- package/dist/adapters/mysql/tools/json/core.d.ts +17 -0
- package/dist/adapters/mysql/tools/json/core.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/json/core.js +264 -0
- package/dist/adapters/mysql/tools/json/core.js.map +1 -0
- package/dist/adapters/mysql/tools/json/enhanced.d.ts +14 -0
- package/dist/adapters/mysql/tools/json/enhanced.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/json/enhanced.js +305 -0
- package/dist/adapters/mysql/tools/json/enhanced.js.map +1 -0
- package/dist/adapters/mysql/tools/json/helpers.d.ts +16 -0
- package/dist/adapters/mysql/tools/json/helpers.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/json/helpers.js +118 -0
- package/dist/adapters/mysql/tools/json/helpers.js.map +1 -0
- package/dist/adapters/mysql/tools/json/index.d.ts +21 -0
- package/dist/adapters/mysql/tools/json/index.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/json/index.js +49 -0
- package/dist/adapters/mysql/tools/json/index.js.map +1 -0
- package/dist/adapters/mysql/tools/partitioning.d.ts +13 -0
- package/dist/adapters/mysql/tools/partitioning.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/partitioning.js +160 -0
- package/dist/adapters/mysql/tools/partitioning.js.map +1 -0
- package/dist/adapters/mysql/tools/performance/analysis.d.ts +17 -0
- package/dist/adapters/mysql/tools/performance/analysis.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/performance/analysis.js +278 -0
- package/dist/adapters/mysql/tools/performance/analysis.js.map +1 -0
- package/dist/adapters/mysql/tools/performance/index.d.ts +17 -0
- package/dist/adapters/mysql/tools/performance/index.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/performance/index.js +36 -0
- package/dist/adapters/mysql/tools/performance/index.js.map +1 -0
- package/dist/adapters/mysql/tools/performance/optimization.d.ts +13 -0
- package/dist/adapters/mysql/tools/performance/optimization.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/performance/optimization.js +187 -0
- package/dist/adapters/mysql/tools/performance/optimization.js.map +1 -0
- package/dist/adapters/mysql/tools/proxysql.d.ts +16 -0
- package/dist/adapters/mysql/tools/proxysql.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/proxysql.js +427 -0
- package/dist/adapters/mysql/tools/proxysql.js.map +1 -0
- package/dist/adapters/mysql/tools/replication.d.ts +13 -0
- package/dist/adapters/mysql/tools/replication.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/replication.js +191 -0
- package/dist/adapters/mysql/tools/replication.js.map +1 -0
- package/dist/adapters/mysql/tools/roles.d.ts +7 -0
- package/dist/adapters/mysql/tools/roles.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/roles.js +190 -0
- package/dist/adapters/mysql/tools/roles.js.map +1 -0
- package/dist/adapters/mysql/tools/router.d.ts +16 -0
- package/dist/adapters/mysql/tools/router.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/router.js +369 -0
- package/dist/adapters/mysql/tools/router.js.map +1 -0
- package/dist/adapters/mysql/tools/schema/constraints.d.ts +7 -0
- package/dist/adapters/mysql/tools/schema/constraints.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/schema/constraints.js +67 -0
- package/dist/adapters/mysql/tools/schema/constraints.js.map +1 -0
- package/dist/adapters/mysql/tools/schema/index.d.ts +12 -0
- package/dist/adapters/mysql/tools/schema/index.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/schema/index.js +29 -0
- package/dist/adapters/mysql/tools/schema/index.js.map +1 -0
- package/dist/adapters/mysql/tools/schema/management.d.ts +15 -0
- package/dist/adapters/mysql/tools/schema/management.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/schema/management.js +113 -0
- package/dist/adapters/mysql/tools/schema/management.js.map +1 -0
- package/dist/adapters/mysql/tools/schema/routines.d.ts +11 -0
- package/dist/adapters/mysql/tools/schema/routines.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/schema/routines.js +98 -0
- package/dist/adapters/mysql/tools/schema/routines.js.map +1 -0
- package/dist/adapters/mysql/tools/schema/scheduled_events.d.ts +7 -0
- package/dist/adapters/mysql/tools/schema/scheduled_events.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/schema/scheduled_events.js +58 -0
- package/dist/adapters/mysql/tools/schema/scheduled_events.js.map +1 -0
- package/dist/adapters/mysql/tools/schema/triggers.d.ts +7 -0
- package/dist/adapters/mysql/tools/schema/triggers.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/schema/triggers.js +49 -0
- package/dist/adapters/mysql/tools/schema/triggers.js.map +1 -0
- package/dist/adapters/mysql/tools/schema/views.d.ts +11 -0
- package/dist/adapters/mysql/tools/schema/views.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/schema/views.js +78 -0
- package/dist/adapters/mysql/tools/schema/views.js.map +1 -0
- package/dist/adapters/mysql/tools/security/audit.d.ts +20 -0
- package/dist/adapters/mysql/tools/security/audit.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/security/audit.js +233 -0
- package/dist/adapters/mysql/tools/security/audit.js.map +1 -0
- package/dist/adapters/mysql/tools/security/data-protection.d.ts +20 -0
- package/dist/adapters/mysql/tools/security/data-protection.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/security/data-protection.js +243 -0
- package/dist/adapters/mysql/tools/security/data-protection.js.map +1 -0
- package/dist/adapters/mysql/tools/security/encryption.d.ts +20 -0
- package/dist/adapters/mysql/tools/security/encryption.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/security/encryption.js +191 -0
- package/dist/adapters/mysql/tools/security/encryption.js.map +1 -0
- package/dist/adapters/mysql/tools/security/index.d.ts +13 -0
- package/dist/adapters/mysql/tools/security/index.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/security/index.js +27 -0
- package/dist/adapters/mysql/tools/security/index.js.map +1 -0
- package/dist/adapters/mysql/tools/shell/backup.d.ts +19 -0
- package/dist/adapters/mysql/tools/shell/backup.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/shell/backup.js +187 -0
- package/dist/adapters/mysql/tools/shell/backup.js.map +1 -0
- package/dist/adapters/mysql/tools/shell/common.d.ts +41 -0
- package/dist/adapters/mysql/tools/shell/common.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/shell/common.js +167 -0
- package/dist/adapters/mysql/tools/shell/common.js.map +1 -0
- package/dist/adapters/mysql/tools/shell/data-transfer.d.ts +19 -0
- package/dist/adapters/mysql/tools/shell/data-transfer.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/shell/data-transfer.js +226 -0
- package/dist/adapters/mysql/tools/shell/data-transfer.js.map +1 -0
- package/dist/adapters/mysql/tools/shell/index.d.ts +17 -0
- package/dist/adapters/mysql/tools/shell/index.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/shell/index.js +34 -0
- package/dist/adapters/mysql/tools/shell/index.js.map +1 -0
- package/dist/adapters/mysql/tools/shell/info.d.ts +11 -0
- package/dist/adapters/mysql/tools/shell/info.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/shell/info.js +40 -0
- package/dist/adapters/mysql/tools/shell/info.js.map +1 -0
- package/dist/adapters/mysql/tools/shell/restore.d.ts +15 -0
- package/dist/adapters/mysql/tools/shell/restore.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/shell/restore.js +135 -0
- package/dist/adapters/mysql/tools/shell/restore.js.map +1 -0
- package/dist/adapters/mysql/tools/shell/utilities.d.ts +11 -0
- package/dist/adapters/mysql/tools/shell/utilities.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/shell/utilities.js +49 -0
- package/dist/adapters/mysql/tools/shell/utilities.js.map +1 -0
- package/dist/adapters/mysql/tools/spatial/geometry.d.ts +17 -0
- package/dist/adapters/mysql/tools/spatial/geometry.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/spatial/geometry.js +87 -0
- package/dist/adapters/mysql/tools/spatial/geometry.js.map +1 -0
- package/dist/adapters/mysql/tools/spatial/index.d.ts +13 -0
- package/dist/adapters/mysql/tools/spatial/index.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/spatial/index.js +31 -0
- package/dist/adapters/mysql/tools/spatial/index.js.map +1 -0
- package/dist/adapters/mysql/tools/spatial/operations.d.ts +25 -0
- package/dist/adapters/mysql/tools/spatial/operations.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/spatial/operations.js +179 -0
- package/dist/adapters/mysql/tools/spatial/operations.js.map +1 -0
- package/dist/adapters/mysql/tools/spatial/queries.d.ts +25 -0
- package/dist/adapters/mysql/tools/spatial/queries.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/spatial/queries.js +205 -0
- package/dist/adapters/mysql/tools/spatial/queries.js.map +1 -0
- package/dist/adapters/mysql/tools/spatial/setup.d.ts +17 -0
- package/dist/adapters/mysql/tools/spatial/setup.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/spatial/setup.js +85 -0
- package/dist/adapters/mysql/tools/spatial/setup.js.map +1 -0
- package/dist/adapters/mysql/tools/stats/comparative.d.ts +21 -0
- package/dist/adapters/mysql/tools/stats/comparative.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/stats/comparative.js +247 -0
- package/dist/adapters/mysql/tools/stats/comparative.js.map +1 -0
- package/dist/adapters/mysql/tools/stats/descriptive.d.ts +30 -0
- package/dist/adapters/mysql/tools/stats/descriptive.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/stats/descriptive.js +403 -0
- package/dist/adapters/mysql/tools/stats/descriptive.js.map +1 -0
- package/dist/adapters/mysql/tools/stats/index.d.ts +13 -0
- package/dist/adapters/mysql/tools/stats/index.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/stats/index.js +25 -0
- package/dist/adapters/mysql/tools/stats/index.js.map +1 -0
- package/dist/adapters/mysql/tools/sysschema/activity.d.ts +17 -0
- package/dist/adapters/mysql/tools/sysschema/activity.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/sysschema/activity.js +107 -0
- package/dist/adapters/mysql/tools/sysschema/activity.js.map +1 -0
- package/dist/adapters/mysql/tools/sysschema/index.d.ts +13 -0
- package/dist/adapters/mysql/tools/sysschema/index.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/sysschema/index.js +26 -0
- package/dist/adapters/mysql/tools/sysschema/index.js.map +1 -0
- package/dist/adapters/mysql/tools/sysschema/performance.d.ts +21 -0
- package/dist/adapters/mysql/tools/sysschema/performance.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/sysschema/performance.js +220 -0
- package/dist/adapters/mysql/tools/sysschema/performance.js.map +1 -0
- package/dist/adapters/mysql/tools/sysschema/resources.d.ts +21 -0
- package/dist/adapters/mysql/tools/sysschema/resources.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/sysschema/resources.js +214 -0
- package/dist/adapters/mysql/tools/sysschema/resources.js.map +1 -0
- package/dist/adapters/mysql/tools/text/fulltext.d.ts +13 -0
- package/dist/adapters/mysql/tools/text/fulltext.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/text/fulltext.js +116 -0
- package/dist/adapters/mysql/tools/text/fulltext.js.map +1 -0
- package/dist/adapters/mysql/tools/text/index.d.ts +17 -0
- package/dist/adapters/mysql/tools/text/index.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/text/index.js +34 -0
- package/dist/adapters/mysql/tools/text/index.js.map +1 -0
- package/dist/adapters/mysql/tools/text/processing.d.ts +15 -0
- package/dist/adapters/mysql/tools/text/processing.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/text/processing.js +203 -0
- package/dist/adapters/mysql/tools/text/processing.js.map +1 -0
- package/dist/adapters/mysql/tools/transactions.d.ts +13 -0
- package/dist/adapters/mysql/tools/transactions.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/transactions.js +224 -0
- package/dist/adapters/mysql/tools/transactions.js.map +1 -0
- package/dist/adapters/mysql/types/proxysql-types.d.ts +156 -0
- package/dist/adapters/mysql/types/proxysql-types.d.ts.map +1 -0
- package/dist/adapters/mysql/types/proxysql-types.js +150 -0
- package/dist/adapters/mysql/types/proxysql-types.js.map +1 -0
- package/dist/adapters/mysql/types/router-types.d.ts +97 -0
- package/dist/adapters/mysql/types/router-types.d.ts.map +1 -0
- package/dist/adapters/mysql/types/router-types.js +89 -0
- package/dist/adapters/mysql/types/router-types.js.map +1 -0
- package/dist/adapters/mysql/types/shell-types.d.ts +109 -0
- package/dist/adapters/mysql/types/shell-types.d.ts.map +1 -0
- package/dist/adapters/mysql/types/shell-types.js +119 -0
- package/dist/adapters/mysql/types/shell-types.js.map +1 -0
- package/dist/adapters/mysql/types.d.ts +257 -0
- package/dist/adapters/mysql/types.d.ts.map +1 -0
- package/dist/adapters/mysql/types.js +245 -0
- package/dist/adapters/mysql/types.js.map +1 -0
- package/dist/auth/AuthorizationServerDiscovery.d.ts +44 -0
- package/dist/auth/AuthorizationServerDiscovery.d.ts.map +1 -0
- package/dist/auth/AuthorizationServerDiscovery.js +110 -0
- package/dist/auth/AuthorizationServerDiscovery.js.map +1 -0
- package/dist/auth/OAuthResourceServer.d.ts +42 -0
- package/dist/auth/OAuthResourceServer.d.ts.map +1 -0
- package/dist/auth/OAuthResourceServer.js +75 -0
- package/dist/auth/OAuthResourceServer.js.map +1 -0
- package/dist/auth/TokenValidator.d.ts +36 -0
- package/dist/auth/TokenValidator.d.ts.map +1 -0
- package/dist/auth/TokenValidator.js +125 -0
- package/dist/auth/TokenValidator.js.map +1 -0
- package/dist/auth/errors.d.ts +63 -0
- package/dist/auth/errors.d.ts.map +1 -0
- package/dist/auth/errors.js +102 -0
- package/dist/auth/errors.js.map +1 -0
- package/dist/auth/index.d.ts +13 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +15 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/middleware.d.ts +61 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +152 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/auth/scopes.d.ts +61 -0
- package/dist/auth/scopes.d.ts.map +1 -0
- package/dist/auth/scopes.js +167 -0
- package/dist/auth/scopes.js.map +1 -0
- package/dist/auth/types.d.ts +208 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +8 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/cli/args.d.ts +15 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +303 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli.d.ts +17 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +141 -0
- package/dist/cli.js.map +1 -0
- package/dist/constants/ServerInstructions.d.ts +17 -0
- package/dist/constants/ServerInstructions.d.ts.map +1 -0
- package/dist/constants/ServerInstructions.js +143 -0
- package/dist/constants/ServerInstructions.js.map +1 -0
- package/dist/filtering/ToolConstants.d.ts +32 -0
- package/dist/filtering/ToolConstants.d.ts.map +1 -0
- package/dist/filtering/ToolConstants.js +290 -0
- package/dist/filtering/ToolConstants.js.map +1 -0
- package/dist/filtering/ToolFilter.d.ts +82 -0
- package/dist/filtering/ToolFilter.d.ts.map +1 -0
- package/dist/filtering/ToolFilter.js +319 -0
- package/dist/filtering/ToolFilter.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/logging/McpLogging.d.ts +81 -0
- package/dist/logging/McpLogging.d.ts.map +1 -0
- package/dist/logging/McpLogging.js +129 -0
- package/dist/logging/McpLogging.js.map +1 -0
- package/dist/logging/index.d.ts +7 -0
- package/dist/logging/index.d.ts.map +1 -0
- package/dist/logging/index.js +7 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/pool/ConnectionPool.d.ts +76 -0
- package/dist/pool/ConnectionPool.d.ts.map +1 -0
- package/dist/pool/ConnectionPool.js +238 -0
- package/dist/pool/ConnectionPool.js.map +1 -0
- package/dist/progress/ProgressReporter.d.ts +101 -0
- package/dist/progress/ProgressReporter.d.ts.map +1 -0
- package/dist/progress/ProgressReporter.js +153 -0
- package/dist/progress/ProgressReporter.js.map +1 -0
- package/dist/progress/index.d.ts +7 -0
- package/dist/progress/index.d.ts.map +1 -0
- package/dist/progress/index.js +7 -0
- package/dist/progress/index.js.map +1 -0
- package/dist/server/McpServer.d.ts +86 -0
- package/dist/server/McpServer.d.ts.map +1 -0
- package/dist/server/McpServer.js +289 -0
- package/dist/server/McpServer.js.map +1 -0
- package/dist/transports/http.d.ts +74 -0
- package/dist/transports/http.d.ts.map +1 -0
- package/dist/transports/http.js +199 -0
- package/dist/transports/http.js.map +1 -0
- package/dist/transports/index.d.ts +7 -0
- package/dist/transports/index.d.ts.map +1 -0
- package/dist/transports/index.js +7 -0
- package/dist/transports/index.js.map +1 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +11 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/modules/database.d.ts +101 -0
- package/dist/types/modules/database.d.ts.map +1 -0
- package/dist/types/modules/database.js +8 -0
- package/dist/types/modules/database.js.map +1 -0
- package/dist/types/modules/errors.d.ts +56 -0
- package/dist/types/modules/errors.d.ts.map +1 -0
- package/dist/types/modules/errors.js +82 -0
- package/dist/types/modules/errors.js.map +1 -0
- package/dist/types/modules/oauth.d.ts +66 -0
- package/dist/types/modules/oauth.d.ts.map +1 -0
- package/dist/types/modules/oauth.js +8 -0
- package/dist/types/modules/oauth.js.map +1 -0
- package/dist/types/modules/query.d.ts +126 -0
- package/dist/types/modules/query.d.ts.map +1 -0
- package/dist/types/modules/query.js +8 -0
- package/dist/types/modules/query.js.map +1 -0
- package/dist/types/modules/server.d.ts +31 -0
- package/dist/types/modules/server.d.ts.map +1 -0
- package/dist/types/modules/server.js +7 -0
- package/dist/types/modules/server.js.map +1 -0
- package/dist/types/modules/tools.d.ts +202 -0
- package/dist/types/modules/tools.d.ts.map +1 -0
- package/dist/types/modules/tools.js +8 -0
- package/dist/types/modules/tools.js.map +1 -0
- package/dist/utils/logger.d.ts +116 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +315 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/promptGenerator.d.ts +15 -0
- package/dist/utils/promptGenerator.d.ts.map +1 -0
- package/dist/utils/promptGenerator.js +51 -0
- package/dist/utils/promptGenerator.js.map +1 -0
- package/dist/utils/validators.d.ts +59 -0
- package/dist/utils/validators.d.ts.map +1 -0
- package/dist/utils/validators.js +145 -0
- package/dist/utils/validators.js.map +1 -0
- package/eslint.config.js +86 -0
- package/package.json +66 -0
- package/releases/release-notes.md +134 -0
- package/releases/v2.0.0-release-notes.md +522 -0
- package/releases/v2.1.0-release-notes.md +145 -0
- package/server.json +33 -0
- package/src/__tests__/cli.test.ts +304 -0
- package/src/__tests__/index.test.ts +25 -0
- package/src/__tests__/mocks/adapter.ts +265 -0
- package/src/__tests__/mocks/index.ts +36 -0
- package/src/__tests__/mocks/mysql.ts +135 -0
- package/src/__tests__/perf.test.ts +224 -0
- package/src/__tests__/performance.test.ts +181 -0
- package/src/__tests__/setup.ts +55 -0
- package/src/adapters/DatabaseAdapter.ts +376 -0
- package/src/adapters/__tests__/DatabaseAdapter.test.ts +441 -0
- package/src/adapters/mysql/MySQLAdapter.ts +544 -0
- package/src/adapters/mysql/SchemaManager.ts +298 -0
- package/src/adapters/mysql/__tests__/MySQLAdapter.integration.test.ts +155 -0
- package/src/adapters/mysql/__tests__/MySQLAdapter.test.ts +510 -0
- package/src/adapters/mysql/__tests__/SchemaManager.test.ts +165 -0
- package/src/adapters/mysql/index.ts +8 -0
- package/src/adapters/mysql/prompts/__tests__/indexTuning.test.ts +32 -0
- package/src/adapters/mysql/prompts/__tests__/prompts.test.ts +301 -0
- package/src/adapters/mysql/prompts/backupStrategy.ts +81 -0
- package/src/adapters/mysql/prompts/clusterSetup.ts +118 -0
- package/src/adapters/mysql/prompts/docstoreSetup.ts +123 -0
- package/src/adapters/mysql/prompts/eventScheduler.ts +103 -0
- package/src/adapters/mysql/prompts/healthCheck.ts +56 -0
- package/src/adapters/mysql/prompts/index.ts +329 -0
- package/src/adapters/mysql/prompts/indexTuning.ts +90 -0
- package/src/adapters/mysql/prompts/mysqlshSetup.ts +119 -0
- package/src/adapters/mysql/prompts/proxysqlSetup.ts +115 -0
- package/src/adapters/mysql/prompts/replicationSetup.ts +147 -0
- package/src/adapters/mysql/prompts/routerSetup.ts +106 -0
- package/src/adapters/mysql/prompts/spatialSetup.ts +109 -0
- package/src/adapters/mysql/prompts/sysSchema.ts +109 -0
- package/src/adapters/mysql/resources/__tests__/capabilities.test.ts +52 -0
- package/src/adapters/mysql/resources/__tests__/cluster.test.ts +105 -0
- package/src/adapters/mysql/resources/__tests__/docstore.test.ts +97 -0
- package/src/adapters/mysql/resources/__tests__/events.test.ts +97 -0
- package/src/adapters/mysql/resources/__tests__/health.test.ts +92 -0
- package/src/adapters/mysql/resources/__tests__/indexes.test.ts +106 -0
- package/src/adapters/mysql/resources/__tests__/innodb.test.ts +74 -0
- package/src/adapters/mysql/resources/__tests__/locks.test.ts +110 -0
- package/src/adapters/mysql/resources/__tests__/performance.test.ts +60 -0
- package/src/adapters/mysql/resources/__tests__/pool.test.ts +50 -0
- package/src/adapters/mysql/resources/__tests__/processlist.test.ts +29 -0
- package/src/adapters/mysql/resources/__tests__/replication.test.ts +213 -0
- package/src/adapters/mysql/resources/__tests__/resources.test.ts +117 -0
- package/src/adapters/mysql/resources/__tests__/schema.test.ts +30 -0
- package/src/adapters/mysql/resources/__tests__/spatial.test.ts +47 -0
- package/src/adapters/mysql/resources/__tests__/status.test.ts +58 -0
- package/src/adapters/mysql/resources/__tests__/sysschema.test.ts +62 -0
- package/src/adapters/mysql/resources/__tests__/tables.test.ts +37 -0
- package/src/adapters/mysql/resources/__tests__/variables.test.ts +70 -0
- package/src/adapters/mysql/resources/capabilities.ts +51 -0
- package/src/adapters/mysql/resources/cluster.ts +71 -0
- package/src/adapters/mysql/resources/docstore.ts +69 -0
- package/src/adapters/mysql/resources/events.ts +50 -0
- package/src/adapters/mysql/resources/health.ts +96 -0
- package/src/adapters/mysql/resources/index.ts +77 -0
- package/src/adapters/mysql/resources/indexes.ts +98 -0
- package/src/adapters/mysql/resources/innodb.ts +110 -0
- package/src/adapters/mysql/resources/locks.ts +64 -0
- package/src/adapters/mysql/resources/performance.ts +100 -0
- package/src/adapters/mysql/resources/pool.ts +26 -0
- package/src/adapters/mysql/resources/processlist.ts +23 -0
- package/src/adapters/mysql/resources/replication.ts +120 -0
- package/src/adapters/mysql/resources/schema.ts +23 -0
- package/src/adapters/mysql/resources/spatial.ts +54 -0
- package/src/adapters/mysql/resources/status.ts +27 -0
- package/src/adapters/mysql/resources/sysschema.ts +57 -0
- package/src/adapters/mysql/resources/tables.ts +23 -0
- package/src/adapters/mysql/resources/variables.ts +27 -0
- package/src/adapters/mysql/tools/__tests__/cluster.test.ts +349 -0
- package/src/adapters/mysql/tools/__tests__/core.test.ts +439 -0
- package/src/adapters/mysql/tools/__tests__/docstore.test.ts +459 -0
- package/src/adapters/mysql/tools/__tests__/events.test.ts +515 -0
- package/src/adapters/mysql/tools/__tests__/json_core.test.ts +285 -0
- package/src/adapters/mysql/tools/__tests__/json_enhanced.test.ts +380 -0
- package/src/adapters/mysql/tools/__tests__/json_helpers.test.ts +151 -0
- package/src/adapters/mysql/tools/__tests__/proxysql.test.ts +422 -0
- package/src/adapters/mysql/tools/__tests__/replication.test.ts +478 -0
- package/src/adapters/mysql/tools/__tests__/roles.test.ts +217 -0
- package/src/adapters/mysql/tools/__tests__/router.test.ts +603 -0
- package/src/adapters/mysql/tools/__tests__/security.test.ts +466 -0
- package/src/adapters/mysql/tools/__tests__/security_injection.test.ts +188 -0
- package/src/adapters/mysql/tools/__tests__/security_integration.test.ts +223 -0
- package/src/adapters/mysql/tools/__tests__/spatial.test.ts +333 -0
- package/src/adapters/mysql/tools/__tests__/spatial_handler.test.ts +153 -0
- package/src/adapters/mysql/tools/__tests__/stats.test.ts +577 -0
- package/src/adapters/mysql/tools/__tests__/transactions.test.ts +311 -0
- package/src/adapters/mysql/tools/admin/__tests__/backup.test.ts +400 -0
- package/src/adapters/mysql/tools/admin/__tests__/maintenance.test.ts +343 -0
- package/src/adapters/mysql/tools/admin/__tests__/monitoring.test.ts +402 -0
- package/src/adapters/mysql/tools/admin/backup.ts +238 -0
- package/src/adapters/mysql/tools/admin/index.ts +77 -0
- package/src/adapters/mysql/tools/admin/maintenance.ts +160 -0
- package/src/adapters/mysql/tools/admin/monitoring.ts +229 -0
- package/src/adapters/mysql/tools/cluster/__tests__/group-replication.test.ts +204 -0
- package/src/adapters/mysql/tools/cluster/__tests__/innodb-cluster.test.ts +130 -0
- package/src/adapters/mysql/tools/cluster/group-replication.ts +324 -0
- package/src/adapters/mysql/tools/cluster/index.ts +44 -0
- package/src/adapters/mysql/tools/cluster/innodb-cluster.ts +384 -0
- package/src/adapters/mysql/tools/core.ts +363 -0
- package/src/adapters/mysql/tools/docstore.ts +346 -0
- package/src/adapters/mysql/tools/events.ts +419 -0
- package/src/adapters/mysql/tools/index.ts +60 -0
- package/src/adapters/mysql/tools/json/__tests__/core.test.ts +207 -0
- package/src/adapters/mysql/tools/json/__tests__/enhanced.test.ts +316 -0
- package/src/adapters/mysql/tools/json/__tests__/helpers.test.ts +94 -0
- package/src/adapters/mysql/tools/json/__tests__/validation.test.ts +83 -0
- package/src/adapters/mysql/tools/json/core.ts +309 -0
- package/src/adapters/mysql/tools/json/enhanced.ts +346 -0
- package/src/adapters/mysql/tools/json/helpers.ts +137 -0
- package/src/adapters/mysql/tools/json/index.ts +77 -0
- package/src/adapters/mysql/tools/partitioning.ts +184 -0
- package/src/adapters/mysql/tools/performance/__tests__/analysis.test.ts +302 -0
- package/src/adapters/mysql/tools/performance/__tests__/optimization.test.ts +201 -0
- package/src/adapters/mysql/tools/performance/analysis.ts +322 -0
- package/src/adapters/mysql/tools/performance/index.ts +56 -0
- package/src/adapters/mysql/tools/performance/optimization.ts +218 -0
- package/src/adapters/mysql/tools/proxysql.ts +465 -0
- package/src/adapters/mysql/tools/replication.ts +215 -0
- package/src/adapters/mysql/tools/roles.ts +202 -0
- package/src/adapters/mysql/tools/router.ts +405 -0
- package/src/adapters/mysql/tools/schema/__tests__/constraints.test.ts +91 -0
- package/src/adapters/mysql/tools/schema/__tests__/management.test.ts +122 -0
- package/src/adapters/mysql/tools/schema/__tests__/routines.test.ts +45 -0
- package/src/adapters/mysql/tools/schema/__tests__/scheduled_events.test.ts +44 -0
- package/src/adapters/mysql/tools/schema/__tests__/triggers.test.ts +44 -0
- package/src/adapters/mysql/tools/schema/__tests__/views.test.ts +85 -0
- package/src/adapters/mysql/tools/schema/constraints.ts +77 -0
- package/src/adapters/mysql/tools/schema/index.ts +54 -0
- package/src/adapters/mysql/tools/schema/management.ts +131 -0
- package/src/adapters/mysql/tools/schema/routines.ts +106 -0
- package/src/adapters/mysql/tools/schema/scheduled_events.ts +66 -0
- package/src/adapters/mysql/tools/schema/triggers.ts +57 -0
- package/src/adapters/mysql/tools/schema/views.ts +90 -0
- package/src/adapters/mysql/tools/security/__tests__/audit.test.ts +181 -0
- package/src/adapters/mysql/tools/security/__tests__/data-protection.test.ts +111 -0
- package/src/adapters/mysql/tools/security/__tests__/encryption.test.ts +156 -0
- package/src/adapters/mysql/tools/security/audit.ts +272 -0
- package/src/adapters/mysql/tools/security/data-protection.ts +274 -0
- package/src/adapters/mysql/tools/security/encryption.ts +237 -0
- package/src/adapters/mysql/tools/security/index.ts +45 -0
- package/src/adapters/mysql/tools/shell/__tests__/backup.test.ts +298 -0
- package/src/adapters/mysql/tools/shell/__tests__/common.test.ts +180 -0
- package/src/adapters/mysql/tools/shell/__tests__/data-transfer.test.ts +368 -0
- package/src/adapters/mysql/tools/shell/__tests__/info.test.ts +77 -0
- package/src/adapters/mysql/tools/shell/__tests__/restore.test.ts +187 -0
- package/src/adapters/mysql/tools/shell/__tests__/utilities.test.ts +154 -0
- package/src/adapters/mysql/tools/shell/backup.ts +215 -0
- package/src/adapters/mysql/tools/shell/common.ts +227 -0
- package/src/adapters/mysql/tools/shell/data-transfer.ts +256 -0
- package/src/adapters/mysql/tools/shell/index.ts +49 -0
- package/src/adapters/mysql/tools/shell/info.ts +45 -0
- package/src/adapters/mysql/tools/shell/restore.ts +153 -0
- package/src/adapters/mysql/tools/shell/utilities.ts +56 -0
- package/src/adapters/mysql/tools/spatial/__tests__/geometry.test.ts +101 -0
- package/src/adapters/mysql/tools/spatial/__tests__/operations.test.ts +164 -0
- package/src/adapters/mysql/tools/spatial/__tests__/queries.test.ts +253 -0
- package/src/adapters/mysql/tools/spatial/geometry.ts +106 -0
- package/src/adapters/mysql/tools/spatial/index.ts +54 -0
- package/src/adapters/mysql/tools/spatial/operations.ts +217 -0
- package/src/adapters/mysql/tools/spatial/queries.ts +235 -0
- package/src/adapters/mysql/tools/spatial/setup.ts +104 -0
- package/src/adapters/mysql/tools/stats/__tests__/comparative.test.ts +139 -0
- package/src/adapters/mysql/tools/stats/comparative.ts +272 -0
- package/src/adapters/mysql/tools/stats/descriptive.ts +452 -0
- package/src/adapters/mysql/tools/stats/index.ts +40 -0
- package/src/adapters/mysql/tools/sysschema/__tests__/activity.test.ts +89 -0
- package/src/adapters/mysql/tools/sysschema/__tests__/io_summary_fix.test.ts +24 -0
- package/src/adapters/mysql/tools/sysschema/__tests__/performance.test.ts +142 -0
- package/src/adapters/mysql/tools/sysschema/__tests__/resources.test.ts +142 -0
- package/src/adapters/mysql/tools/sysschema/activity.ts +122 -0
- package/src/adapters/mysql/tools/sysschema/index.ts +43 -0
- package/src/adapters/mysql/tools/sysschema/performance.ts +237 -0
- package/src/adapters/mysql/tools/sysschema/resources.ts +232 -0
- package/src/adapters/mysql/tools/text/__tests__/fulltext.test.ts +153 -0
- package/src/adapters/mysql/tools/text/__tests__/processing.test.ts +201 -0
- package/src/adapters/mysql/tools/text/fulltext.ts +140 -0
- package/src/adapters/mysql/tools/text/index.ts +52 -0
- package/src/adapters/mysql/tools/text/processing.ts +242 -0
- package/src/adapters/mysql/tools/transactions.ts +252 -0
- package/src/adapters/mysql/types/__tests__/shell-types.test.ts +210 -0
- package/src/adapters/mysql/types/proxysql-types.ts +190 -0
- package/src/adapters/mysql/types/router-types.ts +129 -0
- package/src/adapters/mysql/types/shell-types.ts +140 -0
- package/src/adapters/mysql/types.ts +298 -0
- package/src/auth/AuthorizationServerDiscovery.ts +133 -0
- package/src/auth/OAuthResourceServer.ts +87 -0
- package/src/auth/TokenValidator.ts +143 -0
- package/src/auth/__tests__/AuthorizationServerDiscovery.test.ts +312 -0
- package/src/auth/__tests__/OAuthResourceServer.test.ts +183 -0
- package/src/auth/__tests__/TokenValidator.test.ts +351 -0
- package/src/auth/__tests__/errors.test.ts +183 -0
- package/src/auth/__tests__/middleware.test.ts +276 -0
- package/src/auth/__tests__/scopes.test.ts +164 -0
- package/src/auth/errors.ts +116 -0
- package/src/auth/index.ts +30 -0
- package/src/auth/middleware.ts +214 -0
- package/src/auth/scopes.ts +193 -0
- package/src/auth/types.ts +303 -0
- package/src/cli/__tests__/args.test.ts +223 -0
- package/src/cli/__tests__/main.test.ts +193 -0
- package/src/cli/args.ts +343 -0
- package/src/cli.ts +168 -0
- package/src/constants/ServerInstructions.ts +159 -0
- package/src/filtering/ToolConstants.ts +297 -0
- package/src/filtering/ToolFilter.ts +363 -0
- package/src/filtering/__tests__/ToolFilter.test.ts +427 -0
- package/src/index.ts +78 -0
- package/src/logging/McpLogging.ts +163 -0
- package/src/logging/__tests__/McpLogging.test.ts +261 -0
- package/src/logging/index.ts +7 -0
- package/src/pool/ConnectionPool.ts +284 -0
- package/src/pool/__tests__/ConnectionPool.test.ts +448 -0
- package/src/progress/ProgressReporter.ts +179 -0
- package/src/progress/__tests__/ProgressReporter.test.ts +263 -0
- package/src/progress/index.ts +7 -0
- package/src/server/McpServer.ts +341 -0
- package/src/server/__tests__/McpServer.test.ts +368 -0
- package/src/transports/__tests__/http.test.ts +596 -0
- package/src/transports/http.ts +248 -0
- package/src/transports/index.ts +7 -0
- package/src/types/__tests__/types.test.ts +201 -0
- package/src/types/index.ts +58 -0
- package/src/types/modules/database.ts +127 -0
- package/src/types/modules/errors.ts +89 -0
- package/src/types/modules/oauth.ts +91 -0
- package/src/types/modules/query.ts +140 -0
- package/src/types/modules/server.ts +39 -0
- package/src/types/modules/tools.ts +296 -0
- package/src/utils/__tests__/logger.test.ts +422 -0
- package/src/utils/__tests__/validators.test.ts +172 -0
- package/src/utils/logger.ts +426 -0
- package/src/utils/promptGenerator.ts +74 -0
- package/src/utils/validators.ts +181 -0
- package/tsconfig.json +51 -0
- package/vitest.config.ts +26 -0
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mysql-mcp - Structured Logger
|
|
3
|
+
*
|
|
4
|
+
* Centralized logging utility with RFC 5424 severity levels and structured output.
|
|
5
|
+
* Supports dual-mode logging: stderr for local debugging and MCP protocol notifications.
|
|
6
|
+
*
|
|
7
|
+
* Format: [timestamp] [LEVEL] [MODULE] [CODE] message {context}
|
|
8
|
+
* Example: [2025-12-18T01:30:00Z] [ERROR] [ADAPTER] [MYSQL_CONNECT_FAILED] Failed to connect {"host":"localhost"}
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* RFC 5424 syslog severity levels
|
|
13
|
+
* @see https://datatracker.ietf.org/doc/html/rfc5424#section-6.2.1
|
|
14
|
+
*/
|
|
15
|
+
export type LogLevel =
|
|
16
|
+
| 'debug' // 7 - Debug-level messages
|
|
17
|
+
| 'info' // 6 - Informational messages
|
|
18
|
+
| 'notice' // 5 - Normal but significant condition
|
|
19
|
+
| 'warning' // 4 - Warning conditions
|
|
20
|
+
| 'error' // 3 - Error conditions
|
|
21
|
+
| 'critical' // 2 - Critical conditions
|
|
22
|
+
| 'alert' // 1 - Action must be taken immediately
|
|
23
|
+
| 'emergency'; // 0 - System is unusable
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Module identifiers for log categorization
|
|
27
|
+
*/
|
|
28
|
+
export type LogModule =
|
|
29
|
+
| 'SERVER' // MCP server lifecycle
|
|
30
|
+
| 'ADAPTER' // Database adapter operations
|
|
31
|
+
| 'AUTH' // OAuth/authentication
|
|
32
|
+
| 'TOOLS' // Tool execution
|
|
33
|
+
| 'RESOURCES' // Resource handlers
|
|
34
|
+
| 'PROMPTS' // Prompt handlers
|
|
35
|
+
| 'TRANSPORT' // HTTP/SSE/stdio transport
|
|
36
|
+
| 'QUERY' // SQL query execution
|
|
37
|
+
| 'POOL' // Connection pool
|
|
38
|
+
| 'FILTER' // Tool filtering
|
|
39
|
+
| 'ROUTER' // MySQL Router
|
|
40
|
+
| 'PROXYSQL' // ProxySQL
|
|
41
|
+
| 'SHELL' // MySQL Shell
|
|
42
|
+
| 'CLI'; // Command line interface
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Structured log context following MCP logging standards
|
|
46
|
+
*/
|
|
47
|
+
export interface LogContext {
|
|
48
|
+
/** Module identifier */
|
|
49
|
+
module?: LogModule;
|
|
50
|
+
/** Module-prefixed error/event code (e.g., MYSQL_CONNECT_FAILED) */
|
|
51
|
+
code?: string;
|
|
52
|
+
/** Operation being performed (e.g., executeQuery, connect) */
|
|
53
|
+
operation?: string;
|
|
54
|
+
/** Entity identifier (e.g., table name, connection id) */
|
|
55
|
+
entityId?: string;
|
|
56
|
+
/** Request identifier for tracing */
|
|
57
|
+
requestId?: string;
|
|
58
|
+
/** Error stack trace */
|
|
59
|
+
stack?: string;
|
|
60
|
+
/** Additional context fields */
|
|
61
|
+
[key: string]: unknown;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
interface LogEntry {
|
|
65
|
+
level: LogLevel;
|
|
66
|
+
module?: LogModule | undefined;
|
|
67
|
+
code?: string | undefined;
|
|
68
|
+
message: string;
|
|
69
|
+
timestamp: string;
|
|
70
|
+
context?: LogContext | undefined;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Sensitive patterns to redact from logs
|
|
75
|
+
* Note: Patterns are designed to avoid ReDoS by using non-overlapping character classes
|
|
76
|
+
* and avoiding nested quantifiers on ambiguous patterns.
|
|
77
|
+
*/
|
|
78
|
+
const SENSITIVE_PATTERNS = [
|
|
79
|
+
// Use word boundaries and specific character classes to avoid backtracking
|
|
80
|
+
/\bpassword[=:]\s*[^\s,;]{1,100}/gi,
|
|
81
|
+
/\bsecret[=:]\s*[^\s,;]{1,100}/gi,
|
|
82
|
+
/\btoken[=:]\s*[^\s,;]{1,100}/gi,
|
|
83
|
+
/\bauthorization:\s*bearer\s+\S{1,500}/gi,
|
|
84
|
+
// MySQL connection string - use specific pattern with length limits
|
|
85
|
+
/mysql:\/\/[^:]{1,50}:[^@]{1,100}@/gi,
|
|
86
|
+
];
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Maximum length of input to process with regex
|
|
90
|
+
* Prevents ReDoS on extremely long strings
|
|
91
|
+
*/
|
|
92
|
+
const MAX_REDACT_LENGTH = 10000;
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Redact sensitive information from a string
|
|
96
|
+
*/
|
|
97
|
+
function redactSensitive(input: string): string {
|
|
98
|
+
// Limit input length to prevent ReDoS attacks
|
|
99
|
+
if (input.length > MAX_REDACT_LENGTH) {
|
|
100
|
+
// For very long strings, truncate and add indicator
|
|
101
|
+
// codeql[js/polynomial-redos] - Input is length-limited before regex processing
|
|
102
|
+
return redactSensitive(input.substring(0, MAX_REDACT_LENGTH)) + '...[TRUNCATED]';
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
let result = input;
|
|
106
|
+
for (const pattern of SENSITIVE_PATTERNS) {
|
|
107
|
+
result = result.replace(pattern, (match) => {
|
|
108
|
+
// Keep the key part, redact the value
|
|
109
|
+
const colonIndex = match.indexOf(':');
|
|
110
|
+
const equalIndex = match.indexOf('=');
|
|
111
|
+
const delimiterIndex = colonIndex >= 0 ? colonIndex : equalIndex;
|
|
112
|
+
|
|
113
|
+
if (delimiterIndex >= 0) {
|
|
114
|
+
return match.substring(0, delimiterIndex + 1) + '[REDACTED]';
|
|
115
|
+
}
|
|
116
|
+
return '[REDACTED]';
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Sensitive keys to redact from context objects
|
|
124
|
+
*/
|
|
125
|
+
const SENSITIVE_KEYS = new Set([
|
|
126
|
+
'password',
|
|
127
|
+
'secret',
|
|
128
|
+
'token',
|
|
129
|
+
'authorization',
|
|
130
|
+
'apikey',
|
|
131
|
+
'api_key',
|
|
132
|
+
'accesstoken',
|
|
133
|
+
'access_token',
|
|
134
|
+
'refreshtoken',
|
|
135
|
+
'refresh_token',
|
|
136
|
+
'credential',
|
|
137
|
+
'credentials',
|
|
138
|
+
'issuer',
|
|
139
|
+
'audience',
|
|
140
|
+
'jwksuri',
|
|
141
|
+
'jwks_uri',
|
|
142
|
+
'client_secret',
|
|
143
|
+
'clientsecret'
|
|
144
|
+
]);
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Sanitize log context by redacting sensitive values
|
|
148
|
+
*/
|
|
149
|
+
function sanitizeContext(context: LogContext): LogContext {
|
|
150
|
+
const result: LogContext = {};
|
|
151
|
+
|
|
152
|
+
for (const [key, value] of Object.entries(context)) {
|
|
153
|
+
const lowerKey = key.toLowerCase();
|
|
154
|
+
|
|
155
|
+
const isSensitive = SENSITIVE_KEYS.has(lowerKey) ||
|
|
156
|
+
[...SENSITIVE_KEYS].some(k => lowerKey.includes(k));
|
|
157
|
+
|
|
158
|
+
if (isSensitive && value !== undefined && value !== null) {
|
|
159
|
+
result[key] = '[REDACTED]';
|
|
160
|
+
} else if (typeof value === 'string') {
|
|
161
|
+
result[key] = redactSensitive(value);
|
|
162
|
+
} else if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
|
|
163
|
+
result[key] = sanitizeContext(value as LogContext);
|
|
164
|
+
} else {
|
|
165
|
+
result[key] = value;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
return result;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Remove control characters from log messages to prevent log injection
|
|
174
|
+
*/
|
|
175
|
+
function sanitizeMessage(message: string): string {
|
|
176
|
+
let result = '';
|
|
177
|
+
for (const char of message) {
|
|
178
|
+
const code = char.charCodeAt(0);
|
|
179
|
+
// Allow valid printable characters (>= 32), newlines (10), tabs (9), and carriage returns (13)
|
|
180
|
+
// Exclude DEL (127)
|
|
181
|
+
if ((code >= 32 && code !== 127) || code === 10 || code === 9 || code === 13) {
|
|
182
|
+
result += char;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return result;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* RFC 5424 severity priority (lower number = higher severity)
|
|
190
|
+
*/
|
|
191
|
+
const LEVEL_PRIORITY: Record<LogLevel, number> = {
|
|
192
|
+
emergency: 0,
|
|
193
|
+
alert: 1,
|
|
194
|
+
critical: 2,
|
|
195
|
+
error: 3,
|
|
196
|
+
warning: 4,
|
|
197
|
+
notice: 5,
|
|
198
|
+
info: 6,
|
|
199
|
+
debug: 7
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* MCP-aware structured logger with dual-mode output
|
|
204
|
+
*
|
|
205
|
+
* Follows MCP Server Logging Standards:
|
|
206
|
+
* - Centralized logger writing to stderr only (stdout reserved for MCP protocol)
|
|
207
|
+
* - Include: module, operation, entityId, context, stack traces
|
|
208
|
+
* - Module-prefixed codes (e.g., MYSQL_CONNECT_FAILED, AUTH_TOKEN_INVALID)
|
|
209
|
+
* - Severity: RFC 5424 levels
|
|
210
|
+
* - Format: [timestamp] [LEVEL] [MODULE] [CODE] message {context}
|
|
211
|
+
*/
|
|
212
|
+
class Logger {
|
|
213
|
+
private minLevel: LogLevel = 'info';
|
|
214
|
+
private loggerName = 'mysql-mcp';
|
|
215
|
+
private defaultModule: LogModule = 'SERVER';
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Set the minimum log level
|
|
219
|
+
*/
|
|
220
|
+
setLevel(level: LogLevel): void {
|
|
221
|
+
this.minLevel = level;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Get the current minimum log level
|
|
226
|
+
*/
|
|
227
|
+
getLevel(): LogLevel {
|
|
228
|
+
return this.minLevel;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Set the logger name
|
|
233
|
+
*/
|
|
234
|
+
setLoggerName(name: string): void {
|
|
235
|
+
this.loggerName = name;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Get the logger name
|
|
240
|
+
*/
|
|
241
|
+
getLoggerName(): string {
|
|
242
|
+
return this.loggerName;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Set the default module for logs without explicit module
|
|
247
|
+
*/
|
|
248
|
+
setDefaultModule(module: LogModule): void {
|
|
249
|
+
this.defaultModule = module;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
private shouldLog(level: LogLevel): boolean {
|
|
253
|
+
return LEVEL_PRIORITY[level] <= LEVEL_PRIORITY[this.minLevel];
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Format log entry according to MCP logging standard
|
|
258
|
+
* Format: [timestamp] [LEVEL] [MODULE] [CODE] message {context}
|
|
259
|
+
*/
|
|
260
|
+
private formatEntry(entry: LogEntry): string {
|
|
261
|
+
const parts: string[] = [
|
|
262
|
+
`[${entry.timestamp}]`,
|
|
263
|
+
`[${entry.level.toUpperCase()}]`
|
|
264
|
+
];
|
|
265
|
+
|
|
266
|
+
// Add module if present
|
|
267
|
+
if (entry.module) {
|
|
268
|
+
parts.push(`[${entry.module}]`);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// Add code if present
|
|
272
|
+
if (entry.code) {
|
|
273
|
+
parts.push(`[${entry.code}]`);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
// Add message
|
|
277
|
+
parts.push(entry.message);
|
|
278
|
+
|
|
279
|
+
// Add context if present (excluding module and code which are already in the format)
|
|
280
|
+
if (entry.context) {
|
|
281
|
+
// Destructure out fields that are already in the log line format
|
|
282
|
+
const { module, code, ...restContext } = entry.context;
|
|
283
|
+
void module; void code; // Intentionally unused - already in format
|
|
284
|
+
if (Object.keys(restContext).length > 0) {
|
|
285
|
+
const sanitizedContext = sanitizeContext(restContext);
|
|
286
|
+
parts.push(JSON.stringify(sanitizedContext));
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
return parts.join(' ');
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* Core logging method
|
|
295
|
+
*/
|
|
296
|
+
private log(level: LogLevel, message: string, context?: LogContext): void {
|
|
297
|
+
if (!this.shouldLog(level)) {
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
const sanitizedMessage = sanitizeMessage(redactSensitive(message));
|
|
302
|
+
|
|
303
|
+
const entry: LogEntry = {
|
|
304
|
+
level,
|
|
305
|
+
module: context?.module ?? this.defaultModule,
|
|
306
|
+
code: context?.code,
|
|
307
|
+
message: sanitizedMessage,
|
|
308
|
+
timestamp: new Date().toISOString(),
|
|
309
|
+
context
|
|
310
|
+
};
|
|
311
|
+
|
|
312
|
+
const formatted = this.formatEntry(entry);
|
|
313
|
+
|
|
314
|
+
// Write to stderr to avoid interfering with MCP stdio transport
|
|
315
|
+
console.error(formatted);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
// =========================================================================
|
|
319
|
+
// Convenience methods for each log level
|
|
320
|
+
// =========================================================================
|
|
321
|
+
|
|
322
|
+
debug(message: string, context?: LogContext): void {
|
|
323
|
+
this.log('debug', message, context);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
info(message: string, context?: LogContext): void {
|
|
327
|
+
this.log('info', message, context);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
notice(message: string, context?: LogContext): void {
|
|
331
|
+
this.log('notice', message, context);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
warn(message: string, context?: LogContext): void {
|
|
335
|
+
this.log('warning', message, context);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
warning(message: string, context?: LogContext): void {
|
|
339
|
+
this.log('warning', message, context);
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
error(message: string, context?: LogContext): void {
|
|
343
|
+
this.log('error', message, context);
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
critical(message: string, context?: LogContext): void {
|
|
347
|
+
this.log('critical', message, context);
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
alert(message: string, context?: LogContext): void {
|
|
351
|
+
this.log('alert', message, context);
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
emergency(message: string, context?: LogContext): void {
|
|
355
|
+
this.log('emergency', message, context);
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
// =========================================================================
|
|
359
|
+
// Module-scoped logging helpers
|
|
360
|
+
// =========================================================================
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* Create a child logger scoped to a specific module
|
|
364
|
+
*/
|
|
365
|
+
forModule(module: LogModule): ModuleLogger {
|
|
366
|
+
return new ModuleLogger(this, module);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
/**
|
|
371
|
+
* Module-scoped logger for cleaner code in specific modules
|
|
372
|
+
*/
|
|
373
|
+
class ModuleLogger {
|
|
374
|
+
constructor(
|
|
375
|
+
private parent: Logger,
|
|
376
|
+
private module: LogModule
|
|
377
|
+
) { }
|
|
378
|
+
|
|
379
|
+
private withModule(context?: LogContext): LogContext {
|
|
380
|
+
return { ...context, module: this.module };
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
debug(message: string, context?: LogContext): void {
|
|
384
|
+
this.parent.debug(message, this.withModule(context));
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
info(message: string, context?: LogContext): void {
|
|
388
|
+
this.parent.info(message, this.withModule(context));
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
notice(message: string, context?: LogContext): void {
|
|
392
|
+
this.parent.notice(message, this.withModule(context));
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
warn(message: string, context?: LogContext): void {
|
|
396
|
+
this.parent.warn(message, this.withModule(context));
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
warning(message: string, context?: LogContext): void {
|
|
400
|
+
this.parent.warning(message, this.withModule(context));
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
error(message: string, context?: LogContext): void {
|
|
404
|
+
this.parent.error(message, this.withModule(context));
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
critical(message: string, context?: LogContext): void {
|
|
408
|
+
this.parent.critical(message, this.withModule(context));
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
alert(message: string, context?: LogContext): void {
|
|
412
|
+
this.parent.alert(message, this.withModule(context));
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
emergency(message: string, context?: LogContext): void {
|
|
416
|
+
this.parent.emergency(message, this.withModule(context));
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
export const logger = new Logger();
|
|
421
|
+
|
|
422
|
+
// Initialize log level from environment
|
|
423
|
+
const envLevel = process.env['LOG_LEVEL']?.toLowerCase();
|
|
424
|
+
if (envLevel && envLevel in LEVEL_PRIORITY) {
|
|
425
|
+
logger.setLevel(envLevel as LogLevel);
|
|
426
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt generator utilities
|
|
3
|
+
*
|
|
4
|
+
* Helpers for generating tool documentation and discovery prompts.
|
|
5
|
+
*/
|
|
6
|
+
import type { ToolDefinition } from '../types/index.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Generate a compact index of all tools grouped by category
|
|
10
|
+
*/
|
|
11
|
+
export function generateCompactIndex(tools: ToolDefinition[]): string {
|
|
12
|
+
// Group tools by category
|
|
13
|
+
const groups: Record<string, ToolDefinition[]> = {};
|
|
14
|
+
|
|
15
|
+
for (const tool of tools) {
|
|
16
|
+
const group = tool.group ?? 'other';
|
|
17
|
+
groups[group] ??= [];
|
|
18
|
+
groups[group].push(tool);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Generate compact format
|
|
22
|
+
const lines: string[] = [];
|
|
23
|
+
for (const [group, groupTools] of Object.entries(groups)) {
|
|
24
|
+
lines.push(`### ${group} (${String(groupTools.length)} tools)`);
|
|
25
|
+
lines.push('');
|
|
26
|
+
for (const tool of groupTools) {
|
|
27
|
+
lines.push(`- **${tool.name}**: ${tool.description}`);
|
|
28
|
+
}
|
|
29
|
+
lines.push('');
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return lines.join('\n');
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Generate a discovery prompt with common use cases
|
|
37
|
+
*/
|
|
38
|
+
export function generateDiscoveryPrompt(tools: ToolDefinition[]): string {
|
|
39
|
+
// Find commonly used tools based on tags
|
|
40
|
+
const queryTools = tools.filter(t =>
|
|
41
|
+
t.name.includes('query') || t.name.includes('read') || t.name.includes('write')
|
|
42
|
+
).slice(0, 3);
|
|
43
|
+
|
|
44
|
+
const schemaTools = tools.filter(t =>
|
|
45
|
+
t.name.includes('table') || t.name.includes('schema') || t.name.includes('describe')
|
|
46
|
+
).slice(0, 3);
|
|
47
|
+
|
|
48
|
+
const perfTools = tools.filter(t =>
|
|
49
|
+
t.name.includes('explain') || t.name.includes('performance') || t.name.includes('stats')
|
|
50
|
+
).slice(0, 3);
|
|
51
|
+
|
|
52
|
+
const lines: string[] = [
|
|
53
|
+
'## Quick Start',
|
|
54
|
+
'',
|
|
55
|
+
'### Query Data',
|
|
56
|
+
];
|
|
57
|
+
|
|
58
|
+
for (const tool of queryTools) {
|
|
59
|
+
lines.push(`- \`${tool.name}\`: ${tool.description}`);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
lines.push('', '### Explore Schema');
|
|
63
|
+
for (const tool of schemaTools) {
|
|
64
|
+
lines.push(`- \`${tool.name}\`: ${tool.description}`);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
lines.push('', '### Analyze Performance');
|
|
68
|
+
for (const tool of perfTools) {
|
|
69
|
+
lines.push(`- \`${tool.name}\`: ${tool.description}`);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
lines.push('');
|
|
73
|
+
return lines.join('\n');
|
|
74
|
+
}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mysql-mcp - Input Validators
|
|
3
|
+
*
|
|
4
|
+
* Centralized input validation utilities for SQL security.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Validation error for security-related input issues
|
|
9
|
+
*/
|
|
10
|
+
export class ValidationError extends Error {
|
|
11
|
+
constructor(message: string, public readonly field: string) {
|
|
12
|
+
super(message);
|
|
13
|
+
this.name = 'ValidationError';
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Valid MySQL identifier pattern
|
|
19
|
+
* - Must start with letter or underscore
|
|
20
|
+
* - Can contain letters, numbers, underscores
|
|
21
|
+
* - Max length 64 characters (MySQL limit)
|
|
22
|
+
*/
|
|
23
|
+
const IDENTIFIER_PATTERN = /^[a-zA-Z_][a-zA-Z0-9_]{0,63}$/;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Extended identifier pattern allowing dots for schema.table format
|
|
27
|
+
*/
|
|
28
|
+
const QUALIFIED_IDENTIFIER_PATTERN = /^[a-zA-Z_][a-zA-Z0-9_]{0,63}(\.[a-zA-Z_][a-zA-Z0-9_]{0,63})?$/;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Dangerous patterns in WHERE clauses that indicate SQL injection attempts
|
|
32
|
+
*/
|
|
33
|
+
const DANGEROUS_WHERE_PATTERNS = [
|
|
34
|
+
// Stacked queries - semicolon followed by SQL keyword
|
|
35
|
+
/;\s*(SELECT|INSERT|UPDATE|DELETE|DROP|CREATE|ALTER|TRUNCATE|EXEC|EXECUTE)\b/i,
|
|
36
|
+
// SQL comments that could hide malicious code
|
|
37
|
+
/--\s*$/m,
|
|
38
|
+
/\/\*[\s\S]*?\*\//,
|
|
39
|
+
// Query manipulation keywords (usually not in WHERE)
|
|
40
|
+
/\bUNION\s+(ALL\s+)?SELECT\b/i,
|
|
41
|
+
/\bEXCEPT\s+SELECT\b/i,
|
|
42
|
+
/\bINTERSECT\s+SELECT\b/i,
|
|
43
|
+
// Dangerous functions
|
|
44
|
+
/\bINTO\s+(OUTFILE|DUMPFILE)\b/i,
|
|
45
|
+
/\bLOAD_FILE\s*\(/i,
|
|
46
|
+
// Information schema probing (common in attacks)
|
|
47
|
+
/\bINFORMATION_SCHEMA\b.*\bTABLES\b/i,
|
|
48
|
+
// Benchmark/sleep (timing attacks)
|
|
49
|
+
/\bBENCHMARK\s*\(/i,
|
|
50
|
+
/\bSLEEP\s*\(/i,
|
|
51
|
+
];
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Validate a SQL identifier (table name, column name, schema name)
|
|
55
|
+
*
|
|
56
|
+
* @param name - The identifier to validate
|
|
57
|
+
* @param type - Type of identifier for error messages
|
|
58
|
+
* @throws ValidationError if identifier is invalid
|
|
59
|
+
*/
|
|
60
|
+
export function validateIdentifier(
|
|
61
|
+
name: string,
|
|
62
|
+
type: 'table' | 'column' | 'schema' | 'database' | 'index' | 'view' | 'event' | 'procedure' | 'function' = 'table'
|
|
63
|
+
): void {
|
|
64
|
+
if (!name || typeof name !== 'string') {
|
|
65
|
+
throw new ValidationError(`${type} name must be a non-empty string`, type);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (name.length > 64) {
|
|
69
|
+
throw new ValidationError(`${type} name exceeds maximum length of 64 characters`, type);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (!IDENTIFIER_PATTERN.test(name)) {
|
|
73
|
+
throw new ValidationError(
|
|
74
|
+
`Invalid ${type} name: must start with letter/underscore and contain only alphanumeric characters`,
|
|
75
|
+
type
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Validate a qualified identifier (e.g., schema.table)
|
|
82
|
+
*
|
|
83
|
+
* @param name - The qualified identifier to validate
|
|
84
|
+
* @param type - Type of identifier for error messages
|
|
85
|
+
* @throws ValidationError if identifier is invalid
|
|
86
|
+
*/
|
|
87
|
+
export function validateQualifiedIdentifier(
|
|
88
|
+
name: string,
|
|
89
|
+
type: 'table' | 'column' | 'view' = 'table'
|
|
90
|
+
): void {
|
|
91
|
+
if (!name || typeof name !== 'string') {
|
|
92
|
+
throw new ValidationError(`${type} name must be a non-empty string`, type);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (!QUALIFIED_IDENTIFIER_PATTERN.test(name)) {
|
|
96
|
+
throw new ValidationError(
|
|
97
|
+
`Invalid ${type} name: must be alphanumeric with optional schema prefix (schema.name)`,
|
|
98
|
+
type
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Escape a SQL identifier for safe inclusion in queries
|
|
105
|
+
*
|
|
106
|
+
* @param name - The identifier to escape
|
|
107
|
+
* @returns Escaped identifier (backticks escaped)
|
|
108
|
+
*/
|
|
109
|
+
export function escapeIdentifier(name: string): string {
|
|
110
|
+
// Replace backticks with double backticks (MySQL escaping)
|
|
111
|
+
return name.replace(/`/g, '``');
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Validate a WHERE clause for dangerous SQL injection patterns
|
|
116
|
+
*
|
|
117
|
+
* This performs pattern-based detection of common SQL injection attempts.
|
|
118
|
+
* It allows legitimate complex WHERE clauses while blocking known attack patterns.
|
|
119
|
+
*
|
|
120
|
+
* @param where - The WHERE clause to validate (without the WHERE keyword)
|
|
121
|
+
* @throws ValidationError if dangerous patterns are detected
|
|
122
|
+
*/
|
|
123
|
+
export function validateWhereClause(where: string | undefined): void {
|
|
124
|
+
if (where === undefined || where === null || typeof where !== 'string') {
|
|
125
|
+
return; // Empty/null WHERE is valid (will be skipped)
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const trimmed = where.trim();
|
|
129
|
+
if (trimmed.length === 0) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
for (const pattern of DANGEROUS_WHERE_PATTERNS) {
|
|
134
|
+
if (pattern.test(trimmed)) {
|
|
135
|
+
throw new ValidationError(
|
|
136
|
+
'WHERE clause contains potentially dangerous SQL patterns',
|
|
137
|
+
'where'
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// Check for unbalanced quotes (sign of injection attempt)
|
|
143
|
+
// Note: escaped quotes ('') count as 2, so we check odd counts
|
|
144
|
+
// after removing escaped quotes
|
|
145
|
+
const unescapedSingles = trimmed.replace(/''/g, '').match(/'/g);
|
|
146
|
+
const unescapedDoubles = trimmed.replace(/""/g, '').match(/"/g);
|
|
147
|
+
|
|
148
|
+
if ((unescapedSingles?.length ?? 0) % 2 !== 0) {
|
|
149
|
+
throw new ValidationError(
|
|
150
|
+
'WHERE clause contains unbalanced single quotes',
|
|
151
|
+
'where'
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
if ((unescapedDoubles?.length ?? 0) % 2 !== 0) {
|
|
156
|
+
throw new ValidationError(
|
|
157
|
+
'WHERE clause contains unbalanced double quotes',
|
|
158
|
+
'where'
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Validate a LIKE pattern for safe usage
|
|
165
|
+
* Already used in monitoring.ts, but centralized here for consistency
|
|
166
|
+
*
|
|
167
|
+
* @param pattern - The LIKE pattern to escape
|
|
168
|
+
* @returns Escaped pattern safe for SQL
|
|
169
|
+
*/
|
|
170
|
+
export function escapeLikePattern(pattern: string): string {
|
|
171
|
+
// Escape single quotes for selected text
|
|
172
|
+
return pattern.replace(/'/g, "''");
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Escape a potentially qualified table name
|
|
177
|
+
* Handles "table" -> "`table`" and "db.table" -> "`db`.`table`"
|
|
178
|
+
*/
|
|
179
|
+
export function escapeQualifiedTable(table: string): string {
|
|
180
|
+
return table.split('.').map(part => `\`${part.replace(/`/g, '``')}\``).join('.');
|
|
181
|
+
}
|