@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,298 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MySQL Adapter - Zod Schemas
|
|
3
|
+
*
|
|
4
|
+
* Input validation schemas for all MySQL tools.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
|
|
9
|
+
// =============================================================================
|
|
10
|
+
// Core Tools Schemas
|
|
11
|
+
// =============================================================================
|
|
12
|
+
|
|
13
|
+
export const ReadQuerySchema = z.object({
|
|
14
|
+
query: z.string().describe('SQL SELECT query to execute'),
|
|
15
|
+
params: z.array(z.unknown()).optional().describe('Query parameters for prepared statement'),
|
|
16
|
+
transactionId: z.string().optional().describe('Optional transaction ID for executing within a transaction')
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
export const WriteQuerySchema = z.object({
|
|
21
|
+
query: z.string().describe('SQL INSERT/UPDATE/DELETE query'),
|
|
22
|
+
params: z.array(z.unknown()).optional().describe('Query parameters for prepared statement'),
|
|
23
|
+
transactionId: z.string().optional().describe('Optional transaction ID for executing within a transaction')
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
export const ListTablesSchema = z.object({
|
|
28
|
+
database: z.string().optional().describe('Database name (defaults to connected database)')
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
export const DescribeTableSchema = z.object({
|
|
32
|
+
table: z.string().describe('Table name to describe')
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
export const CreateTableSchema = z.object({
|
|
36
|
+
name: z.string().describe('Table name'),
|
|
37
|
+
columns: z.array(z.object({
|
|
38
|
+
name: z.string().describe('Column name'),
|
|
39
|
+
type: z.string().describe('MySQL data type (e.g., INT, VARCHAR(255), JSON)'),
|
|
40
|
+
nullable: z.boolean().optional().default(true).describe('Allow NULL values'),
|
|
41
|
+
primaryKey: z.boolean().optional().describe('Is primary key'),
|
|
42
|
+
autoIncrement: z.boolean().optional().describe('Auto-increment column'),
|
|
43
|
+
default: z.unknown().optional().describe('Default value'),
|
|
44
|
+
unique: z.boolean().optional().describe('Unique constraint'),
|
|
45
|
+
comment: z.string().optional().describe('Column comment')
|
|
46
|
+
})).describe('Column definitions'),
|
|
47
|
+
engine: z.enum(['InnoDB', 'MyISAM', 'MEMORY', 'CSV', 'ARCHIVE']).optional().default('InnoDB').describe('Storage engine'),
|
|
48
|
+
charset: z.string().optional().default('utf8mb4').describe('Character set'),
|
|
49
|
+
collate: z.string().optional().default('utf8mb4_unicode_ci').describe('Collation'),
|
|
50
|
+
comment: z.string().optional().describe('Table comment'),
|
|
51
|
+
ifNotExists: z.boolean().optional().default(false).describe('Add IF NOT EXISTS clause')
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
export const DropTableSchema = z.object({
|
|
55
|
+
table: z.string().describe('Table name to drop'),
|
|
56
|
+
ifExists: z.boolean().optional().default(true).describe('Add IF EXISTS clause')
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
export const CreateIndexSchema = z.object({
|
|
60
|
+
name: z.string().describe('Index name'),
|
|
61
|
+
table: z.string().describe('Table name'),
|
|
62
|
+
columns: z.array(z.string()).describe('Column names to index'),
|
|
63
|
+
unique: z.boolean().optional().default(false).describe('Create unique index'),
|
|
64
|
+
type: z.enum(['BTREE', 'HASH', 'FULLTEXT', 'SPATIAL']).optional().describe('Index type'),
|
|
65
|
+
ifNotExists: z.boolean().optional().default(false).describe('Add IF NOT EXISTS clause')
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
export const GetIndexesSchema = z.object({
|
|
69
|
+
table: z.string().describe('Table name')
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
// =============================================================================
|
|
73
|
+
// Transaction Schemas
|
|
74
|
+
// =============================================================================
|
|
75
|
+
|
|
76
|
+
export const TransactionBeginSchema = z.object({
|
|
77
|
+
isolationLevel: z.enum([
|
|
78
|
+
'READ UNCOMMITTED',
|
|
79
|
+
'READ COMMITTED',
|
|
80
|
+
'REPEATABLE READ',
|
|
81
|
+
'SERIALIZABLE'
|
|
82
|
+
]).optional().describe('Transaction isolation level')
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
export const TransactionIdSchema = z.object({
|
|
86
|
+
transactionId: z.string().describe('Transaction ID from begin operation')
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
export const TransactionSavepointSchema = z.object({
|
|
90
|
+
transactionId: z.string().describe('Transaction ID'),
|
|
91
|
+
savepoint: z.string().describe('Savepoint name')
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
export const TransactionExecuteSchema = z.object({
|
|
95
|
+
statements: z.array(z.string()).describe('SQL statements to execute atomically'),
|
|
96
|
+
isolationLevel: z.enum([
|
|
97
|
+
'READ UNCOMMITTED',
|
|
98
|
+
'READ COMMITTED',
|
|
99
|
+
'REPEATABLE READ',
|
|
100
|
+
'SERIALIZABLE'
|
|
101
|
+
]).optional().describe('Transaction isolation level')
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
// =============================================================================
|
|
105
|
+
// JSON Schemas
|
|
106
|
+
// =============================================================================
|
|
107
|
+
|
|
108
|
+
export const JsonExtractSchema = z.object({
|
|
109
|
+
table: z.string().describe('Table name'),
|
|
110
|
+
column: z.string().describe('JSON column name'),
|
|
111
|
+
path: z.string().describe('JSON path (e.g., $.name or $[0])'),
|
|
112
|
+
where: z.string().optional().describe('WHERE clause for filtering rows')
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
export const JsonSetSchema = z.object({
|
|
116
|
+
table: z.string().describe('Table name'),
|
|
117
|
+
column: z.string().describe('JSON column name'),
|
|
118
|
+
path: z.string().describe('JSON path to set'),
|
|
119
|
+
value: z.unknown().describe('Value to set'),
|
|
120
|
+
where: z.string().describe('WHERE clause to identify rows')
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
export const JsonContainsSchema = z.object({
|
|
124
|
+
table: z.string().describe('Table name'),
|
|
125
|
+
column: z.string().describe('JSON column name'),
|
|
126
|
+
value: z.unknown().describe('Value to search for'),
|
|
127
|
+
path: z.string().optional().describe('Optional JSON path to search within')
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
export const JsonKeysSchema = z.object({
|
|
131
|
+
table: z.string().describe('Table name'),
|
|
132
|
+
column: z.string().describe('JSON column name'),
|
|
133
|
+
path: z.string().optional().describe('Optional JSON path (defaults to root)')
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
export const JsonSearchSchema = z.object({
|
|
137
|
+
table: z.string().describe('Table name'),
|
|
138
|
+
column: z.string().describe('JSON column name'),
|
|
139
|
+
searchValue: z.string().describe('String value to search for'),
|
|
140
|
+
mode: z.enum(['one', 'all']).optional().default('one').describe('Search mode')
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
export const JsonValidateSchema = z.object({
|
|
144
|
+
value: z.string().describe('JSON string to validate')
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
// =============================================================================
|
|
148
|
+
// Text Schemas
|
|
149
|
+
// =============================================================================
|
|
150
|
+
|
|
151
|
+
export const RegexpMatchSchema = z.object({
|
|
152
|
+
table: z.string().describe('Table name'),
|
|
153
|
+
column: z.string().describe('Column name'),
|
|
154
|
+
pattern: z.string().describe('Regular expression pattern')
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
export const LikeSearchSchema = z.object({
|
|
158
|
+
table: z.string().describe('Table name'),
|
|
159
|
+
column: z.string().describe('Column name'),
|
|
160
|
+
pattern: z.string().describe('LIKE pattern with % and _ wildcards')
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
export const SoundexSchema = z.object({
|
|
164
|
+
table: z.string().describe('Table name'),
|
|
165
|
+
column: z.string().describe('Column name'),
|
|
166
|
+
value: z.string().describe('Value to match phonetically')
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
export const FulltextCreateSchema = z.object({
|
|
170
|
+
table: z.string().describe('Table name'),
|
|
171
|
+
columns: z.array(z.string()).describe('Columns to include in index'),
|
|
172
|
+
indexName: z.string().optional().describe('Optional index name')
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
export const FulltextSearchSchema = z.object({
|
|
176
|
+
table: z.string().describe('Table name'),
|
|
177
|
+
columns: z.array(z.string()).describe('Columns to search'),
|
|
178
|
+
query: z.string().describe('Search query'),
|
|
179
|
+
mode: z.enum(['NATURAL', 'BOOLEAN', 'EXPANSION']).optional().default('NATURAL').describe('Search mode')
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
// =============================================================================
|
|
183
|
+
// Performance Schemas
|
|
184
|
+
// =============================================================================
|
|
185
|
+
|
|
186
|
+
export const ExplainSchema = z.object({
|
|
187
|
+
query: z.string().describe('SQL query to explain'),
|
|
188
|
+
analyze: z.boolean().optional().default(false).describe('Run EXPLAIN ANALYZE (MySQL 8.0+)'),
|
|
189
|
+
format: z.enum(['TRADITIONAL', 'JSON', 'TREE']).optional().default('JSON').describe('Output format')
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
export const SlowQuerySchema = z.object({
|
|
193
|
+
limit: z.number().optional().default(10).describe('Number of slow queries to return'),
|
|
194
|
+
minTime: z.number().optional().describe('Minimum query time in seconds')
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
export const IndexUsageSchema = z.object({
|
|
198
|
+
table: z.string().optional().describe('Filter by table name')
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
export const TableStatsSchema = z.object({
|
|
202
|
+
table: z.string().describe('Table name')
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
// =============================================================================
|
|
206
|
+
// Admin Schemas
|
|
207
|
+
// =============================================================================
|
|
208
|
+
|
|
209
|
+
export const OptimizeTableSchema = z.object({
|
|
210
|
+
tables: z.array(z.string()).describe('Table names to optimize')
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
export const AnalyzeTableSchema = z.object({
|
|
214
|
+
tables: z.array(z.string()).describe('Table names to analyze')
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
export const CheckTableSchema = z.object({
|
|
218
|
+
tables: z.array(z.string()).describe('Table names to check'),
|
|
219
|
+
option: z.enum(['QUICK', 'FAST', 'MEDIUM', 'EXTENDED', 'CHANGED']).optional().describe('Check option')
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
export const FlushTablesSchema = z.object({
|
|
223
|
+
tables: z.array(z.string()).optional().describe('Specific tables to flush (empty for all)')
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
export const KillQuerySchema = z.object({
|
|
227
|
+
processId: z.number().describe('Process ID to kill'),
|
|
228
|
+
connection: z.boolean().optional().default(false).describe('Kill connection instead of query')
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
export const ShowProcesslistSchema = z.object({
|
|
232
|
+
full: z.boolean().optional().default(false).describe('Show full query text')
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
export const ShowStatusSchema = z.object({
|
|
236
|
+
like: z.string().optional().describe('Filter variables by LIKE pattern'),
|
|
237
|
+
global: z.boolean().optional().default(true).describe('Show global status')
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
export const ShowVariablesSchema = z.object({
|
|
241
|
+
like: z.string().optional().describe('Filter variables by LIKE pattern'),
|
|
242
|
+
global: z.boolean().optional().default(true).describe('Show global variables')
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
// =============================================================================
|
|
246
|
+
// Backup Schemas
|
|
247
|
+
// =============================================================================
|
|
248
|
+
|
|
249
|
+
export const ExportTableSchema = z.object({
|
|
250
|
+
table: z.string().describe('Table name'),
|
|
251
|
+
format: z.enum(['SQL', 'CSV']).optional().default('SQL').describe('Export format'),
|
|
252
|
+
where: z.string().optional().describe('WHERE clause to filter rows')
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
export const ImportDataSchema = z.object({
|
|
256
|
+
table: z.string().describe('Table name'),
|
|
257
|
+
data: z.array(z.record(z.string(), z.unknown())).describe('Array of row objects to insert')
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
// =============================================================================
|
|
261
|
+
// Replication Schemas
|
|
262
|
+
// =============================================================================
|
|
263
|
+
|
|
264
|
+
export const BinlogEventsSchema = z.object({
|
|
265
|
+
logFile: z.string().optional().describe('Binlog file name'),
|
|
266
|
+
position: z.number().optional().describe('Starting position'),
|
|
267
|
+
limit: z.number().optional().default(100).describe('Maximum events to return')
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
// =============================================================================
|
|
271
|
+
// Partitioning Schemas
|
|
272
|
+
// =============================================================================
|
|
273
|
+
|
|
274
|
+
export const PartitionInfoSchema = z.object({
|
|
275
|
+
table: z.string().describe('Table name')
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
export const AddPartitionSchema = z.object({
|
|
279
|
+
table: z.string().describe('Table name'),
|
|
280
|
+
partitionName: z.string().describe('New partition name'),
|
|
281
|
+
partitionType: z.enum(['RANGE', 'LIST', 'HASH', 'KEY']).describe('Partition type'),
|
|
282
|
+
value: z.string().describe('Partition boundary value only - e.g., "2024" for RANGE, "1,2,3" for LIST, "4" for HASH/KEY partitions count. Do NOT include "LESS THAN" or "VALUES IN" keywords.')
|
|
283
|
+
});
|
|
284
|
+
|
|
285
|
+
export const DropPartitionSchema = z.object({
|
|
286
|
+
table: z.string().describe('Table name'),
|
|
287
|
+
partitionName: z.string().describe('Partition name to drop')
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
export const ReorganizePartitionSchema = z.object({
|
|
291
|
+
table: z.string().describe('Table name'),
|
|
292
|
+
fromPartitions: z.array(z.string()).describe('Source partition names'),
|
|
293
|
+
partitionType: z.enum(['RANGE', 'LIST']).describe('Partition type (RANGE or LIST). HASH/KEY partitions cannot be reorganized.'),
|
|
294
|
+
toPartitions: z.array(z.object({
|
|
295
|
+
name: z.string().describe('New partition name'),
|
|
296
|
+
value: z.string().describe('Partition boundary value only - e.g., "2024" for RANGE, "1,2,3" for LIST. Do NOT include "LESS THAN" or "VALUES IN" keywords.')
|
|
297
|
+
})).describe('New partition definitions')
|
|
298
|
+
});
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mysql-mcp - Authorization Server Discovery
|
|
3
|
+
*
|
|
4
|
+
* RFC 8414 Authorization Server Metadata discovery.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { AuthServerDiscoveryConfig, AuthorizationServerMetadata } from './types.js';
|
|
8
|
+
import { AuthServerDiscoveryError } from './errors.js';
|
|
9
|
+
import { logger } from '../utils/logger.js';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Authorization Server Discovery (RFC 8414)
|
|
13
|
+
*/
|
|
14
|
+
export class AuthorizationServerDiscovery {
|
|
15
|
+
private readonly config: AuthServerDiscoveryConfig;
|
|
16
|
+
private metadataCache: AuthorizationServerMetadata | null = null;
|
|
17
|
+
private cacheTime = 0;
|
|
18
|
+
|
|
19
|
+
constructor(config: AuthServerDiscoveryConfig) {
|
|
20
|
+
this.config = {
|
|
21
|
+
...config,
|
|
22
|
+
cacheTtl: config.cacheTtl ?? 3600,
|
|
23
|
+
timeout: config.timeout ?? 5000
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Discover authorization server metadata
|
|
29
|
+
*/
|
|
30
|
+
async discover(): Promise<AuthorizationServerMetadata> {
|
|
31
|
+
const now = Date.now();
|
|
32
|
+
const cacheTtlMs = (this.config.cacheTtl ?? 3600) * 1000;
|
|
33
|
+
|
|
34
|
+
// Check cache
|
|
35
|
+
if (this.metadataCache && (now - this.cacheTime) < cacheTtlMs) {
|
|
36
|
+
return this.metadataCache;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
try {
|
|
40
|
+
// RFC 8414: well-known endpoint
|
|
41
|
+
const wellKnownUrl = new URL('/.well-known/oauth-authorization-server', this.config.authServerUrl);
|
|
42
|
+
|
|
43
|
+
const controller = new AbortController();
|
|
44
|
+
const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);
|
|
45
|
+
|
|
46
|
+
const response = await fetch(wellKnownUrl.toString(), {
|
|
47
|
+
method: 'GET',
|
|
48
|
+
headers: { 'Accept': 'application/json' },
|
|
49
|
+
signal: controller.signal
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
clearTimeout(timeoutId);
|
|
53
|
+
|
|
54
|
+
if (!response.ok) {
|
|
55
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const metadata = await response.json() as AuthorizationServerMetadata;
|
|
59
|
+
|
|
60
|
+
// Validate required fields
|
|
61
|
+
if (!metadata.issuer || !metadata.token_endpoint) {
|
|
62
|
+
throw new Error('Invalid metadata: missing required fields');
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Cache the metadata
|
|
66
|
+
this.metadataCache = metadata;
|
|
67
|
+
this.cacheTime = now;
|
|
68
|
+
|
|
69
|
+
logger.debug('Auth server metadata discovered', { issuer: metadata.issuer });
|
|
70
|
+
|
|
71
|
+
return metadata;
|
|
72
|
+
|
|
73
|
+
} catch (error) {
|
|
74
|
+
logger.error('Auth server discovery failed', {
|
|
75
|
+
url: this.config.authServerUrl,
|
|
76
|
+
error: String(error)
|
|
77
|
+
});
|
|
78
|
+
throw new AuthServerDiscoveryError(
|
|
79
|
+
`Failed to discover auth server at ${this.config.authServerUrl}: ${String(error)}`
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Get JWKS URI from discovered metadata
|
|
86
|
+
*/
|
|
87
|
+
async getJwksUri(): Promise<string> {
|
|
88
|
+
const metadata = await this.discover();
|
|
89
|
+
if (!metadata.jwks_uri) {
|
|
90
|
+
throw new AuthServerDiscoveryError('Auth server metadata does not include jwks_uri');
|
|
91
|
+
}
|
|
92
|
+
return metadata.jwks_uri;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Get token endpoint from discovered metadata
|
|
97
|
+
*/
|
|
98
|
+
async getTokenEndpoint(): Promise<string> {
|
|
99
|
+
const metadata = await this.discover();
|
|
100
|
+
return metadata.token_endpoint;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Get registration endpoint (if available)
|
|
105
|
+
*/
|
|
106
|
+
async getRegistrationEndpoint(): Promise<string | undefined> {
|
|
107
|
+
const metadata = await this.discover();
|
|
108
|
+
return metadata.registration_endpoint;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Check if auth server supports a specific grant type
|
|
113
|
+
*/
|
|
114
|
+
async supportsGrantType(grantType: string): Promise<boolean> {
|
|
115
|
+
const metadata = await this.discover();
|
|
116
|
+
return metadata.grant_types_supported?.includes(grantType) ?? false;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Invalidate cache
|
|
121
|
+
*/
|
|
122
|
+
invalidateCache(): void {
|
|
123
|
+
this.metadataCache = null;
|
|
124
|
+
this.cacheTime = 0;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Create an authorization server discovery instance
|
|
130
|
+
*/
|
|
131
|
+
export function createAuthServerDiscovery(config: AuthServerDiscoveryConfig): AuthorizationServerDiscovery {
|
|
132
|
+
return new AuthorizationServerDiscovery(config);
|
|
133
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mysql-mcp - OAuth Resource Server
|
|
3
|
+
*
|
|
4
|
+
* RFC 9728 Protected Resource Metadata implementation.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { ResourceServerConfig, ProtectedResourceMetadata } from './types.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* OAuth 2.0 Resource Server (RFC 9728)
|
|
11
|
+
*/
|
|
12
|
+
export class OAuthResourceServer {
|
|
13
|
+
private readonly config: ResourceServerConfig;
|
|
14
|
+
|
|
15
|
+
constructor(config: ResourceServerConfig) {
|
|
16
|
+
this.config = {
|
|
17
|
+
...config,
|
|
18
|
+
bearerMethodsSupported: config.bearerMethodsSupported ?? ['header']
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Get protected resource metadata (RFC 9728)
|
|
24
|
+
*/
|
|
25
|
+
getMetadata(): ProtectedResourceMetadata {
|
|
26
|
+
return {
|
|
27
|
+
resource: this.config.resource,
|
|
28
|
+
authorization_servers: this.config.authorizationServers,
|
|
29
|
+
scopes_supported: this.config.scopesSupported,
|
|
30
|
+
bearer_methods_supported: this.config.bearerMethodsSupported,
|
|
31
|
+
resource_documentation: `${this.config.resource}/docs`,
|
|
32
|
+
resource_signing_alg_values_supported: ['RS256', 'ES256']
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Get the well-known endpoint path for protected resource metadata
|
|
38
|
+
*/
|
|
39
|
+
getWellKnownPath(): string {
|
|
40
|
+
return '/.well-known/oauth-protected-resource';
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Verify that a scope is supported by this resource
|
|
45
|
+
*/
|
|
46
|
+
isScopeSupported(scope: string): boolean {
|
|
47
|
+
// Check if in explicit list
|
|
48
|
+
if (this.config.scopesSupported.includes(scope)) {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Check for database-specific scope patterns
|
|
53
|
+
if (scope.startsWith('db:') || scope.startsWith('table:')) {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Get the resource identifier
|
|
62
|
+
*/
|
|
63
|
+
getResourceId(): string {
|
|
64
|
+
return this.config.resource;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Get all supported scopes
|
|
69
|
+
*/
|
|
70
|
+
getSupportedScopes(): string[] {
|
|
71
|
+
return [...this.config.scopesSupported];
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Get authorization servers
|
|
76
|
+
*/
|
|
77
|
+
getAuthorizationServers(): string[] {
|
|
78
|
+
return [...this.config.authorizationServers];
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Create an OAuth resource server instance
|
|
84
|
+
*/
|
|
85
|
+
export function createOAuthResourceServer(config: ResourceServerConfig): OAuthResourceServer {
|
|
86
|
+
return new OAuthResourceServer(config);
|
|
87
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mysql-mcp - Token Validator
|
|
3
|
+
*
|
|
4
|
+
* JWT token validation with JWKS support.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import * as jose from 'jose';
|
|
8
|
+
import type { TokenValidatorConfig, TokenValidationResult, TokenClaims } from './types.js';
|
|
9
|
+
import { JwksFetchError } from './errors.js';
|
|
10
|
+
import { parseScopes } from './scopes.js';
|
|
11
|
+
import { logger } from '../utils/logger.js';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* JWT Token Validator with JWKS support
|
|
15
|
+
*/
|
|
16
|
+
export class TokenValidator {
|
|
17
|
+
private readonly config: TokenValidatorConfig;
|
|
18
|
+
private jwksCache: jose.JWTVerifyGetKey | null = null;
|
|
19
|
+
private jwksCacheTime = 0;
|
|
20
|
+
|
|
21
|
+
constructor(config: TokenValidatorConfig) {
|
|
22
|
+
this.config = {
|
|
23
|
+
...config,
|
|
24
|
+
clockTolerance: config.clockTolerance ?? 60,
|
|
25
|
+
jwksCacheTtl: config.jwksCacheTtl ?? 3600,
|
|
26
|
+
algorithms: config.algorithms ?? ['RS256', 'RS384', 'RS512', 'ES256', 'ES384', 'ES512']
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Validate a JWT token
|
|
32
|
+
*/
|
|
33
|
+
async validate(token: string): Promise<TokenValidationResult> {
|
|
34
|
+
try {
|
|
35
|
+
// Get or refresh JWKS
|
|
36
|
+
const jwks = this.getJWKS();
|
|
37
|
+
|
|
38
|
+
// Verify the token
|
|
39
|
+
const { payload } = await jose.jwtVerify(token, jwks, {
|
|
40
|
+
issuer: this.config.issuer,
|
|
41
|
+
audience: this.config.audience,
|
|
42
|
+
clockTolerance: this.config.clockTolerance
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
// Extract claims
|
|
46
|
+
const claims: TokenClaims = {
|
|
47
|
+
sub: payload.sub ?? '',
|
|
48
|
+
scopes: parseScopes(payload['scope'] as string | undefined),
|
|
49
|
+
exp: payload.exp ?? 0,
|
|
50
|
+
iat: payload.iat ?? 0,
|
|
51
|
+
iss: payload.iss,
|
|
52
|
+
aud: payload.aud,
|
|
53
|
+
nbf: payload.nbf,
|
|
54
|
+
jti: payload.jti,
|
|
55
|
+
client_id: payload['client_id'] as string | undefined
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
logger.debug('Token validated successfully', { sub: claims.sub });
|
|
59
|
+
|
|
60
|
+
return { valid: true, claims };
|
|
61
|
+
|
|
62
|
+
} catch (error) {
|
|
63
|
+
return this.handleValidationError(error);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Get or refresh JWKS cache
|
|
69
|
+
*/
|
|
70
|
+
private getJWKS(): jose.JWTVerifyGetKey {
|
|
71
|
+
const now = Date.now();
|
|
72
|
+
const cacheTtlMs = (this.config.jwksCacheTtl ?? 3600) * 1000;
|
|
73
|
+
|
|
74
|
+
// Check if cache is still valid
|
|
75
|
+
if (this.jwksCache && (now - this.jwksCacheTime) < cacheTtlMs) {
|
|
76
|
+
return this.jwksCache;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
try {
|
|
80
|
+
// Create new JWKS remote key set
|
|
81
|
+
this.jwksCache = jose.createRemoteJWKSet(new URL(this.config.jwksUri));
|
|
82
|
+
this.jwksCacheTime = now;
|
|
83
|
+
|
|
84
|
+
logger.debug('JWKS cache refreshed', { uri: this.config.jwksUri });
|
|
85
|
+
|
|
86
|
+
return this.jwksCache;
|
|
87
|
+
} catch (error) {
|
|
88
|
+
logger.error('Failed to fetch JWKS', { uri: this.config.jwksUri, error: String(error) });
|
|
89
|
+
throw new JwksFetchError(`Failed to fetch JWKS from ${this.config.jwksUri}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Handle validation errors
|
|
95
|
+
*/
|
|
96
|
+
private handleValidationError(error: unknown): TokenValidationResult {
|
|
97
|
+
if (error instanceof jose.errors.JWTExpired) {
|
|
98
|
+
return {
|
|
99
|
+
valid: false,
|
|
100
|
+
error: 'Token has expired',
|
|
101
|
+
errorCode: 'TOKEN_EXPIRED'
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (error instanceof jose.errors.JWSSignatureVerificationFailed) {
|
|
106
|
+
return {
|
|
107
|
+
valid: false,
|
|
108
|
+
error: 'Invalid token signature',
|
|
109
|
+
errorCode: 'INVALID_SIGNATURE'
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (error instanceof jose.errors.JWTClaimValidationFailed) {
|
|
114
|
+
return {
|
|
115
|
+
valid: false,
|
|
116
|
+
error: `Claim validation failed: ${error.message}`,
|
|
117
|
+
errorCode: 'INVALID_CLAIMS'
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Generic error
|
|
122
|
+
return {
|
|
123
|
+
valid: false,
|
|
124
|
+
error: error instanceof Error ? error.message : 'Token validation failed',
|
|
125
|
+
errorCode: 'INVALID_TOKEN'
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Invalidate JWKS cache (for testing or forced refresh)
|
|
131
|
+
*/
|
|
132
|
+
invalidateCache(): void {
|
|
133
|
+
this.jwksCache = null;
|
|
134
|
+
this.jwksCacheTime = 0;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Create a token validator instance
|
|
140
|
+
*/
|
|
141
|
+
export function createTokenValidator(config: TokenValidatorConfig): TokenValidator {
|
|
142
|
+
return new TokenValidator(config);
|
|
143
|
+
}
|