db-mcp 1.1.1 → 2.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 (84) hide show
  1. package/.gitleaks.toml +9 -0
  2. package/.trivyignore +8 -0
  3. package/README.md +193 -120
  4. package/dist/{chunk-TVIZ3XJH.js → chunk-5Y42NPBP.js} +4168 -2411
  5. package/dist/{chunk-AOUL5SHS.js → chunk-645ZEFLA.js} +70 -20
  6. package/dist/chunk-OKOVZ5QE.js +28 -0
  7. package/dist/chunk-SFJQCNG7.js +131 -0
  8. package/dist/{chunk-FW7UCRLN.js → chunk-VIDSICEL.js} +3 -0
  9. package/dist/chunk-WBER5YY4.js +2053 -0
  10. package/dist/{chunk-4IA3DB5C.js → chunk-X3MUUOWM.js} +19 -2
  11. package/dist/{chunk-Z2GFQU3G.js → chunk-Z7C2TM4L.js} +114 -21
  12. package/dist/cli.js +79 -5
  13. package/dist/{http-VSB7DBJR.js → http-6KF4ULDI.js} +199 -77
  14. package/dist/index.d.ts +231 -8
  15. package/dist/index.js +6 -5
  16. package/dist/{sqlite-26V3Y4MK.js → sqlite-U5KSYQXK.js} +62 -138
  17. package/dist/{sqlite-native-5O7FZJGB.js → sqlite-native-JXMCFQBA.js} +575 -113
  18. package/dist/worker-script.js +34 -10
  19. package/logs/.gitkeep +1 -0
  20. package/mcp-config-example.json +83 -0
  21. package/package.json +9 -8
  22. package/playwright.config.ts +1 -1
  23. package/scripts/update-badges.ts +99 -0
  24. package/server.json +7 -5
  25. package/test-server/README.md +20 -23
  26. package/test-server/code-map.md +45 -33
  27. package/test-server/reset-database.ps1 +59 -17
  28. package/test-server/scripts/README.md +27 -0
  29. package/test-server/{test-help-resources.mjs → scripts/test-help-resources.mjs} +12 -5
  30. package/test-server/scripts/test-prompts.mjs +251 -0
  31. package/test-server/{test-tool-annotations.mjs → scripts/test-tool-annotations.mjs} +9 -4
  32. package/test-server/test-advanced/README.md +70 -0
  33. package/test-server/test-advanced/test-codemode-advanced-admin.md +174 -0
  34. package/test-server/test-advanced/test-codemode-advanced-core.md +193 -0
  35. package/test-server/test-advanced/test-codemode-advanced-geo.md +157 -0
  36. package/test-server/test-advanced/test-codemode-advanced-introspection.md +171 -0
  37. package/test-server/test-advanced/test-codemode-advanced-json.md +169 -0
  38. package/test-server/test-advanced/test-codemode-advanced-migration.md +160 -0
  39. package/test-server/test-advanced/test-codemode-advanced-stats.md +185 -0
  40. package/test-server/test-advanced/test-codemode-advanced-text.md +183 -0
  41. package/test-server/test-advanced/test-codemode-advanced-transactions.md +136 -0
  42. package/test-server/test-advanced/test-codemode-advanced-vector.md +141 -0
  43. package/test-server/test-codemode/README.md +121 -0
  44. package/test-server/test-codemode/test-codemode-admin.md +223 -0
  45. package/test-server/test-codemode/test-codemode-core.md +286 -0
  46. package/test-server/test-codemode/test-codemode-geo.md +177 -0
  47. package/test-server/test-codemode/test-codemode-introspection.md +190 -0
  48. package/test-server/test-codemode/test-codemode-json.md +237 -0
  49. package/test-server/test-codemode/test-codemode-migration.md +278 -0
  50. package/test-server/test-codemode/test-codemode-sandbox.md +413 -0
  51. package/test-server/test-codemode/test-codemode-stats.md +232 -0
  52. package/test-server/test-codemode/test-codemode-text.md +237 -0
  53. package/test-server/test-codemode/test-codemode-transactions.md +236 -0
  54. package/test-server/test-codemode/test-codemode-vector.md +244 -0
  55. package/test-server/test-codemode/test-codemode-wasm-degradation.md +394 -0
  56. package/test-server/test-database.sql +37 -1
  57. package/test-server/test-resources.md +43 -16
  58. package/test-server/test-tool-groups/README.md +100 -0
  59. package/test-server/test-tool-groups/test-admin-core.md +165 -0
  60. package/test-server/test-tool-groups/test-admin-extensions.md +133 -0
  61. package/test-server/{test-tools.md → test-tool-groups/test-core-data.md} +103 -17
  62. package/test-server/test-tool-groups/test-core-schema.md +240 -0
  63. package/test-server/test-tool-groups/test-geo-haversine.md +130 -0
  64. package/test-server/test-tool-groups/test-geo-spatialite.md +110 -0
  65. package/test-server/test-tool-groups/test-introspection-diagnostics.md +123 -0
  66. package/test-server/test-tool-groups/test-introspection-schema.md +133 -0
  67. package/test-server/test-tool-groups/test-json-read.md +219 -0
  68. package/test-server/test-tool-groups/test-json-write.md +157 -0
  69. package/test-server/test-tool-groups/test-migration.md +193 -0
  70. package/test-server/test-tool-groups/test-stats-advanced.md +118 -0
  71. package/test-server/test-tool-groups/test-stats-basic.md +156 -0
  72. package/test-server/test-tool-groups/test-text-advanced.md +169 -0
  73. package/test-server/test-tool-groups/test-text-basic.md +177 -0
  74. package/test-server/test-tool-groups/test-transactions.md +179 -0
  75. package/test-server/test-tool-groups/test-vector-read.md +130 -0
  76. package/test-server/test-tool-groups/test-vector-write.md +115 -0
  77. package/test-server/tool-reference.md +79 -58
  78. package/tsconfig.build.json +6 -0
  79. package/dist/chunk-RHVEZ42P.js +0 -873
  80. package/test-server/test-agent-experience.md +0 -243
  81. package/test-server/test-group-tools.md +0 -861
  82. package/test-server/test-tools-advanced-1.md +0 -517
  83. package/test-server/test-tools-advanced-2.md +0 -487
  84. package/test-server/test-tools-codemode.md +0 -629
