db-mcp 4.0.0 → 5.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 (138) hide show
  1. package/README.md +30 -25
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/adapters/database-adapter.d.ts +9 -0
  4. package/dist/adapters/database-adapter.d.ts.map +1 -1
  5. package/dist/adapters/sqlite/query-executor.d.ts.map +1 -1
  6. package/dist/adapters/sqlite/read-write-lock.d.ts +49 -0
  7. package/dist/adapters/sqlite/read-write-lock.d.ts.map +1 -0
  8. package/dist/adapters/sqlite/schemas/admin.d.ts +5 -5
  9. package/dist/adapters/sqlite/schemas/admin.d.ts.map +1 -1
  10. package/dist/adapters/sqlite/schemas/core.d.ts +94 -0
  11. package/dist/adapters/sqlite/schemas/core.d.ts.map +1 -1
  12. package/dist/adapters/sqlite/schemas/introspection.d.ts +8 -7
  13. package/dist/adapters/sqlite/schemas/introspection.d.ts.map +1 -1
  14. package/dist/adapters/sqlite/schemas/migration.d.ts +2 -2
  15. package/dist/adapters/sqlite/schemas/migration.d.ts.map +1 -1
  16. package/dist/adapters/sqlite/sqlite-adapter.d.ts +6 -0
  17. package/dist/adapters/sqlite/sqlite-adapter.d.ts.map +1 -1
  18. package/dist/adapters/sqlite/tools/admin/backup/create.d.ts.map +1 -1
  19. package/dist/adapters/sqlite/tools/admin/backup/dump.d.ts.map +1 -1
  20. package/dist/adapters/sqlite/tools/admin/backup/restore.d.ts.map +1 -1
  21. package/dist/adapters/sqlite/tools/admin/pragma.d.ts.map +1 -1
  22. package/dist/adapters/sqlite/tools/admin/verify.d.ts.map +1 -1
  23. package/dist/adapters/sqlite/tools/codemode.d.ts.map +1 -1
  24. package/dist/adapters/sqlite/tools/core/convenience.d.ts.map +1 -1
  25. package/dist/adapters/sqlite/tools/core/index.d.ts.map +1 -1
  26. package/dist/adapters/sqlite/tools/core/queries.d.ts.map +1 -1
  27. package/dist/adapters/sqlite/tools/core/versioning.d.ts +19 -0
  28. package/dist/adapters/sqlite/tools/core/versioning.d.ts.map +1 -0
  29. package/dist/adapters/sqlite/tools/introspection/graph/tools.d.ts.map +1 -1
  30. package/dist/adapters/sqlite/tools/json-operations/crud.d.ts.map +1 -1
  31. package/dist/adapters/sqlite/tools/migration/helpers.d.ts.map +1 -1
  32. package/dist/adapters/sqlite/tools/vector/metadata.d.ts.map +1 -1
  33. package/dist/adapters/sqlite/tools/vector/search.d.ts.map +1 -1
  34. package/dist/adapters/sqlite/tools/vector/storage.d.ts.map +1 -1
  35. package/dist/adapters/sqlite/tools/virtual/vtable/analyze-csv.d.ts.map +1 -1
  36. package/dist/adapters/sqlite/tools/virtual/vtable/csv.d.ts.map +1 -1
  37. package/dist/adapters/sqlite/tools/virtual/vtable/info.d.ts.map +1 -1
  38. package/dist/adapters/sqlite/types.d.ts +1 -1
  39. package/dist/adapters/sqlite/types.d.ts.map +1 -1
  40. package/dist/adapters/sqlite-native/index.d.ts +1 -1
  41. package/dist/adapters/sqlite-native/index.d.ts.map +1 -1
  42. package/dist/adapters/sqlite-native/tools/window/helpers.d.ts +52 -0
  43. package/dist/adapters/sqlite-native/tools/window/helpers.d.ts.map +1 -0
  44. package/dist/adapters/sqlite-native/tools/window/index.d.ts +7 -0
  45. package/dist/adapters/sqlite-native/tools/window/index.d.ts.map +1 -0
  46. package/dist/adapters/sqlite-native/tools/window/lag-lead.d.ts +7 -0
  47. package/dist/adapters/sqlite-native/tools/window/lag-lead.d.ts.map +1 -0
  48. package/dist/adapters/sqlite-native/tools/window/moving-average.d.ts +7 -0
  49. package/dist/adapters/sqlite-native/tools/window/moving-average.d.ts.map +1 -0
  50. package/dist/adapters/sqlite-native/tools/window/ntile.d.ts +7 -0
  51. package/dist/adapters/sqlite-native/tools/window/ntile.d.ts.map +1 -0
  52. package/dist/adapters/sqlite-native/tools/window/rank.d.ts +7 -0
  53. package/dist/adapters/sqlite-native/tools/window/rank.d.ts.map +1 -0
  54. package/dist/adapters/sqlite-native/tools/window/row-number.d.ts +7 -0
  55. package/dist/adapters/sqlite-native/tools/window/row-number.d.ts.map +1 -0
  56. package/dist/adapters/sqlite-native/tools/window/running-total.d.ts +7 -0
  57. package/dist/adapters/sqlite-native/tools/window/running-total.d.ts.map +1 -0
  58. package/dist/adapters/sqlite-native/tools/window/schemas.d.ts +159 -0
  59. package/dist/adapters/sqlite-native/tools/window/schemas.d.ts.map +1 -0
  60. package/dist/adapters/sqlite-native/transaction-methods.d.ts.map +1 -1
  61. package/dist/audit/logger.d.ts.map +1 -1
  62. package/dist/auth/authorization-server-discovery.d.ts.map +1 -1
  63. package/dist/auth/scopes/mapping.d.ts.map +1 -1
  64. package/dist/auth/token-validator.d.ts.map +1 -1
  65. package/dist/{chunk-EQF3WZHX.js → chunk-27C5EE6U.js} +15 -2
  66. package/dist/{chunk-R5M4WKDM.js → chunk-2TYICG7B.js} +381 -185
  67. package/dist/{chunk-NIC5Z2CA.js → chunk-LLIAIJPO.js} +394 -381
  68. package/dist/{chunk-TGE7LFAR.js → chunk-UE7GVOBV.js} +1069 -355
  69. package/dist/{chunk-Y57WFKAP.js → chunk-XLIYO3YA.js} +178 -72
  70. package/dist/cli.js +18 -6
  71. package/dist/codemode/api-constants.d.ts.map +1 -1
  72. package/dist/codemode/api.d.ts.map +1 -1
  73. package/dist/codemode/sandbox-factory.d.ts.map +1 -1
  74. package/dist/codemode/sandbox.d.ts +0 -3
  75. package/dist/codemode/sandbox.d.ts.map +1 -1
  76. package/dist/codemode/security.d.ts.map +1 -1
  77. package/dist/codemode/types.d.ts +2 -0
  78. package/dist/codemode/types.d.ts.map +1 -1
  79. package/dist/constants/server-instructions.d.ts.map +1 -1
  80. package/dist/filtering/tool-constants.d.ts +5 -5
  81. package/dist/filtering/tool-constants.d.ts.map +1 -1
  82. package/dist/{http-2WGR3E5K.js → http-ZDMK46QU.js} +183 -32
  83. package/dist/index.js +4 -4
  84. package/dist/observability/system-db.d.ts.map +1 -1
  85. package/dist/server/mcp-server.d.ts.map +1 -1
  86. package/dist/server/registration/admin-tools.d.ts.map +1 -1
  87. package/dist/server/registration/audit-tools/backup.d.ts +8 -0
  88. package/dist/server/registration/audit-tools/backup.d.ts.map +1 -0
  89. package/dist/server/registration/audit-tools/helpers.d.ts +11 -0
  90. package/dist/server/registration/audit-tools/helpers.d.ts.map +1 -0
  91. package/dist/server/registration/audit-tools/index.d.ts +4 -0
  92. package/dist/server/registration/audit-tools/index.d.ts.map +1 -0
  93. package/dist/server/registration/audit-tools/resource.d.ts +8 -0
  94. package/dist/server/registration/audit-tools/resource.d.ts.map +1 -0
  95. package/dist/server/registration/audit-tools/search.d.ts +7 -0
  96. package/dist/server/registration/audit-tools/search.d.ts.map +1 -0
  97. package/dist/server/registration/index.d.ts +1 -1
  98. package/dist/server/registration/index.d.ts.map +1 -1
  99. package/dist/{sqlite-D4WCNPU4.js → sqlite-XWZPEZJO.js} +192 -19
  100. package/dist/{sqlite-native-DLVS2T52.js → sqlite-native-5GQ3WKCZ.js} +156 -117
  101. package/dist/transports/http/middleware.d.ts.map +1 -1
  102. package/dist/transports/http/oauth.d.ts.map +1 -1
  103. package/dist/transports/http/sessions/legacy-sse.d.ts.map +1 -1
  104. package/dist/transports/http/sessions/stateful.d.ts +5 -1
  105. package/dist/transports/http/sessions/stateful.d.ts.map +1 -1
  106. package/dist/transports/http/transport.d.ts +2 -0
  107. package/dist/transports/http/transport.d.ts.map +1 -1
  108. package/dist/transports/http/types.d.ts +9 -0
  109. package/dist/transports/http/types.d.ts.map +1 -1
  110. package/dist/types/auth.d.ts +4 -0
  111. package/dist/types/auth.d.ts.map +1 -1
  112. package/dist/types/server.d.ts +3 -0
  113. package/dist/types/server.d.ts.map +1 -1
  114. package/dist/utils/annotations.d.ts +8 -0
  115. package/dist/utils/annotations.d.ts.map +1 -1
  116. package/dist/utils/errors/categories.d.ts +16 -11
  117. package/dist/utils/errors/categories.d.ts.map +1 -1
  118. package/dist/utils/errors/classes.d.ts +37 -0
  119. package/dist/utils/errors/classes.d.ts.map +1 -1
  120. package/dist/utils/errors/format.d.ts +2 -2
  121. package/dist/utils/errors/format.d.ts.map +1 -1
  122. package/dist/utils/errors/index.d.ts +1 -1
  123. package/dist/utils/errors/index.d.ts.map +1 -1
  124. package/dist/utils/errors/suggestions.d.ts +1 -0
  125. package/dist/utils/errors/suggestions.d.ts.map +1 -1
  126. package/dist/utils/index.d.ts +2 -0
  127. package/dist/utils/index.d.ts.map +1 -1
  128. package/dist/utils/security-utils.d.ts +29 -0
  129. package/dist/utils/security-utils.d.ts.map +1 -0
  130. package/dist/utils/stream-utils.d.ts +14 -0
  131. package/dist/utils/stream-utils.d.ts.map +1 -0
  132. package/dist/utils/where-clause.d.ts +0 -13
  133. package/dist/utils/where-clause.d.ts.map +1 -1
  134. package/package.json +35 -38
  135. package/dist/adapters/sqlite-native/tools/window.d.ts +0 -7
  136. package/dist/adapters/sqlite-native/tools/window.d.ts.map +0 -1
  137. package/dist/server/registration/audit-tools.d.ts +0 -17
  138. package/dist/server/registration/audit-tools.d.ts.map +0 -1
