@eamonboyle/mssql-mcp 1.2.0 → 1.3.1

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 (124) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +43 -7
  3. package/dist/config.d.ts +8 -0
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +40 -0
  6. package/dist/config.js.map +1 -1
  7. package/dist/db.d.ts +1 -0
  8. package/dist/db.d.ts.map +1 -1
  9. package/dist/db.js +1 -1
  10. package/dist/db.js.map +1 -1
  11. package/dist/index.js +356 -44
  12. package/dist/index.js.map +1 -1
  13. package/dist/mcpResults.d.ts +49 -0
  14. package/dist/mcpResults.d.ts.map +1 -0
  15. package/dist/mcpResults.js +246 -0
  16. package/dist/mcpResults.js.map +1 -0
  17. package/dist/promptRegistry.d.ts.map +1 -1
  18. package/dist/promptRegistry.js +6 -1
  19. package/dist/promptRegistry.js.map +1 -1
  20. package/dist/resourceRegistry.d.ts +2 -0
  21. package/dist/resourceRegistry.d.ts.map +1 -1
  22. package/dist/resourceRegistry.js +149 -10
  23. package/dist/resourceRegistry.js.map +1 -1
  24. package/dist/schema.d.ts +16 -0
  25. package/dist/schema.d.ts.map +1 -1
  26. package/dist/schema.js +180 -1
  27. package/dist/schema.js.map +1 -1
  28. package/dist/serverState.d.ts +28 -0
  29. package/dist/serverState.d.ts.map +1 -0
  30. package/dist/serverState.js +99 -0
  31. package/dist/serverState.js.map +1 -0
  32. package/dist/sql.js +0 -0
  33. package/dist/toolRegistry.d.ts +4 -0
  34. package/dist/toolRegistry.d.ts.map +1 -1
  35. package/dist/toolRegistry.js +210 -64
  36. package/dist/toolRegistry.js.map +1 -1
  37. package/dist/tools/AnalyzeTableTool.d.ts +37 -0
  38. package/dist/tools/AnalyzeTableTool.d.ts.map +1 -0
  39. package/dist/tools/AnalyzeTableTool.js +81 -0
  40. package/dist/tools/AnalyzeTableTool.js.map +1 -0
  41. package/dist/tools/DeleteDataTool.d.ts.map +1 -1
  42. package/dist/tools/DeleteDataTool.js +4 -1
  43. package/dist/tools/DeleteDataTool.js.map +1 -1
  44. package/dist/tools/DescribeRelationshipsTool.d.ts +20 -0
  45. package/dist/tools/DescribeRelationshipsTool.d.ts.map +1 -0
  46. package/dist/tools/DescribeRelationshipsTool.js +24 -0
  47. package/dist/tools/DescribeRelationshipsTool.js.map +1 -0
  48. package/dist/tools/ListDatabasesTool.d.ts +16 -0
  49. package/dist/tools/ListDatabasesTool.d.ts.map +1 -0
  50. package/dist/tools/ListDatabasesTool.js +26 -0
  51. package/dist/tools/ListDatabasesTool.js.map +1 -0
  52. package/dist/tools/ListForeignKeysTool.d.ts +19 -0
  53. package/dist/tools/ListForeignKeysTool.d.ts.map +1 -0
  54. package/dist/tools/ListForeignKeysTool.js +24 -0
  55. package/dist/tools/ListForeignKeysTool.js.map +1 -0
  56. package/dist/tools/PreviewDeleteTool.d.ts +28 -0
  57. package/dist/tools/PreviewDeleteTool.d.ts.map +1 -0
  58. package/dist/tools/PreviewDeleteTool.js +31 -0
  59. package/dist/tools/PreviewDeleteTool.js.map +1 -0
  60. package/dist/tools/PreviewUpdateTool.d.ts +30 -0
  61. package/dist/tools/PreviewUpdateTool.d.ts.map +1 -0
  62. package/dist/tools/PreviewUpdateTool.js +34 -0
  63. package/dist/tools/PreviewUpdateTool.js.map +1 -0
  64. package/dist/tools/ReadDataTool.js +2 -2
  65. package/dist/tools/ReadDataTool.js.map +1 -1
  66. package/dist/tools/UpdateDataTool.d.ts +1 -0
  67. package/dist/tools/UpdateDataTool.d.ts.map +1 -1
  68. package/dist/tools/UpdateDataTool.js +6 -3
  69. package/dist/tools/UpdateDataTool.js.map +1 -1
  70. package/dist/validation.js +0 -0
  71. package/dist/writePreview.d.ts +20 -0
  72. package/dist/writePreview.d.ts.map +1 -0
  73. package/dist/writePreview.js +27 -0
  74. package/dist/writePreview.js.map +1 -0
  75. package/dist/writePreviewGrant.d.ts +18 -0
  76. package/dist/writePreviewGrant.d.ts.map +1 -0
  77. package/dist/writePreviewGrant.js +71 -0
  78. package/dist/writePreviewGrant.js.map +1 -0
  79. package/dist/writePreviewGrantStore.d.ts +10 -0
  80. package/dist/writePreviewGrantStore.d.ts.map +1 -0
  81. package/dist/writePreviewGrantStore.js +47 -0
  82. package/dist/writePreviewGrantStore.js.map +1 -0
  83. package/dist/writeSafety.js +0 -0
  84. package/package.json +6 -2
  85. package/dist/__tests__/ExplainQueryTool.test.d.ts +0 -2
  86. package/dist/__tests__/ExplainQueryTool.test.d.ts.map +0 -1
  87. package/dist/__tests__/ExplainQueryTool.test.js +0 -96
  88. package/dist/__tests__/ExplainQueryTool.test.js.map +0 -1
  89. package/dist/__tests__/config.test.d.ts +0 -2
  90. package/dist/__tests__/config.test.d.ts.map +0 -1
  91. package/dist/__tests__/config.test.js +0 -29
  92. package/dist/__tests__/config.test.js.map +0 -1
  93. package/dist/__tests__/db.test.d.ts +0 -2
  94. package/dist/__tests__/db.test.d.ts.map +0 -1
  95. package/dist/__tests__/db.test.js +0 -204
  96. package/dist/__tests__/db.test.js.map +0 -1
  97. package/dist/__tests__/promptRegistry.test.d.ts +0 -2
  98. package/dist/__tests__/promptRegistry.test.d.ts.map +0 -1
  99. package/dist/__tests__/promptRegistry.test.js +0 -40
  100. package/dist/__tests__/promptRegistry.test.js.map +0 -1
  101. package/dist/__tests__/resourceRegistry.test.d.ts +0 -2
  102. package/dist/__tests__/resourceRegistry.test.d.ts.map +0 -1
  103. package/dist/__tests__/resourceRegistry.test.js +0 -40
  104. package/dist/__tests__/resourceRegistry.test.js.map +0 -1
  105. package/dist/__tests__/schema.test.d.ts +0 -2
  106. package/dist/__tests__/schema.test.d.ts.map +0 -1
  107. package/dist/__tests__/schema.test.js +0 -130
  108. package/dist/__tests__/schema.test.js.map +0 -1
  109. package/dist/__tests__/sql.test.d.ts +0 -2
  110. package/dist/__tests__/sql.test.d.ts.map +0 -1
  111. package/dist/__tests__/sql.test.js +0 -35
  112. package/dist/__tests__/sql.test.js.map +0 -1
  113. package/dist/__tests__/toolRegistry.test.d.ts +0 -2
  114. package/dist/__tests__/toolRegistry.test.d.ts.map +0 -1
  115. package/dist/__tests__/toolRegistry.test.js +0 -47
  116. package/dist/__tests__/toolRegistry.test.js.map +0 -1
  117. package/dist/__tests__/validation.test.d.ts +0 -2
  118. package/dist/__tests__/validation.test.d.ts.map +0 -1
  119. package/dist/__tests__/validation.test.js +0 -111
  120. package/dist/__tests__/validation.test.js.map +0 -1
  121. package/dist/__tests__/writeTools.test.d.ts +0 -2
  122. package/dist/__tests__/writeTools.test.d.ts.map +0 -1
  123. package/dist/__tests__/writeTools.test.js +0 -115
  124. package/dist/__tests__/writeTools.test.js.map +0 -1
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) Microsoft Corporation.
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE
1
+ MIT License
2
+
3
+ Copyright (c) Microsoft Corporation.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE
package/README.md CHANGED
@@ -3,9 +3,10 @@
3
3
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
4
4
  [![npm version](https://img.shields.io/npm/v/@eamonboyle/mssql-mcp.svg)](https://www.npmjs.com/package/@eamonboyle/mssql-mcp)
5
5
  [![Node.js 18+](https://img.shields.io/badge/node-%3E%3D18.0.0-brightgreen)](https://nodejs.org/)
6
+ [![X: @eamonyo](https://img.shields.io/badge/X-%40eamonyo-000000?style=flat-square&logo=x&logoColor=white)](https://x.com/eamonyo)
6
7
 
7
- [![Add to Cursor](https://img.shields.io/badge/Add_to-Cursor-000000?style=for-the-badge&logo=cursor&logoColor=white)](https://cursor.com/en/install-mcp?name=MSSQL&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBlYW1vbmJveWxlL21zc3FsLW1jcCJdLCJlbnYiOnsiU0VSVkVSX05BTUUiOiJsb2NhbGhvc3QiLCJEQVRBQkFTRV9OQU1FIjoiWW91ckRhdGFiYXNlIiwiREFUQUJBU0VTIjoiIiwiREJfVVNFUiI6IiIsIkRCX1BBU1NXT1JEIjoiIiwiUkVBRE9OTFkiOiJmYWxzZSIsIkNPTk5FQ1RJT05fVElNRU9VVCI6IjMwIiwiUVVFUllfVElNRU9VVF9NUyI6IjMwMDAwIiwiTUFYX1JPV1MiOiIxMDAwMCIsIlRSVVNUX1NFUlZFUl9DRVJUSUZJQ0FURSI6ImZhbHNlIn19)
8
- [![Install in VS Code](https://img.shields.io/badge/Install_in-VS_Code-007ACC?style=for-the-badge&logo=visualstudiocode&logoColor=white)](https://intradeus.github.io/http-protocol-redirector?r=vscode%3Amcp%2Finstall%3F%257B%2522name%2522%253A%2522mssql%2522%252C%2522command%2522%253A%2522npx%2522%252C%2522args%2522%253A%255B%2522-y%2522%252C%2522%2540eamonboyle%252Fmssql-mcp%2522%255D%252C%2522env%2522%253A%257B%2522SERVER_NAME%2522%253A%2522localhost%2522%252C%2522DATABASE_NAME%2522%253A%2522YourDatabase%2522%252C%2522DATABASES%2522%253A%2522%2522%252C%2522DB_USER%2522%253A%2522%2522%252C%2522DB_PASSWORD%2522%253A%2522%2522%252C%2522READONLY%2522%253A%2522false%2522%252C%2522CONNECTION_TIMEOUT%2522%253A%252230%2522%252C%2522QUERY_TIMEOUT_MS%2522%253A%252230000%2522%252C%2522MAX_ROWS%2522%253A%252210000%2522%252C%2522TRUST_SERVER_CERTIFICATE%2522%253A%2522false%2522%257D%257D)
8
+ [![Add to Cursor](https://img.shields.io/badge/Add_to-Cursor-000000?style=for-the-badge&logo=cursor&logoColor=white)](https://cursor.com/en/install-mcp?name=MSSQL&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBlYW1vbmJveWxlL21zc3FsLW1jcCJdLCJlbnYiOnsiU0VSVkVSX05BTUUiOiJsb2NhbGhvc3QiLCJEQVRBQkFTRV9OQU1FIjoiWW91ckRhdGFiYXNlIiwiREFUQUJBU0VTIjoiIiwiREJfVVNFUiI6IiIsIkRCX1BBU1NXT1JEIjoiIiwiUkVBRE9OTFkiOiJmYWxzZSIsIkNPTk5FQ1RJT05fVElNRU9VVCI6IjMwIiwiUVVFUllfVElNRU9VVF9NUyI6IjMwMDAwIiwiTUFYX1JPV1MiOiIxMDAwMCIsIlRSVVNUX1NFUlZFUl9DRVJUSUZJQ0FURSI6ImZhbHNlIiwiTUNQX1RSQU5TUE9SVCI6InN0ZGlvIiwiTUNQX0hUVFBfSE9TVCI6IjEyNy4wLjAuMSIsIk1DUF9IVFRQX1BPUlQiOiIzMzMzIiwiTUNQX0JBU0VfVVJMIjoiIiwiRU5BQkxFX0RETCI6ImZhbHNlIiwiTUFYX1dSSVRFX1JPV1MiOiIxMDAiLCJSRVFVSVJFX1dSSVRFX1BSRVZJRVciOiJ0cnVlIn19)
9
+ [![Install in VS Code](https://img.shields.io/badge/Install_in-VS_Code-007ACC?style=for-the-badge&logo=visualstudiocode&logoColor=white)](https://intradeus.github.io/http-protocol-redirector?r=vscode%3Amcp%2Finstall%3F%257B%2522name%2522%253A%2522mssql%2522%252C%2522command%2522%253A%2522npx%2522%252C%2522args%2522%253A%255B%2522-y%2522%252C%2522%2540eamonboyle%252Fmssql-mcp%2522%255D%252C%2522env%2522%253A%257B%2522SERVER_NAME%2522%253A%2522localhost%2522%252C%2522DATABASE_NAME%2522%253A%2522YourDatabase%2522%252C%2522DATABASES%2522%253A%2522%2522%252C%2522DB_USER%2522%253A%2522%2522%252C%2522DB_PASSWORD%2522%253A%2522%2522%252C%2522READONLY%2522%253A%2522false%2522%252C%2522CONNECTION_TIMEOUT%2522%253A%252230%2522%252C%2522QUERY_TIMEOUT_MS%2522%253A%252230000%2522%252C%2522MAX_ROWS%2522%253A%252210000%2522%252C%2522TRUST_SERVER_CERTIFICATE%2522%253A%2522false%2522%252C%2522MCP_TRANSPORT%2522%253A%2522stdio%2522%252C%2522MCP_HTTP_HOST%2522%253A%2522127.0.0.1%2522%252C%2522MCP_HTTP_PORT%2522%253A%25223333%2522%252C%2522MCP_BASE_URL%2522%253A%2522%2522%252C%2522ENABLE_DDL%2522%253A%2522false%2522%252C%2522MAX_WRITE_ROWS%2522%253A%2522100%2522%252C%2522REQUIRE_WRITE_PREVIEW%2522%253A%2522true%2522%257D%257D)
9
10
 
10
11
  > ⚠️ **EXPERIMENTAL USE ONLY** — This MCP Server is provided for educational and experimental purposes. It is NOT intended for production use. Use appropriate security measures and test thoroughly before any deployment.
11
12
 
@@ -25,11 +26,14 @@ AI: *queries your MSSQL database and returns the results in plain English*
25
26
  - **Natural language to SQL** — Ask questions in plain English
26
27
  - **Row-level CRUD support** — Read, insert, update, and delete rows with dedicated tools
27
28
  - **Schema discovery** — Inspect tables, views, procedures, functions, and triggers
29
+ - **Safer write workflows** — `preview_update` and `preview_delete` plus confirmation gating for destructive tools
30
+ - **Rich text tool results** — Concise summaries with JSON inlined in the primary text block when helpful, plus resource links for large artifacts
28
31
  - **Query analysis** — Generate estimated execution plans with `explain_query`
29
- - **MCP resources and prompts** — Expose schema snapshots and prompt templates to capable clients
32
+ - **MCP resources and prompts** — Expose schema snapshots, query artifacts, and prompt templates to capable clients
33
+ - **Remote transport support** — Run locally over `stdio` or remotely over Streamable HTTP
30
34
  - **Multi-database support** — Connect to multiple databases on the same server
31
35
  - **Read-only mode** — Restrict to inspection, search, read, and explain tools for safer environments
32
- - **Secure by default** — WHERE clauses required for updates/deletes; SQL injection safeguards for reads
36
+ - **Secure by default** — WHERE clauses required for updates/deletes; SQL injection safeguards for reads; DDL tools off unless `ENABLE_DDL=true`
33
37
 
34
38
  ## Supported AI Clients
35
39
 
@@ -44,7 +48,7 @@ AI: *queries your MSSQL database and returns the results in plain English*
44
48
 
45
49
  Click **Add to Cursor** or **Install in VS Code** above to add the MCP server—no cloning required; it runs via `npx`.
46
50
 
47
- **Cursor** opens a dedicated install page that lists env vars you can edit before saving (similar to a short form).
51
+ **Cursor** opens a dedicated install page that lists env vars you can edit before saving (similar to a short form). The **Add to Cursor** preset includes every variable from the table below (connection, timeouts, **`ENABLE_DDL`** defaulting to **`false`**, write caps, **`MCP_TRANSPORT`** / HTTP settings, **`MCP_BASE_URL`**, etc.); set **`ENABLE_DDL`** to **`true`** there if you want schema tools.
48
52
 
49
53
  **VS Code** only applies the JSON embedded in the `vscode:mcp/install` link: you get static placeholder values, not an interactive database wizard. To be prompted for host, database, and credentials when the server starts, add [`inputs`](https://code.visualstudio.com/docs/copilot/reference/mcp-configuration#_input-variables-for-sensitive-data) to `.vscode/mcp.json` as in the **Prompted inputs** example under **VS Code (`mcp.json`)** below.
50
54
 
@@ -89,6 +93,13 @@ npm run build
89
93
  | `QUERY_TIMEOUT_MS` | No | Query timeout in milliseconds (default: `30000`) |
90
94
  | `MAX_ROWS` | No | Maximum rows returned by read tools (default: `10000`) |
91
95
  | `TRUST_SERVER_CERTIFICATE` | No | `"true"` for self-signed certs (e.g., local dev) (default: `"false"`) |
96
+ | `MCP_TRANSPORT` | No | `stdio` (default) or `http` |
97
+ | `MCP_HTTP_HOST` | No | Bind host for Streamable HTTP mode (default: `127.0.0.1`) |
98
+ | `MCP_HTTP_PORT` | No | Bind port for Streamable HTTP mode (default: `3333`) |
99
+ | `MCP_BASE_URL` | No | Optional externally visible base URL for remote deployments |
100
+ | `ENABLE_DDL` | No | `"true"` enables `create_table`, `create_index`, and `drop_table` (default: `false`) |
101
+ | `MAX_WRITE_ROWS` | No | Maximum rows a single write tool may affect before it is blocked (default: `100`) |
102
+ | `REQUIRE_WRITE_PREVIEW` | No | `"true"` (default): call `preview_update` / `preview_delete`, then pass the returned `previewToken` with `confirmed=true` on `update_data` / `delete_data`. Set `"false"` to skip the token (confirmation still applies). |
92
103
 
93
104
  \* Required for SQL authentication. For Windows/Integrated authentication, consult the [mssql](https://www.npmjs.com/package/mssql) package documentation.
94
105
 
@@ -119,6 +130,26 @@ Use [global or project MCP config](https://cursor.com/docs/context/mcp): e.g. `~
119
130
 
120
131
  Restart Cursor after changes.
121
132
 
133
+ ### Cursor HTTP MCP
134
+
135
+ To expose the server remotely over Streamable HTTP:
136
+
137
+ ```json
138
+ {
139
+ "mcpServers": {
140
+ "mssql-http": {
141
+ "url": "http://127.0.0.1:3333"
142
+ }
143
+ }
144
+ }
145
+ ```
146
+
147
+ Run the server with:
148
+
149
+ ```bash
150
+ MCP_TRANSPORT=http MCP_HTTP_HOST=127.0.0.1 MCP_HTTP_PORT=3333 npx -y @eamonboyle/mssql-mcp
151
+ ```
152
+
122
153
  ### VS Code (`mcp.json`)
123
154
 
124
155
  VS Code uses `.vscode/mcp.json` (or **MCP: Open User Configuration**) with a top-level [`servers`](https://code.visualstudio.com/docs/copilot/reference/mcp-configuration) object—**not** `mcpServers`.
@@ -258,6 +289,10 @@ See `src/samples/` for example configs:
258
289
  Once configured, you can ask things like:
259
290
 
260
291
  - "Show me all users from New York"
292
+ - "List the configured databases this MCP can access"
293
+ - "Preview the rows that would be updated before changing status to archived"
294
+ - "Explain this query and open the execution plan viewer"
295
+ - "Show the foreign keys and relationships around dbo.Orders"
261
296
  - "Search the customers table for email addresses containing acme.com"
262
297
  - "Create a new table called products with columns for id, name, and price"
263
298
  - "Update all pending orders to completed status"
@@ -279,8 +314,8 @@ Once configured, you can ask things like:
279
314
  | `list_objects` | ✓ | List tables, views, procedures, functions, and triggers |
280
315
  | `describe_object` | ✓ | Describe an object definition and metadata |
281
316
  | `insert_data` | | Insert rows |
282
- | `update_data` | | Update rows (requires WHERE) |
283
- | `delete_data` | | Delete rows (requires WHERE) |
317
+ | `update_data` | | Update rows (requires WHERE; optional `schemaName`) |
318
+ | `delete_data` | | Delete rows (requires WHERE; optional `schemaName`) |
284
319
  | `create_table` | | Create tables |
285
320
  | `create_index` | | Create indexes |
286
321
  | `drop_table` | | Drop tables |
@@ -302,6 +337,7 @@ Release notes: [CHANGELOG.md](https://github.com/eamonboyle/mssql-mcp/blob/main/
302
337
  - **Read-only mode** — Set `READONLY: "true"` when you only need queries.
303
338
  - **WHERE clauses** — Update and delete operations require explicit WHERE clauses to reduce accidental full-table changes.
304
339
  - **SQL injection** — The server validates and restricts dangerous SQL patterns.
340
+ - **DDL tools** — Disabled by default (`ENABLE_DDL` unset or `false`). Set `ENABLE_DDL=true` only if the assistant should create/drop tables or indexes.
305
341
 
306
342
  ## Contributing
307
343
 
package/dist/config.d.ts CHANGED
@@ -1,5 +1,13 @@
1
+ export type McpTransportMode = "stdio" | "http";
1
2
  export declare function getMaxRows(): number;
2
3
  export declare function getQueryTimeoutMs(): number;
3
4
  export declare function getDefaultSearchLimit(): number;
4
5
  export declare function clampRowLimit(limit: unknown, fallback?: number): number;
6
+ export declare function getMcpTransport(): McpTransportMode;
7
+ export declare function getMcpHttpPort(): number;
8
+ export declare function getMcpHttpHost(): string;
9
+ export declare function getMcpBaseUrl(): string | undefined;
10
+ export declare function isDdlEnabled(): boolean;
11
+ export declare function getMaxWriteRows(): number;
12
+ export declare function isWritePreviewRequired(): boolean;
5
13
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAqBA,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAK1C;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,SAAe,GAAG,MAAM,CAa7E"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AA4CA,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,MAAM,CAAC;AAEhD,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAK1C;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,SAAe,GAAG,MAAM,CAa7E;AAED,wBAAgB,eAAe,IAAI,gBAAgB,CAIlD;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,aAAa,IAAI,MAAM,GAAG,SAAS,CAGlD;AAED,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAKxC;AAED,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD"}
package/dist/config.js CHANGED
@@ -1,6 +1,9 @@
1
1
  const DEFAULT_MAX_ROWS = 10000;
2
2
  const DEFAULT_QUERY_TIMEOUT_MS = 30000;
3
3
  const DEFAULT_SEARCH_LIMIT = 100;
4
+ const DEFAULT_HTTP_PORT = 3333;
5
+ const DEFAULT_HTTP_HOST = "127.0.0.1";
6
+ const DEFAULT_MAX_WRITE_ROWS = 100;
4
7
  function parsePositiveInt(value, fallback, minimum = 1) {
5
8
  if (!value) {
6
9
  return fallback;
@@ -11,6 +14,19 @@ function parsePositiveInt(value, fallback, minimum = 1) {
11
14
  }
12
15
  return parsed;
13
16
  }
17
+ function parseBoolean(value, fallback) {
18
+ if (!value) {
19
+ return fallback;
20
+ }
21
+ const normalized = value.trim().toLowerCase();
22
+ if (normalized === "true") {
23
+ return true;
24
+ }
25
+ if (normalized === "false") {
26
+ return false;
27
+ }
28
+ return fallback;
29
+ }
14
30
  export function getMaxRows() {
15
31
  return parsePositiveInt(process.env.MAX_ROWS, DEFAULT_MAX_ROWS);
16
32
  }
@@ -31,4 +47,28 @@ export function clampRowLimit(limit, fallback = getMaxRows()) {
31
47
  }
32
48
  return Math.min(Math.floor(parsed), getMaxRows());
33
49
  }
50
+ export function getMcpTransport() {
51
+ return process.env.MCP_TRANSPORT?.trim().toLowerCase() === "http"
52
+ ? "http"
53
+ : "stdio";
54
+ }
55
+ export function getMcpHttpPort() {
56
+ return parsePositiveInt(process.env.MCP_HTTP_PORT, DEFAULT_HTTP_PORT);
57
+ }
58
+ export function getMcpHttpHost() {
59
+ return process.env.MCP_HTTP_HOST?.trim() || DEFAULT_HTTP_HOST;
60
+ }
61
+ export function getMcpBaseUrl() {
62
+ const value = process.env.MCP_BASE_URL?.trim();
63
+ return value ? value : undefined;
64
+ }
65
+ export function isDdlEnabled() {
66
+ return parseBoolean(process.env.ENABLE_DDL, false);
67
+ }
68
+ export function getMaxWriteRows() {
69
+ return parsePositiveInt(process.env.MAX_WRITE_ROWS, DEFAULT_MAX_WRITE_ROWS);
70
+ }
71
+ export function isWritePreviewRequired() {
72
+ return parseBoolean(process.env.REQUIRE_WRITE_PREVIEW, true);
73
+ }
34
74
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,MAAM,wBAAwB,GAAG,KAAK,CAAC;AACvC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAEjC,SAAS,gBAAgB,CACvB,KAAyB,EACzB,QAAgB,EAChB,OAAO,GAAG,CAAC;IAEX,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,OAAO,EAAE,CAAC;QACjD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,gBAAgB,CACrB,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAC5B,wBAAwB,CACzB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,oBAAoB,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc,EAAE,QAAQ,GAAG,UAAU,EAAE;IACnE,MAAM,MAAM,GACV,OAAO,KAAK,KAAK,QAAQ;QACvB,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ;YACzB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;YAC5B,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;IAEnB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;AACpD,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/db.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import sql from "mssql";
2
+ export declare function getDefaultDatabaseName(): string | null;
2
3
  /**
3
4
  * Returns the list of allowed database names.
4
5
  * If DATABASES is set, returns those; otherwise returns only DATABASE_NAME.
package/dist/db.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,OAAO,CAAC;AAgCxB;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAQ9C;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQxE;AA6CD;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAoB7B;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAWnD;AAED,wBAAsB,mBAAmB,CACvC,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC;IAAE,IAAI,EAAE,GAAG,CAAC,cAAc,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAqBvD"}
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,OAAO,CAAC;AAiBxB,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAatD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAQ9C;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQxE;AA6CD;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAoB7B;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAWnD;AAED,wBAAsB,mBAAmB,CACvC,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC;IAAE,IAAI,EAAE,GAAG,CAAC,cAAc,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAqBvD"}
package/dist/db.js CHANGED
@@ -11,7 +11,7 @@ function parseDatabaseList(value) {
11
11
  .map((db) => db.trim())
12
12
  .filter(Boolean);
13
13
  }
14
- function getDefaultDatabaseName() {
14
+ export function getDefaultDatabaseName() {
15
15
  const allowedDatabases = parseDatabaseList(process.env.DATABASES);
16
16
  const explicitDefault = process.env.DATABASE_NAME?.trim();
17
17
  if (allowedDatabases.length === 0) {
package/dist/db.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,OAAO,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,0CAA0C;AAC1C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA8B,CAAC;AAEvD,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,KAAK;SACT,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;SACtB,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAClE,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;IAE1D,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,eAAe,IAAI,IAAI,CAAC;IACjC,CAAC;IAED,IAAI,eAAe,IAAI,gBAAgB,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QAClE,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,OAAO,gBAAgB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AACrC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAClE,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;IACpD,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,YAAqB;IACvD,MAAM,QAAQ,GAAG,YAAY,EAAE,IAAI,EAAE,IAAI,sBAAsB,EAAE,CAAC;IAClE,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;IACtC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAChD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,0BAA0B,CAAC,YAAoB;IACtD,MAAM,sBAAsB,GAC1B,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,WAAW,EAAE,KAAK,MAAM,CAAC;IACjE,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB;QACtD,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,EAAE,CAAC;QAC9C,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,WAAW;QAC9C,QAAQ,EAAE,YAAY;QACtB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO;QACzB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW;QACjC,cAAc,EAAE,iBAAiB,EAAE;QACnC,OAAO,EAAE;YACP,OAAO,EAAE,KAAK;YACd,sBAAsB,EAAE,sBAAsB,IAAI,IAAI;YACtD,gBAAgB,EAAE,IAAI;YACtB,MAAM,EAAE,KAAK;SACd;QACD,iBAAiB,EAAE,iBAAiB,GAAG,IAAI;KAC9B,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,yBAAyB,CACtC,YAAqB;IAErB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;IACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;QACtC,MAAM,iBAAiB,GACrB,OAAO,CAAC,MAAM,GAAG,CAAC;YAChB,CAAC,CAAC,YAAY,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YACnC,CAAC,CAAC,8DAA8D,CAAC;QAErE,OAAO;YACL,YAAY,EAAE,EAAE;YAChB,KAAK,EAAE,mCAAmC,iBAAiB,2EAA2E;SACvI,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,YAAoB;IAEpB,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC5C,IAAI,QAAQ,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QACnC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;QACD,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,MAAM,GAAG,0BAA0B,CAAC,YAAY,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IACrB,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IACjC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,YAAqB;IAErB,MAAM,QAAQ,GAAG,MAAM,yBAAyB,CAAC,YAAY,CAAC,CAAC;IAC/D,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO;YACL,OAAO,EAAE,IAA8B;YACvC,KAAK,EAAE,QAAQ,CAAC,KAAK;SACtB,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC9D,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,YAAqB;IAErB,MAAM,QAAQ,GAAG,MAAM,yBAAyB,CAAC,YAAY,CAAC,CAAC;IAC/D,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO;YACL,IAAI,EAAE,IAAqC;YAC3C,KAAK,EAAE,QAAQ,CAAC,KAAK;SACtB,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG;QACb,GAAG,0BAA0B,CAAC,QAAQ,CAAC,YAAY,CAAC;QACpD,IAAI,EAAE;YACJ,GAAG,EAAE,CAAC;YACN,GAAG,EAAE,CAAC;YACN,iBAAiB,EAAE,KAAK;SACzB;KACY,CAAC;IAEhB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IACrB,OAAO,EAAE,IAAI,EAAE,CAAC;AAClB,CAAC"}