@nifrajs/mcp-db 5.2.0 → 5.4.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/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # @nifrajs/mcp-db
2
2
 
3
+ ## 5.4.0
4
+
5
+ ### Patch Changes
6
+
7
+ - @nifrajs/mcp@5.4.0
8
+
9
+ ## 5.3.0
10
+
11
+ ### Patch Changes
12
+
13
+ - 48c9895: A query through a partial SQLite index whose `WHERE` names a masked column is now refused like any other read of that column. Choosing the index proves its predicate for every row it yields, so `SELECT count(*) FROM users WHERE password_hash LIKE 'h%'` could answer the masked predicate through an existing partial index without the bytecode ever reading the column.
14
+ - @nifrajs/mcp@5.3.0
15
+ - 9fbb84e: A query that walks an index on a masked column in key order is refused like any other read of that column. `ORDER BY <masked column>` served by its index never read or compared the column, so it was admitted and returned rows ranked by the masked value.
16
+
17
+ ## 5.2.1
18
+
19
+ ### Patch Changes
20
+
21
+ - @nifrajs/mcp@5.2.1
22
+
3
23
  ## 5.2.0
4
24
 
5
25
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAG1C,OAAO,EAEL,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,MAAM,EACX,KAAK,cAAc,EAKnB,KAAK,gBAAgB,EAGtB,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,MAAM,EACX,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,SAAS,EACT,UAAU,EACV,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,SAAS,EACT,UAAU,EACV,qBAAqB,GACtB,MAAM,sBAAsB,CAAA;AAW7B;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,UAAU,GAAE,SAAS,MAAM,EAAO,GACjC,MAAM,GAAG,SAAS,CAuBpB;AAwCD;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CA8BxE;AAED,kGAAkG;AAClG,wBAAgB,eAAe,CAC7B,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EAC7B,OAAO,GAAE,SAAS,MAAM,EAAO,GAC9B;IAAE,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAE,CAS9E;AAkCD,iEAAiE;AACjE,MAAM,WAAW,kBAAmB,SAAQ,gBAAgB;IAC1D,kEAAkE;IAClE,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACrC;AAuPD;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EAC7B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,kBAAkB,GAC1B,MAAM,GAAG,SAAS,CAYpB;AAED,2FAA2F;AAC3F,wBAAgB,aAAa,CAC3B,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EAC7B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS,GAAG,gBAAgB,CAAC,GAC9D,MAAM,GAAG,SAAS,CAuBpB;AAmBD,4CAA4C;AAC5C,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACpC,wCAAwC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,WAAW,CAAA;CACjC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EAC7B,OAAO,GAAE,mBAAwB,GAChC,cAAc,GAAG,SAAS,CA2F5B"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAG1C,OAAO,EAEL,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,MAAM,EACX,KAAK,cAAc,EAKnB,KAAK,gBAAgB,EAGtB,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,MAAM,EACX,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,SAAS,EACT,UAAU,EACV,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,SAAS,EACT,UAAU,EACV,qBAAqB,GACtB,MAAM,sBAAsB,CAAA;AAW7B;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,UAAU,GAAE,SAAS,MAAM,EAAO,GACjC,MAAM,GAAG,SAAS,CAuBpB;AAwCD;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CA8BxE;AAED,kGAAkG;AAClG,wBAAgB,eAAe,CAC7B,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EAC7B,OAAO,GAAE,SAAS,MAAM,EAAO,GAC9B;IAAE,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAE,CAS9E;AAkCD,iEAAiE;AACjE,MAAM,WAAW,kBAAmB,SAAQ,gBAAgB;IAC1D,kEAAkE;IAClE,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACrC;AA2QD;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EAC7B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,kBAAkB,GAC1B,MAAM,GAAG,SAAS,CAYpB;AAED,2FAA2F;AAC3F,wBAAgB,aAAa,CAC3B,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EAC7B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS,GAAG,gBAAgB,CAAC,GAC9D,MAAM,GAAG,SAAS,CAuBpB;AAmBD,4CAA4C;AAC5C,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACpC,wCAAwC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,WAAW,CAAA;CACjC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EAC7B,OAAO,GAAE,mBAAwB,GAChC,cAAc,GAAG,SAAS,CA2F5B"}
package/dist/engine.js CHANGED
@@ -221,6 +221,9 @@ const KEY_COMPARE_OPCODES = new Set([
221
221
  "IfNoHope",
222
222
  ]);
223
223
  const ROWID_OPCODES = new Set(["Rowid", "SeekRowid", "NotExists", "IdxRowid"]);