package/README.md CHANGED
@@ -15,7 +15,7 @@
15
15
  [![TypeScript](https://img.shields.io/badge/TypeScript-Strict-blue.svg)](https://github.com/neverinfamous/db-mcp)
16
16
  [![E2E](https://github.com/neverinfamous/db-mcp/actions/workflows/e2e.yml/badge.svg)](https://github.com/neverinfamous/db-mcp/actions/workflows/e2e.yml)
17
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-90.13%25-green.svg)](https://github.com/neverinfamous/db-mcp)
18
+ [![Coverage](https://img.shields.io/badge/Coverage-90.04%25-green.svg)](https://github.com/neverinfamous/db-mcp)
19
19
 
20
20
  **[Wiki](https://github.com/neverinfamous/db-mcp/wiki)** • **[Changelog](CHANGELOG.md)**
21
21
 
@@ -25,7 +25,7 @@
25
25
 
26
26
  | Feature | Description |
27
27
  | -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
28
- | **177+ 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
+ | **181+ 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
29
  | **Deep Observability** | Built-in Prometheus `/metrics` export, real-time `sqlite://metrics` MCP resource, historical persistence to a `SystemDb` sidecar, and a granular `sqlite_audit_search` tool for compliance and investigation |
30
30
  | **Dynamic Configuration** | Full YAML/JSON config file support (`--config`) with precedence rules, plus a `sqlite_server_config` tool for live runtime config updates (e.g., log levels) without server restarts |
31
31
  | **Advanced Query & Search** | O(1) cursor-based keyset pagination, faceted search aggregation, and `sqlite_hybrid_search` orchestrating FTS5 + Vector similarity with Reciprocal Rank Fusion (RRF) in a single tool call |
@@ -33,7 +33,7 @@
33
33
  | **Real-time Subscriptions** | Native `resources/subscribe` support pushing event-driven notifications for `sqlite://schema` DDL changes and periodic `sqlite://health` updates directly to clients |
34
34
  | **22 Resources** | 11 data resources (schema, tables, table_schema, indexes, views, health, meta, audit, metrics, compile_options, pragma) + 11 help resources (`sqlite://help` + per-group reference) — filtered by `--tool-filter` |
35
35
  | **10 AI-Powered Prompts** | Guided workflows for schema exploration, query building, data analysis, optimization, migration, debugging, and hybrid FTS5 + vector search |
36
- | **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 177+ capabilities locally, reducing token overhead by 70–90% and supercharging AI agent reasoning |
36
+ | **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 180+ capabilities locally, reducing token overhead by 70–90% and supercharging AI agent reasoning |
37
37
  | **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 |
38
38
  | **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 |
39
39
  | **OAuth 2.1 + Access Control** | Enterprise-ready security with RFC 9728/8414 compliance, granular scopes (`full`, `read`, `write`, `admin`, `db:*`, `table:*:*`), and Keycloak integration |
@@ -81,13 +81,13 @@ cd db-mcp
81
81
  Install dependencies:
82
82
 
83
83
  ```bash
84
- npm install
84
+ pnpm install
85
85
  ```
86
86
 
87
87
  Build the project:
88
88
 
89
89
  ```bash
90
- npm run build
90
+ pnpm run build
91
91
  ```
92
92
 
93
93
  Run the server with **Native backend** (better-sqlite3 — full features, requires Node.js native build):
@@ -102,7 +102,7 @@ Or with **WASM backend** (sql.js — cross-platform, no compilation required):
102
102
  node dist/cli.js --transport stdio --sqlite ./database.db
103
103
  ```
104
104
 
105
- > **Backend Choice:** Use `--sqlite-native` for full features (177 MCP tools / 166 group tools, transactions, window functions, SpatiaLite). Use `--sqlite` for WASM mode (150 MCP tools / 139 group tools, no native dependencies).
105
+ > **Backend Choice:** Use `--sqlite-native` for full features (181 MCP tools / 170 group tools, transactions, window functions, SpatiaLite). Use `--sqlite` for WASM mode (154 MCP tools / 143 group tools, no native dependencies).
106
106
 
107
107
  ### Verify It Works
108
108
 
@@ -121,7 +121,7 @@ Expected output:
121
121
  Run the test suite:
122
122
 
123
123
  ```bash
124
- npm run test
124
+ pnpm run test
125
125
  ```
126
126
 
127
127
  ### Prerequisites
@@ -146,7 +146,7 @@ Set `CODEMODE_ISOLATION=vm` with `CODEMODE_ISOLATION_INSECURE=1` to fall back to
146
146
 
147
147
  ### ⚡ Code Mode Only (Maximum Token Savings)
148
148
 
149
- 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:
149
+ If you control your own setup, you can run with **only Code Mode enabled** — a single tool that provides access to all 180+ tools' worth of capability through the `sqlite.*` API:
150
150
 
151
151
  ```json
152
152
  {
@@ -179,7 +179,7 @@ This exposes just `sqlite_execute_code` plus built-in tools. The agent writes Ja
179
179
  ## 🎛️ Tool Filtering
180
180
 
181
181
  > [!IMPORTANT]
182
- > **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.
182
+ > **AI-enabled IDEs like Cursor have tool limits.** With 180+ 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.
183
183
 
184
184
  ### Quick Start: Recommended Configurations
185
185
 
@@ -209,13 +209,13 @@ Specify exactly the groups you need:
209
209
 
210
210
  | Shortcut | WASM | Native | + Built-in | What's Included |
211
211
  | ------------ | ------ | ------ | ---------- | ------------------------------ |
212
- | `starter` | **61** | **66** | +4 | Core, JSON, Text |
213
- | `analytics` | 63 | 69 | +4 | Core, JSON, Stats |
214
- | `search` | 47 | 52 | +4 | Core, Text, Vector |
215
- | `spatial` | 36 | 43 | +4 | Core, Geo, Vector |
216
- | `dev-schema` | 37 | 37 | +4 | Core, Introspection, Migration |
217
- | `minimal` | 21 | 21 | +4 | Core only |
218
- | `full` | 139 | 166 | +4 | Everything enabled |
212
+ | `starter` | **65** | **70** | +4 | Core, JSON, Text |
213
+ | `analytics` | 67 | 73 | +4 | Core, JSON, Stats |
214
+ | `search` | 51 | 56 | +4 | Core, Text, Vector |
215
+ | `spatial` | 40 | 47 | +4 | Core, Geo, Vector |
216
+ | `dev-schema` | 41 | 41 | +4 | Core, Introspection, Migration |
217
+ | `minimal` | 25 | 25 | +4 | Core only |
218
+ | `full` | 143 | 170 | +4 | Everything enabled |
219
219
 
220
220
  ### Tool Groups (10 Available)
221
221
 
@@ -223,7 +223,7 @@ Specify exactly the groups you need:
223
223
 
224
224
  | Group | WASM | Native | + Built-in | Description |
225
225
  | --------------- | ---- | ------ | ---------- | ------------------------------------------ |
226
- | `core` | 21 | 21 | +4 | Basic CRUD, schema, tables |
226
+ | `core` | 25 | 25 | +4 | Basic CRUD, schema, tables |
227
227
  | `json` | 25 | 25 | +4 | JSON/JSONB operations, analysis |
228
228
  | `text` | 15 | 20 | +4 | Text processing + FTS5 + advanced search |
229
229
  | `stats` | 17 | 23 | +4 | Descriptive, inference, window functions |
@@ -274,9 +274,9 @@ This is useful for scripted or automated clients that need a minimal, precise se
274
274
 
275
275
  ```bash
276
276
  --tool-filter "starter"
277
- --tool-filter "core,json,text,fts5"
277
+ --tool-filter "core,json,text,stats"
278
278
  --tool-filter "starter,+stats"
279
- --tool-filter "starter,-fts5"
279
+ --tool-filter "starter,-vector"
280
280
  ```
281
281
 
282
282
  **Legacy Syntax (still supported):**
@@ -433,6 +433,7 @@ MCP prompts provide AI-assisted database workflows:
433
433
  | `MCP_RATE_LIMIT_MAX` | `100` | Max requests/minute per IP (HTTP transport) |
434
434
  | `CSV_EXTENSION_PATH` | — | Custom path to CSV extension binary (native only) |
435
435
  | `SPATIALITE_PATH` | — | Custom path to SpatiaLite extension binary (native only) |
436
+ | `ALLOWED_IO_ROOTS` | — | JSON array or comma-separated list of absolute paths allowed for IO operations |
436
437
  | `MCP_AUTH_TOKEN` | — | Simple bearer token for HTTP auth (CLI: `--auth-token`) |
437
438
  | `AUDIT_LOG` | — | Audit log file path, or `stderr` (CLI: `--audit-log`) |
438
439
  | `AUDIT_REDACT` | `true` | Redact tool arguments from audit entries (CLI: `--audit-no-redact` to disable) |
@@ -451,6 +452,7 @@ Transport: --transport <stdio|http|sse> --port <N> --server-host <host> --
451
452
  Auth: --oauth-enabled --oauth-issuer <url> --oauth-audience <aud>
452
453
  Database: --sqlite <path> | --sqlite-native <path> [--encryption-key <key>]
453
454
  Extensions: --csv --spatialite (native only)
455
+ Security: --allowed-io-roots <paths>
454
456
  Audit: --audit-log <path> --audit-no-redact --audit-reads --audit-backup --audit-backup-data
455
457
  Server: --name <name> --version <ver> --metrics-export <type> --tool-filter <filter>
456
458
  ```
@@ -481,7 +483,7 @@ Add to your `~/.cursor/mcp.json`, Claude Desktop config, or equivalent:
481
483
  ```
482
484
 
483
485
  > [!TIP]
484
- > **Switching backends:** The config above uses the **Native** backend (better-sqlite3, 177 MCP tools). To use the **WASM** backend (sql.js, 150 MCP 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.
486
+ > **Switching backends:** The config above uses the **Native** backend (better-sqlite3, 181 MCP tools). To use the **WASM** backend (sql.js, 154 MCP 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.
485
487
 
486
488
  **Variants** (modify the `args` array above):
487
489
 
@@ -505,7 +507,8 @@ For remote access, web-based clients, or HTTP-compatible MCP hosts, use the HTTP
505
507
  node dist/cli.js \
506
508
  --transport http \
507
509
  --port 3000 \
508
- --sqlite-native ./database.db
510
+ --sqlite-native ./database.db \
511
+ --allowed-io-roots $(pwd)
509
512
  ```
510
513
 
511
514
  **Docker:**
@@ -515,7 +518,8 @@ docker run --rm -p 3000:3000 \
515
518
  -v ./data:/app/data \
516
519
  writenotenow/db-mcp:latest \
517
520
  --transport http --port 3000 \
518
- --sqlite-native /app/data/database.db
521
+ --sqlite-native /app/data/database.db \
522
+ --allowed-io-roots /app/data
519
523
  ```
520
524
 
521
525
  The server supports **two MCP transport protocols simultaneously**, enabling both modern and legacy clients to connect:
@@ -537,7 +541,7 @@ Sessions are managed via the `Mcp-Session-Id` header.
537
541
  For serverless/stateless deployments where sessions are not needed:
538
542
 
539
543
  ```bash
540
- node dist/cli.js --transport http --port 3000 --stateless --sqlite-native ./database.db
544
+ node dist/cli.js --transport http --port 3000 --stateless --sqlite-native ./database.db --allowed-io-roots $(pwd)
541
545
  ```
542
546
 
543
547
  In stateless mode: `GET /mcp` returns 405, `DELETE /mcp` returns 204, `/sse` and `/messages` return 404. Each `POST /mcp` creates a fresh transport.
@@ -570,6 +574,7 @@ node dist/cli.js \
570
574
  --transport http \
571
575
  --port 3000 \
572
576
  --sqlite-native ./database.db \
577
+ --allowed-io-roots $(pwd) \
573
578
  --oauth-enabled \
574
579
  --oauth-issuer http://localhost:8080/realms/db-mcp \
575
580
  --oauth-audience db-mcp-server
@@ -643,8 +648,8 @@ Performance benchmarks measure framework overhead on critical hot paths using [V
643
648
  - **Sandbox execution:** ~0.5–4.9K executions/sec — trivial code round-trips through V8 isolate in 0.2-1.5 ms
644
649
 
645
650
  ```bash
646
- npm run bench # Run all benchmarks
647
- npm run bench:verbose # Verbose mode with detailed timings
651
+ pnpm run bench # Run all benchmarks
652
+ pnpm run bench:verbose # Verbose mode with detailed timings
648
653
  ```
649
654
 
650
655
  | Benchmark | What It Measures |