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.
Files changed (508) hide show
  1. package/README.md +247 -169
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/adapters/database-adapter.d.ts +173 -0
  4. package/dist/adapters/database-adapter.d.ts.map +1 -0
  5. package/dist/adapters/query-validation.d.ts +20 -0
  6. package/dist/adapters/query-validation.d.ts.map +1 -0
  7. package/dist/adapters/registration/index.d.ts +4 -0
  8. package/dist/adapters/registration/index.d.ts.map +1 -0
  9. package/dist/adapters/registration/prompts.d.ts +7 -0
  10. package/dist/adapters/registration/prompts.d.ts.map +1 -0
  11. package/dist/adapters/registration/resources.d.ts +7 -0
  12. package/dist/adapters/registration/resources.d.ts.map +1 -0
  13. package/dist/adapters/registration/tools.d.ts +9 -0
  14. package/dist/adapters/registration/tools.d.ts.map +1 -0
  15. package/dist/adapters/sqlite/index.d.ts +9 -0
  16. package/dist/adapters/sqlite/index.d.ts.map +1 -0
  17. package/dist/adapters/sqlite/json-utils.d.ts +100 -0
  18. package/dist/adapters/sqlite/json-utils.d.ts.map +1 -0
  19. package/dist/adapters/sqlite/prompts/analysis.d.ts +23 -0
  20. package/dist/adapters/sqlite/prompts/analysis.d.ts.map +1 -0
  21. package/dist/adapters/sqlite/prompts/index.d.ts +16 -0
  22. package/dist/adapters/sqlite/prompts/index.d.ts.map +1 -0
  23. package/dist/adapters/sqlite/prompts/query.d.ts +19 -0
  24. package/dist/adapters/sqlite/prompts/query.d.ts.map +1 -0
  25. package/dist/adapters/sqlite/prompts/schema.d.ts +20 -0
  26. package/dist/adapters/sqlite/prompts/schema.d.ts.map +1 -0
  27. package/dist/adapters/sqlite/query-executor.d.ts +38 -0
  28. package/dist/adapters/sqlite/query-executor.d.ts.map +1 -0
  29. package/dist/adapters/sqlite/resources.d.ts +13 -0
  30. package/dist/adapters/sqlite/resources.d.ts.map +1 -0
  31. package/dist/adapters/sqlite/schema-manager.d.ts +69 -0
  32. package/dist/adapters/sqlite/schema-manager.d.ts.map +1 -0
  33. package/dist/adapters/sqlite/schemas/admin.d.ts +459 -0
  34. package/dist/adapters/sqlite/schemas/admin.d.ts.map +1 -0
  35. package/dist/adapters/sqlite/schemas/codemode.d.ts +30 -0
  36. package/dist/adapters/sqlite/schemas/codemode.d.ts.map +1 -0
  37. package/dist/adapters/sqlite/schemas/common.d.ts +9 -0
  38. package/dist/adapters/sqlite/schemas/common.d.ts.map +1 -0
  39. package/dist/adapters/sqlite/schemas/core.d.ts +530 -0
  40. package/dist/adapters/sqlite/schemas/core.d.ts.map +1 -0
  41. package/dist/adapters/sqlite/schemas/error-mixin.d.ts +10 -0
  42. package/dist/adapters/sqlite/schemas/error-mixin.d.ts.map +1 -0
  43. package/dist/adapters/sqlite/schemas/fts.d.ts +106 -0
  44. package/dist/adapters/sqlite/schemas/fts.d.ts.map +1 -0
  45. package/dist/adapters/sqlite/schemas/geo.d.ts +135 -0
  46. package/dist/adapters/sqlite/schemas/geo.d.ts.map +1 -0
  47. package/dist/adapters/sqlite/schemas/index.d.ts +23 -0
  48. package/dist/adapters/sqlite/schemas/index.d.ts.map +1 -0
  49. package/dist/adapters/sqlite/schemas/introspection.d.ts +583 -0
  50. package/dist/adapters/sqlite/schemas/introspection.d.ts.map +1 -0
  51. package/dist/adapters/sqlite/schemas/json.d.ts +849 -0
  52. package/dist/adapters/sqlite/schemas/json.d.ts.map +1 -0
  53. package/dist/adapters/sqlite/schemas/migration.d.ts +220 -0
  54. package/dist/adapters/sqlite/schemas/migration.d.ts.map +1 -0
  55. package/dist/adapters/sqlite/schemas/native.d.ts +235 -0
  56. package/dist/adapters/sqlite/schemas/native.d.ts.map +1 -0
  57. package/dist/adapters/sqlite/schemas/server.d.ts +13 -0
  58. package/dist/adapters/sqlite/schemas/server.d.ts.map +1 -0
  59. package/dist/adapters/sqlite/schemas/spatialite.d.ts +114 -0
  60. package/dist/adapters/sqlite/schemas/spatialite.d.ts.map +1 -0
  61. package/dist/adapters/sqlite/schemas/stats.d.ts +780 -0
  62. package/dist/adapters/sqlite/schemas/stats.d.ts.map +1 -0
  63. package/dist/adapters/sqlite/schemas/text.d.ts +570 -0
  64. package/dist/adapters/sqlite/schemas/text.d.ts.map +1 -0
  65. package/dist/adapters/sqlite/schemas/vector.d.ts +252 -0
  66. package/dist/adapters/sqlite/schemas/vector.d.ts.map +1 -0
  67. package/dist/adapters/sqlite/schemas/virtual.d.ts +257 -0
  68. package/dist/adapters/sqlite/schemas/virtual.d.ts.map +1 -0
  69. package/dist/adapters/sqlite/schemas/where.d.ts +20 -0
  70. package/dist/adapters/sqlite/schemas/where.d.ts.map +1 -0
  71. package/dist/adapters/sqlite/sqlite-adapter/lifecycle.d.ts +13 -0
  72. package/dist/adapters/sqlite/sqlite-adapter/lifecycle.d.ts.map +1 -0
  73. package/dist/adapters/sqlite/sqlite-adapter/schema.d.ts +7 -0
  74. package/dist/adapters/sqlite/sqlite-adapter/schema.d.ts.map +1 -0
  75. package/dist/adapters/sqlite/sqlite-adapter.d.ts +138 -0
  76. package/dist/adapters/sqlite/sqlite-adapter.d.ts.map +1 -0
  77. package/dist/adapters/sqlite/tools/admin/backup/analyze.d.ts +7 -0
  78. package/dist/adapters/sqlite/tools/admin/backup/analyze.d.ts.map +1 -0
  79. package/dist/adapters/sqlite/tools/admin/backup/create.d.ts +11 -0
  80. package/dist/adapters/sqlite/tools/admin/backup/create.d.ts.map +1 -0
  81. package/dist/adapters/sqlite/tools/admin/backup/dump.d.ts +7 -0
  82. package/dist/adapters/sqlite/tools/admin/backup/dump.d.ts.map +1 -0
  83. package/dist/adapters/sqlite/tools/admin/backup/index.d.ts +7 -0
  84. package/dist/adapters/sqlite/tools/admin/backup/index.d.ts.map +1 -0
  85. package/dist/adapters/sqlite/tools/admin/backup/integrity.d.ts +7 -0
  86. package/dist/adapters/sqlite/tools/admin/backup/integrity.d.ts.map +1 -0
  87. package/dist/adapters/sqlite/tools/admin/backup/optimize.d.ts +7 -0
  88. package/dist/adapters/sqlite/tools/admin/backup/optimize.d.ts.map +1 -0
  89. package/dist/adapters/sqlite/tools/admin/backup/restore.d.ts +7 -0
  90. package/dist/adapters/sqlite/tools/admin/backup/restore.d.ts.map +1 -0
  91. package/dist/adapters/sqlite/tools/admin/helpers.d.ts +18 -0
  92. package/dist/adapters/sqlite/tools/admin/helpers.d.ts.map +1 -0
  93. package/dist/adapters/sqlite/tools/admin/index.d.ts +10 -0
  94. package/dist/adapters/sqlite/tools/admin/index.d.ts.map +1 -0
  95. package/dist/adapters/sqlite/tools/admin/pragma.d.ts +37 -0
  96. package/dist/adapters/sqlite/tools/admin/pragma.d.ts.map +1 -0
  97. package/dist/adapters/sqlite/tools/admin/reindex.d.ts +10 -0
  98. package/dist/adapters/sqlite/tools/admin/reindex.d.ts.map +1 -0
  99. package/dist/adapters/sqlite/tools/admin/verify.d.ts +13 -0
  100. package/dist/adapters/sqlite/tools/admin/verify.d.ts.map +1 -0
  101. package/dist/adapters/sqlite/tools/admin/wal.d.ts +10 -0
  102. package/dist/adapters/sqlite/tools/admin/wal.d.ts.map +1 -0
  103. package/dist/adapters/sqlite/tools/codemode.d.ts +22 -0
  104. package/dist/adapters/sqlite/tools/codemode.d.ts.map +1 -0
  105. package/dist/adapters/sqlite/tools/column-validation.d.ts +26 -0
  106. package/dist/adapters/sqlite/tools/column-validation.d.ts.map +1 -0
  107. package/dist/adapters/sqlite/tools/core/alter-table.d.ts +11 -0
  108. package/dist/adapters/sqlite/tools/core/alter-table.d.ts.map +1 -0
  109. package/dist/adapters/sqlite/tools/core/constraints.d.ts +10 -0
  110. package/dist/adapters/sqlite/tools/core/constraints.d.ts.map +1 -0
  111. package/dist/adapters/sqlite/tools/core/convenience-helpers.d.ts +20 -0
  112. package/dist/adapters/sqlite/tools/core/convenience-helpers.d.ts.map +1 -0
  113. package/dist/adapters/sqlite/tools/core/convenience-schemas.d.ts +20 -0
  114. package/dist/adapters/sqlite/tools/core/convenience-schemas.d.ts.map +1 -0
  115. package/dist/adapters/sqlite/tools/core/convenience.d.ts +29 -0
  116. package/dist/adapters/sqlite/tools/core/convenience.d.ts.map +1 -0
  117. package/dist/adapters/sqlite/tools/core/datetime.d.ts +11 -0
  118. package/dist/adapters/sqlite/tools/core/datetime.d.ts.map +1 -0
  119. package/dist/adapters/sqlite/tools/core/index.d.ts +14 -0
  120. package/dist/adapters/sqlite/tools/core/index.d.ts.map +1 -0
  121. package/dist/adapters/sqlite/tools/core/indexes.d.ts +20 -0
  122. package/dist/adapters/sqlite/tools/core/indexes.d.ts.map +1 -0
  123. package/dist/adapters/sqlite/tools/core/queries.d.ts +16 -0
  124. package/dist/adapters/sqlite/tools/core/queries.d.ts.map +1 -0
  125. package/dist/adapters/sqlite/tools/core/tables.d.ts +37 -0
  126. package/dist/adapters/sqlite/tools/core/tables.d.ts.map +1 -0
  127. package/dist/adapters/sqlite/tools/core/triggers.d.ts +18 -0
  128. package/dist/adapters/sqlite/tools/core/triggers.d.ts.map +1 -0
  129. package/dist/adapters/sqlite/tools/fts.d.ts +13 -0
  130. package/dist/adapters/sqlite/tools/fts.d.ts.map +1 -0
  131. package/dist/adapters/sqlite/tools/geo.d.ts +14 -0
  132. package/dist/adapters/sqlite/tools/geo.d.ts.map +1 -0
  133. package/dist/adapters/sqlite/tools/index.d.ts +33 -0
  134. package/dist/adapters/sqlite/tools/index.d.ts.map +1 -0
  135. package/dist/adapters/sqlite/tools/introspection/analysis/constraints.d.ts +10 -0
  136. package/dist/adapters/sqlite/tools/introspection/analysis/constraints.d.ts.map +1 -0
  137. package/dist/adapters/sqlite/tools/introspection/analysis/diff.d.ts +11 -0
  138. package/dist/adapters/sqlite/tools/introspection/analysis/diff.d.ts.map +1 -0
  139. package/dist/adapters/sqlite/tools/introspection/analysis/index.d.ts +10 -0
  140. package/dist/adapters/sqlite/tools/introspection/analysis/index.d.ts.map +1 -0
  141. package/dist/adapters/sqlite/tools/introspection/analysis/risks.d.ts +9 -0
  142. package/dist/adapters/sqlite/tools/introspection/analysis/risks.d.ts.map +1 -0
  143. package/dist/adapters/sqlite/tools/introspection/analysis/snapshot.d.ts +40 -0
  144. package/dist/adapters/sqlite/tools/introspection/analysis/snapshot.d.ts.map +1 -0
  145. package/dist/adapters/sqlite/tools/introspection/diagnostics/index.d.ts +9 -0
  146. package/dist/adapters/sqlite/tools/introspection/diagnostics/index.d.ts.map +1 -0
  147. package/dist/adapters/sqlite/tools/introspection/diagnostics/indexes.d.ts +10 -0
  148. package/dist/adapters/sqlite/tools/introspection/diagnostics/indexes.d.ts.map +1 -0
  149. package/dist/adapters/sqlite/tools/introspection/diagnostics/query-plan.d.ts +10 -0
  150. package/dist/adapters/sqlite/tools/introspection/diagnostics/query-plan.d.ts.map +1 -0
  151. package/dist/adapters/sqlite/tools/introspection/diagnostics/storage.d.ts +10 -0
  152. package/dist/adapters/sqlite/tools/introspection/diagnostics/storage.d.ts.map +1 -0
  153. package/dist/adapters/sqlite/tools/introspection/graph/helpers.d.ts +44 -0
  154. package/dist/adapters/sqlite/tools/introspection/graph/helpers.d.ts.map +1 -0
  155. package/dist/adapters/sqlite/tools/introspection/graph/index.d.ts +9 -0
  156. package/dist/adapters/sqlite/tools/introspection/graph/index.d.ts.map +1 -0
  157. package/dist/adapters/sqlite/tools/introspection/graph/tools.d.ts +12 -0
  158. package/dist/adapters/sqlite/tools/introspection/graph/tools.d.ts.map +1 -0
  159. package/dist/adapters/sqlite/tools/introspection/index.d.ts +17 -0
  160. package/dist/adapters/sqlite/tools/introspection/index.d.ts.map +1 -0
  161. package/dist/adapters/sqlite/tools/json-helpers/helpers.d.ts +21 -0
  162. package/dist/adapters/sqlite/tools/json-helpers/helpers.d.ts.map +1 -0
  163. package/dist/adapters/sqlite/tools/json-helpers/index.d.ts +17 -0
  164. package/dist/adapters/sqlite/tools/json-helpers/index.d.ts.map +1 -0
  165. package/dist/adapters/sqlite/tools/json-helpers/read.d.ts +24 -0
  166. package/dist/adapters/sqlite/tools/json-helpers/read.d.ts.map +1 -0
  167. package/dist/adapters/sqlite/tools/json-helpers/write.d.ts +24 -0
  168. package/dist/adapters/sqlite/tools/json-helpers/write.d.ts.map +1 -0
  169. package/dist/adapters/sqlite/tools/json-operations/crud.d.ts +39 -0
  170. package/dist/adapters/sqlite/tools/json-operations/crud.d.ts.map +1 -0
  171. package/dist/adapters/sqlite/tools/json-operations/diff.d.ts +11 -0
  172. package/dist/adapters/sqlite/tools/json-operations/diff.d.ts.map +1 -0
  173. package/dist/adapters/sqlite/tools/json-operations/helpers.d.ts +18 -0
  174. package/dist/adapters/sqlite/tools/json-operations/helpers.d.ts.map +1 -0
  175. package/dist/adapters/sqlite/tools/json-operations/index.d.ts +10 -0
  176. package/dist/adapters/sqlite/tools/json-operations/index.d.ts.map +1 -0
  177. package/dist/adapters/sqlite/tools/json-operations/query.d.ts +24 -0
  178. package/dist/adapters/sqlite/tools/json-operations/query.d.ts.map +1 -0
  179. package/dist/adapters/sqlite/tools/json-operations/security.d.ts +19 -0
  180. package/dist/adapters/sqlite/tools/json-operations/security.d.ts.map +1 -0
  181. package/dist/adapters/sqlite/tools/json-operations/transform.d.ts +24 -0
  182. package/dist/adapters/sqlite/tools/json-operations/transform.d.ts.map +1 -0
  183. package/dist/adapters/sqlite/tools/migration/helpers.d.ts +34 -0
  184. package/dist/adapters/sqlite/tools/migration/helpers.d.ts.map +1 -0
  185. package/dist/adapters/sqlite/tools/migration/index.d.ts +15 -0
  186. package/dist/adapters/sqlite/tools/migration/index.d.ts.map +1 -0
  187. package/dist/adapters/sqlite/tools/migration/tracking/apply.d.ts +4 -0
  188. package/dist/adapters/sqlite/tools/migration/tracking/apply.d.ts.map +1 -0
  189. package/dist/adapters/sqlite/tools/migration/tracking/history.d.ts +4 -0
  190. package/dist/adapters/sqlite/tools/migration/tracking/history.d.ts.map +1 -0
  191. package/dist/adapters/sqlite/tools/migration/tracking/index.d.ts +7 -0
  192. package/dist/adapters/sqlite/tools/migration/tracking/index.d.ts.map +1 -0
  193. package/dist/adapters/sqlite/tools/migration/tracking/init.d.ts +4 -0
  194. package/dist/adapters/sqlite/tools/migration/tracking/init.d.ts.map +1 -0
  195. package/dist/adapters/sqlite/tools/migration/tracking/record.d.ts +4 -0
  196. package/dist/adapters/sqlite/tools/migration/tracking/record.d.ts.map +1 -0
  197. package/dist/adapters/sqlite/tools/migration/tracking/rollback.d.ts +4 -0
  198. package/dist/adapters/sqlite/tools/migration/tracking/rollback.d.ts.map +1 -0
  199. package/dist/adapters/sqlite/tools/migration/tracking/status.d.ts +4 -0
  200. package/dist/adapters/sqlite/tools/migration/tracking/status.d.ts.map +1 -0
  201. package/dist/adapters/sqlite/tools/stats/advanced.d.ts +28 -0
  202. package/dist/adapters/sqlite/tools/stats/advanced.d.ts.map +1 -0
  203. package/dist/adapters/sqlite/tools/stats/anomaly-detection.d.ts +22 -0
  204. package/dist/adapters/sqlite/tools/stats/anomaly-detection.d.ts.map +1 -0
  205. package/dist/adapters/sqlite/tools/stats/basic.d.ts +32 -0
  206. package/dist/adapters/sqlite/tools/stats/basic.d.ts.map +1 -0
  207. package/dist/adapters/sqlite/tools/stats/helpers.d.ts +27 -0
  208. package/dist/adapters/sqlite/tools/stats/helpers.d.ts.map +1 -0
  209. package/dist/adapters/sqlite/tools/stats/index.d.ts +12 -0
  210. package/dist/adapters/sqlite/tools/stats/index.d.ts.map +1 -0
  211. package/dist/adapters/sqlite/tools/stats/inference/hypothesis.d.ts +7 -0
  212. package/dist/adapters/sqlite/tools/stats/inference/hypothesis.d.ts.map +1 -0
  213. package/dist/adapters/sqlite/tools/stats/inference/index.d.ts +4 -0
  214. package/dist/adapters/sqlite/tools/stats/inference/index.d.ts.map +1 -0
  215. package/dist/adapters/sqlite/tools/stats/inference/outlier.d.ts +7 -0
  216. package/dist/adapters/sqlite/tools/stats/inference/outlier.d.ts.map +1 -0
  217. package/dist/adapters/sqlite/tools/stats/inference/regression.d.ts +7 -0
  218. package/dist/adapters/sqlite/tools/stats/inference/regression.d.ts.map +1 -0
  219. package/dist/adapters/sqlite/tools/stats/math-helpers.d.ts +17 -0
  220. package/dist/adapters/sqlite/tools/stats/math-helpers.d.ts.map +1 -0
  221. package/dist/adapters/sqlite/tools/stats/schema-risks.d.ts +15 -0
  222. package/dist/adapters/sqlite/tools/stats/schema-risks.d.ts.map +1 -0
  223. package/dist/adapters/sqlite/tools/text/formatting.d.ts +48 -0
  224. package/dist/adapters/sqlite/tools/text/formatting.d.ts.map +1 -0
  225. package/dist/adapters/sqlite/tools/text/helpers.d.ts +22 -0
  226. package/dist/adapters/sqlite/tools/text/helpers.d.ts.map +1 -0
  227. package/dist/adapters/sqlite/tools/text/index.d.ts +10 -0
  228. package/dist/adapters/sqlite/tools/text/index.d.ts.map +1 -0
  229. package/dist/adapters/sqlite/tools/text/regex.d.ts +21 -0
  230. package/dist/adapters/sqlite/tools/text/regex.d.ts.map +1 -0
  231. package/dist/adapters/sqlite/tools/text/search.d.ts +17 -0
  232. package/dist/adapters/sqlite/tools/text/search.d.ts.map +1 -0
  233. package/dist/adapters/sqlite/tools/text/sentiment.d.ts +13 -0
  234. package/dist/adapters/sqlite/tools/text/sentiment.d.ts.map +1 -0
  235. package/dist/adapters/sqlite/tools/text/validate.d.ts +11 -0
  236. package/dist/adapters/sqlite/tools/text/validate.d.ts.map +1 -0
  237. package/dist/adapters/sqlite/tools/vector/helpers.d.ts +11 -0
  238. package/dist/adapters/sqlite/tools/vector/helpers.d.ts.map +1 -0
  239. package/dist/adapters/sqlite/tools/vector/index.d.ts +14 -0
  240. package/dist/adapters/sqlite/tools/vector/index.d.ts.map +1 -0
  241. package/dist/adapters/sqlite/tools/vector/metadata.d.ts +28 -0
  242. package/dist/adapters/sqlite/tools/vector/metadata.d.ts.map +1 -0
  243. package/dist/adapters/sqlite/tools/vector/search.d.ts +16 -0
  244. package/dist/adapters/sqlite/tools/vector/search.d.ts.map +1 -0
  245. package/dist/adapters/sqlite/tools/vector/storage.d.ts +24 -0
  246. package/dist/adapters/sqlite/tools/vector/storage.d.ts.map +1 -0
  247. package/dist/adapters/sqlite/tools/vector/tools.d.ts +9 -0
  248. package/dist/adapters/sqlite/tools/vector/tools.d.ts.map +1 -0
  249. package/dist/adapters/sqlite/tools/virtual/analysis.d.ts +24 -0
  250. package/dist/adapters/sqlite/tools/virtual/analysis.d.ts.map +1 -0
  251. package/dist/adapters/sqlite/tools/virtual/extensions.d.ts +13 -0
  252. package/dist/adapters/sqlite/tools/virtual/extensions.d.ts.map +1 -0
  253. package/dist/adapters/sqlite/tools/virtual/helpers.d.ts +18 -0
  254. package/dist/adapters/sqlite/tools/virtual/helpers.d.ts.map +1 -0
  255. package/dist/adapters/sqlite/tools/virtual/index.d.ts +10 -0
  256. package/dist/adapters/sqlite/tools/virtual/index.d.ts.map +1 -0
  257. package/dist/adapters/sqlite/tools/virtual/views.d.ts +21 -0
  258. package/dist/adapters/sqlite/tools/virtual/views.d.ts.map +1 -0
  259. package/dist/adapters/sqlite/tools/virtual/vtable/analyze-csv.d.ts +4 -0
  260. package/dist/adapters/sqlite/tools/virtual/vtable/analyze-csv.d.ts.map +1 -0
  261. package/dist/adapters/sqlite/tools/virtual/vtable/csv.d.ts +4 -0
  262. package/dist/adapters/sqlite/tools/virtual/vtable/csv.d.ts.map +1 -0
  263. package/dist/adapters/sqlite/tools/virtual/vtable/drop.d.ts +4 -0
  264. package/dist/adapters/sqlite/tools/virtual/vtable/drop.d.ts.map +1 -0
  265. package/dist/adapters/sqlite/tools/virtual/vtable/index.d.ts +6 -0
  266. package/dist/adapters/sqlite/tools/virtual/vtable/index.d.ts.map +1 -0
  267. package/dist/adapters/sqlite/tools/virtual/vtable/info.d.ts +4 -0
  268. package/dist/adapters/sqlite/tools/virtual/vtable/info.d.ts.map +1 -0
  269. package/dist/adapters/sqlite/tools/virtual/vtable/list.d.ts +4 -0
  270. package/dist/adapters/sqlite/tools/virtual/vtable/list.d.ts.map +1 -0
  271. package/dist/adapters/sqlite/types.d.ts +89 -0
  272. package/dist/adapters/sqlite/types.d.ts.map +1 -0
  273. package/dist/adapters/sqlite-helpers.d.ts +51 -0
  274. package/dist/adapters/sqlite-helpers.d.ts.map +1 -0
  275. package/dist/adapters/sqlite-native/extensions.d.ts +17 -0
  276. package/dist/adapters/sqlite-native/extensions.d.ts.map +1 -0
  277. package/dist/adapters/sqlite-native/index.d.ts +11 -0
  278. package/dist/adapters/sqlite-native/index.d.ts.map +1 -0
  279. package/dist/adapters/sqlite-native/native-query-executor.d.ts +24 -0
  280. package/dist/adapters/sqlite-native/native-query-executor.d.ts.map +1 -0
  281. package/dist/adapters/sqlite-native/native-sqlite-adapter.d.ts +160 -0
  282. package/dist/adapters/sqlite-native/native-sqlite-adapter.d.ts.map +1 -0
  283. package/dist/adapters/sqlite-native/registration/index.d.ts +12 -0
  284. package/dist/adapters/sqlite-native/registration/index.d.ts.map +1 -0
  285. package/dist/adapters/sqlite-native/tools/spatialite/analysis.d.ts +23 -0
  286. package/dist/adapters/sqlite-native/tools/spatialite/analysis.d.ts.map +1 -0
  287. package/dist/adapters/sqlite-native/tools/spatialite/index.d.ts +15 -0
  288. package/dist/adapters/sqlite-native/tools/spatialite/index.d.ts.map +1 -0
  289. package/dist/adapters/sqlite-native/tools/spatialite/loader.d.ts +22 -0
  290. package/dist/adapters/sqlite-native/tools/spatialite/loader.d.ts.map +1 -0
  291. package/dist/adapters/sqlite-native/tools/spatialite/schemas.d.ts +78 -0
  292. package/dist/adapters/sqlite-native/tools/spatialite/schemas.d.ts.map +1 -0
  293. package/dist/adapters/sqlite-native/tools/spatialite/tools.d.ts +30 -0
  294. package/dist/adapters/sqlite-native/tools/spatialite/tools.d.ts.map +1 -0
  295. package/dist/adapters/sqlite-native/tools/transactions.d.ts +12 -0
  296. package/dist/adapters/sqlite-native/tools/transactions.d.ts.map +1 -0
  297. package/dist/adapters/sqlite-native/tools/window.d.ts +7 -0
  298. package/dist/adapters/sqlite-native/tools/window.d.ts.map +1 -0
  299. package/dist/adapters/sqlite-native/transaction-methods.d.ts +36 -0
  300. package/dist/adapters/sqlite-native/transaction-methods.d.ts.map +1 -0
  301. package/dist/audit/backup-manager.d.ts +90 -0
  302. package/dist/audit/backup-manager.d.ts.map +1 -0
  303. package/dist/audit/index.d.ts +11 -0
  304. package/dist/audit/index.d.ts.map +1 -0
  305. package/dist/audit/interceptor.d.ts +54 -0
  306. package/dist/audit/interceptor.d.ts.map +1 -0
  307. package/dist/audit/logger.d.ts +62 -0
  308. package/dist/audit/logger.d.ts.map +1 -0
  309. package/dist/audit/types.d.ts +112 -0
  310. package/dist/audit/types.d.ts.map +1 -0
  311. package/dist/auth/auth-context.d.ts +28 -0
  312. package/dist/auth/auth-context.d.ts.map +1 -0
  313. package/dist/auth/authorization-server-discovery.d.ts +90 -0
  314. package/dist/auth/authorization-server-discovery.d.ts.map +1 -0
  315. package/dist/auth/errors.d.ts +74 -0
  316. package/dist/auth/errors.d.ts.map +1 -0
  317. package/dist/auth/middleware/core.d.ts +22 -0
  318. package/dist/auth/middleware/core.d.ts.map +1 -0
  319. package/dist/auth/middleware/express-auth.d.ts +13 -0
  320. package/dist/auth/middleware/express-auth.d.ts.map +1 -0
  321. package/dist/auth/middleware/express-scopes.d.ts +6 -0
  322. package/dist/auth/middleware/express-scopes.d.ts.map +1 -0
  323. package/dist/auth/middleware/extraction.d.ts +2 -0
  324. package/dist/auth/middleware/extraction.d.ts.map +1 -0
  325. package/dist/auth/middleware/index.d.ts +5 -0
  326. package/dist/auth/middleware/index.d.ts.map +1 -0
  327. package/dist/auth/oauth-resource-server.d.ts +74 -0
  328. package/dist/auth/oauth-resource-server.d.ts.map +1 -0
  329. package/dist/auth/scope-map.d.ts +24 -0
  330. package/dist/auth/scope-map.d.ts.map +1 -0
  331. package/dist/auth/scopes/constants.d.ts +40 -0
  332. package/dist/auth/scopes/constants.d.ts.map +1 -0
  333. package/dist/auth/scopes/display.d.ts +5 -0
  334. package/dist/auth/scopes/display.d.ts.map +1 -0
  335. package/dist/auth/scopes/enforcement.d.ts +27 -0
  336. package/dist/auth/scopes/enforcement.d.ts.map +1 -0
  337. package/dist/auth/scopes/index.d.ts +6 -0
  338. package/dist/auth/scopes/index.d.ts.map +1 -0
  339. package/dist/auth/scopes/mapping.d.ts +39 -0
  340. package/dist/auth/scopes/mapping.d.ts.map +1 -0
  341. package/dist/auth/scopes/validation.d.ts +27 -0
  342. package/dist/auth/scopes/validation.d.ts.map +1 -0
  343. package/dist/auth/token-validator.d.ts +63 -0
  344. package/dist/auth/token-validator.d.ts.map +1 -0
  345. package/dist/auth/transport-agnostic.d.ts +11 -0
  346. package/dist/auth/transport-agnostic.d.ts.map +1 -0
  347. package/dist/auth/types.d.ts +257 -0
  348. package/dist/auth/types.d.ts.map +1 -0
  349. package/dist/chunk-E5IESRTK.js +489 -0
  350. package/dist/{chunk-TVIZ3XJH.js → chunk-FR65YPAH.js} +8509 -3925
  351. package/dist/{chunk-AOUL5SHS.js → chunk-L552U3QS.js} +880 -252
  352. package/dist/chunk-THATOQRT.js +2624 -0
  353. package/dist/chunk-W5WQVNVX.js +568 -0
  354. package/dist/cli.d.ts +7 -0
  355. package/dist/cli.d.ts.map +1 -0
  356. package/dist/cli.js +114 -19
  357. package/dist/codemode/api-constants.d.ts +40 -0
  358. package/dist/codemode/api-constants.d.ts.map +1 -0
  359. package/dist/codemode/api.d.ts +70 -0
  360. package/dist/codemode/api.d.ts.map +1 -0
  361. package/dist/codemode/auto-return.d.ts +25 -0
  362. package/dist/codemode/auto-return.d.ts.map +1 -0
  363. package/dist/codemode/index.d.ts +12 -0
  364. package/dist/codemode/index.d.ts.map +1 -0
  365. package/dist/codemode/sandbox-factory.d.ts +72 -0
  366. package/dist/codemode/sandbox-factory.d.ts.map +1 -0
  367. package/dist/codemode/sandbox.d.ts +54 -0
  368. package/dist/codemode/sandbox.d.ts.map +1 -0
  369. package/dist/codemode/security.d.ts +45 -0
  370. package/dist/codemode/security.d.ts.map +1 -0
  371. package/dist/codemode/types.d.ts +167 -0
  372. package/dist/codemode/types.d.ts.map +1 -0
  373. package/dist/constants/server-instructions.d.ts +22 -0
  374. package/dist/constants/server-instructions.d.ts.map +1 -0
  375. package/dist/filtering/tool-constants.d.ts +45 -0
  376. package/dist/filtering/tool-constants.d.ts.map +1 -0
  377. package/dist/filtering/tool-filter.d.ts +82 -0
  378. package/dist/filtering/tool-filter.d.ts.map +1 -0
  379. package/dist/{http-VSB7DBJR.js → http-HWTUVFIA.js} +587 -358
  380. package/dist/index.d.ts +9 -842
  381. package/dist/index.d.ts.map +1 -0
  382. package/dist/index.js +4 -5
  383. package/dist/server/mcp-server.d.ts +66 -0
  384. package/dist/server/mcp-server.d.ts.map +1 -0
  385. package/dist/server/registration/audit-tools.d.ts +13 -0
  386. package/dist/server/registration/audit-tools.d.ts.map +1 -0
  387. package/dist/server/registration/built-in-tools.d.ts +8 -0
  388. package/dist/server/registration/built-in-tools.d.ts.map +1 -0
  389. package/dist/server/registration/help-resources.d.ts +7 -0
  390. package/dist/server/registration/help-resources.d.ts.map +1 -0
  391. package/dist/server/registration/index.d.ts +4 -0
  392. package/dist/server/registration/index.d.ts.map +1 -0
  393. package/dist/{sqlite-26V3Y4MK.js → sqlite-6C3AJI4I.js} +115 -147
  394. package/dist/{sqlite-native-5O7FZJGB.js → sqlite-native-ZSSWCTYC.js} +1016 -349
  395. package/dist/transports/http/index.d.ts +8 -0
  396. package/dist/transports/http/index.d.ts.map +1 -0
  397. package/dist/transports/http/middleware.d.ts +25 -0
  398. package/dist/transports/http/middleware.d.ts.map +1 -0
  399. package/dist/transports/http/oauth.d.ts +24 -0
  400. package/dist/transports/http/oauth.d.ts.map +1 -0
  401. package/dist/transports/http/session.d.ts +2 -0
  402. package/dist/transports/http/session.d.ts.map +1 -0
  403. package/dist/transports/http/sessions/index.d.ts +4 -0
  404. package/dist/transports/http/sessions/index.d.ts.map +1 -0
  405. package/dist/transports/http/sessions/legacy-sse.d.ts +6 -0
  406. package/dist/transports/http/sessions/legacy-sse.d.ts.map +1 -0
  407. package/dist/transports/http/sessions/mutex.d.ts +6 -0
  408. package/dist/transports/http/sessions/mutex.d.ts.map +1 -0
  409. package/dist/transports/http/sessions/stateful.d.ts +12 -0
  410. package/dist/transports/http/sessions/stateful.d.ts.map +1 -0
  411. package/dist/transports/http/sessions/stateless.d.ts +6 -0
  412. package/dist/transports/http/sessions/stateless.d.ts.map +1 -0
  413. package/dist/transports/http/transport.d.ts +65 -0
  414. package/dist/transports/http/transport.d.ts.map +1 -0
  415. package/dist/transports/http/type-adapters.d.ts +20 -0
  416. package/dist/transports/http/type-adapters.d.ts.map +1 -0
  417. package/dist/transports/http/types.d.ts +120 -0
  418. package/dist/transports/http/types.d.ts.map +1 -0
  419. package/dist/types/adapter.d.ts +138 -0
  420. package/dist/types/adapter.d.ts.map +1 -0
  421. package/dist/types/auth.d.ts +79 -0
  422. package/dist/types/auth.d.ts.map +1 -0
  423. package/dist/types/database.d.ts +100 -0
  424. package/dist/types/database.d.ts.map +1 -0
  425. package/dist/types/filtering.d.ts +41 -0
  426. package/dist/types/filtering.d.ts.map +1 -0
  427. package/dist/types/index.d.ts +13 -0
  428. package/dist/types/index.d.ts.map +1 -0
  429. package/dist/types/server.d.ts +48 -0
  430. package/dist/types/server.d.ts.map +1 -0
  431. package/dist/utils/annotations.d.ts +62 -0
  432. package/dist/utils/annotations.d.ts.map +1 -0
  433. package/dist/utils/errors/base.d.ts +33 -0
  434. package/dist/utils/errors/base.d.ts.map +1 -0
  435. package/dist/utils/errors/categories.d.ts +41 -0
  436. package/dist/utils/errors/categories.d.ts.map +1 -0
  437. package/dist/utils/errors/classes.d.ts +124 -0
  438. package/dist/utils/errors/classes.d.ts.map +1 -0
  439. package/dist/utils/errors/error-response-fields.d.ts +24 -0
  440. package/dist/utils/errors/error-response-fields.d.ts.map +1 -0
  441. package/dist/utils/errors/format.d.ts +74 -0
  442. package/dist/utils/errors/format.d.ts.map +1 -0
  443. package/dist/utils/errors/index.d.ts +11 -0
  444. package/dist/utils/errors/index.d.ts.map +1 -0
  445. package/dist/utils/errors/suggestions.d.ts +16 -0
  446. package/dist/utils/errors/suggestions.d.ts.map +1 -0
  447. package/dist/utils/icons.d.ts +19 -0
  448. package/dist/utils/icons.d.ts.map +1 -0
  449. package/dist/utils/identifiers.d.ts +121 -0
  450. package/dist/utils/identifiers.d.ts.map +1 -0
  451. package/dist/utils/index.d.ts +9 -0
  452. package/dist/utils/index.d.ts.map +1 -0
  453. package/dist/utils/insights-manager.d.ts +39 -0
  454. package/dist/utils/insights-manager.d.ts.map +1 -0
  455. package/dist/utils/logger/error-codes.d.ts +48 -0
  456. package/dist/utils/logger/error-codes.d.ts.map +1 -0
  457. package/dist/utils/logger/index.d.ts +22 -0
  458. package/dist/utils/logger/index.d.ts.map +1 -0
  459. package/dist/utils/logger/logger.d.ts +94 -0
  460. package/dist/utils/logger/logger.d.ts.map +1 -0
  461. package/dist/utils/logger/module-logger.d.ts +28 -0
  462. package/dist/utils/logger/module-logger.d.ts.map +1 -0
  463. package/dist/utils/logger/types.d.ts +36 -0
  464. package/dist/utils/logger/types.d.ts.map +1 -0
  465. package/dist/utils/progress-utils.d.ts +54 -0
  466. package/dist/utils/progress-utils.d.ts.map +1 -0
  467. package/dist/utils/redaction.d.ts +4 -0
  468. package/dist/utils/redaction.d.ts.map +1 -0
  469. package/dist/utils/resource-annotations.d.ts +36 -0
  470. package/dist/utils/resource-annotations.d.ts.map +1 -0
  471. package/dist/utils/validate-json-path.d.ts +43 -0
  472. package/dist/utils/validate-json-path.d.ts.map +1 -0
  473. package/dist/utils/validate-path.d.ts +37 -0
  474. package/dist/utils/validate-path.d.ts.map +1 -0
  475. package/dist/utils/where-clause.d.ts +42 -0
  476. package/dist/utils/where-clause.d.ts.map +1 -0
  477. package/dist/version.d.ts +10 -0
  478. package/dist/version.d.ts.map +1 -0
  479. package/package.json +33 -20
  480. package/.gitattributes +0 -2
  481. package/dist/chunk-4IA3DB5C.js +0 -135
  482. package/dist/chunk-FW7UCRLN.js +0 -82
  483. package/dist/chunk-RHVEZ42P.js +0 -873
  484. package/dist/chunk-Z2GFQU3G.js +0 -363
  485. package/dist/worker-script.d.ts +0 -2
  486. package/dist/worker-script.js +0 -126
  487. package/playwright.config.ts +0 -101
  488. package/scripts/generate-server-instructions.ts +0 -111
  489. package/server.json +0 -52
  490. package/test-server/README.md +0 -118
  491. package/test-server/code-map.md +0 -409
  492. package/test-server/fixtures/sample.csv +0 -6
  493. package/test-server/reset-database.ps1 +0 -373
  494. package/test-server/sample.csv +0 -11
  495. package/test-server/test-agent-experience.md +0 -243
  496. package/test-server/test-database.sql +0 -388
  497. package/test-server/test-group-tools.md +0 -861
  498. package/test-server/test-help-resources.mjs +0 -238
  499. package/test-server/test-preflight.md +0 -53
  500. package/test-server/test-prompts.md +0 -354
  501. package/test-server/test-resources.md +0 -245
  502. package/test-server/test-tool-annotations.mjs +0 -157
  503. package/test-server/test-tools-advanced-1.md +0 -517
  504. package/test-server/test-tools-advanced-2.md +0 -487
  505. package/test-server/test-tools-codemode.md +0 -629
  506. package/test-server/test-tools.md +0 -176
  507. package/test-server/tool-reference.md +0 -236
  508. package/tsconfig.test.json +0 -9