224
+ // Each steps a cursor in key order, so the rows it yields are ranked by every key field: an index
225
+ // walked for `ORDER BY <column>` leaks the order of a column it never reads or compares.
226
+ const KEY_ORDER_OPCODES = new Set(["Rewind", "Last", "Next", "Prev"]);
224
227
  /**
225
228
  * The record layout behind a cursor on `entry`, from SQLite's own catalog. A rowid table stores its
226
229
  * non-virtual columns in order, then its virtual ones; a WITHOUT ROWID table and an index store the
@@ -259,13 +262,19 @@ function cursorLayout(db, entry) {
259
262
  ...columns.filter((column) => Number(column.hidden) !== 2),
260
263
  ...columns.filter((column) => Number(column.hidden) === 2),
261
264
  ];
262
- return { table: entry.table, fields: stored.map((column) => [column.name]), keyCount: 0, rowid };
265
+ return {
266
+ table: entry.table,
267
+ fields: stored.map((column) => [column.name]),
268
+ keyCount: 0,
269
+ rowid,
270
+ predicate: [],
271
+ };
263
272
  }
264
273
  // A substring match can only over-count: an expression field then reads one column too many.
265
274
  const source = (entry.sql ?? "").toLowerCase();
266
- const named = columns
267
- .map((column) => column.name)
268
- .filter((name) => source.includes(name.toLowerCase()));
275
+ const namedIn = (text) => columns.map((column) => column.name).filter((name) => text.includes(name.toLowerCase()));
276
+ const named = namedIn(source);
277
+ const where = /\bwhere\b/.exec(source);
269
278
  const xinfo = db
270
279
  .prepare("SELECT cid, name, key FROM pragma_index_xinfo(?) ORDER BY seqno")
271
280
  .all(index);
@@ -280,6 +289,7 @@ function cursorLayout(db, entry) {
280
289
  : named),
281
290
  keyCount: xinfo.filter((field) => Number(field.key) === 1).length,
282
291
  rowid,
292
+ predicate: where === null ? [] : namedIn(source.slice(where.index)),
283
293
  };
284
294
  }
285
295
  /**
@@ -290,7 +300,8 @@ function cursorLayout(db, entry) {
290
300
  * (`pragma_*`, `dbstat`, `json_each`) is never exposed.
291
301
  *
292
302
  * With `masked`, also every masked column a cursor on a table or index yields (`Column`), compares
293
- * (a seek or index range check, so a filter counts) or reads as the rowid. Values the statement
303
+ * (a seek or index range check, so a filter counts), orders by (stepping an index in key order) or
304
+ * reads as the rowid. Values the statement
294
305
  * derives from those reads live in other cursors and registers, so an alias or an expression
295
306
  * cannot hide the column it started from.
296
307
  */
@@ -321,6 +332,12 @@ function bytecodeReads(db, query, masked) {
321
332
  }
322
333
  if (masked === undefined)
323
334
  return { tables: [...reads], masked: [] };
335
+ const hits = new Set();
336
+ const read = (layout, names) => {
337
+ for (const name of names)
338
+ if (masked(name))
339
+ hits.add(`${layout.table}.${name}`);
340
+ };
324
341
  const layouts = new Map();