@@ -1,9 +1,10 @@
1
- import { getCoreTools, getJsonHelperTools, getJsonOperationTools, getTextTools, getStatsTools, getVirtualTools, getVectorTools, getGeoTools, getAdminTools, getIntrospectionTools, getMigrationTools, getCodeModeTools, isDDL, getResourceDefinitions, getPromptDefinitions, applyCommonPragmas, autoEnableWal, detectAndSetJsonbSupport, SchemaManager, normalizeSqliteParams } from './chunk-TVIZ3XJH.js';
2
- export { getCoreTools } from './chunk-TVIZ3XJH.js';
3
- import { DatabaseAdapter } from './chunk-Z2GFQU3G.js';
4
- import { getToolGroupIcon, VERSION } from './chunk-FW7UCRLN.js';
5
- import { ConnectionError, ConfigurationError, QueryError } from './chunk-4IA3DB5C.js';
6
- import { createModuleLogger, ERROR_CODES, DbMcpError } from './chunk-AOUL5SHS.js';
1
+ import { getCoreTools, getJsonHelperTools, getJsonOperationTools, getTextTools, getStatsTools, getVirtualTools, getVectorTools, getGeoTools, getAdminTools, getIntrospectionTools, getMigrationTools, getCodeModeTools, executeRead, executeWrite, isDDL, executeGeneral, getResourceDefinitions, getPromptDefinitions, applyCommonPragmas, autoEnableWal, detectAndSetJsonbSupport, SchemaManager } from './chunk-5Y42NPBP.js';
2
+ export { getCoreTools } from './chunk-5Y42NPBP.js';
3
+ import { DatabaseAdapter } from './chunk-Z7C2TM4L.js';
4
+ import { getToolGroupIcon, VERSION } from './chunk-VIDSICEL.js';
5
+ import './chunk-OKOVZ5QE.js';
6
+ import { ConnectionError, ConfigurationError } from './chunk-X3MUUOWM.js';
7
+ import { createModuleLogger, ERROR_CODES, DbMcpError } from './chunk-645ZEFLA.js';
7
8
  import initSqlJs from 'sql.js';
8
9
 
9
10
  // src/adapters/sqlite/tools/index.ts
