db-mcp 1.1.1 → 3.0.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/README.md +247 -169
- package/dist/.tsbuildinfo +1 -0
- package/dist/adapters/database-adapter.d.ts +173 -0
- package/dist/adapters/database-adapter.d.ts.map +1 -0
- package/dist/adapters/query-validation.d.ts +20 -0
- package/dist/adapters/query-validation.d.ts.map +1 -0
- package/dist/adapters/registration/index.d.ts +4 -0
- package/dist/adapters/registration/index.d.ts.map +1 -0
- package/dist/adapters/registration/prompts.d.ts +7 -0
- package/dist/adapters/registration/prompts.d.ts.map +1 -0
- package/dist/adapters/registration/resources.d.ts +7 -0
- package/dist/adapters/registration/resources.d.ts.map +1 -0
- package/dist/adapters/registration/tools.d.ts +9 -0
- package/dist/adapters/registration/tools.d.ts.map +1 -0
- package/dist/adapters/sqlite/index.d.ts +9 -0
- package/dist/adapters/sqlite/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/json-utils.d.ts +100 -0
- package/dist/adapters/sqlite/json-utils.d.ts.map +1 -0
- package/dist/adapters/sqlite/prompts/analysis.d.ts +23 -0
- package/dist/adapters/sqlite/prompts/analysis.d.ts.map +1 -0
- package/dist/adapters/sqlite/prompts/index.d.ts +16 -0
- package/dist/adapters/sqlite/prompts/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/prompts/query.d.ts +19 -0
- package/dist/adapters/sqlite/prompts/query.d.ts.map +1 -0
- package/dist/adapters/sqlite/prompts/schema.d.ts +20 -0
- package/dist/adapters/sqlite/prompts/schema.d.ts.map +1 -0
- package/dist/adapters/sqlite/query-executor.d.ts +38 -0
- package/dist/adapters/sqlite/query-executor.d.ts.map +1 -0
- package/dist/adapters/sqlite/resources.d.ts +13 -0
- package/dist/adapters/sqlite/resources.d.ts.map +1 -0
- package/dist/adapters/sqlite/schema-manager.d.ts +69 -0
- package/dist/adapters/sqlite/schema-manager.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/admin.d.ts +459 -0
- package/dist/adapters/sqlite/schemas/admin.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/codemode.d.ts +30 -0
- package/dist/adapters/sqlite/schemas/codemode.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/common.d.ts +9 -0
- package/dist/adapters/sqlite/schemas/common.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/core.d.ts +530 -0
- package/dist/adapters/sqlite/schemas/core.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/error-mixin.d.ts +10 -0
- package/dist/adapters/sqlite/schemas/error-mixin.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/fts.d.ts +106 -0
- package/dist/adapters/sqlite/schemas/fts.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/geo.d.ts +135 -0
- package/dist/adapters/sqlite/schemas/geo.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/index.d.ts +23 -0
- package/dist/adapters/sqlite/schemas/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/introspection.d.ts +583 -0
- package/dist/adapters/sqlite/schemas/introspection.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/json.d.ts +849 -0
- package/dist/adapters/sqlite/schemas/json.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/migration.d.ts +220 -0
- package/dist/adapters/sqlite/schemas/migration.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/native.d.ts +235 -0
- package/dist/adapters/sqlite/schemas/native.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/server.d.ts +13 -0
- package/dist/adapters/sqlite/schemas/server.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/spatialite.d.ts +114 -0
- package/dist/adapters/sqlite/schemas/spatialite.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/stats.d.ts +780 -0
- package/dist/adapters/sqlite/schemas/stats.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/text.d.ts +570 -0
- package/dist/adapters/sqlite/schemas/text.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/vector.d.ts +252 -0
- package/dist/adapters/sqlite/schemas/vector.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/virtual.d.ts +257 -0
- package/dist/adapters/sqlite/schemas/virtual.d.ts.map +1 -0
- package/dist/adapters/sqlite/schemas/where.d.ts +20 -0
- package/dist/adapters/sqlite/schemas/where.d.ts.map +1 -0
- package/dist/adapters/sqlite/sqlite-adapter/lifecycle.d.ts +13 -0
- package/dist/adapters/sqlite/sqlite-adapter/lifecycle.d.ts.map +1 -0
- package/dist/adapters/sqlite/sqlite-adapter/schema.d.ts +7 -0
- package/dist/adapters/sqlite/sqlite-adapter/schema.d.ts.map +1 -0
- package/dist/adapters/sqlite/sqlite-adapter.d.ts +138 -0
- package/dist/adapters/sqlite/sqlite-adapter.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin/backup/analyze.d.ts +7 -0
- package/dist/adapters/sqlite/tools/admin/backup/analyze.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin/backup/create.d.ts +11 -0
- package/dist/adapters/sqlite/tools/admin/backup/create.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin/backup/dump.d.ts +7 -0
- package/dist/adapters/sqlite/tools/admin/backup/dump.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin/backup/index.d.ts +7 -0
- package/dist/adapters/sqlite/tools/admin/backup/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin/backup/integrity.d.ts +7 -0
- package/dist/adapters/sqlite/tools/admin/backup/integrity.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin/backup/optimize.d.ts +7 -0
- package/dist/adapters/sqlite/tools/admin/backup/optimize.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin/backup/restore.d.ts +7 -0
- package/dist/adapters/sqlite/tools/admin/backup/restore.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin/helpers.d.ts +18 -0
- package/dist/adapters/sqlite/tools/admin/helpers.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin/index.d.ts +10 -0
- package/dist/adapters/sqlite/tools/admin/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin/pragma.d.ts +37 -0
- package/dist/adapters/sqlite/tools/admin/pragma.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin/reindex.d.ts +10 -0
- package/dist/adapters/sqlite/tools/admin/reindex.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin/verify.d.ts +13 -0
- package/dist/adapters/sqlite/tools/admin/verify.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin/wal.d.ts +10 -0
- package/dist/adapters/sqlite/tools/admin/wal.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/codemode.d.ts +22 -0
- package/dist/adapters/sqlite/tools/codemode.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/column-validation.d.ts +26 -0
- package/dist/adapters/sqlite/tools/column-validation.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/core/alter-table.d.ts +11 -0
- package/dist/adapters/sqlite/tools/core/alter-table.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/core/constraints.d.ts +10 -0
- package/dist/adapters/sqlite/tools/core/constraints.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/core/convenience-helpers.d.ts +20 -0
- package/dist/adapters/sqlite/tools/core/convenience-helpers.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/core/convenience-schemas.d.ts +20 -0
- package/dist/adapters/sqlite/tools/core/convenience-schemas.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/core/convenience.d.ts +29 -0
- package/dist/adapters/sqlite/tools/core/convenience.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/core/datetime.d.ts +11 -0
- package/dist/adapters/sqlite/tools/core/datetime.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/core/index.d.ts +14 -0
- package/dist/adapters/sqlite/tools/core/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/core/indexes.d.ts +20 -0
- package/dist/adapters/sqlite/tools/core/indexes.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/core/queries.d.ts +16 -0
- package/dist/adapters/sqlite/tools/core/queries.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/core/tables.d.ts +37 -0
- package/dist/adapters/sqlite/tools/core/tables.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/core/triggers.d.ts +18 -0
- package/dist/adapters/sqlite/tools/core/triggers.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/fts.d.ts +13 -0
- package/dist/adapters/sqlite/tools/fts.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/geo.d.ts +14 -0
- package/dist/adapters/sqlite/tools/geo.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/index.d.ts +33 -0
- package/dist/adapters/sqlite/tools/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/introspection/analysis/constraints.d.ts +10 -0
- package/dist/adapters/sqlite/tools/introspection/analysis/constraints.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/introspection/analysis/diff.d.ts +11 -0
- package/dist/adapters/sqlite/tools/introspection/analysis/diff.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/introspection/analysis/index.d.ts +10 -0
- package/dist/adapters/sqlite/tools/introspection/analysis/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/introspection/analysis/risks.d.ts +9 -0
- package/dist/adapters/sqlite/tools/introspection/analysis/risks.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/introspection/analysis/snapshot.d.ts +40 -0
- package/dist/adapters/sqlite/tools/introspection/analysis/snapshot.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/introspection/diagnostics/index.d.ts +9 -0
- package/dist/adapters/sqlite/tools/introspection/diagnostics/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/introspection/diagnostics/indexes.d.ts +10 -0
- package/dist/adapters/sqlite/tools/introspection/diagnostics/indexes.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/introspection/diagnostics/query-plan.d.ts +10 -0
- package/dist/adapters/sqlite/tools/introspection/diagnostics/query-plan.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/introspection/diagnostics/storage.d.ts +10 -0
- package/dist/adapters/sqlite/tools/introspection/diagnostics/storage.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/introspection/graph/helpers.d.ts +44 -0
- package/dist/adapters/sqlite/tools/introspection/graph/helpers.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/introspection/graph/index.d.ts +9 -0
- package/dist/adapters/sqlite/tools/introspection/graph/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/introspection/graph/tools.d.ts +12 -0
- package/dist/adapters/sqlite/tools/introspection/graph/tools.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/introspection/index.d.ts +17 -0
- package/dist/adapters/sqlite/tools/introspection/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-helpers/helpers.d.ts +21 -0
- package/dist/adapters/sqlite/tools/json-helpers/helpers.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-helpers/index.d.ts +17 -0
- package/dist/adapters/sqlite/tools/json-helpers/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-helpers/read.d.ts +24 -0
- package/dist/adapters/sqlite/tools/json-helpers/read.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-helpers/write.d.ts +24 -0
- package/dist/adapters/sqlite/tools/json-helpers/write.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-operations/crud.d.ts +39 -0
- package/dist/adapters/sqlite/tools/json-operations/crud.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-operations/diff.d.ts +11 -0
- package/dist/adapters/sqlite/tools/json-operations/diff.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-operations/helpers.d.ts +18 -0
- package/dist/adapters/sqlite/tools/json-operations/helpers.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-operations/index.d.ts +10 -0
- package/dist/adapters/sqlite/tools/json-operations/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-operations/query.d.ts +24 -0
- package/dist/adapters/sqlite/tools/json-operations/query.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-operations/security.d.ts +19 -0
- package/dist/adapters/sqlite/tools/json-operations/security.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-operations/transform.d.ts +24 -0
- package/dist/adapters/sqlite/tools/json-operations/transform.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/migration/helpers.d.ts +34 -0
- package/dist/adapters/sqlite/tools/migration/helpers.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/migration/index.d.ts +15 -0
- package/dist/adapters/sqlite/tools/migration/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/migration/tracking/apply.d.ts +4 -0
- package/dist/adapters/sqlite/tools/migration/tracking/apply.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/migration/tracking/history.d.ts +4 -0
- package/dist/adapters/sqlite/tools/migration/tracking/history.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/migration/tracking/index.d.ts +7 -0
- package/dist/adapters/sqlite/tools/migration/tracking/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/migration/tracking/init.d.ts +4 -0
- package/dist/adapters/sqlite/tools/migration/tracking/init.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/migration/tracking/record.d.ts +4 -0
- package/dist/adapters/sqlite/tools/migration/tracking/record.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/migration/tracking/rollback.d.ts +4 -0
- package/dist/adapters/sqlite/tools/migration/tracking/rollback.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/migration/tracking/status.d.ts +4 -0
- package/dist/adapters/sqlite/tools/migration/tracking/status.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/stats/advanced.d.ts +28 -0
- package/dist/adapters/sqlite/tools/stats/advanced.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/stats/anomaly-detection.d.ts +22 -0
- package/dist/adapters/sqlite/tools/stats/anomaly-detection.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/stats/basic.d.ts +32 -0
- package/dist/adapters/sqlite/tools/stats/basic.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/stats/helpers.d.ts +27 -0
- package/dist/adapters/sqlite/tools/stats/helpers.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/stats/index.d.ts +12 -0
- package/dist/adapters/sqlite/tools/stats/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/stats/inference/hypothesis.d.ts +7 -0
- package/dist/adapters/sqlite/tools/stats/inference/hypothesis.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/stats/inference/index.d.ts +4 -0
- package/dist/adapters/sqlite/tools/stats/inference/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/stats/inference/outlier.d.ts +7 -0
- package/dist/adapters/sqlite/tools/stats/inference/outlier.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/stats/inference/regression.d.ts +7 -0
- package/dist/adapters/sqlite/tools/stats/inference/regression.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/stats/math-helpers.d.ts +17 -0
- package/dist/adapters/sqlite/tools/stats/math-helpers.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/stats/schema-risks.d.ts +15 -0
- package/dist/adapters/sqlite/tools/stats/schema-risks.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/text/formatting.d.ts +48 -0
- package/dist/adapters/sqlite/tools/text/formatting.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/text/helpers.d.ts +22 -0
- package/dist/adapters/sqlite/tools/text/helpers.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/text/index.d.ts +10 -0
- package/dist/adapters/sqlite/tools/text/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/text/regex.d.ts +21 -0
- package/dist/adapters/sqlite/tools/text/regex.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/text/search.d.ts +17 -0
- package/dist/adapters/sqlite/tools/text/search.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/text/sentiment.d.ts +13 -0
- package/dist/adapters/sqlite/tools/text/sentiment.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/text/validate.d.ts +11 -0
- package/dist/adapters/sqlite/tools/text/validate.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/vector/helpers.d.ts +11 -0
- package/dist/adapters/sqlite/tools/vector/helpers.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/vector/index.d.ts +14 -0
- package/dist/adapters/sqlite/tools/vector/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/vector/metadata.d.ts +28 -0
- package/dist/adapters/sqlite/tools/vector/metadata.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/vector/search.d.ts +16 -0
- package/dist/adapters/sqlite/tools/vector/search.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/vector/storage.d.ts +24 -0
- package/dist/adapters/sqlite/tools/vector/storage.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/vector/tools.d.ts +9 -0
- package/dist/adapters/sqlite/tools/vector/tools.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/virtual/analysis.d.ts +24 -0
- package/dist/adapters/sqlite/tools/virtual/analysis.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/virtual/extensions.d.ts +13 -0
- package/dist/adapters/sqlite/tools/virtual/extensions.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/virtual/helpers.d.ts +18 -0
- package/dist/adapters/sqlite/tools/virtual/helpers.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/virtual/index.d.ts +10 -0
- package/dist/adapters/sqlite/tools/virtual/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/virtual/views.d.ts +21 -0
- package/dist/adapters/sqlite/tools/virtual/views.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/virtual/vtable/analyze-csv.d.ts +4 -0
- package/dist/adapters/sqlite/tools/virtual/vtable/analyze-csv.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/virtual/vtable/csv.d.ts +4 -0
- package/dist/adapters/sqlite/tools/virtual/vtable/csv.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/virtual/vtable/drop.d.ts +4 -0
- package/dist/adapters/sqlite/tools/virtual/vtable/drop.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/virtual/vtable/index.d.ts +6 -0
- package/dist/adapters/sqlite/tools/virtual/vtable/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/virtual/vtable/info.d.ts +4 -0
- package/dist/adapters/sqlite/tools/virtual/vtable/info.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/virtual/vtable/list.d.ts +4 -0
- package/dist/adapters/sqlite/tools/virtual/vtable/list.d.ts.map +1 -0
- package/dist/adapters/sqlite/types.d.ts +89 -0
- package/dist/adapters/sqlite/types.d.ts.map +1 -0
- package/dist/adapters/sqlite-helpers.d.ts +51 -0
- package/dist/adapters/sqlite-helpers.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/extensions.d.ts +17 -0
- package/dist/adapters/sqlite-native/extensions.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/index.d.ts +11 -0
- package/dist/adapters/sqlite-native/index.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/native-query-executor.d.ts +24 -0
- package/dist/adapters/sqlite-native/native-query-executor.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/native-sqlite-adapter.d.ts +160 -0
- package/dist/adapters/sqlite-native/native-sqlite-adapter.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/registration/index.d.ts +12 -0
- package/dist/adapters/sqlite-native/registration/index.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/tools/spatialite/analysis.d.ts +23 -0
- package/dist/adapters/sqlite-native/tools/spatialite/analysis.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/tools/spatialite/index.d.ts +15 -0
- package/dist/adapters/sqlite-native/tools/spatialite/index.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/tools/spatialite/loader.d.ts +22 -0
- package/dist/adapters/sqlite-native/tools/spatialite/loader.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/tools/spatialite/schemas.d.ts +78 -0
- package/dist/adapters/sqlite-native/tools/spatialite/schemas.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/tools/spatialite/tools.d.ts +30 -0
- package/dist/adapters/sqlite-native/tools/spatialite/tools.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/tools/transactions.d.ts +12 -0
- package/dist/adapters/sqlite-native/tools/transactions.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/tools/window.d.ts +7 -0
- package/dist/adapters/sqlite-native/tools/window.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/transaction-methods.d.ts +36 -0
- package/dist/adapters/sqlite-native/transaction-methods.d.ts.map +1 -0
- package/dist/audit/backup-manager.d.ts +90 -0
- package/dist/audit/backup-manager.d.ts.map +1 -0
- package/dist/audit/index.d.ts +11 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit/interceptor.d.ts +54 -0
- package/dist/audit/interceptor.d.ts.map +1 -0
- package/dist/audit/logger.d.ts +62 -0
- package/dist/audit/logger.d.ts.map +1 -0
- package/dist/audit/types.d.ts +112 -0
- package/dist/audit/types.d.ts.map +1 -0
- package/dist/auth/auth-context.d.ts +28 -0
- package/dist/auth/auth-context.d.ts.map +1 -0
- package/dist/auth/authorization-server-discovery.d.ts +90 -0
- package/dist/auth/authorization-server-discovery.d.ts.map +1 -0
- package/dist/auth/errors.d.ts +74 -0
- package/dist/auth/errors.d.ts.map +1 -0
- package/dist/auth/middleware/core.d.ts +22 -0
- package/dist/auth/middleware/core.d.ts.map +1 -0
- package/dist/auth/middleware/express-auth.d.ts +13 -0
- package/dist/auth/middleware/express-auth.d.ts.map +1 -0
- package/dist/auth/middleware/express-scopes.d.ts +6 -0
- package/dist/auth/middleware/express-scopes.d.ts.map +1 -0
- package/dist/auth/middleware/extraction.d.ts +2 -0
- package/dist/auth/middleware/extraction.d.ts.map +1 -0
- package/dist/auth/middleware/index.d.ts +5 -0
- package/dist/auth/middleware/index.d.ts.map +1 -0
- package/dist/auth/oauth-resource-server.d.ts +74 -0
- package/dist/auth/oauth-resource-server.d.ts.map +1 -0
- package/dist/auth/scope-map.d.ts +24 -0
- package/dist/auth/scope-map.d.ts.map +1 -0
- package/dist/auth/scopes/constants.d.ts +40 -0
- package/dist/auth/scopes/constants.d.ts.map +1 -0
- package/dist/auth/scopes/display.d.ts +5 -0
- package/dist/auth/scopes/display.d.ts.map +1 -0
- package/dist/auth/scopes/enforcement.d.ts +27 -0
- package/dist/auth/scopes/enforcement.d.ts.map +1 -0
- package/dist/auth/scopes/index.d.ts +6 -0
- package/dist/auth/scopes/index.d.ts.map +1 -0
- package/dist/auth/scopes/mapping.d.ts +39 -0
- package/dist/auth/scopes/mapping.d.ts.map +1 -0
- package/dist/auth/scopes/validation.d.ts +27 -0
- package/dist/auth/scopes/validation.d.ts.map +1 -0
- package/dist/auth/token-validator.d.ts +63 -0
- package/dist/auth/token-validator.d.ts.map +1 -0
- package/dist/auth/transport-agnostic.d.ts +11 -0
- package/dist/auth/transport-agnostic.d.ts.map +1 -0
- package/dist/auth/types.d.ts +257 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/chunk-E5IESRTK.js +489 -0
- package/dist/{chunk-TVIZ3XJH.js → chunk-FR65YPAH.js} +8509 -3925
- package/dist/{chunk-AOUL5SHS.js → chunk-L552U3QS.js} +880 -252
- package/dist/chunk-THATOQRT.js +2624 -0
- package/dist/chunk-W5WQVNVX.js +568 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +114 -19
- package/dist/codemode/api-constants.d.ts +40 -0
- package/dist/codemode/api-constants.d.ts.map +1 -0
- package/dist/codemode/api.d.ts +70 -0
- package/dist/codemode/api.d.ts.map +1 -0
- package/dist/codemode/auto-return.d.ts +25 -0
- package/dist/codemode/auto-return.d.ts.map +1 -0
- package/dist/codemode/index.d.ts +12 -0
- package/dist/codemode/index.d.ts.map +1 -0
- package/dist/codemode/sandbox-factory.d.ts +72 -0
- package/dist/codemode/sandbox-factory.d.ts.map +1 -0
- package/dist/codemode/sandbox.d.ts +54 -0
- package/dist/codemode/sandbox.d.ts.map +1 -0
- package/dist/codemode/security.d.ts +45 -0
- package/dist/codemode/security.d.ts.map +1 -0
- package/dist/codemode/types.d.ts +167 -0
- package/dist/codemode/types.d.ts.map +1 -0
- package/dist/constants/server-instructions.d.ts +22 -0
- package/dist/constants/server-instructions.d.ts.map +1 -0
- package/dist/filtering/tool-constants.d.ts +45 -0
- package/dist/filtering/tool-constants.d.ts.map +1 -0
- package/dist/filtering/tool-filter.d.ts +82 -0
- package/dist/filtering/tool-filter.d.ts.map +1 -0
- package/dist/{http-VSB7DBJR.js → http-HWTUVFIA.js} +587 -358
- package/dist/index.d.ts +9 -842
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -5
- package/dist/server/mcp-server.d.ts +66 -0
- package/dist/server/mcp-server.d.ts.map +1 -0
- package/dist/server/registration/audit-tools.d.ts +13 -0
- package/dist/server/registration/audit-tools.d.ts.map +1 -0
- package/dist/server/registration/built-in-tools.d.ts +8 -0
- package/dist/server/registration/built-in-tools.d.ts.map +1 -0
- package/dist/server/registration/help-resources.d.ts +7 -0
- package/dist/server/registration/help-resources.d.ts.map +1 -0
- package/dist/server/registration/index.d.ts +4 -0
- package/dist/server/registration/index.d.ts.map +1 -0
- package/dist/{sqlite-26V3Y4MK.js → sqlite-6C3AJI4I.js} +115 -147
- package/dist/{sqlite-native-5O7FZJGB.js → sqlite-native-ZSSWCTYC.js} +1016 -349
- package/dist/transports/http/index.d.ts +8 -0
- package/dist/transports/http/index.d.ts.map +1 -0
- package/dist/transports/http/middleware.d.ts +25 -0
- package/dist/transports/http/middleware.d.ts.map +1 -0
- package/dist/transports/http/oauth.d.ts +24 -0
- package/dist/transports/http/oauth.d.ts.map +1 -0
- package/dist/transports/http/session.d.ts +2 -0
- package/dist/transports/http/session.d.ts.map +1 -0
- package/dist/transports/http/sessions/index.d.ts +4 -0
- package/dist/transports/http/sessions/index.d.ts.map +1 -0
- package/dist/transports/http/sessions/legacy-sse.d.ts +6 -0
- package/dist/transports/http/sessions/legacy-sse.d.ts.map +1 -0
- package/dist/transports/http/sessions/mutex.d.ts +6 -0
- package/dist/transports/http/sessions/mutex.d.ts.map +1 -0
- package/dist/transports/http/sessions/stateful.d.ts +12 -0
- package/dist/transports/http/sessions/stateful.d.ts.map +1 -0
- package/dist/transports/http/sessions/stateless.d.ts +6 -0
- package/dist/transports/http/sessions/stateless.d.ts.map +1 -0
- package/dist/transports/http/transport.d.ts +65 -0
- package/dist/transports/http/transport.d.ts.map +1 -0
- package/dist/transports/http/type-adapters.d.ts +20 -0
- package/dist/transports/http/type-adapters.d.ts.map +1 -0
- package/dist/transports/http/types.d.ts +120 -0
- package/dist/transports/http/types.d.ts.map +1 -0
- package/dist/types/adapter.d.ts +138 -0
- package/dist/types/adapter.d.ts.map +1 -0
- package/dist/types/auth.d.ts +79 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/database.d.ts +100 -0
- package/dist/types/database.d.ts.map +1 -0
- package/dist/types/filtering.d.ts +41 -0
- package/dist/types/filtering.d.ts.map +1 -0
- package/dist/types/index.d.ts +13 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/server.d.ts +48 -0
- package/dist/types/server.d.ts.map +1 -0
- package/dist/utils/annotations.d.ts +62 -0
- package/dist/utils/annotations.d.ts.map +1 -0
- package/dist/utils/errors/base.d.ts +33 -0
- package/dist/utils/errors/base.d.ts.map +1 -0
- package/dist/utils/errors/categories.d.ts +41 -0
- package/dist/utils/errors/categories.d.ts.map +1 -0
- package/dist/utils/errors/classes.d.ts +124 -0
- package/dist/utils/errors/classes.d.ts.map +1 -0
- package/dist/utils/errors/error-response-fields.d.ts +24 -0
- package/dist/utils/errors/error-response-fields.d.ts.map +1 -0
- package/dist/utils/errors/format.d.ts +74 -0
- package/dist/utils/errors/format.d.ts.map +1 -0
- package/dist/utils/errors/index.d.ts +11 -0
- package/dist/utils/errors/index.d.ts.map +1 -0
- package/dist/utils/errors/suggestions.d.ts +16 -0
- package/dist/utils/errors/suggestions.d.ts.map +1 -0
- package/dist/utils/icons.d.ts +19 -0
- package/dist/utils/icons.d.ts.map +1 -0
- package/dist/utils/identifiers.d.ts +121 -0
- package/dist/utils/identifiers.d.ts.map +1 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/insights-manager.d.ts +39 -0
- package/dist/utils/insights-manager.d.ts.map +1 -0
- package/dist/utils/logger/error-codes.d.ts +48 -0
- package/dist/utils/logger/error-codes.d.ts.map +1 -0
- package/dist/utils/logger/index.d.ts +22 -0
- package/dist/utils/logger/index.d.ts.map +1 -0
- package/dist/utils/logger/logger.d.ts +94 -0
- package/dist/utils/logger/logger.d.ts.map +1 -0
- package/dist/utils/logger/module-logger.d.ts +28 -0
- package/dist/utils/logger/module-logger.d.ts.map +1 -0
- package/dist/utils/logger/types.d.ts +36 -0
- package/dist/utils/logger/types.d.ts.map +1 -0
- package/dist/utils/progress-utils.d.ts +54 -0
- package/dist/utils/progress-utils.d.ts.map +1 -0
- package/dist/utils/redaction.d.ts +4 -0
- package/dist/utils/redaction.d.ts.map +1 -0
- package/dist/utils/resource-annotations.d.ts +36 -0
- package/dist/utils/resource-annotations.d.ts.map +1 -0
- package/dist/utils/validate-json-path.d.ts +43 -0
- package/dist/utils/validate-json-path.d.ts.map +1 -0
- package/dist/utils/validate-path.d.ts +37 -0
- package/dist/utils/validate-path.d.ts.map +1 -0
- package/dist/utils/where-clause.d.ts +42 -0
- package/dist/utils/where-clause.d.ts.map +1 -0
- package/dist/version.d.ts +10 -0
- package/dist/version.d.ts.map +1 -0
- package/package.json +33 -20
- package/.gitattributes +0 -2
- package/dist/chunk-4IA3DB5C.js +0 -135
- package/dist/chunk-FW7UCRLN.js +0 -82
- package/dist/chunk-RHVEZ42P.js +0 -873
- package/dist/chunk-Z2GFQU3G.js +0 -363
- package/dist/worker-script.d.ts +0 -2
- package/dist/worker-script.js +0 -126
- package/playwright.config.ts +0 -101
- package/scripts/generate-server-instructions.ts +0 -111
- package/server.json +0 -52
- package/test-server/README.md +0 -118
- package/test-server/code-map.md +0 -409
- package/test-server/fixtures/sample.csv +0 -6
- package/test-server/reset-database.ps1 +0 -373
- package/test-server/sample.csv +0 -11
- package/test-server/test-agent-experience.md +0 -243
- package/test-server/test-database.sql +0 -388
- package/test-server/test-group-tools.md +0 -861
- package/test-server/test-help-resources.mjs +0 -238
- package/test-server/test-preflight.md +0 -53
- package/test-server/test-prompts.md +0 -354
- package/test-server/test-resources.md +0 -245
- package/test-server/test-tool-annotations.mjs +0 -157
- package/test-server/test-tools-advanced-1.md +0 -517
- package/test-server/test-tools-advanced-2.md +0 -487
- package/test-server/test-tools-codemode.md +0 -629
- package/test-server/test-tools.md +0 -176
- package/test-server/tool-reference.md +0 -236
- package/tsconfig.test.json +0 -9
package/README.md
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
# db-mcp (SQLite MCP Server)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<!-- mcp-name: io.github.neverinfamous/db-mcp -->
|
|
4
|
+
|
|
5
|
+
**SQLite MCP Server** with 170+ specialized tools, 11 data resources + 9 help resources, and 10 prompts, audit logging with DDL backup snapshots, HTTP/SSE Transport, OAuth 2.1 authentication, tool filtering, granular access control, and structured error handling with categorized, actionable responses. Available in WASM and better-sqlite3 variants.
|
|
4
6
|
|
|
5
7
|
[](https://github.com/neverinfamous/db-mcp)
|
|
6
|
-
|
|
8
|
+

|
|
7
9
|
[](https://www.npmjs.com/package/db-mcp)
|
|
8
10
|
[](https://hub.docker.com/r/writenotenow/db-mcp)
|
|
9
11
|
[](https://opensource.org/licenses/MIT)
|
|
10
12
|

|
|
11
|
-
[](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.neverinfamous/db-mcp)
|
|
12
14
|
[](SECURITY.md)
|
|
13
15
|
[](https://github.com/neverinfamous/db-mcp)
|
|
14
16
|
[](https://github.com/neverinfamous/db-mcp/actions/workflows/e2e.yml)
|
|
15
|
-

|
|
16
|
-

|
|
17
|
+
[](https://github.com/neverinfamous/db-mcp)
|
|
18
|
+
[](https://github.com/neverinfamous/db-mcp)
|
|
18
19
|
|
|
19
20
|
**[Wiki](https://github.com/neverinfamous/db-mcp/wiki)** • **[Changelog](CHANGELOG.md)**
|
|
20
21
|
|
|
@@ -22,22 +23,21 @@
|
|
|
22
23
|
|
|
23
24
|
## 🎯 What Sets Us Apart
|
|
24
25
|
|
|
25
|
-
| Feature | Description
|
|
26
|
-
| -------------------------------- |
|
|
27
|
-
| **
|
|
28
|
-
| **
|
|
29
|
-
| **10 AI-Powered Prompts** | Guided workflows for schema exploration, query building, data analysis, optimization, migration, debugging, and hybrid FTS5 + vector search
|
|
30
|
-
| **Code Mode** | **Massive Token Savings:** Execute complex, multi-step operations inside a
|
|
31
|
-
| **Token-Optimized Payloads** | Every tool response is designed for minimal token footprint. Tools include `compact`, `nodesOnly`, `maxOutliers`, `minSeverity`, and `maxInvalid` parameters where applicable — letting agents control response size without losing data access
|
|
32
|
-
| **Dual SQLite Backends** | WASM (sql.js) for zero-compilation portability, Native (better-sqlite3) for full features including transactions, window functions, and SpatiaLite GIS
|
|
33
|
-
| **
|
|
34
|
-
| **
|
|
35
|
-
| **
|
|
36
|
-
| **
|
|
37
|
-
| **
|
|
38
|
-
| **
|
|
39
|
-
| **
|
|
40
|
-
| **MCP 2025-03-26 Compliant** | Full protocol support with tool safety hints, resource priorities, and progress notifications |
|
|
26
|
+
| Feature | Description |
|
|
27
|
+
| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
28
|
+
| **170+ Specialized Tools** | The most comprehensive SQLite MCP server available — core CRUD, JSON/JSONB, FTS5 full-text search, statistical analysis, vector search, geospatial/SpatiaLite, introspection, migration, and admin |
|
|
29
|
+
| **20 Resources** | 11 data resources (schema, tables, indexes, views, health, metadata, insights, audit, compile_options, pragma) + 9 help resources (`sqlite://help` + per-group reference) — filtered by `--tool-filter` |
|
|
30
|
+
| **10 AI-Powered Prompts** | Guided workflows for schema exploration, query building, data analysis, optimization, migration, debugging, and hybrid FTS5 + vector search |
|
|
31
|
+
| **Code Mode** | **Massive Token Savings:** Execute complex, multi-step operations inside a **V8 isolate sandbox** with process-level isolation and hard timeouts. Instead of spending thousands of tokens on back-and-forth tool calls, Code Mode exposes all 170+ capabilities locally, reducing token overhead by 70–90% and supercharging AI agent reasoning |
|
|
32
|
+
| **Token-Optimized Payloads** | Every tool response is designed for minimal token footprint with `_meta.tokenEstimate` on every response so agents know their token cost. Tools include `compact`, `nodesOnly`, `maxOutliers`, `minSeverity`, and `maxInvalid` parameters where applicable — letting agents control response size without losing data access |
|
|
33
|
+
| **Dual SQLite Backends** | WASM (sql.js) for zero-compilation portability, Native (better-sqlite3) for high-performance concurrent execution with full features including transactions, window functions, and SpatiaLite GIS |
|
|
34
|
+
| **OAuth 2.1 + Access Control** | Enterprise-ready security with RFC 9728/8414 compliance, granular scopes (`full`, `read`, `write`, `admin`, `db:*`, `table:*:*`), and Keycloak integration |
|
|
35
|
+
| **Smart Tool Filtering** | 10 tool groups + 7 shortcuts let you stay within IDE limits while exposing exactly what you need |
|
|
36
|
+
| **HTTP Streaming Transport** | Streamable HTTP (`/mcp`) for modern clients + legacy SSE (`/sse`) for backward compatibility — both protocols supported simultaneously with security headers, rate limiting, health check, and stateless mode for serverless |
|
|
37
|
+
| **Production-Ready Security** | SQL injection protection (parameterized queries + Unicode-normalized WHERE clause validation), sandboxed code execution (V8 `codeGeneration` restrictions, frozen prototypes, 18 blocked patterns, Proxy nullified, RPC allowlist), CORS deny-all default, fail-closed scope enforcement, JWT claims sanitization, 7 security headers, body size limits, rate limiting with Retry-After, slowloris timeouts, `trustProxy`, opt-in HSTS, non-root Docker, and build provenance |
|
|
38
|
+
| **Strict TypeScript** | 100% type-safe codebase with strict mode, no `any` types, 1911 unit tests + 1136 E2E tests and 90% coverage |
|
|
39
|
+
| **Deterministic Error Handling** | Every tool returns structured `{success, error, code, category, suggestion, recoverable}` responses — no raw exceptions, no silent failures. Agents get enriched error context with actionable suggestions instead of cryptic SQLite codes |
|
|
40
|
+
| **MCP 2025-03-26 Compliant** | Full protocol support with tool safety hints (`sensitiveHint`, `readOnlyHint`), resource priorities, and progress notifications |
|
|
41
41
|
|
|
42
42
|
## 🚀 Quick Start
|
|
43
43
|
|
|
@@ -84,17 +84,19 @@ Build the project:
|
|
|
84
84
|
npm run build
|
|
85
85
|
```
|
|
86
86
|
|
|
87
|
-
Run the server:
|
|
87
|
+
Run the server with **Native backend** (better-sqlite3 — full features, requires Node.js native build):
|
|
88
88
|
|
|
89
89
|
```bash
|
|
90
|
-
# Native backend (better-sqlite3) - Full features, requires Node.js native build
|
|
91
90
|
node dist/cli.js --transport stdio --sqlite-native ./database.db
|
|
91
|
+
```
|
|
92
92
|
|
|
93
|
-
|
|
93
|
+
Or with **WASM backend** (sql.js — cross-platform, no compilation required):
|
|
94
|
+
|
|
95
|
+
```bash
|
|
94
96
|
node dist/cli.js --transport stdio --sqlite ./database.db
|
|
95
97
|
```
|
|
96
98
|
|
|
97
|
-
> **Backend Choice:** Use `--sqlite-native` for full features (
|
|
99
|
+
> **Backend Choice:** Use `--sqlite-native` for full features (166 group tools, transactions, window functions, SpatiaLite). Use `--sqlite` for WASM mode (139 tools, no native dependencies).
|
|
98
100
|
|
|
99
101
|
### Verify It Works
|
|
100
102
|
|
|
@@ -121,16 +123,24 @@ npm run test
|
|
|
121
123
|
- ✅ Docker installed and running (for Docker method)
|
|
122
124
|
- ✅ Node.js 24+ (LTS) (for local installation)
|
|
123
125
|
|
|
124
|
-
##
|
|
126
|
+
## Code Mode: Maximum Efficiency
|
|
125
127
|
|
|
126
|
-
|
|
127
|
-
> **AI-enabled IDEs like Cursor have tool limits.** With 139 tools in the native backend, you must use tool filtering to stay within limits. Use **shortcuts** or specify **groups** to enable only what you need.
|
|
128
|
+
Code Mode (`sqlite_execute_code`) dramatically reduces token usage (70–90%) and is included by default in all presets.
|
|
128
129
|
|
|
129
|
-
|
|
130
|
+
Code executes in a **worker-thread sandbox** — a separate V8 isolate with its own memory space. All `sqlite.*` API calls are forwarded to the main thread via a `MessagePort`-based RPC bridge, where the actual database operations execute. This provides:
|
|
131
|
+
|
|
132
|
+
- **Process-level isolation** — user code runs in a separate V8 instance with enforced heap limits
|
|
133
|
+
- **Readonly enforcement** — when `readonly: true`, stripped methods throw clear error messages listing available methods via Proxy traps
|
|
134
|
+
- **Hard timeouts** — worker termination if execution exceeds the configured limit
|
|
135
|
+
- **V8 code generation restrictions** — `eval()` and `Function()` construction from strings disabled at the V8 engine level via `codeGeneration: { strings: false, wasm: false }`
|
|
136
|
+
- **RPC allowlist** — host-side validation prevents workers from invoking unauthorized API methods
|
|
137
|
+
- **Full API access** — all 10 tool groups are available via `sqlite.*` (e.g., `sqlite.core.readQuery()`, `sqlite.json.extract()`)
|
|
130
138
|
|
|
131
|
-
|
|
139
|
+
Set `CODEMODE_ISOLATION=vm` with `CODEMODE_ISOLATION_INSECURE=1` to fall back to the in-process `vm` module sandbox if needed.
|
|
132
140
|
|
|
133
|
-
|
|
141
|
+
### ⚡ Code Mode Only (Maximum Token Savings)
|
|
142
|
+
|
|
143
|
+
If you control your own setup, you can run with **only Code Mode enabled** — a single tool that provides access to all 170+ tools' worth of capability through the `sqlite.*` API:
|
|
134
144
|
|
|
135
145
|
```json
|
|
136
146
|
{
|
|
@@ -138,11 +148,11 @@ Code Mode (`sqlite_execute_code`) provides access to all 139 tools' worth of cap
|
|
|
138
148
|
"db-mcp-sqlite": {
|
|
139
149
|
"command": "node",
|
|
140
150
|
"args": [
|
|
141
|
-
"
|
|
151
|
+
"/path/to/db-mcp/dist/cli.js",
|
|
142
152
|
"--transport",
|
|
143
153
|
"stdio",
|
|
144
154
|
"--sqlite-native",
|
|
145
|
-
"
|
|
155
|
+
"/path/to/database.db",
|
|
146
156
|
"--tool-filter",
|
|
147
157
|
"codemode"
|
|
148
158
|
]
|
|
@@ -151,9 +161,23 @@ Code Mode (`sqlite_execute_code`) provides access to all 139 tools' worth of cap
|
|
|
151
161
|
}
|
|
152
162
|
```
|
|
153
163
|
|
|
154
|
-
This exposes just `sqlite_execute_code` plus built-in tools. The agent writes JavaScript against the typed `sqlite.*` SDK — composing queries, chaining operations across all
|
|
164
|
+
This exposes just `sqlite_execute_code` plus built-in tools. The agent writes JavaScript against the typed `sqlite.*` SDK — composing queries, chaining operations across all 10 tool groups, and returning exactly the data it needs — in one execution. This mirrors the [Code Mode pattern](https://blog.cloudflare.com/code-mode-mcp/) pioneered by Cloudflare for their entire API: fixed token cost regardless of how many capabilities exist.
|
|
165
|
+
|
|
166
|
+
> [!TIP]
|
|
167
|
+
> **Maximize Token Savings:** Instruct your AI agent to prefer Code Mode over individual tool calls:
|
|
168
|
+
>
|
|
169
|
+
> _"When using db-mcp, prefer `sqlite_execute_code` (Code Mode) for multi-step database operations to minimize token usage."_
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## 🎛️ Tool Filtering
|
|
174
|
+
|
|
175
|
+
> [!IMPORTANT]
|
|
176
|
+
> **AI-enabled IDEs like Cursor have tool limits.** With 170+ tools in the native backend, you must use tool filtering to stay within limits. Use **shortcuts** or specify **groups** to enable only what you need.
|
|
177
|
+
|
|
178
|
+
### Quick Start: Recommended Configurations
|
|
155
179
|
|
|
156
|
-
#### Starter (
|
|
180
|
+
#### Starter (core + json + text)
|
|
157
181
|
|
|
158
182
|
If you prefer individual tool calls, `starter` provides Core + JSON + Text:
|
|
159
183
|
|
|
@@ -175,34 +199,35 @@ Specify exactly the groups you need:
|
|
|
175
199
|
|
|
176
200
|
### Shortcuts (Predefined Bundles)
|
|
177
201
|
|
|
178
|
-
> **Note:** Native includes FTS5 (
|
|
202
|
+
> **Note:** Native includes FTS5 (5), window functions (6), transactions (8), and SpatiaLite (7) not available in WASM.
|
|
179
203
|
|
|
180
204
|
| Shortcut | WASM | Native | + Built-in | What's Included |
|
|
181
205
|
| ------------ | ------ | ------ | ---------- | ------------------------------ |
|
|
182
|
-
| `starter` | **
|
|
183
|
-
| `analytics` |
|
|
184
|
-
| `search` |
|
|
185
|
-
| `spatial` |
|
|
186
|
-
| `dev-schema` |
|
|
187
|
-
| `minimal` |
|
|
188
|
-
| `full` |
|
|
206
|
+
| `starter` | **60** | **65** | +4 | Core, JSON, Text |
|
|
207
|
+
| `analytics` | 63 | 69 | +4 | Core, JSON, Stats |
|
|
208
|
+
| `search` | 46 | 51 | +4 | Core, Text, Vector |
|
|
209
|
+
| `spatial` | 36 | 43 | +4 | Core, Geo, Vector |
|
|
210
|
+
| `dev-schema` | 37 | 37 | +4 | Core, Introspection, Migration |
|
|
211
|
+
| `minimal` | 21 | 21 | +4 | Core only |
|
|
212
|
+
| `full` | 139 | 166 | +4 | Everything enabled |
|
|
189
213
|
|
|
190
214
|
### Tool Groups (10 Available)
|
|
191
215
|
|
|
192
|
-
> **Note:** +
|
|
193
|
-
|
|
194
|
-
| Group | WASM | Native | + Built-in | Description
|
|
195
|
-
| --------------- | ---- | ------ | ---------- |
|
|
196
|
-
| `codemode` | 1 | 1 | +
|
|
197
|
-
| `core` |
|
|
198
|
-
| `json` |
|
|
199
|
-
| `text` | 14 |
|
|
200
|
-
| `stats` |
|
|
201
|
-
| `vector` |
|
|
202
|
-
| `admin` |
|
|
203
|
-
| `
|
|
204
|
-
| `
|
|
205
|
-
| `
|
|
216
|
+
> **Note:** +4 built-in tools (server_info, server_health, list_adapters, sqlite_execute_code) are injected into every group.
|
|
217
|
+
|
|
218
|
+
| Group | WASM | Native | + Built-in | Description |
|
|
219
|
+
| --------------- | ---- | ------ | ---------- | ------------------------------------------ |
|
|
220
|
+
| `codemode` | 1 | 1 | +4 | Code Mode (sandboxed code execution) 🧠 |
|
|
221
|
+
| `core` | 21 | 21 | +4 | Basic CRUD, schema, tables |
|
|
222
|
+
| `json` | 25 | 25 | +4 | JSON/JSONB operations, analysis |
|
|
223
|
+
| `text` | 14 | 19 | +4 | Text processing + FTS5 + advanced search |
|
|
224
|
+
| `stats` | 17 | 23 | +4 | Descriptive, inference, window functions |
|
|
225
|
+
| `vector` | 11 | 11 | +4 | Vector storage, similarity search |
|
|
226
|
+
| `admin` | 31 | 32 | +4 | DB maintenance, backup, virtual tables |
|
|
227
|
+
| `transactions` | 0 | 8 | +4 | Commit, rollback, savepoints (Native only) |
|
|
228
|
+
| `geo` | 4 | 11 | +4 | Geospatial + SpatiaLite (Native only) |
|
|
229
|
+
| `introspection` | 10 | 10 | +4 | Schema mapping, FK graph, analysis |
|
|
230
|
+
| `migration` | 6 | 6 | +4 | Schema migration tracking (opt-in) |
|
|
206
231
|
|
|
207
232
|
### Syntax Reference
|
|
208
233
|
|
|
@@ -220,14 +245,21 @@ Specify exactly the groups you need:
|
|
|
220
245
|
|
|
221
246
|
You can list individual tool names (without `+` prefix) to create a fully custom whitelist — only the tools you specify will be enabled:
|
|
222
247
|
|
|
248
|
+
Enable exactly 3 tools (whitelist mode):
|
|
249
|
+
|
|
223
250
|
```bash
|
|
224
|
-
# Enable exactly 3 tools (whitelist mode)
|
|
225
251
|
--tool-filter "read_query,write_query,list_tables"
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
Mix tools from different groups:
|
|
226
255
|
|
|
227
|
-
|
|
256
|
+
```bash
|
|
228
257
|
--tool-filter "read_query,fuzzy_search,vector_search"
|
|
258
|
+
```
|
|
229
259
|
|
|
230
|
-
|
|
260
|
+
Combine with a shortcut or group:
|
|
261
|
+
|
|
262
|
+
```bash
|
|
231
263
|
--tool-filter "starter,+vector_search,+fuzzy_search"
|
|
232
264
|
```
|
|
233
265
|
|
|
@@ -249,7 +281,7 @@ If you start with a negative filter (e.g., `-vector,-geo`), it assumes you want
|
|
|
249
281
|
--tool-filter "-stats,-vector,-geo,-backup,-monitoring,-transactions,-window"
|
|
250
282
|
```
|
|
251
283
|
|
|
252
|
-
##
|
|
284
|
+
## 🔌 SQLite Extensions
|
|
253
285
|
|
|
254
286
|
SQLite supports both **built-in** extensions (compiled into better-sqlite3) and **loadable** extensions (require separate binaries).
|
|
255
287
|
|
|
@@ -272,33 +304,43 @@ SQLite supports both **built-in** extensions (compiled into better-sqlite3) and
|
|
|
272
304
|
|
|
273
305
|
**CSV Extension:**
|
|
274
306
|
|
|
307
|
+
Download a precompiled binary or compile from source: https://www.sqlite.org/csv.html
|
|
308
|
+
|
|
309
|
+
Set the environment variable (Linux/macOS):
|
|
310
|
+
|
|
311
|
+
```bash
|
|
312
|
+
export CSV_EXTENSION_PATH=/path/to/csv.so
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
On Windows, use `.dll`:
|
|
316
|
+
|
|
275
317
|
```bash
|
|
276
|
-
|
|
277
|
-
|
|
318
|
+
export CSV_EXTENSION_PATH=/path/to/csv.dll
|
|
319
|
+
```
|
|
278
320
|
|
|
279
|
-
|
|
280
|
-
export CSV_EXTENSION_PATH=/path/to/csv.so # Linux
|
|
281
|
-
export CSV_EXTENSION_PATH=/path/to/csv.dll # Windows
|
|
321
|
+
Or use the CLI flag:
|
|
282
322
|
|
|
283
|
-
|
|
323
|
+
```bash
|
|
284
324
|
db-mcp --sqlite-native ./data.db --csv
|
|
285
325
|
```
|
|
286
326
|
|
|
287
327
|
**SpatiaLite Extension:**
|
|
288
328
|
|
|
289
|
-
|
|
290
|
-
# Linux (apt):
|
|
291
|
-
sudo apt install libspatialite-dev
|
|
329
|
+
Install the library for your platform:
|
|
292
330
|
|
|
293
|
-
|
|
294
|
-
brew install libspatialite
|
|
331
|
+
- **Linux (apt):** `sudo apt install libspatialite-dev`
|
|
332
|
+
- **macOS (Homebrew):** `brew install libspatialite`
|
|
333
|
+
- **Windows:** Download from https://www.gaia-gis.it/gaia-sins/
|
|
295
334
|
|
|
296
|
-
|
|
335
|
+
Set the environment variable:
|
|
297
336
|
|
|
298
|
-
|
|
337
|
+
```bash
|
|
299
338
|
export SPATIALITE_PATH=/path/to/mod_spatialite.so
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
Or use the CLI flag:
|
|
300
342
|
|
|
301
|
-
|
|
343
|
+
```bash
|
|
302
344
|
db-mcp --sqlite-native ./data.db --spatialite
|
|
303
345
|
```
|
|
304
346
|
|
|
@@ -306,20 +348,23 @@ db-mcp --sqlite-native ./data.db --spatialite
|
|
|
306
348
|
|
|
307
349
|
## 📁 Resources
|
|
308
350
|
|
|
309
|
-
### Data Resources (
|
|
351
|
+
### Data Resources (11)
|
|
310
352
|
|
|
311
353
|
MCP resources provide read-only access to database metadata:
|
|
312
354
|
|
|
313
|
-
| Resource
|
|
314
|
-
|
|
|
315
|
-
| `sqlite_schema`
|
|
316
|
-
| `sqlite_tables`
|
|
317
|
-
| `sqlite_table_schema`
|
|
318
|
-
| `sqlite_indexes`
|
|
319
|
-
| `sqlite_views`
|
|
320
|
-
| `sqlite_health`
|
|
321
|
-
| `sqlite_meta`
|
|
322
|
-
| `
|
|
355
|
+
| Resource | URI | Description | Min Config |
|
|
356
|
+
| ------------------------ | ----------------------------------- | --------------------------------- | ------------- |
|
|
357
|
+
| `sqlite_schema` | `sqlite://schema` | Full database schema | `minimal` |
|
|
358
|
+
| `sqlite_tables` | `sqlite://tables` | List all tables | `minimal` |
|
|
359
|
+
| `sqlite_table_schema` | `sqlite://table/{tableName}/schema` | Schema for a specific table | `minimal` |
|
|
360
|
+
| `sqlite_indexes` | `sqlite://indexes` | All indexes in the database | `minimal` |
|
|
361
|
+
| `sqlite_views` | `sqlite://views` | All views in the database | `core,admin` |
|
|
362
|
+
| `sqlite_health` | `sqlite://health` | Database health and status | _(read-only)_ |
|
|
363
|
+
| `sqlite_meta` | `sqlite://meta` | Database metadata and PRAGMAs | `core,admin` |
|
|
364
|
+
| `sqlite_compile_options` | `sqlite://compile_options` | SQLite compile-time build options | _(read-only)_ |
|
|
365
|
+
| `sqlite_pragma` | `sqlite://pragma` | Runtime PRAGMA config snapshot | _(read-only)_ |
|
|
366
|
+
| `sqlite_insights` | `memo://insights` | Business insights memo (analysis) | `core,admin` |
|
|
367
|
+
| `sqlite_audit` | `sqlite://audit` | Recent audit log + backup stats | `--audit-log` |
|
|
323
368
|
|
|
324
369
|
### Help Resources (1 + up to 8)
|
|
325
370
|
|
|
@@ -333,7 +378,8 @@ On-demand tool reference documentation, filtered by `--tool-filter`:
|
|
|
333
378
|
| `sqlite_help_stats` | `sqlite://help/stats` | Statistical analysis + window functions reference | When stats group on |
|
|
334
379
|
| `sqlite_help_vector` | `sqlite://help/vector` | Vector/semantic search reference | When vector group on |
|
|
335
380
|
| `sqlite_help_geo` | `sqlite://help/geo` | Geospatial + SpatiaLite reference | When geo group on |
|
|
336
|
-
| `sqlite_help_admin` | `sqlite://help/admin` | Admin,
|
|
381
|
+
| `sqlite_help_admin` | `sqlite://help/admin` | Admin, backup, virtual tables reference | When admin group on |
|
|
382
|
+
| `sqlite_help_transactions` | `sqlite://help/transactions` | Transaction control reference | When transactions group on |
|
|
337
383
|
| `sqlite_help_introspection` | `sqlite://help/introspection` | Schema introspection, FK graph, diagnostics reference | When introspection group on |
|
|
338
384
|
| `sqlite_help_migration` | `sqlite://help/migration` | Migration tracking, apply, rollback reference | When migration group on |
|
|
339
385
|
|
|
@@ -360,23 +406,29 @@ MCP prompts provide AI-assisted database workflows:
|
|
|
360
406
|
|
|
361
407
|
### Environment Variables
|
|
362
408
|
|
|
363
|
-
| Variable
|
|
364
|
-
|
|
|
365
|
-
| `MCP_HOST`
|
|
366
|
-
| `SQLITE_DATABASE`
|
|
367
|
-
| `DB_MCP_TOOL_FILTER`
|
|
368
|
-
| `MCP_AUTH_TOKEN`
|
|
369
|
-
| `OAUTH_ENABLED`
|
|
370
|
-
| `OAUTH_ISSUER`
|
|
371
|
-
| `OAUTH_AUDIENCE`
|
|
372
|
-
| `OAUTH_JWKS_URI`
|
|
373
|
-
| `OAUTH_CLOCK_TOLERANCE`
|
|
374
|
-
| `LOG_LEVEL`
|
|
375
|
-
| `METADATA_CACHE_TTL_MS`
|
|
376
|
-
| `CODEMODE_ISOLATION`
|
|
377
|
-
| `
|
|
378
|
-
| `
|
|
379
|
-
| `
|
|
409
|
+
| Variable | Default | Description |
|
|
410
|
+
| --------------------------- | --------- | ------------------------------------------------------------------------------ |
|
|
411
|
+
| `MCP_HOST` | `0.0.0.0` | Host/IP to bind to (CLI: `--server-host`) |
|
|
412
|
+
| `SQLITE_DATABASE` | — | SQLite database path (CLI: `--sqlite` / `--sqlite-native`) |
|
|
413
|
+
| `DB_MCP_TOOL_FILTER` | — | Tool filter string (CLI: `--tool-filter`) |
|
|
414
|
+
| `MCP_AUTH_TOKEN` | — | Simple bearer token for HTTP auth (CLI: `--auth-token`) |
|
|
415
|
+
| `OAUTH_ENABLED` | `false` | Enable OAuth 2.1 (CLI: `--oauth-enabled`) |
|
|
416
|
+
| `OAUTH_ISSUER` | — | Authorization server URL (CLI: `--oauth-issuer`) |
|
|
417
|
+
| `OAUTH_AUDIENCE` | — | Expected token audience (CLI: `--oauth-audience`) |
|
|
418
|
+
| `OAUTH_JWKS_URI` | — | JWKS URI, auto-discovered if omitted (CLI: `--oauth-jwks-uri`) |
|
|
419
|
+
| `OAUTH_CLOCK_TOLERANCE` | `60` | Clock tolerance in seconds (CLI: `--oauth-clock-tolerance`) |
|
|
420
|
+
| `LOG_LEVEL` | `info` | Log verbosity: `debug`, `info`, `warning`, `error` |
|
|
421
|
+
| `METADATA_CACHE_TTL_MS` | `5000` | Schema cache TTL in ms (auto-invalidated on DDL operations) |
|
|
422
|
+
| `CODEMODE_ISOLATION` | `isolate` | Code Mode sandbox: `isolate` (isolated-vm native) or `worker` |
|
|
423
|
+
| `CODE_MODE_MAX_RESULT_SIZE` | `102400` | Maximum Code Mode result payload in bytes (default 100KB, cap 50MB) |
|
|
424
|
+
| `MCP_RATE_LIMIT_MAX` | `100` | Max requests/minute per IP (HTTP transport) |
|
|
425
|
+
| `CSV_EXTENSION_PATH` | — | Custom path to CSV extension binary (native only) |
|
|
426
|
+
| `SPATIALITE_PATH` | — | Custom path to SpatiaLite extension binary (native only) |
|
|
427
|
+
| `AUDIT_LOG` | — | Audit log file path, or `stderr` (CLI: `--audit-log`) |
|
|
428
|
+
| `AUDIT_REDACT` | `true` | Redact tool arguments from audit entries (CLI: `--audit-no-redact` to disable) |
|
|
429
|
+
| `AUDIT_READS` | `false` | Also log read-scoped tool invocations (CLI: `--audit-reads`) |
|
|
430
|
+
| `AUDIT_BACKUP` | `false` | Enable pre-mutation DDL snapshots (CLI: `--audit-backup`) |
|
|
431
|
+
| `AUDIT_BACKUP_DATA` | `false` | Include sample data rows in snapshots (CLI: `--audit-backup-data`) |
|
|
380
432
|
|
|
381
433
|
> **Tip:** Lower `METADATA_CACHE_TTL_MS` for development (e.g., `1000`), or increase it for production with stable schemas (e.g., `60000` = 1 min). Schema cache is automatically invalidated on DDL operations (CREATE/ALTER/DROP).
|
|
382
434
|
|
|
@@ -389,6 +441,7 @@ Transport: --transport <stdio|http|sse> --port <N> --server-host <host> --
|
|
|
389
441
|
Auth: --auth-token <token> | --oauth-enabled --oauth-issuer <url> --oauth-audience <aud>
|
|
390
442
|
Database: --sqlite <path> | --sqlite-native <path>
|
|
391
443
|
Extensions: --csv --spatialite (native only)
|
|
444
|
+
Audit: --audit-log <path> --audit-no-redact --audit-reads --audit-backup --audit-backup-data
|
|
392
445
|
Server: --name <name> --version <ver> --tool-filter <filter>
|
|
393
446
|
```
|
|
394
447
|
|
|
@@ -417,6 +470,9 @@ Add to your `~/.cursor/mcp.json`, Claude Desktop config, or equivalent:
|
|
|
417
470
|
}
|
|
418
471
|
```
|
|
419
472
|
|
|
473
|
+
> [!TIP]
|
|
474
|
+
> **Switching backends:** The config above uses the **Native** backend (better-sqlite3, 166 tools). To use the **WASM** backend (sql.js, 139 tools, zero native dependencies), change `--sqlite-native` to `--sqlite` in the args array. See the [Backend Options table in DOCKER_README](DOCKER_README.md#backend-options) for feature differences.
|
|
475
|
+
|
|
420
476
|
**Variants** (modify the `args` array above):
|
|
421
477
|
|
|
422
478
|
| Variant | Change |
|
|
@@ -431,51 +487,65 @@ Add to your `~/.cursor/mcp.json`, Claude Desktop config, or equivalent:
|
|
|
431
487
|
|
|
432
488
|
> See [Tool Filtering](#️-tool-filtering) to customize which tools are exposed.
|
|
433
489
|
|
|
434
|
-
|
|
490
|
+
## 🌐 HTTP/SSE Transport (Remote Access)
|
|
435
491
|
|
|
436
|
-
For remote access, web-based clients, or MCP
|
|
492
|
+
For remote access, web-based clients, or HTTP-compatible MCP hosts, use the HTTP transport:
|
|
437
493
|
|
|
438
494
|
```bash
|
|
439
|
-
node dist/cli.js
|
|
495
|
+
node dist/cli.js \
|
|
496
|
+
--transport http \
|
|
497
|
+
--port 3000 \
|
|
498
|
+
--sqlite-native ./database.db
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
**Docker:**
|
|
502
|
+
|
|
503
|
+
```bash
|
|
504
|
+
docker run --rm -p 3000:3000 \
|
|
505
|
+
-v ./data:/app/data \
|
|
506
|
+
writenotenow/db-mcp:latest \
|
|
507
|
+
--transport http --port 3000 \
|
|
508
|
+
--sqlite-native /app/data/database.db
|
|
440
509
|
```
|
|
441
510
|
|
|
442
|
-
**
|
|
511
|
+
The server supports **two MCP transport protocols simultaneously**, enabling both modern and legacy clients to connect:
|
|
443
512
|
|
|
444
|
-
|
|
445
|
-
| ---------------- | ------------------------------------------------ | -------- |
|
|
446
|
-
| `GET /` | Server info and available endpoints | Both |
|
|
447
|
-
| `POST /mcp` | JSON-RPC requests (initialize, tools/call, etc.) | Both |
|
|
448
|
-
| `GET /mcp` | SSE stream for server-to-client notifications | Stateful |
|
|
449
|
-
| `DELETE /mcp` | Session termination | Stateful |
|
|
450
|
-
| `GET /sse` | Legacy SSE connection (MCP 2024-11-05) | Stateful |
|
|
451
|
-
| `POST /messages` | Legacy SSE message endpoint | Stateful |
|
|
452
|
-
| `GET /health` | Health check (always public) | Both |
|
|
513
|
+
### Streamable HTTP (Recommended)
|
|
453
514
|
|
|
454
|
-
|
|
515
|
+
Modern protocol (MCP 2025-03-26) — single endpoint, session-based:
|
|
455
516
|
|
|
456
|
-
|
|
517
|
+
| Method | Endpoint | Purpose |
|
|
518
|
+
| -------- | -------- | ------------------------------------------------ |
|
|
519
|
+
| `POST` | `/mcp` | JSON-RPC requests (initialize, tools/list, etc.) |
|
|
520
|
+
| `GET` | `/mcp` | SSE stream for server notifications |
|
|
521
|
+
| `DELETE` | `/mcp` | Session termination |
|
|
457
522
|
|
|
458
|
-
|
|
459
|
-
- **Server Timeouts** — Request, keep-alive, and headers timeouts prevent slowloris-style DoS
|
|
460
|
-
- **Rate Limiting** — 100 requests/minute per IP (429 + Retry-After on excess, health checks exempt)
|
|
461
|
-
- **CORS** — Configurable via `--cors-origins` (default: `*`, supports wildcard subdomains like `*.example.com`). ⚠️ **Security Warning:** The default `*` allows requests from any origin. For production HTTP deployments, explicitly configure this to your trusted domains.
|
|
462
|
-
- **Trust Proxy** — Opt-in `trustProxy` for X-Forwarded-For IP extraction behind reverse proxies
|
|
463
|
-
- **Body Size Limit** — Configurable via `--max-body-bytes` (default: 1 MB)
|
|
464
|
-
- **404 Handler** — Unknown paths return `{ error: "Not found" }`
|
|
465
|
-
- **Cross-Protocol Guard** — SSE session IDs rejected on `/mcp` and vice versa
|
|
523
|
+
Sessions are managed via the `Mcp-Session-Id` header.
|
|
466
524
|
|
|
467
|
-
|
|
525
|
+
### Stateless Mode
|
|
468
526
|
|
|
469
|
-
For serverless deployments
|
|
527
|
+
For serverless/stateless deployments where sessions are not needed:
|
|
470
528
|
|
|
471
529
|
```bash
|
|
472
|
-
node dist/cli.js --transport http --port 3000 --
|
|
530
|
+
node dist/cli.js --transport http --port 3000 --stateless --sqlite-native ./database.db
|
|
473
531
|
```
|
|
474
532
|
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
533
|
+
In stateless mode: `GET /mcp` returns 405, `DELETE /mcp` returns 204, `/sse` and `/messages` return 404. Each `POST /mcp` creates a fresh transport.
|
|
534
|
+
|
|
535
|
+
### Legacy SSE (Backward Compatibility)
|
|
536
|
+
|
|
537
|
+
Legacy protocol (MCP 2024-11-05) — for clients like Python `mcp.client.sse`:
|
|
538
|
+
|
|
539
|
+
| Method | Endpoint | Purpose |
|
|
540
|
+
| ------ | -------------------------- | ------------------------------------------------------------- |
|
|
541
|
+
| `GET` | `/sse` | Opens SSE stream, returns `/messages?sessionId=<id>` endpoint |
|
|
542
|
+
| `POST` | `/messages?sessionId=<id>` | Send JSON-RPC messages to the session |
|
|
543
|
+
|
|
544
|
+
### Utility Endpoints
|
|
545
|
+
|
|
546
|
+
| Method | Endpoint | Purpose |
|
|
547
|
+
| ------ | --------- | ---------------------------------------------------------------------- |
|
|
548
|
+
| `GET` | `/health` | Health check (bypasses rate limiting, always available for monitoring) |
|
|
479
549
|
|
|
480
550
|
## 🔐 Authentication
|
|
481
551
|
|
|
@@ -486,10 +556,9 @@ db-mcp supports two authentication mechanisms for HTTP transport:
|
|
|
486
556
|
Lightweight authentication for development or single-tenant deployments:
|
|
487
557
|
|
|
488
558
|
```bash
|
|
489
|
-
# CLI
|
|
490
559
|
node dist/cli.js --transport http --port 3000 --auth-token my-secret --sqlite-native ./database.db
|
|
491
560
|
|
|
492
|
-
#
|
|
561
|
+
# Or via environment variable
|
|
493
562
|
export MCP_AUTH_TOKEN=my-secret
|
|
494
563
|
node dist/cli.js --transport http --port 3000 --sqlite-native ./database.db
|
|
495
564
|
```
|
|
@@ -500,52 +569,61 @@ Clients must include `Authorization: Bearer my-secret` on all requests. `/health
|
|
|
500
569
|
|
|
501
570
|
Full OAuth 2.1 with RFC 9728/8414 compliance for production multi-tenant deployments:
|
|
502
571
|
|
|
503
|
-
| Component | Status | Description |
|
|
504
|
-
| --------------------------- | ------ | ------------------------------------------------ |
|
|
505
|
-
| Protected Resource Metadata | ✅ | RFC 9728 `/.well-known/oauth-protected-resource` |
|
|
506
|
-
| Auth Server Discovery | ✅ | RFC 8414 metadata discovery with caching |
|
|
507
|
-
| Token Validation | ✅ | JWT validation with JWKS support |
|
|
508
|
-
| Scope Enforcement | ✅ | Granular `read`, `write`, `admin` scopes |
|
|
509
|
-
| HTTP Transport | ✅ | Streamable HTTP with OAuth middleware |
|
|
510
|
-
|
|
511
|
-
#### Supported Scopes
|
|
512
|
-
|
|
513
|
-
| Scope | Description |
|
|
514
|
-
| -------------------- | -------------------------------------- |
|
|
515
|
-
| `read` | Read-only access to all databases |
|
|
516
|
-
| `write` | Read and write access to all databases |
|
|
517
|
-
| `admin` | Full administrative access |
|
|
518
|
-
| `db:{name}` | Access to specific database only |
|
|
519
|
-
| `table:{db}:{table}` | Access to specific table only |
|
|
520
|
-
|
|
521
|
-
#### Quick Start with OAuth CLI Flags
|
|
522
|
-
|
|
523
572
|
```bash
|
|
524
|
-
node dist/cli.js
|
|
573
|
+
node dist/cli.js \
|
|
574
|
+
--transport http \
|
|
575
|
+
--port 3000 \
|
|
576
|
+
--sqlite-native ./database.db \
|
|
525
577
|
--oauth-enabled \
|
|
526
578
|
--oauth-issuer http://localhost:8080/realms/db-mcp \
|
|
527
|
-
--oauth-audience db-mcp-server
|
|
528
|
-
--sqlite-native ./database.db
|
|
579
|
+
--oauth-audience db-mcp-server
|
|
529
580
|
```
|
|
530
581
|
|
|
531
582
|
> **Additional flags:** `--oauth-jwks-uri <url>` (auto-discovered if omitted), `--oauth-clock-tolerance <seconds>` (default: 60).
|
|
532
583
|
|
|
533
|
-
|
|
584
|
+
### OAuth Scopes
|
|
585
|
+
|
|
586
|
+
Access control is managed through OAuth scopes:
|
|
587
|
+
|
|
588
|
+
| Scope | Description |
|
|
589
|
+
| ------- | -------------------------------------- |
|
|
590
|
+
| `full` | Unrestricted access to all operations |
|
|
591
|
+
| `read` | Read-only access to all databases |
|
|
592
|
+
| `write` | Read and write access to all databases |
|
|
593
|
+
| `admin` | Full administrative access |
|
|
594
|
+
|
|
595
|
+
### RFC Compliance
|
|
596
|
+
|
|
597
|
+
This implementation follows:
|
|
598
|
+
|
|
599
|
+
- **RFC 9728** — OAuth 2.1 Protected Resource Metadata
|
|
600
|
+
- **RFC 8414** — OAuth 2.1 Authorization Server Metadata
|
|
601
|
+
- **RFC 7591** — OAuth 2.1 Dynamic Client Registration
|
|
602
|
+
|
|
603
|
+
The server exposes metadata at `/.well-known/oauth-protected-resource`.
|
|
604
|
+
|
|
605
|
+
> **Note for Keycloak users:** Add an **Audience mapper** to your client (Client → Client scopes → dedicated scope → Add mapper → Audience) to include the correct `aud` claim in tokens.
|
|
606
|
+
|
|
607
|
+
> [!NOTE]
|
|
608
|
+
> **Per-tool scope enforcement:** Scopes are enforced at the tool level — each tool group maps to a required scope (`read`, `write`, or `admin`). Unknown or unmapped tools default to `admin` (fail-closed). When OAuth is enabled, every tool invocation checks the calling token's scopes before execution. When OAuth is not configured, scope checks are skipped entirely.
|
|
534
609
|
|
|
535
|
-
|
|
610
|
+
> [!TIP]
|
|
611
|
+
> **Audit identity integration:** When OAuth is enabled alongside audit logging (`--audit-log`), audit entries for write/admin tools automatically capture the authenticated user (`claims.sub`) and granted scopes. This provides a complete forensic trail linking every mutation to a specific identity. Without OAuth, these fields are `null`/`[]`.
|
|
536
612
|
|
|
537
|
-
>
|
|
613
|
+
> [!WARNING]
|
|
614
|
+
> **HTTP without authentication:** When using `--transport http` without enabling OAuth or `--auth-token`, all clients have full unrestricted access. Always enable authentication for production HTTP deployments. See [SECURITY.md](SECURITY.md) for details.
|
|
538
615
|
|
|
539
616
|
## 📊 Benchmarks
|
|
540
617
|
|
|
541
618
|
Performance benchmarks measure framework overhead on critical hot paths using [Vitest bench](https://vitest.dev/guide/features.html#benchmarking) (tinybench). The suite validates that framework plumbing stays negligible relative to actual database I/O:
|
|
542
619
|
|
|
543
|
-
- **Tool dispatch:**
|
|
544
|
-
- **Auth scope checks:**
|
|
545
|
-
- **Identifier validation:** 6
|
|
546
|
-
- **Schema cache hits:** 4
|
|
547
|
-
- **Debug log (filtered):**
|
|
548
|
-
- **Code Mode security:** 1.
|
|
620
|
+
- **Tool dispatch:** 11–14M ops/sec — Map-based lookup is effectively zero-cost
|
|
621
|
+
- **Auth scope checks:** 6–8M ops/sec — OAuth middleware adds no measurable latency
|
|
622
|
+
- **Identifier validation:** 6–7M ops/sec — SQL sanitization is near-instant
|
|
623
|
+
- **Schema cache hits:** 4–6M ops/sec — metadata lookups avoid redundant queries
|
|
624
|
+
- **Debug log (filtered):** 10–11M ops/sec — disabled log levels are true no-ops
|
|
625
|
+
- **Code Mode security:** 1–1.3M validations/sec for typical code, blocked patterns rejected in <1 µs
|
|
626
|
+
- **Sandbox execution:** ~4.4–4.9K executions/sec — trivial code round-trips through V8 isolate in ~0.2 ms
|
|
549
627
|
|
|
550
628
|
```bash
|
|
551
629
|
npm run bench # Run all benchmarks
|