325
342
  const layoutOf = (cursor) => {
326
343
  const entry = cursors.get(cursor);
@@ -330,15 +347,10 @@ function bytecodeReads(db, query, masked) {
330
347
  if (layout === undefined) {
331
348
  layout = cursorLayout(db, entry);
332
349
  layouts.set(cursor, layout);
350
+ read(layout, layout.predicate);
333
351
  }
334
352
  return layout;
335
353
  };
336
- const hits = new Set();
337
- const read = (layout, names) => {
338
- for (const name of names)
339
- if (masked(name))
340
- hits.add(`${layout.table}.${name}`);
341
- };
342
354
  for (const step of program) {
343
355
  const layout = layoutOf(Number(step.p1));
344
356
  if (layout === undefined)
@@ -351,6 +363,10 @@ function bytecodeReads(db, query, masked) {
351
363
  for (const field of layout.fields.slice(0, compared))
352
364
  read(layout, field);
353
365
  }
366
+ else if (KEY_ORDER_OPCODES.has(step.opcode)) {
367
+ for (const field of layout.fields.slice(0, layout.keyCount))
368
+ read(layout, field);
369
+ }
354
370
  else if (ROWID_OPCODES.has(step.opcode) && layout.rowid !== undefined) {
355
371
  read(layout, [layout.rowid]);
356
372
  }
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nifrajs/mcp-db",
3
- "version": "5.2.0",
3
+ "version": "5.4.0",
4
4
  "description": "Serve a SQLite database as a fail-closed MCP server - allowlisted schema tools by default, opt-in read-only queries with plan verification.",
5
5
  "keywords": [
6
6
  "bun",
@@ -49,7 +49,7 @@
49
49
  "access": "public"
50
50
  },
51
51
  "dependencies": {
52
- "@nifrajs/mcp": "5.2.0"
52
+ "@nifrajs/mcp": "5.4.0"
53
53
  },
54
54
  "repository": {
55
55
  "type": "git",
package/src/engine.ts CHANGED
@@ -300,6 +300,9 @@ const KEY_COMPARE_OPCODES = new Set([
300
300
  "IfNoHope",
301
301
  ])
302
302
  const ROWID_OPCODES = new Set(["Rowid", "SeekRowid", "NotExists", "IdxRowid"])
303
+ // Each steps a cursor in key order, so the rows it yields are ranked by every key field: an index
304
+ // walked for `ORDER BY <column>` leaks the order of a column it never reads or compares.
305
+ const KEY_ORDER_OPCODES = new Set(["Rewind", "Last", "Next", "Prev"])
303
306
 
304
307
  interface BytecodeReads {
305
308
  readonly tables: readonly string[]
@@ -329,6 +332,11 @@ interface CursorLayout {
329
332
  readonly keyCount: number
330
333
  /** The INTEGER PRIMARY KEY column the rowid is, if the table has one. */
331
334
  readonly rowid: string | undefined
335
+ /**
336
+ * The columns a partial index's WHERE names. Every row the index yields satisfies it, so opening
337
+ * the index filters on them as surely as reading them would.
338
+ */
339
+ readonly predicate: readonly string[]
332
340
  }
333
341
 
334
342
  /**
@@ -380,13 +388,20 @@ function cursorLayout(db: Pick<Database, "prepare">, entry: CatalogEntry): Curso
380
388
  ...columns.filter((column) => Number(column.hidden) !== 2),
381
389
  ...columns.filter((column) => Number(column.hidden) === 2),
382
390
  ]
383
- return { table: entry.table, fields: stored.map((column) => [column.name]), keyCount: 0, rowid }
391
+ return {
392
+ table: entry.table,
393
+ fields: stored.map((column) => [column.name]),
394
+ keyCount: 0,
395
+ rowid,
396
+ predicate: [],
397
+ }
384
398
  }
385
399
  // A substring match can only over-count: an expression field then reads one column too many.
386
400
  const source = (entry.sql ?? "").toLowerCase()
387
- const named = columns
388
- .map((column) => column.name)
389
- .filter((name) => source.includes(name.toLowerCase()))
401
+ const namedIn = (text: string): string[] =>
402
+ columns.map((column) => column.name).filter((name) => text.includes(name.toLowerCase()))
403
+ const named = namedIn(source)
404
+ const where = /\bwhere\b/.exec(source)
390
405
  const xinfo = db
391
406
  .prepare<{ cid: number | bigint; name: string | null; key: number | bigint }, [string]>(
392
407
  "SELECT cid, name, key FROM pragma_index_xinfo(?) ORDER BY seqno",
@@ -405,6 +420,7 @@ function cursorLayout(db: Pick<Database, "prepare">, entry: CatalogEntry): Curso
405
420
  ),
406
421
  keyCount: xinfo.filter((field) => Number(field.key) === 1).length,
407
422
  rowid,
423
+ predicate: where === null ? [] : namedIn(source.slice(where.index)),
408
424
  }
409
425
  }
410
426
 
@@ -416,7 +432,8 @@ function cursorLayout(db: Pick<Database, "prepare">, entry: CatalogEntry): Curso
416
432
  * (`pragma_*`, `dbstat`, `json_each`) is never exposed.
417
433
  *
418
434
  * With `masked`, also every masked column a cursor on a table or index yields (`Column`), compares
419
- * (a seek or index range check, so a filter counts) or reads as the rowid. Values the statement
435
+ * (a seek or index range check, so a filter counts), orders by (stepping an index in key order) or
436
+ * reads as the rowid. Values the statement
420
437
  * derives from those reads live in other cursors and registers, so an alias or an expression
421
438
  * cannot hide the column it started from.
422
439
  */
@@ -452,6 +469,10 @@ function bytecodeReads(
452
469
  }
453
470
  if (masked === undefined) return { tables: [...reads], masked: [] }
454
471
 
472
+ const hits = new Set<string>()
473
+ const read = (layout: CursorLayout, names: readonly string[]): void => {
474
+ for (const name of names) if (masked(name)) hits.add(`${layout.table}.${name}`)
475
+ }
455
476
  const layouts = new Map<number, CursorLayout>()
456
477
  const layoutOf = (cursor: number): CursorLayout | undefined => {
457
478
  const entry = cursors.get(cursor)
@@ -460,13 +481,10 @@ function bytecodeReads(
460
481
  if (layout === undefined) {
461
482
  layout = cursorLayout(db, entry)
462
483
  layouts.set(cursor, layout)
484
+ read(layout, layout.predicate)
463
485
  }
464
486
  return layout
465
487
  }
466
- const hits = new Set<string>()
467
- const read = (layout: CursorLayout, names: readonly string[]): void => {
468
- for (const name of names) if (masked(name)) hits.add(`${layout.table}.${name}`)
469
- }
470
488
  for (const step of program) {
471
489
  const layout = layoutOf(Number(step.p1))
472
490
  if (layout === undefined) continue
@@ -475,6 +493,8 @@ function bytecodeReads(
475
493
  const count = Number(step.p4)
476
494
  const compared = Number.isInteger(count) && count > 0 ? count : layout.keyCount
477
495
  for (const field of layout.fields.slice(0, compared)) read(layout, field)
496
+ } else if (KEY_ORDER_OPCODES.has(step.opcode)) {
497
+ for (const field of layout.fields.slice(0, layout.keyCount)) read(layout, field)
478
498
  } else if (ROWID_OPCODES.has(step.opcode) && layout.rowid !== undefined) {
479
499
  read(layout, [layout.rowid])
480
500
  }