@@ -35,129 +36,7 @@ function getAllToolDefinitions(adapter) {
35
36
  function getToolsByGroup(adapter, group) {
36
37
  return getAllToolDefinitions(adapter).filter((tool) => tool.group === group);
37
38
  }
38
-
39
- // src/adapters/sqlite/query-executor.ts
40
39
  var log = createModuleLogger("SQLITE");
41
- function rowsFromSqlJsResult(result) {
42
- const numColumns = result.columns.length;
43
- const numRows = result.values.length;
44
- const rows = new Array(numRows);
45
- const cols = result.columns;
46
- for (let i = 0; i < numRows; i++) {
47
- const rowObj = {};
48
- const rowValues = result.values[i];
49
- if (rowValues) {
50
- for (let j = 0; j < numColumns; j++) {
51
- rowObj[cols[j]] = rowValues[j];
52
- }
53
- }
54
- rows[i] = rowObj;
55
- }
56
- return rows;
57
- }
58
- function executeRead(db, sql, params) {
59
- const start = Date.now();
60
- try {
61
- const normalizedParams = normalizeSqliteParams(params);
62
- const results = normalizedParams ? db.exec(sql, normalizedParams) : db.exec(sql);
63
- if (results.length === 0) {
64
- return Promise.resolve({
65
- rows: [],
66
- executionTimeMs: Date.now() - start
67
- });
68
- }
69
- const firstResult = results[0];
70
- if (!firstResult) {
71
- return Promise.resolve({
72
- rows: [],
73
- executionTimeMs: Date.now() - start
74
- });
75
- }
76
- const columns = firstResult.columns.map((name) => ({
77
- name,
78
- type: "unknown"
79
- }));
80
- const rows = rowsFromSqlJsResult(firstResult);
81
- return Promise.resolve({
82
- rows,
83
- columns,
84
- executionTimeMs: Date.now() - start
85
- });
86
- } catch (error) {
87
- const message = error instanceof Error ? error.message : String(error);
88
- log.error(`Query failed: ${message}`, {
89
- code: ERROR_CODES.DB.QUERY_FAILED.full
90
- });
91
- throw new QueryError(
92
- `Query execution failed: ${message}`,
93
- "DB_QUERY_FAILED",
94
- {
95
- sql,
96
- cause: error instanceof Error ? error : void 0
97
- }
98
- );
99
- }
100
- }
101
- function executeWrite(db, sql, params) {
102
- const start = Date.now();
103
- try {
104
- const normalizedParams = normalizeSqliteParams(params);
105
- if (normalizedParams) {
106
- db.run(sql, normalizedParams);
107
- } else {
108
- db.run(sql);
109
- }
110
- const changes = db.getRowsModified();
111
- return Promise.resolve({
112
- rowsAffected: changes,
113
- executionTimeMs: Date.now() - start
114
- });
115
- } catch (error) {
116
- const message = error instanceof Error ? error.message : String(error);
117
- log.error(`Write query failed: ${message}`, {
118
- code: ERROR_CODES.DB.QUERY_FAILED.full
119
- });
120
- throw new QueryError(`Write query failed: ${message}`, "DB_WRITE_FAILED", {
121
- sql,
122
- cause: error instanceof Error ? error : void 0
123
- });
124
- }
125
- }
126
- function executeGeneral(db, sql, params) {
127
- const start = Date.now();
128
- try {
129
- const normalizedParams = normalizeSqliteParams(params);
130
- const results = normalizedParams ? db.exec(sql, normalizedParams) : db.exec(sql);
131
- if (results.length === 0) {
132
- return Promise.resolve({
133
- rowsAffected: db.getRowsModified(),
134
- executionTimeMs: Date.now() - start
135
- });
136
- }
137
- const firstResult = results[0];
138
- if (!firstResult) {
139
- return Promise.resolve({
140
- rowsAffected: db.getRowsModified(),
141
- executionTimeMs: Date.now() - start
142
- });
143
- }
144
- const rows = rowsFromSqlJsResult(firstResult);
145
- return Promise.resolve({
146
- rows,
147
- executionTimeMs: Date.now() - start
148
- });
149
- } catch (error) {
150
- const message = error instanceof Error ? error.message : String(error);
151
- log.error(`Query failed: ${message}`, {
152
- code: ERROR_CODES.DB.QUERY_FAILED.full
153
- });
154
- throw new QueryError(`Query failed: ${message}`, "DB_QUERY_FAILED", {
155
- sql,
156
- cause: error instanceof Error ? error : void 0
157
- });
158
- }
159
- }
160
- var log2 = createModuleLogger("SQLITE");
161
40
  async function connectSqliteDatabase(adapter, config) {
162
41
  if (config.type !== "sqlite") {
163
42
  throw new ConfigurationError(
@@ -172,7 +51,7 @@ async function connectSqliteDatabase(adapter, config) {
172
51
  let db;
173
52
  if (filePath === ":memory:") {
174
53
  db = new sqlJsInstance.Database();
175
- log2.info("Connected to in-memory SQLite database", {
54
+ log.info("Connected to in-memory SQLite database", {
176
55
  code: "SQLITE_CONNECT"
177
56
  });
178
57
  } else {
@@ -181,18 +60,18 @@ async function connectSqliteDatabase(adapter, config) {
181
60
  if (fs.existsSync(filePath)) {
182
61
  const buffer = await fs.promises.readFile(filePath);
183
62
  db = new sqlJsInstance.Database(buffer);
184
- log2.info(`Connected to SQLite database: ${filePath}`, {
63
+ log.info(`Connected to SQLite database: ${filePath}`, {
185
64
  code: "SQLITE_CONNECT"
186
65
  });
187
66
  } else {
188
67
  db = new sqlJsInstance.Database();
189
- log2.info(`Created new SQLite database: ${filePath}`, {
68
+ log.info(`Created new SQLite database: ${filePath}`, {
190
69
  code: "SQLITE_CONNECT"
191
70
  });
192
71
  }
193
72
  } catch {
194
73
  db = new sqlJsInstance.Database();
195
- log2.warning("File access unavailable, using in-memory database", {
74
+ log.warning("File access unavailable, using in-memory database", {
196
75
  code: "SQLITE_FALLBACK"
197
76
  });
198
77
  }
@@ -207,17 +86,28 @@ async function connectSqliteDatabase(adapter, config) {
207
86
  { runPragma: (pragma) => db.run(`PRAGMA ${pragma}`) },
208
87
  filePath,
209
88
  sqliteConfig.options,
210
- log2
89
+ log
211
90
  );
212
91
  detectAndSetJsonbSupport(() => {
213
92
  const versionResult = db.exec("SELECT sqlite_version()");
214
93
  return versionResult[0]?.values[0]?.[0] ?? "0.0.0";
215
- }, log2);
94
+ }, log);
95
+ if (sqliteConfig.initializationSql && Array.isArray(sqliteConfig.initializationSql)) {
96
+ for (const sql of sqliteConfig.initializationSql) {
97
+ db.run(sql);
98
+ }
99
+ log.info(
100
+ `Executed ${sqliteConfig.initializationSql.length} initialization SQL statements`,
101
+ {
102
+ code: "SQLITE_INIT_SQL"
103
+ }
104
+ );
105
+ }
216
106
  const schemaManager = new SchemaManager(adapter);
217
107
  return { db, sqlJsInstance, schemaManager };
218
108
  } catch (error) {
219
109
  const message = error instanceof Error ? error.message : String(error);
220
- log2.error(`Failed to connect to SQLite: ${message}`, {
110
+ log.error(`Failed to connect to SQLite: ${message}`, {
221
111
  code: ERROR_CODES.DB.CONNECT_FAILED.full
222
112
  });
223
113
  throw new ConnectionError(
@@ -235,17 +125,17 @@ async function disconnectSqliteDatabase(db, config) {
235
125
  const fs = await import('fs');
236
126
  const data = db.export();
237
127
  await fs.promises.writeFile(config.filePath, Buffer.from(data));
238
- log2.info(`Saved database to: ${config.filePath}`, {
128
+ log.info(`Saved database to: ${config.filePath}`, {
239
129
  code: "SQLITE_DISCONNECT"
240
130
  });
241
131
  } catch {
242
- log2.warning("Could not save database to file", {
132
+ log.warning("Could not save database to file", {
243
133
  code: "SQLITE_SAVE_FAILED"
244
134
  });
245
135
  }
246
136
  }
247
137
  db.close();
248
- log2.info("Disconnected from SQLite database", {
138
+ log.info("Disconnected from SQLite database", {
249
139
  code: "SQLITE_DISCONNECT"
250
140
  });
251
141
  }
@@ -541,6 +431,40 @@ var SqliteAdapter = class extends DatabaseAdapter {
541
431
  getToolDefinitions() {
542
432
  return getAllToolDefinitions(this);
543
433
  }
434
+ /**
435
+ * Get tools filtered by adapter capabilities
436
+ * Used by Code Mode to accurately reflect available runtime features
437
+ */
438
+ getAvailableToolDefinitions() {
439
+ const allTools = this.getToolDefinitions();
440
+ const capabilities = this.getCapabilities();
441
+ return allTools.filter((tool) => {
442
+ if (!capabilities.transactions && tool.group === "transactions") {
443
+ return false;
444
+ }
445
+ if (!capabilities.vector && tool.group === "vector") {
446
+ return false;
447
+ }
448
+ if (!capabilities.geospatial) {
449
+ const spatialiteTools = [
450
+ "sqlite_geo_load_spatialite",
451
+ "sqlite_geo_spatial_table",
452
+ "sqlite_geo_spatial_query",
453
+ "sqlite_geo_spatial_analysis",
454
+ "sqlite_geo_spatial_index",
455
+ "sqlite_geo_transform",
456
+ "sqlite_geo_import"
457
+ ];
458
+ if (spatialiteTools.includes(tool.name)) {
459
+ return false;
460
+ }
461
+ }
462
+ if (!capabilities.fullTextSearch && tool.name.startsWith("sqlite_fts_")) {
463
+ return false;
464
+ }
465
+ return true;
466
+ });
467
+ }
544
468
  /**
545
469
  * Get resource definitions
546
470
  */