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.
- package/.gitleaks.toml +9 -0
- package/.trivyignore +8 -0
- package/README.md +193 -120
- package/dist/{chunk-TVIZ3XJH.js → chunk-5Y42NPBP.js} +4168 -2411
- package/dist/{chunk-AOUL5SHS.js → chunk-645ZEFLA.js} +70 -20
- package/dist/chunk-OKOVZ5QE.js +28 -0
- package/dist/chunk-SFJQCNG7.js +131 -0
- package/dist/{chunk-FW7UCRLN.js → chunk-VIDSICEL.js} +3 -0
- package/dist/chunk-WBER5YY4.js +2053 -0
- package/dist/{chunk-4IA3DB5C.js → chunk-X3MUUOWM.js} +19 -2
- package/dist/{chunk-Z2GFQU3G.js → chunk-Z7C2TM4L.js} +114 -21
- package/dist/cli.js +79 -5
- package/dist/{http-VSB7DBJR.js → http-6KF4ULDI.js} +199 -77
- package/dist/index.d.ts +231 -8
- package/dist/index.js +6 -5
- package/dist/{sqlite-26V3Y4MK.js → sqlite-U5KSYQXK.js} +62 -138
- package/dist/{sqlite-native-5O7FZJGB.js → sqlite-native-JXMCFQBA.js} +575 -113
- package/dist/worker-script.js +34 -10
- package/logs/.gitkeep +1 -0
- package/mcp-config-example.json +83 -0
- package/package.json +9 -8
- package/playwright.config.ts +1 -1
- package/scripts/update-badges.ts +99 -0
- package/server.json +7 -5
- package/test-server/README.md +20 -23
- package/test-server/code-map.md +45 -33
- package/test-server/reset-database.ps1 +59 -17
- package/test-server/scripts/README.md +27 -0
- package/test-server/{test-help-resources.mjs → scripts/test-help-resources.mjs} +12 -5
- package/test-server/scripts/test-prompts.mjs +251 -0
- package/test-server/{test-tool-annotations.mjs → scripts/test-tool-annotations.mjs} +9 -4
- package/test-server/test-advanced/README.md +70 -0
- package/test-server/test-advanced/test-codemode-advanced-admin.md +174 -0
- package/test-server/test-advanced/test-codemode-advanced-core.md +193 -0
- package/test-server/test-advanced/test-codemode-advanced-geo.md +157 -0
- package/test-server/test-advanced/test-codemode-advanced-introspection.md +171 -0
- package/test-server/test-advanced/test-codemode-advanced-json.md +169 -0
- package/test-server/test-advanced/test-codemode-advanced-migration.md +160 -0
- package/test-server/test-advanced/test-codemode-advanced-stats.md +185 -0
- package/test-server/test-advanced/test-codemode-advanced-text.md +183 -0
- package/test-server/test-advanced/test-codemode-advanced-transactions.md +136 -0
- package/test-server/test-advanced/test-codemode-advanced-vector.md +141 -0
- package/test-server/test-codemode/README.md +121 -0
- package/test-server/test-codemode/test-codemode-admin.md +223 -0
- package/test-server/test-codemode/test-codemode-core.md +286 -0
- package/test-server/test-codemode/test-codemode-geo.md +177 -0
- package/test-server/test-codemode/test-codemode-introspection.md +190 -0
- package/test-server/test-codemode/test-codemode-json.md +237 -0
- package/test-server/test-codemode/test-codemode-migration.md +278 -0
- package/test-server/test-codemode/test-codemode-sandbox.md +413 -0
- package/test-server/test-codemode/test-codemode-stats.md +232 -0
- package/test-server/test-codemode/test-codemode-text.md +237 -0
- package/test-server/test-codemode/test-codemode-transactions.md +236 -0
- package/test-server/test-codemode/test-codemode-vector.md +244 -0
- package/test-server/test-codemode/test-codemode-wasm-degradation.md +394 -0
- package/test-server/test-database.sql +37 -1
- package/test-server/test-resources.md +43 -16
- package/test-server/test-tool-groups/README.md +100 -0
- package/test-server/test-tool-groups/test-admin-core.md +165 -0
- package/test-server/test-tool-groups/test-admin-extensions.md +133 -0
- package/test-server/{test-tools.md → test-tool-groups/test-core-data.md} +103 -17
- package/test-server/test-tool-groups/test-core-schema.md +240 -0
- package/test-server/test-tool-groups/test-geo-haversine.md +130 -0
- package/test-server/test-tool-groups/test-geo-spatialite.md +110 -0
- package/test-server/test-tool-groups/test-introspection-diagnostics.md +123 -0
- package/test-server/test-tool-groups/test-introspection-schema.md +133 -0
- package/test-server/test-tool-groups/test-json-read.md +219 -0
- package/test-server/test-tool-groups/test-json-write.md +157 -0
- package/test-server/test-tool-groups/test-migration.md +193 -0
- package/test-server/test-tool-groups/test-stats-advanced.md +118 -0
- package/test-server/test-tool-groups/test-stats-basic.md +156 -0
- package/test-server/test-tool-groups/test-text-advanced.md +169 -0
- package/test-server/test-tool-groups/test-text-basic.md +177 -0
- package/test-server/test-tool-groups/test-transactions.md +179 -0
- package/test-server/test-tool-groups/test-vector-read.md +130 -0
- package/test-server/test-tool-groups/test-vector-write.md +115 -0
- package/test-server/tool-reference.md +79 -58
- package/tsconfig.build.json +6 -0
- package/dist/chunk-RHVEZ42P.js +0 -873
- package/test-server/test-agent-experience.md +0 -243
- package/test-server/test-group-tools.md +0 -861
- 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
|
@@ -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
|
|
2
|
-
export { getCoreTools } from './chunk-
|
|
3
|
-
import { DatabaseAdapter } from './chunk-
|
|
4
|
-
import { getToolGroupIcon, VERSION } from './chunk-
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
},
|
|
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
|
-
|
|
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
|
-
|
|
128
|
+
log.info(`Saved database to: ${config.filePath}`, {
|
|
239
129
|
code: "SQLITE_DISCONNECT"
|
|
240
130
|
});
|
|
241
131
|
} catch {
|
|
242
|
-
|
|
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
|
-
|
|
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
|
*/
|