@eamonboyle/mssql-mcp 1.1.0 → 1.3.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 (144) hide show
  1. package/README.md +169 -22
  2. package/dist/config.d.ts +13 -0
  3. package/dist/config.d.ts.map +1 -0
  4. package/dist/config.js +74 -0
  5. package/dist/config.js.map +1 -0
  6. package/dist/db.d.ts +29 -24
  7. package/dist/db.d.ts.map +1 -1
  8. package/dist/db.js +144 -112
  9. package/dist/db.js.map +1 -1
  10. package/dist/index.d.ts +2 -2
  11. package/dist/index.js +382 -122
  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 +16 -0
  18. package/dist/promptRegistry.d.ts.map +1 -0
  19. package/dist/promptRegistry.js +112 -0
  20. package/dist/promptRegistry.js.map +1 -0
  21. package/dist/resourceRegistry.d.ts +14 -0
  22. package/dist/resourceRegistry.d.ts.map +1 -0
  23. package/dist/resourceRegistry.js +311 -0
  24. package/dist/resourceRegistry.js.map +1 -0
  25. package/dist/schema.d.ts +57 -0
  26. package/dist/schema.d.ts.map +1 -0
  27. package/dist/schema.js +390 -0
  28. package/dist/schema.js.map +1 -0
  29. package/dist/serverState.d.ts +28 -0
  30. package/dist/serverState.d.ts.map +1 -0
  31. package/dist/serverState.js +99 -0
  32. package/dist/serverState.js.map +1 -0
  33. package/dist/sql.d.ts +7 -0
  34. package/dist/sql.d.ts.map +1 -0
  35. package/dist/sql.js +73 -0
  36. package/dist/sql.js.map +1 -0
  37. package/dist/toolRegistry.d.ts +20 -0
  38. package/dist/toolRegistry.d.ts.map +1 -0
  39. package/dist/toolRegistry.js +547 -0
  40. package/dist/toolRegistry.js.map +1 -0
  41. package/dist/tools/AnalyzeTableTool.d.ts +37 -0
  42. package/dist/tools/AnalyzeTableTool.d.ts.map +1 -0
  43. package/dist/tools/AnalyzeTableTool.js +81 -0
  44. package/dist/tools/AnalyzeTableTool.js.map +1 -0
  45. package/dist/tools/CreateIndexTool.d.ts +30 -23
  46. package/dist/tools/CreateIndexTool.d.ts.map +1 -1
  47. package/dist/tools/CreateIndexTool.js +47 -77
  48. package/dist/tools/CreateIndexTool.js.map +1 -1
  49. package/dist/tools/CreateTableTool.d.ts +18 -11
  50. package/dist/tools/CreateTableTool.d.ts.map +1 -1
  51. package/dist/tools/CreateTableTool.js +37 -61
  52. package/dist/tools/CreateTableTool.js.map +1 -1
  53. package/dist/tools/DeleteDataTool.d.ts +22 -0
  54. package/dist/tools/DeleteDataTool.d.ts.map +1 -0
  55. package/dist/tools/DeleteDataTool.js +38 -0
  56. package/dist/tools/DeleteDataTool.js.map +1 -0
  57. package/dist/tools/DescribeObjectTool.d.ts +21 -0
  58. package/dist/tools/DescribeObjectTool.d.ts.map +1 -0
  59. package/dist/tools/DescribeObjectTool.js +31 -0
  60. package/dist/tools/DescribeObjectTool.js.map +1 -0
  61. package/dist/tools/DescribeRelationshipsTool.d.ts +20 -0
  62. package/dist/tools/DescribeRelationshipsTool.d.ts.map +1 -0
  63. package/dist/tools/DescribeRelationshipsTool.js +24 -0
  64. package/dist/tools/DescribeRelationshipsTool.js.map +1 -0
  65. package/dist/tools/DescribeTableTool.d.ts +19 -20
  66. package/dist/tools/DescribeTableTool.d.ts.map +1 -1
  67. package/dist/tools/DescribeTableTool.js +23 -44
  68. package/dist/tools/DescribeTableTool.js.map +1 -1
  69. package/dist/tools/DropTableTool.d.ts +13 -11
  70. package/dist/tools/DropTableTool.d.ts.map +1 -1
  71. package/dist/tools/DropTableTool.js +30 -44
  72. package/dist/tools/DropTableTool.js.map +1 -1
  73. package/dist/tools/ExplainQueryTool.d.ts +32 -0
  74. package/dist/tools/ExplainQueryTool.d.ts.map +1 -0
  75. package/dist/tools/ExplainQueryTool.js +102 -0
  76. package/dist/tools/ExplainQueryTool.js.map +1 -0
  77. package/dist/tools/InsertDataTool.d.ts +20 -16
  78. package/dist/tools/InsertDataTool.d.ts.map +1 -1
  79. package/dist/tools/InsertDataTool.js +91 -108
  80. package/dist/tools/InsertDataTool.js.map +1 -1
  81. package/dist/tools/ListDatabasesTool.d.ts +16 -0
  82. package/dist/tools/ListDatabasesTool.d.ts.map +1 -0
  83. package/dist/tools/ListDatabasesTool.js +26 -0
  84. package/dist/tools/ListDatabasesTool.js.map +1 -0
  85. package/dist/tools/ListForeignKeysTool.d.ts +19 -0
  86. package/dist/tools/ListForeignKeysTool.d.ts.map +1 -0
  87. package/dist/tools/ListForeignKeysTool.js +24 -0
  88. package/dist/tools/ListForeignKeysTool.js.map +1 -0
  89. package/dist/tools/ListObjectsTool.d.ts +20 -0
  90. package/dist/tools/ListObjectsTool.d.ts.map +1 -0
  91. package/dist/tools/ListObjectsTool.js +26 -0
  92. package/dist/tools/ListObjectsTool.js.map +1 -0
  93. package/dist/tools/ListTableTool.d.ts +20 -16
  94. package/dist/tools/ListTableTool.d.ts.map +1 -1
  95. package/dist/tools/ListTableTool.js +32 -51
  96. package/dist/tools/ListTableTool.js.map +1 -1
  97. package/dist/tools/PreviewDeleteTool.d.ts +28 -0
  98. package/dist/tools/PreviewDeleteTool.d.ts.map +1 -0
  99. package/dist/tools/PreviewDeleteTool.js +31 -0
  100. package/dist/tools/PreviewDeleteTool.js.map +1 -0
  101. package/dist/tools/PreviewUpdateTool.d.ts +30 -0
  102. package/dist/tools/PreviewUpdateTool.d.ts.map +1 -0
  103. package/dist/tools/PreviewUpdateTool.js +34 -0
  104. package/dist/tools/PreviewUpdateTool.js.map +1 -0
  105. package/dist/tools/ReadDataTool.d.ts +35 -33
  106. package/dist/tools/ReadDataTool.d.ts.map +1 -1
  107. package/dist/tools/ReadDataTool.js +92 -105
  108. package/dist/tools/ReadDataTool.js.map +1 -1
  109. package/dist/tools/SearchDataTool.d.ts +27 -0
  110. package/dist/tools/SearchDataTool.d.ts.map +1 -0
  111. package/dist/tools/SearchDataTool.js +61 -0
  112. package/dist/tools/SearchDataTool.js.map +1 -0
  113. package/dist/tools/UpdateDataTool.d.ts +22 -16
  114. package/dist/tools/UpdateDataTool.d.ts.map +1 -1
  115. package/dist/tools/UpdateDataTool.js +48 -65
  116. package/dist/tools/UpdateDataTool.js.map +1 -1
  117. package/dist/validation.d.ts +13 -13
  118. package/dist/validation.js +133 -133
  119. package/dist/validation.js.map +1 -1
  120. package/dist/writePreview.d.ts +20 -0
  121. package/dist/writePreview.d.ts.map +1 -0
  122. package/dist/writePreview.js +27 -0
  123. package/dist/writePreview.js.map +1 -0
  124. package/dist/writePreviewGrant.d.ts +18 -0
  125. package/dist/writePreviewGrant.d.ts.map +1 -0
  126. package/dist/writePreviewGrant.js +71 -0
  127. package/dist/writePreviewGrant.js.map +1 -0
  128. package/dist/writePreviewGrantStore.d.ts +10 -0
  129. package/dist/writePreviewGrantStore.d.ts.map +1 -0
  130. package/dist/writePreviewGrantStore.js +47 -0
  131. package/dist/writePreviewGrantStore.js.map +1 -0
  132. package/dist/writeSafety.d.ts +21 -0
  133. package/dist/writeSafety.d.ts.map +1 -0
  134. package/dist/writeSafety.js +169 -0
  135. package/dist/writeSafety.js.map +1 -0
  136. package/package.json +6 -5
  137. package/dist/__tests__/db.test.d.ts +0 -2
  138. package/dist/__tests__/db.test.d.ts.map +0 -1
  139. package/dist/__tests__/db.test.js +0 -204
  140. package/dist/__tests__/db.test.js.map +0 -1
  141. package/dist/__tests__/validation.test.d.ts +0 -2
  142. package/dist/__tests__/validation.test.d.ts.map +0 -1
  143. package/dist/__tests__/validation.test.js +0 -111
  144. package/dist/__tests__/validation.test.js.map +0 -1