package/README.md CHANGED
@@ -1,20 +1,21 @@
1
1
  # db-mcp (SQLite MCP Server)
2
2
 
3
- **SQLite MCP Server** with 139 specialized tools, 8 data resources + 9 help resources, and 10 prompts, 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.
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
  [![GitHub](https://img.shields.io/badge/GitHub-neverinfamous/db--mcp-blue?logo=github)](https://github.com/neverinfamous/db-mcp)
6
- [![GitHub Release](https://img.shields.io/github/v/release/neverinfamous/db-mcp)](https://github.com/neverinfamous/db-mcp/releases/latest)
8
+ ![GitHub Release](https://img.shields.io/github/v/release/neverinfamous/db-mcp)
7
9
  [![npm](https://img.shields.io/npm/v/db-mcp)](https://www.npmjs.com/package/db-mcp)
8
10
  [![Docker Pulls](https://img.shields.io/docker/pulls/writenotenow/db-mcp)](https://hub.docker.com/r/writenotenow/db-mcp)
9
11
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
10
12
  ![Status](https://img.shields.io/badge/status-Production%2FStable-brightgreen)
11
- [![MCP Registry](https://img.shields.io/badge/MCP_Registry-Published-green)](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.neverinfamous/db-mcp)
13
+ [![MCP](https://img.shields.io/badge/MCP-Registry-green.svg)](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.neverinfamous/db-mcp)
12
14
  [![Security](https://img.shields.io/badge/Security-Enhanced-green.svg)](SECURITY.md)
13
15
  [![TypeScript](https://img.shields.io/badge/TypeScript-Strict-blue.svg)](https://github.com/neverinfamous/db-mcp)
14
16
  [![E2E](https://github.com/neverinfamous/db-mcp/actions/workflows/e2e.yml/badge.svg)](https://github.com/neverinfamous/db-mcp/actions/workflows/e2e.yml)
15
- ![Tests](https://img.shields.io/badge/Tests-1911%20passed-brightgreen)
16
- ![E2E Tests](https://img.shields.io/badge/E2E-1136%20passed-brightgreen)
17
- ![Coverage](https://img.shields.io/badge/Coverage-90%25-brightgreen)
17
+ [![Tests](https://img.shields.io/badge/Tests-1911%20passed-brightgreen.svg)](https://github.com/neverinfamous/db-mcp)
18
+ [![Coverage](https://img.shields.io/badge/Coverage-87.53%25-green.svg)](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
- | **139 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 |
28
- | **17 Resources** | 8 data resources (schema, tables, indexes, views, health, metadata, insights) + 9 help resources (`sqlite://help` + per-group reference) — filtered by `--tool-filter` |
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 fast, secure JavaScript sandbox. Instead of spending thousands of tokens on back-and-forth tool calls, Code Mode exposes all 139 capabilities locally, reducing token overhead by up to 90% and supercharging AI agent reasoning |
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. Large datasets include metadata so agents always know the full picture |
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
- | **Performance** | **⚠️ WASM Caution:** Synchronous execution blocks Node Event Loop on heavy workloads. **🚀 Native:** High-performance concurrent execution. |
34
- | **OAuth 2.1 + Access Control** | Enterprise-ready security with RFC 9728/8414 compliance, granular scopes (`read`, `write`, `admin`, `db:*`, `table:*:*`), and Keycloak integration |
35
- | **Smart Tool Filtering** | 9 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, input validation, sandboxed code execution, HTTP body size enforcement, 7 security headers, server timeouts (slowloris protection), Retry-After rate limiting, `trustProxy` for reverse proxy deployments, opt-in HSTS, non-root Docker execution, 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, 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
- # WASM backend (sql.js) - Cross-platform, no compilation required
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 (139 tools, transactions, window functions, SpatiaLite). Use `--sqlite` for WASM mode (115 tools, no native dependencies).
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
- ## 🎛️ Tool Filtering
126
+ ## Code Mode: Maximum Efficiency
125
127
 
126
- > [!IMPORTANT]
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
- ### Quick Start: Recommended Configurations
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
- #### Recommended: Code Mode (Maximum Token Savings)
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
- Code Mode (`sqlite_execute_code`) provides access to all 139 tools' worth of capability through a single, secure JavaScript sandbox. Instead of spending thousands of tokens on back-and-forth tool calls, Code Mode exposes all capabilities locally — reducing token overhead by up to 90%.
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
- "C:/path/to/db-mcp/dist/cli.js",
151
+ "/path/to/db-mcp/dist/cli.js",
142
152
  "--transport",
143
153
  "stdio",
144
154
  "--sqlite-native",
145
- "C:/path/to/database.db",
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 9 tool groups, and returning exactly the data it needs — in one execution.
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 (50 tools)
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 (4), window functions (6), transactions (7), and SpatiaLite (7) not available in WASM.
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` | **46** | **50** | +3 | Core, JSON, Text |
183
- | `analytics` | 46 | 52 | +3 | Core, JSON, Stats |
184
- | `search` | 34 | 38 | +3 | Core, Text, Vector |
185
- | `spatial` | 25 | 32 | +3 | Core, Geo, Vector |
186
- | `dev-schema` | 25 | 25 | +3 | Core, Introspection, Migration |
187
- | `minimal` | 10 | 10 | +3 | Core only |
188
- | `full` | 115 | 139 | +3 | Everything enabled |
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:** +3 built-in tools (server_info, server_health, list_adapters) and +1 code mode are always included.
193
-
194
- | Group | WASM | Native | + Built-in | Description |
195
- | --------------- | ---- | ------ | ---------- | -------------------------------------------- |
196
- | `codemode` | 1 | 1 | +3 | Code Mode (sandboxed code execution) 🌟 |
197
- | `core` | 10 | 10 | +3 | Basic CRUD, schema, tables |
198
- | `json` | 24 | 24 | +3 | JSON/JSONB operations, analysis |
199
- | `text` | 14 | 18 | +3 | Text processing + FTS5 + advanced search |
200
- | `stats` | 14 | 20 | +3 | Statistical analysis (+ window funcs) |
201
- | `vector` | 12 | 12 | +3 | Embeddings, similarity search |
202
- | `admin` | 27 | 34 | +3 | Backup, restore, virtual tables, pragma |
203
- | `geo` | 5 | 12 | +3 | Geospatial + SpatiaLite (Native only) |
204
- | `introspection` | 10 | 10 | +3 | FK graph, cascade sim, storage/index audit |
205
- | `migration` | 7 | 7 | +3 | Migration tracking, apply, rollback (opt-in) |
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
- # Mix tools from different groups
256
+ ```bash
228
257
  --tool-filter "read_query,fuzzy_search,vector_search"
258
+ ```
229
259
 
230
- # Combine with a shortcut or group
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
- ## SQLite Extensions
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
- # Download precompiled binary or compile from SQLite source:
277
- # https://www.sqlite.org/csv.html
318
+ export CSV_EXTENSION_PATH=/path/to/csv.dll
319
+ ```
278
320
 
279
- # Set environment variable:
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
- # Or use CLI flag:
323
+ ```bash
284
324
  db-mcp --sqlite-native ./data.db --csv
285
325
  ```
286
326
 
287
327
  **SpatiaLite Extension:**
288
328
 
289
- ```bash
290
- # Linux (apt):
291
- sudo apt install libspatialite-dev
329
+ Install the library for your platform:
292
330
 
293
- # macOS (Homebrew):
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
- # Windows: Download from https://www.gaia-gis.it/gaia-sins/
335
+ Set the environment variable:
297
336
 
298
- # Set environment variable:
337
+ ```bash
299
338
  export SPATIALITE_PATH=/path/to/mod_spatialite.so
339
+ ```
340
+
341
+ Or use the CLI flag:
300
342
 
301
- # Or use CLI flag:
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 (8)
351
+ ### Data Resources (11)
310
352
 
311
353
  MCP resources provide read-only access to database metadata:
312
354
 
313
- | Resource | URI | Description | Min Config |
314
- | --------------------- | ----------------------------------- | --------------------------------- | ------------- |
315
- | `sqlite_schema` | `sqlite://schema` | Full database schema | `minimal` |
316
- | `sqlite_tables` | `sqlite://tables` | List all tables | `minimal` |
317
- | `sqlite_table_schema` | `sqlite://table/{tableName}/schema` | Schema for a specific table | `minimal` |
318
- | `sqlite_indexes` | `sqlite://indexes` | All indexes in the database | `minimal` |
319
- | `sqlite_views` | `sqlite://views` | All views in the database | `core,admin` |
320
- | `sqlite_health` | `sqlite://health` | Database health and status | _(read-only)_ |
321
- | `sqlite_meta` | `sqlite://meta` | Database metadata and PRAGMAs | `core,admin` |
322
- | `sqlite_insights` | `memo://insights` | Business insights memo (analysis) | `core,admin` |
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, transactions, backup, virtual tables reference | When admin group on |
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 | Default | Description |
364
- | ----------------------- | --------- | -------------------------------------------------------------- |
365
- | `MCP_HOST` | `0.0.0.0` | Host/IP to bind to (CLI: `--server-host`) |
366
- | `SQLITE_DATABASE` | — | SQLite database path (CLI: `--sqlite` / `--sqlite-native`) |
367
- | `DB_MCP_TOOL_FILTER` | — | Tool filter string (CLI: `--tool-filter`) |
368
- | `MCP_AUTH_TOKEN` | — | Simple bearer token for HTTP auth (CLI: `--auth-token`) |
369
- | `OAUTH_ENABLED` | `false` | Enable OAuth 2.1 (CLI: `--oauth-enabled`) |
370
- | `OAUTH_ISSUER` | — | Authorization server URL (CLI: `--oauth-issuer`) |
371
- | `OAUTH_AUDIENCE` | — | Expected token audience (CLI: `--oauth-audience`) |
372
- | `OAUTH_JWKS_URI` | — | JWKS URI, auto-discovered if omitted (CLI: `--oauth-jwks-uri`) |
373
- | `OAUTH_CLOCK_TOLERANCE` | `60` | Clock tolerance in seconds (CLI: `--oauth-clock-tolerance`) |
374
- | `LOG_LEVEL` | `info` | Log verbosity: `debug`, `info`, `warning`, `error` |
375
- | `METADATA_CACHE_TTL_MS` | `5000` | Schema cache TTL in ms (auto-invalidated on DDL operations) |
376
- | `CODEMODE_ISOLATION` | `worker` | Code Mode sandbox: `worker` (enhanced isolation) or `vm` |
377
- | `MCP_RATE_LIMIT_MAX` | `100` | Max requests/minute per IP (HTTP transport) |
378
- | `CSV_EXTENSION_PATH` | | Custom path to CSV extension binary (native only) |
379
- | `SPATIALITE_PATH` | — | Custom path to SpatiaLite extension binary (native only) |
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
- ### HTTP/SSE Transport (Remote Access)
490
+ ## 🌐 HTTP/SSE Transport (Remote Access)
435
491
 
436
- For remote access, web-based clients, or MCP Inspector testing, run the server in HTTP mode:
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 --transport http --port 3000 --server-host 0.0.0.0 --sqlite-native ./database.db
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
- **Endpoints:**
511
+ The server supports **two MCP transport protocols simultaneously**, enabling both modern and legacy clients to connect:
443
512
 
444
- | Endpoint | Description | Mode |
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
- **Session Management:** The server uses stateful sessions by default. Include the `mcp-session-id` header (returned from initialization) in subsequent requests for session continuity.
515
+ Modern protocol (MCP 2025-03-26) single endpoint, session-based:
455
516
 
456
- **Security Features:**
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
- - **7 Security Headers** `X-Content-Type-Options`, `X-Frame-Options`, `Content-Security-Policy`, `Cache-Control`, `Referrer-Policy` (no-referrer), `Permissions-Policy` + opt-in `Strict-Transport-Security` via `enableHSTS`
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
- #### Stateless Mode (Serverless)
525
+ ### Stateless Mode
468
526
 
469
- For serverless deployments (AWS Lambda, Cloudflare Workers, Vercel), use stateless mode:
527
+ For serverless/stateless deployments where sessions are not needed:
470
528
 
471
529
  ```bash
472
- node dist/cli.js --transport http --port 3000 --server-host 0.0.0.0 --stateless --sqlite-native :memory:
530
+ node dist/cli.js --transport http --port 3000 --stateless --sqlite-native ./database.db
473
531
  ```
474
532
 
475
- | Mode | Progress Notifications | Legacy SSE | Serverless |
476
- | ------------------------- | ---------------------- | ---------- | ---------- |
477
- | Stateful (default) | ✅ Yes | ✅ Yes | ⚠️ Complex |
478
- | Stateless (`--stateless`) | ❌ No | ❌ No | ✅ Native |
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
- # Environment variable
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 --transport http --port 3000 \
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
- #### Keycloak Integration
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
- See [docs/KEYCLOAK_SETUP.md](docs/KEYCLOAK_SETUP.md) for setting up Keycloak as your OAuth provider.
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
- > **Priority:** When both `--auth-token` and `--oauth-enabled` are set, OAuth 2.1 takes precedence. If neither is configured, the server warns and runs without authentication.
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:** ~11M ops/sec — Map-based lookup is effectively zero-cost
544
- - **Auth scope checks:** 79M ops/sec — OAuth middleware adds no measurable latency
545
- - **Identifier validation:** 6.4M ops/sec — SQL sanitization is near-instant
546
- - **Schema cache hits:** 4.3M ops/sec — metadata lookups avoid redundant queries
547
- - **Debug log (filtered):** 9.5M ops/sec — disabled log levels are true no-ops (50× faster than actual writes)
548
- - **Code Mode security:** 1.2M validations/sec for typical code, blocked patterns rejected in <1 µs
620
+ - **Tool dispatch:** 11–14M ops/sec — Map-based lookup is effectively zero-cost
621
+ - **Auth scope checks:** 68M 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