package/dist/index.js CHANGED
@@ -1,123 +1,383 @@
1
- #!/usr/bin/env node
2
- // External imports
3
- import * as dotenv from "dotenv";
4
- import { Server } from "@modelcontextprotocol/sdk/server/index.js";
5
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
6
- dotenv.config();
7
- import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
8
- // Internal imports
9
- import { UpdateDataTool } from "./tools/UpdateDataTool.js";
10
- import { InsertDataTool } from "./tools/InsertDataTool.js";
11
- import { ReadDataTool } from "./tools/ReadDataTool.js";
12
- import { CreateTableTool } from "./tools/CreateTableTool.js";
13
- import { CreateIndexTool } from "./tools/CreateIndexTool.js";
14
- import { ListTableTool } from "./tools/ListTableTool.js";
15
- import { DropTableTool } from "./tools/DropTableTool.js";
16
- import { DescribeTableTool } from "./tools/DescribeTableTool.js";
17
- const updateDataTool = new UpdateDataTool();
18
- const insertDataTool = new InsertDataTool();
19
- const readDataTool = new ReadDataTool();
20
- const createTableTool = new CreateTableTool();
21
- const createIndexTool = new CreateIndexTool();
22
- const listTableTool = new ListTableTool();
23
- const dropTableTool = new DropTableTool();
24
- const describeTableTool = new DescribeTableTool();
25
- const server = new Server({
26
- name: "mssql-mcp-server",
27
- version: "0.1.0",
28
- }, {
29
- capabilities: {
30
- tools: {},
31
- },
32
- });
33
- // Read READONLY env variable
34
- const isReadOnly = process.env.READONLY === "true";
35
- // Request handlers
36
- server.setRequestHandler(ListToolsRequestSchema, async () => ({
37
- tools: isReadOnly
38
- ? [listTableTool, readDataTool, describeTableTool] // todo: add searchDataTool to the list of tools available in readonly mode once implemented
39
- : [
40
- insertDataTool,
41
- readDataTool,
42
- describeTableTool,
43
- updateDataTool,
44
- createTableTool,
45
- createIndexTool,
46
- dropTableTool,
47
- listTableTool,
48
- ], // add all new tools here
49
- }));
50
- server.setRequestHandler(CallToolRequestSchema, async (request) => {
51
- const { name, arguments: args } = request.params;
52
- try {
53
- let result;
54
- switch (name) {
55
- case insertDataTool.name:
56
- result = await insertDataTool.run(args);
57
- break;
58
- case readDataTool.name:
59
- result = await readDataTool.run(args);
60
- break;
61
- case updateDataTool.name:
62
- result = await updateDataTool.run(args);
63
- break;
64
- case createTableTool.name:
65
- result = await createTableTool.run(args);
66
- break;
67
- case createIndexTool.name:
68
- result = await createIndexTool.run(args);
69
- break;
70
- case listTableTool.name:
71
- result = await listTableTool.run(args);
72
- break;
73
- case dropTableTool.name:
74
- result = await dropTableTool.run(args);
75
- break;
76
- case describeTableTool.name:
77
- if (!args || typeof args.tableName !== "string") {
78
- return {
79
- content: [
80
- {
81
- type: "text",
82
- text: `Missing or invalid 'tableName' argument for describe_table tool.`,
83
- },
84
- ],
85
- isError: true,
86
- };
87
- }
88
- result = await describeTableTool.run(args);
89
- break;
90
- default:
91
- return {
92
- content: [{ type: "text", text: `Unknown tool: ${name}` }],
93
- isError: true,
94
- };
95
- }
96
- return {
97
- content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
98
- };
99
- }
100
- catch (error) {
101
- return {
102
- content: [{ type: "text", text: `Error occurred: ${error}` }],
103
- isError: true,
104
- };
105
- }
106
- });
107
- // Server startup
108
- async function runServer() {
109
- try {
110
- const transport = new StdioServerTransport();
111
- await server.connect(transport);
112
- }
113
- catch (error) {
114
- console.error("Fatal error running server:", error);
115
- process.exit(1);
116
- }
117
- }
118
- runServer().catch((error) => {
119
- console.error("Fatal error running server:", error);
120
- process.exit(1);
121
- });
122
- // Tools call getSqlRequest(databaseName) internally - no wrapping needed
1
+ #!/usr/bin/env node
2
+ import { createServer } from "node:http";
3
+ import * as dotenv from "dotenv";
4
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
5
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
6
+ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
7
+ dotenv.config();
8
+ import { getMaxRows, getMcpHttpHost, getMcpHttpPort, getMcpTransport, getMaxWriteRows, getQueryTimeoutMs, isDdlEnabled, isWritePreviewRequired, } from "./config.js";
9
+ import { getAllowedDatabases } from "./db.js";
10
+ import { createResourceLink, createToolResult, normalizeToolResult, } from "./mcpResults.js";
11
+ import { registerPrompts } from "./promptRegistry.js";
12
+ import { registerResources } from "./resourceRegistry.js";
13
+ import { ServerState } from "./serverState.js";
14
+ import { getAvailableTools } from "./toolRegistry.js";
15
+ import { fingerprintForWriteTool } from "./writePreviewGrant.js";
16
+ import { writePreviewGrantStore } from "./writePreviewGrantStore.js";
17
+ import { previewFilteredRows } from "./writePreview.js";
18
+ const SERVER_VERSION = "1.3.0";
19
+ const SERVER_NAME = "mssql-mcp-server";
20
+ function createInstructions(isReadOnly) {
21
+ const baseInstructions = "Inspect schema first with list_objects, list_table, describe_object, or describe_table. Prefer read_data, search_data, analyze_table, describe_relationships, and explain_query for safe analysis. For update_data and delete_data, run preview_update or preview_delete first, then pass the returned previewToken with confirmed=true when REQUIRE_WRITE_PREVIEW is enabled (default).";
22
+ const readOnlyInstructions = " This server is READONLY: write and DDL tools are disabled. Never use sqlcmd, SSMS, other DB CLI tools, or terminal scripts to bypass the MCP safety model.";
23
+ return isReadOnly ? baseInstructions + readOnlyInstructions : baseInstructions;
24
+ }
25
+ function createServerInstance(state) {
26
+ const isReadOnly = process.env.READONLY === "true";
27
+ const allowedDatabases = getAllowedDatabases();
28
+ const availableTools = getAvailableTools(isReadOnly);
29
+ const server = new McpServer({
30
+ name: SERVER_NAME,
31
+ version: SERVER_VERSION,
32
+ websiteUrl: "https://github.com/eamonboyle/mssql-mcp",
33
+ icons: [
34
+ {
35
+ src: "https://raw.githubusercontent.com/eamonboyle/mssql-mcp/main/src/img/logo.png",
36
+ mimeType: "image/png",
37
+ },
38
+ ],
39
+ }, {
40
+ instructions: createInstructions(isReadOnly),
41
+ capabilities: {
42
+ logging: {},
43
+ },
44
+ });
45
+ for (const definition of availableTools) {
46
+ server.registerTool(definition.tool.name, {
47
+ title: definition.tool.name
48
+ .split("_")
49
+ .map((part) => part[0].toUpperCase() + part.slice(1))
50
+ .join(" "),
51
+ description: definition.tool.description,
52
+ inputSchema: definition.inputSchema,
53
+ outputSchema: definition.outputSchema,
54
+ annotations: definition.annotations,
55
+ }, async (args, extra) => {
56
+ if (definition.requiresDdl &&
57
+ !isDdlEnabled()) {
58
+ return createToolResult({
59
+ version: 1,
60
+ success: false,
61
+ message: "DDL tools are disabled. Set ENABLE_DDL=true to allow create_table, create_index, and drop_table.",
62
+ error: {
63
+ code: "DDL_DISABLED",
64
+ },
65
+ });
66
+ }
67
+ const requestArgs = typeof args === "object" && args !== null
68
+ ? { ...args }
69
+ : {};
70
+ if (definition.requiresConfirmation && requestArgs.confirmed !== true) {
71
+ try {
72
+ const elicited = await server.server.elicitInput({
73
+ mode: "form",
74
+ message: `Confirm ${definition.tool.name} after reviewing its preview and impact.`,
75
+ requestedSchema: {
76
+ type: "object",
77
+ properties: {
78
+ confirmed: {
79
+ type: "boolean",
80
+ title: "Confirmed",
81
+ description: "I reviewed the preview and want to proceed with this operation.",
82
+ },
83
+ },
84
+ required: ["confirmed"],
85
+ },
86
+ });
87
+ if (elicited.action !== "accept" || !elicited.content?.confirmed) {
88
+ if (definition.writePreviewTool && isWritePreviewRequired()) {
89
+ return createToolResult({
90
+ version: 1,
91
+ success: false,
92
+ message: `Confirmation canceled. Call ${definition.writePreviewTool}, then run ${definition.tool.name} with the returned previewToken and confirmed=true.`,
93
+ error: { code: "PREVIEW_REQUIRED" },
94
+ });
95
+ }
96
+ if (definition.writePreviewTool) {
97
+ return createToolResult({
98
+ version: 1,
99
+ success: false,
100
+ message: `Confirmation canceled. Retry with confirmed=true after reviewing ${definition.writePreviewTool}.`,
101
+ error: { code: "CONFIRMATION_REQUIRED" },
102
+ });
103
+ }
104
+ return createToolResult({
105
+ version: 1,
106
+ success: false,
107
+ message: "Confirmation canceled. Retry with confirmed=true after reviewing the operation.",
108
+ error: { code: "CONFIRMATION_REQUIRED" },
109
+ });
110
+ }
111
+ requestArgs.confirmed = true;
112
+ }
113
+ catch {
114
+ if (definition.writePreviewTool && isWritePreviewRequired()) {
115
+ return createToolResult({
116
+ version: 1,
117
+ success: false,
118
+ message: `Interactive confirmation is unavailable. Call ${definition.writePreviewTool}, then run ${definition.tool.name} with previewToken and confirmed=true.`,
119
+ error: { code: "PREVIEW_REQUIRED" },
120
+ });
121
+ }
122
+ if (definition.writePreviewTool) {
123
+ return createToolResult({
124
+ version: 1,
125
+ success: false,
126
+ message: `Interactive confirmation is unavailable. Retry with confirmed=true after reviewing ${definition.writePreviewTool}.`,
127
+ error: { code: "CONFIRMATION_REQUIRED" },
128
+ });
129
+ }
130
+ return createToolResult({
131
+ version: 1,
132
+ success: false,
133
+ message: "Interactive confirmation is unavailable. Retry with confirmed=true after reviewing the operation.",
134
+ error: { code: "CONFIRMATION_REQUIRED" },
135
+ });
136
+ }
137
+ }
138
+ if (definition.tool.name === "update_data" || definition.tool.name === "delete_data") {
139
+ const preview = await previewFilteredRows({
140
+ tableName: String(requestArgs.tableName),
141
+ schemaName: typeof requestArgs.schemaName === "string"
142
+ ? requestArgs.schemaName
143
+ : undefined,
144
+ filters: requestArgs.filters ?? [],
145
+ databaseName: typeof requestArgs.databaseName === "string"
146
+ ? requestArgs.databaseName
147
+ : undefined,
148
+ limit: 1,
149
+ }).catch((error) => ({
150
+ affectedRowCount: -1,
151
+ rows: [],
152
+ query: "",
153
+ countQuery: "",
154
+ previewError: String(error),
155
+ }));
156
+ if ("previewError" in preview) {
157
+ return createToolResult({
158
+ version: 1,
159
+ success: false,
160
+ message: `Failed to validate write impact: ${preview.previewError}`,
161
+ error: {
162
+ code: "WRITE_PREVIEW_FAILED",
163
+ },
164
+ });
165
+ }
166
+ if (preview.affectedRowCount > getMaxWriteRows()) {
167
+ return createToolResult({
168
+ version: 1,
169
+ success: false,
170
+ message: `Write exceeds MAX_WRITE_ROWS (${getMaxWriteRows()}). Matching rows: ${preview.affectedRowCount}. Narrow the filters or raise MAX_WRITE_ROWS.`,
171
+ error: {
172
+ code: "WRITE_LIMIT_EXCEEDED",
173
+ },
174
+ data: {
175
+ affectedRowCount: preview.affectedRowCount,
176
+ },
177
+ });
178
+ }
179
+ if (isWritePreviewRequired()) {
180
+ const writeName = definition.tool.name;
181
+ const fingerprint = fingerprintForWriteTool(writeName, requestArgs);
182
+ const previewToken = typeof requestArgs.previewToken === "string" ? requestArgs.previewToken.trim() : "";
183
+ if (!writePreviewGrantStore.consume(previewToken, fingerprint, writeName)) {
184
+ return createToolResult({
185
+ version: 1,
186
+ success: false,
187
+ message: `Invalid or expired write preview token. Call ${writeName === "update_data" ? "preview_update" : "preview_delete"} with the same table, filters${writeName === "update_data" ? ", and updates" : ""}, then pass the returned previewToken with confirmed=true.`,
188
+ error: { code: "PREVIEW_TOKEN_INVALID" },
189
+ });
190
+ }
191
+ }
192
+ }
193
+ if (definition.tool.name === "insert_data") {
194
+ const rows = Array.isArray(requestArgs.data) ? requestArgs.data.length : 1;
195
+ if (rows > getMaxWriteRows()) {
196
+ return createToolResult({
197
+ version: 1,
198
+ success: false,
199
+ message: `Insert exceeds MAX_WRITE_ROWS (${getMaxWriteRows()}). Requested rows: ${rows}.`,
200
+ error: {
201
+ code: "WRITE_LIMIT_EXCEEDED",
202
+ },
203
+ data: {
204
+ requestedRows: rows,
205
+ },
206
+ });
207
+ }
208
+ }
209
+ if (definition.tool.name === "explain_query" &&
210
+ extra._meta?.progressToken !== undefined) {
211
+ await extra.sendNotification({
212
+ method: "notifications/progress",
213
+ params: {
214
+ progressToken: extra._meta.progressToken,
215
+ progress: 1,
216
+ total: 2,
217
+ message: "Generating estimated execution plan",
218
+ },
219
+ });
220
+ }
221
+ const rawResult = await definition.tool.run(requestArgs);
222
+ if ((definition.tool.name === "preview_update" ||
223
+ definition.tool.name === "preview_delete") &&
224
+ isWritePreviewRequired() &&
225
+ typeof rawResult === "object" &&
226
+ rawResult !== null &&
227
+ rawResult.success === true) {
228
+ const fingerprint = fingerprintForWriteTool(definition.tool.name, requestArgs);
229
+ const writeTool = definition.tool.name === "preview_update" ? "update_data" : "delete_data";
230
+ const previewToken = writePreviewGrantStore.issue(fingerprint, writeTool);
231
+ const withData = rawResult;
232
+ if (typeof withData.data === "object" && withData.data !== null && !Array.isArray(withData.data)) {
233
+ withData.data = { ...withData.data, previewToken };
234
+ }
235
+ else {
236
+ withData.data = { preview: withData.data, previewToken };
237
+ }
238
+ }
239
+ const payload = normalizeToolResult(rawResult, `${definition.tool.name} completed.`);
240
+ const extraContent = [];
241
+ if (definition.tool.name === "explain_query" && typeof rawResult === "object" && rawResult) {
242
+ const planXml = typeof rawResult.planXml === "string"
243
+ ? rawResult.planXml
244
+ : undefined;
245
+ const databaseName = typeof requestArgs.databaseName === "string"
246
+ ? requestArgs.databaseName
247
+ : undefined;
248
+ if (planXml) {
249
+ const plan = state.storeQueryPlan(databaseName, String(requestArgs.query ?? ""), planXml);
250
+ extraContent.push(createResourceLink(`mssql://query-plan/${plan.id}`, "query-plan", "Execution Plan", "Stored estimated execution plan for this query.", "application/json"));
251
+ payload.meta = {
252
+ ...(payload.meta ?? {}),
253
+ queryPlanUri: `mssql://query-plan/${plan.id}`,
254
+ };
255
+ await server.server.sendResourceListChanged();
256
+ await server.server.sendResourceUpdated({
257
+ uri: `mssql://query-plan/${plan.id}`,
258
+ });
259
+ }
260
+ }
261
+ if ((definition.tool.name === "read_data" || definition.tool.name === "search_data") &&
262
+ payload.success) {
263
+ const data = payload.data;
264
+ const recordCount = Array.isArray(data)
265
+ ? data.length
266
+ : Array.isArray(data?.data)
267
+ ? data.data.length
268
+ : 0;
269
+ if (recordCount >= 25 || payload.truncated) {
270
+ const result = state.storeQueryResult(typeof requestArgs.databaseName === "string"
271
+ ? requestArgs.databaseName
272
+ : undefined, definition.tool.name, data);
273
+ extraContent.push(createResourceLink(`mssql://query-result/${result.id}`, "query-result", "Query Result", "Stored query result for larger result-grid rendering.", "application/json"));
274
+ payload.meta = {
275
+ ...(payload.meta ?? {}),
276
+ queryResultUri: `mssql://query-result/${result.id}`,
277
+ };
278
+ await server.server.sendResourceListChanged();
279
+ await server.server.sendResourceUpdated({
280
+ uri: `mssql://query-result/${result.id}`,
281
+ });
282
+ }
283
+ }
284
+ if (definition.tool.name === "explain_query" &&
285
+ extra._meta?.progressToken !== undefined) {
286
+ await extra.sendNotification({
287
+ method: "notifications/progress",
288
+ params: {
289
+ progressToken: extra._meta.progressToken,
290
+ progress: 2,
291
+ total: 2,
292
+ message: "Execution plan ready",
293
+ },
294
+ });
295
+ }
296
+ return createToolResult(payload, extraContent);
297
+ });
298
+ }
299
+ registerResources(server, {
300
+ serverName: SERVER_NAME,
301
+ serverVersion: SERVER_VERSION,
302
+ isReadOnly,
303
+ allowedDatabases,
304
+ toolNames: availableTools.map((tool) => tool.tool.name),
305
+ maxRows: getMaxRows(),
306
+ queryTimeoutMs: getQueryTimeoutMs(),
307
+ state,
308
+ });
309
+ registerPrompts(server, { isReadOnly });
310
+ return server;
311
+ }
312
+ async function readRequestBody(req) {
313
+ const chunks = [];
314
+ for await (const chunk of req) {
315
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
316
+ }
317
+ if (chunks.length === 0) {
318
+ return undefined;
319
+ }
320
+ const raw = Buffer.concat(chunks).toString("utf8").trim();
321
+ if (!raw) {
322
+ return undefined;
323
+ }
324
+ return JSON.parse(raw);
325
+ }
326
+ async function handleHttpRequest(req, res) {
327
+ const server = createServerInstance(new ServerState());
328
+ const transport = new StreamableHTTPServerTransport({
329
+ sessionIdGenerator: undefined,
330
+ });
331
+ try {
332
+ await server.connect(transport);
333
+ const parsedBody = req.method === "POST" ? await readRequestBody(req) : undefined;
334
+ await transport.handleRequest(req, res, parsedBody);
335
+ }
336
+ catch (error) {
337
+ console.error("HTTP transport error:", error);
338
+ if (!res.headersSent) {
339
+ res.writeHead(500, { "content-type": "application/json" });
340
+ res.end(JSON.stringify({
341
+ jsonrpc: "2.0",
342
+ error: {
343
+ code: -32603,
344
+ message: "Internal server error",
345
+ },
346
+ id: null,
347
+ }));
348
+ }
349
+ }
350
+ finally {
351
+ await transport.close().catch(() => undefined);
352
+ await server.close().catch(() => undefined);
353
+ }
354
+ }
355
+ async function runStdioServer() {
356
+ const server = createServerInstance(new ServerState());
357
+ const transport = new StdioServerTransport();
358
+ await server.connect(transport);
359
+ }
360
+ async function runHttpServer() {
361
+ const host = getMcpHttpHost();
362
+ const port = getMcpHttpPort();
363
+ const httpServer = createServer((req, res) => {
364
+ void handleHttpRequest(req, res);
365
+ });
366
+ await new Promise((resolve, reject) => {
367
+ httpServer.once("error", reject);
368
+ httpServer.listen(port, host, () => resolve());
369
+ });
370
+ console.error(`MCP Streamable HTTP server listening on http://${host}:${port}`);
371
+ }
372
+ async function main() {
373
+ if (getMcpTransport() === "http") {
374
+ await runHttpServer();
375
+ return;
376
+ }
377
+ await runStdioServer();
378
+ }
379
+ main().catch((error) => {
380
+ console.error("Fatal error running server:", error);
381
+ process.exit(1);
382
+ });
123
383
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { CallToolResult, ContentBlock, ResourceLink } from "@modelcontextprotocol/sdk/types.js";
2
+ import { z } from "zod";
3
+ export declare const toolResultOutputSchema: {
4
+ version: z.ZodLiteral<1>;
5
+ success: z.ZodBoolean;
6
+ message: z.ZodString;
7
+ data: z.ZodOptional<z.ZodUnknown>;
8
+ meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
9
+ warnings: z.ZodOptional<z.ZodArray<z.ZodString>>;
10
+ error: z.ZodOptional<z.ZodObject<{
11
+ code: z.ZodString;
12
+ details: z.ZodOptional<z.ZodUnknown>;
13
+ }, z.core.$strip>>;
14
+ pagination: z.ZodOptional<z.ZodObject<{
15
+ returned: z.ZodNumber;
16
+ total: z.ZodOptional<z.ZodNumber>;
17
+ nextCursor: z.ZodOptional<z.ZodString>;
18
+ }, z.core.$strip>>;
19
+ truncated: z.ZodOptional<z.ZodBoolean>;
20
+ };
21
+ export interface StandardToolPayload extends Record<string, unknown> {
22
+ version: 1;
23
+ success: boolean;
24
+ message: string;
25
+ data?: unknown;
26
+ meta?: Record<string, unknown>;
27
+ warnings?: string[];
28
+ error?: {
29
+ code: string;
30
+ details?: unknown;
31
+ };
32
+ pagination?: {
33
+ returned: number;
34
+ total?: number;
35
+ nextCursor?: string;
36
+ };
37
+ truncated?: boolean;
38
+ }
39
+ export declare function classifyToolErrorCode(raw: Record<string, unknown>, message: string, fallback?: string): string;
40
+ export declare function buildInlineDataAttachment(data: unknown): string;
41
+ export declare function createResourceLink(uri: string, name: string, title: string, description: string, mimeType?: string): ResourceLink;
42
+ /**
43
+ * JSON-serializable copy of the tool payload for MCP `structuredContent`.
44
+ * Required when tools declare `outputSchema` — the SDK rejects missing structured output on success.
45
+ */
46
+ export declare function toToolStructuredContent(payload: StandardToolPayload): Record<string, unknown>;
47
+ export declare function createToolResult(payload: StandardToolPayload, extraContent?: ContentBlock[]): CallToolResult;
48
+ export declare function normalizeToolResult(rawResult: unknown, fallbackMessage: string): StandardToolPayload;
49
+ //# sourceMappingURL=mcpResults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpResults.d.ts","sourceRoot":"","sources":["../src/mcpResults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACrG,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;CAqBV,CAAC;AAE1B,MAAM,WAAW,mBAAoB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAClE,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;IACF,UAAU,CAAC,EAAE;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,OAAO,EAAE,MAAM,EACf,QAAQ,SAA0B,GACjC,MAAM,CAoDR;AA+BD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CA2B/D;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,QAAQ,SAAqB,GAC5B,YAAY,CASd;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,mBAAmB,GAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuBzB;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,mBAAmB,EAC5B,YAAY,GAAE,YAAY,EAAO,GAChC,cAAc,CAkBhB;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,OAAO,EAClB,eAAe,EAAE,MAAM,GACtB,mBAAmB,CA4FrB"}