@eamonboyle/mssql-mcp 1.6.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/README.md +62 -12
  2. package/dist/apps/queryResultsApp.d.ts +18 -0
  3. package/dist/apps/queryResultsApp.d.ts.map +1 -0
  4. package/dist/apps/queryResultsApp.js +272 -0
  5. package/dist/apps/queryResultsApp.js.map +1 -0
  6. package/dist/checkNodeVersion.d.ts +2 -0
  7. package/dist/checkNodeVersion.d.ts.map +1 -0
  8. package/dist/checkNodeVersion.js +9 -0
  9. package/dist/checkNodeVersion.js.map +1 -0
  10. package/dist/config.d.ts +30 -2
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/config.js +66 -5
  13. package/dist/config.js.map +1 -1
  14. package/dist/confirmationMessage.d.ts +2 -0
  15. package/dist/confirmationMessage.d.ts.map +1 -0
  16. package/dist/confirmationMessage.js +105 -0
  17. package/dist/confirmationMessage.js.map +1 -0
  18. package/dist/db.d.ts +20 -0
  19. package/dist/db.d.ts.map +1 -1
  20. package/dist/db.js +118 -16
  21. package/dist/db.js.map +1 -1
  22. package/dist/filteredRead.js +0 -0
  23. package/dist/httpServer.d.ts +25 -0
  24. package/dist/httpServer.d.ts.map +1 -0
  25. package/dist/httpServer.js +128 -0
  26. package/dist/httpServer.js.map +1 -0
  27. package/dist/index.d.ts +1 -1
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +43 -395
  30. package/dist/index.js.map +1 -1
  31. package/dist/mcpResults.d.ts +1 -1
  32. package/dist/mcpResults.d.ts.map +1 -1
  33. package/dist/mcpResults.js +2 -2
  34. package/dist/mcpResults.js.map +1 -1
  35. package/dist/nodeVersion.d.ts +14 -0
  36. package/dist/nodeVersion.d.ts.map +1 -0
  37. package/dist/nodeVersion.js +23 -0
  38. package/dist/nodeVersion.js.map +1 -0
  39. package/dist/packageInfo.d.ts +3 -0
  40. package/dist/packageInfo.d.ts.map +1 -0
  41. package/dist/packageInfo.js +5 -0
  42. package/dist/packageInfo.js.map +1 -0
  43. package/dist/promptRegistry.d.ts +1 -1
  44. package/dist/promptRegistry.d.ts.map +1 -1
  45. package/dist/promptRegistry.js +1 -1
  46. package/dist/promptRegistry.js.map +1 -1
  47. package/dist/resourceRegistry.d.ts +3 -1
  48. package/dist/resourceRegistry.d.ts.map +1 -1
  49. package/dist/resourceRegistry.js +3 -2
  50. package/dist/resourceRegistry.js.map +1 -1
  51. package/dist/schema.js +0 -0
  52. package/dist/server.d.ts +5 -0
  53. package/dist/server.d.ts.map +1 -0
  54. package/dist/server.js +320 -0
  55. package/dist/server.js.map +1 -0
  56. package/dist/serverState.js +2 -4
  57. package/dist/serverState.js.map +1 -1
  58. package/dist/sql.js +0 -0
  59. package/dist/sqlErrors.d.ts +10 -0
  60. package/dist/sqlErrors.d.ts.map +1 -0
  61. package/dist/sqlErrors.js +32 -0
  62. package/dist/sqlErrors.js.map +1 -0
  63. package/dist/toolRegistry.d.ts +1 -1
  64. package/dist/toolRegistry.d.ts.map +1 -1
  65. package/dist/toolRegistry.js +1 -1
  66. package/dist/toolRegistry.js.map +1 -1
  67. package/dist/tools/AnalyzeTableTool.js +2 -4
  68. package/dist/tools/AnalyzeTableTool.js.map +1 -1
  69. package/dist/tools/CreateIndexTool.js +2 -4
  70. package/dist/tools/CreateIndexTool.js.map +1 -1
  71. package/dist/tools/CreateTableTool.js +2 -4
  72. package/dist/tools/CreateTableTool.js.map +1 -1
  73. package/dist/tools/DeleteDataTool.js +2 -4
  74. package/dist/tools/DeleteDataTool.js.map +1 -1
  75. package/dist/tools/DescribeDependenciesTool.js +2 -4
  76. package/dist/tools/DescribeDependenciesTool.js.map +1 -1
  77. package/dist/tools/DescribeObjectTool.js +2 -4
  78. package/dist/tools/DescribeObjectTool.js.map +1 -1
  79. package/dist/tools/DescribeRelationshipsTool.js +2 -4
  80. package/dist/tools/DescribeRelationshipsTool.js.map +1 -1
  81. package/dist/tools/DescribeTableTool.js +2 -4
  82. package/dist/tools/DescribeTableTool.js.map +1 -1
  83. package/dist/tools/DropTableTool.js +2 -4
  84. package/dist/tools/DropTableTool.js.map +1 -1
  85. package/dist/tools/ExplainQueryTool.d.ts.map +1 -1
  86. package/dist/tools/ExplainQueryTool.js +4 -6
  87. package/dist/tools/ExplainQueryTool.js.map +1 -1
  88. package/dist/tools/InsertDataTool.js +2 -4
  89. package/dist/tools/InsertDataTool.js.map +1 -1
  90. package/dist/tools/ListDatabasesTool.js +2 -4
  91. package/dist/tools/ListDatabasesTool.js.map +1 -1
  92. package/dist/tools/ListForeignKeysTool.js +2 -4
  93. package/dist/tools/ListForeignKeysTool.js.map +1 -1
  94. package/dist/tools/ListLargestTablesTool.js +2 -4
  95. package/dist/tools/ListLargestTablesTool.js.map +1 -1
  96. package/dist/tools/ListObjectsTool.js +2 -4
  97. package/dist/tools/ListObjectsTool.js.map +1 -1
  98. package/dist/tools/ListTableTool.js +2 -4
  99. package/dist/tools/ListTableTool.js.map +1 -1
  100. package/dist/tools/PreviewDeleteTool.js +2 -4
  101. package/dist/tools/PreviewDeleteTool.js.map +1 -1
  102. package/dist/tools/PreviewUpdateTool.js +2 -4
  103. package/dist/tools/PreviewUpdateTool.js.map +1 -1
  104. package/dist/tools/ReadDataTool.d.ts +15 -12
  105. package/dist/tools/ReadDataTool.d.ts.map +1 -1
  106. package/dist/tools/ReadDataTool.js +86 -64
  107. package/dist/tools/ReadDataTool.js.map +1 -1
  108. package/dist/tools/SearchDataTool.js +2 -4
  109. package/dist/tools/SearchDataTool.js.map +1 -1
  110. package/dist/tools/SummarizeSchemaTool.js +2 -4
  111. package/dist/tools/SummarizeSchemaTool.js.map +1 -1
  112. package/dist/tools/UpdateDataTool.js +2 -4
  113. package/dist/tools/UpdateDataTool.js.map +1 -1
  114. package/dist/validation.d.ts +26 -3
  115. package/dist/validation.d.ts.map +1 -1
  116. package/dist/validation.js +237 -85
  117. package/dist/validation.js.map +1 -1
  118. package/dist/writePreview.js +0 -0
  119. package/dist/writePreviewGrant.js +0 -0
  120. package/dist/writePreviewGrantStore.js +0 -0
  121. package/dist/writeSafety.js +0 -0
  122. package/package.json +29 -22
@@ -0,0 +1,128 @@
1
+ import { timingSafeEqual } from "node:crypto";
2
+ import { createServer, } from "node:http";
3
+ import { hostHeaderValidation, originValidation, toNodeHandler, } from "@modelcontextprotocol/node";
4
+ import { createMcpHandler } from "@modelcontextprotocol/server";
5
+ import { formatUrlHost, getMcpEndpointUrl, } from "./config.js";
6
+ import { createServerInstance } from "./server.js";
7
+ const LOOPBACK_HOSTNAMES = ["localhost", "127.0.0.1", "[::1]"];
8
+ const MCP_PATH = "/mcp";
9
+ export function isLoopbackHost(host) {
10
+ const normalized = host.trim().toLowerCase();
11
+ return (normalized === "localhost" ||
12
+ normalized === "::1" ||
13
+ normalized === "[::1]" ||
14
+ /^127(\.\d{1,3}){3}$/.test(normalized));
15
+ }
16
+ /**
17
+ * Hostnames accepted in the Host and Origin headers. Guards against DNS
18
+ * rebinding: a browser page on another site cannot reach the server through a
19
+ * hostname it controls.
20
+ */
21
+ export function resolveAllowedHostnames(environment) {
22
+ if (environment.mcpHttpAllowedHosts.length > 0) {
23
+ return [...environment.mcpHttpAllowedHosts];
24
+ }
25
+ const hostnames = new Set(LOOPBACK_HOSTNAMES);
26
+ const bindHost = environment.mcpHttpHost.trim().toLowerCase();
27
+ if (bindHost !== "0.0.0.0" &&
28
+ bindHost !== "::" &&
29
+ !isLoopbackHost(bindHost)) {
30
+ hostnames.add(bindHost.includes(":") ? `[${bindHost}]` : bindHost);
31
+ }
32
+ if (environment.mcpBaseUrl) {
33
+ hostnames.add(new URL(environment.mcpBaseUrl).hostname.toLowerCase());
34
+ }
35
+ return [...hostnames];
36
+ }
37
+ /**
38
+ * Refuses to expose an unauthenticated server beyond loopback unless the
39
+ * operator explicitly opts in.
40
+ */
41
+ export function assertHttpExposureAllowed(environment) {
42
+ if (isLoopbackHost(environment.mcpHttpHost) ||
43
+ environment.mcpHttpAuthToken ||
44
+ environment.mcpHttpAllowUnauthenticated) {
45
+ return;
46
+ }
47
+ throw new Error(`MCP_HTTP_HOST=${environment.mcpHttpHost} exposes the server beyond loopback. Set MCP_HTTP_AUTH_TOKEN, or set MCP_HTTP_ALLOW_UNAUTHENTICATED=true if another layer (reverse proxy, network policy) protects it.`);
48
+ }
49
+ /**
50
+ * Warns when the listener is reachable off-host over plain HTTP: the bearer
51
+ * token and query results would cross the network unencrypted. An https
52
+ * MCP_BASE_URL signals that a TLS-terminating proxy sits in front.
53
+ */
54
+ export function httpExposureWarning(environment) {
55
+ if (isLoopbackHost(environment.mcpHttpHost) ||
56
+ environment.mcpBaseUrl?.startsWith("https://")) {
57
+ return undefined;
58
+ }
59
+ return `Warning: MCP_HTTP_HOST=${environment.mcpHttpHost} serves plain HTTP beyond loopback, so the bearer token and query results are sent unencrypted. Put a TLS-terminating reverse proxy in front and set MCP_BASE_URL to its https:// address.`;
60
+ }
61
+ export function isAuthorized(authorizationHeader, expectedToken) {
62
+ const match = /^Bearer\s+(.+)$/i.exec(authorizationHeader?.trim() ?? "");
63
+ if (!match) {
64
+ return false;
65
+ }
66
+ const provided = Buffer.from(match[1].trim());
67
+ const expected = Buffer.from(expectedToken);
68
+ return (provided.length === expected.length && timingSafeEqual(provided, expected));
69
+ }
70
+ function writeJsonError(res, status, message, headers = {}) {
71
+ res.writeHead(status, { "content-type": "application/json", ...headers });
72
+ res.end(JSON.stringify({
73
+ jsonrpc: "2.0",
74
+ error: { code: -32000, message },
75
+ id: null,
76
+ }));
77
+ }
78
+ export function createHttpRequestListener(state, environment) {
79
+ const allowedHostnames = resolveAllowedHostnames(environment);
80
+ const validateHost = hostHeaderValidation(allowedHostnames);
81
+ const validateOrigin = originValidation(allowedHostnames);
82
+ const onerror = (error) => console.error("HTTP transport error:", error);
83
+ const handler = createMcpHandler(() => createServerInstance(state, environment), { onerror });
84
+ const nodeHandler = toNodeHandler(handler, { onerror });
85
+ return (req, res) => {
86
+ const path = new URL(req.url ?? "/", "http://localhost").pathname;
87
+ if (path !== MCP_PATH) {
88
+ writeJsonError(res, 404, `Not found. The MCP endpoint is ${MCP_PATH}.`);
89
+ return;
90
+ }
91
+ if (!validateHost(req, res) || !validateOrigin(req, res)) {
92
+ return;
93
+ }
94
+ if (environment.mcpHttpAuthToken &&
95
+ !isAuthorized(req.headers.authorization, environment.mcpHttpAuthToken)) {
96
+ writeJsonError(res, 401, "Unauthorized.", {
97
+ "www-authenticate": 'Bearer realm="mssql-mcp"',
98
+ });
99
+ return;
100
+ }
101
+ void nodeHandler(req, res);
102
+ };
103
+ }
104
+ export async function startHttpServer(state, environment) {
105
+ assertHttpExposureAllowed(environment);
106
+ const host = environment.mcpHttpHost;
107
+ const port = environment.mcpHttpPort;
108
+ const localEndpoint = `http://${formatUrlHost(host)}:${port}${MCP_PATH}`;
109
+ const publicEndpoint = getMcpEndpointUrl(environment);
110
+ const httpServer = createServer(createHttpRequestListener(state, environment));
111
+ await new Promise((resolve, reject) => {
112
+ httpServer.once("error", reject);
113
+ httpServer.listen(port, host, () => resolve());
114
+ });
115
+ console.error(`MCP Streamable HTTP server listening on ${localEndpoint}`);
116
+ if (publicEndpoint !== localEndpoint) {
117
+ console.error(`Public MCP endpoint: ${publicEndpoint}`);
118
+ }
119
+ if (environment.mcpHttpAuthToken) {
120
+ console.error("Bearer token authentication is enabled.");
121
+ }
122
+ const exposureWarning = httpExposureWarning(environment);
123
+ if (exposureWarning) {
124
+ console.error(exposureWarning);
125
+ }
126
+ return httpServer;
127
+ }
128
+ //# sourceMappingURL=httpServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpServer.js","sourceRoot":"","sources":["../src/httpServer.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- export {};
2
+ import "./checkNodeVersion.js";
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAGA,OAAO,uBAAuB,CAAC"}
package/dist/index.js CHANGED
@@ -1,413 +1,61 @@
1
1
  #!/usr/bin/env node
2
- import { createServer, } from "node:http";
2
+ // Must stay the first import: fails fast with a clear message on old Node.js.
3
+ import "./checkNodeVersion.js";
3
4
  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 { configureRuntimeEnvironment, getMcpEndpointUrl, parseEnvironmentConfig, } from "./config.js";
9
- import { configureDatabase, getAllowedDatabases } from "./db.js";
10
- import { createResourceLink, createToolResult, normalizeToolResult, } from "./mcpResults.js";
11
- import { registerPrompts } from "./promptRegistry.js";
12
- import { registerResources } from "./resourceRegistry.js";
5
+ import { serveStdio } from "@modelcontextprotocol/server/stdio";
6
+ // Keep dotenv silent: anything on stdout corrupts the stdio JSON-RPC stream.
7
+ dotenv.config({ quiet: true });
8
+ import { configureRuntimeEnvironment, parseEnvironmentConfig, } from "./config.js";
9
+ import { closeAllPools, configureDatabase } from "./db.js";
10
+ import { startHttpServer } from "./httpServer.js";
11
+ import { createServerInstance } from "./server.js";
13
12
  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.6.0";
19
- const SERVER_NAME = "mssql-mcp-server";
20
- function createInstructions(isReadOnly) {
21
- const baseInstructions = "Inspect schema first with summarize_schema, list_objects, list_table, describe_object, or describe_table. Use list_largest_tables for capacity discovery. Prefer read_data for data analysis. Use search_data, analyze_table, describe_relationships, describe_dependencies, 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
24
- ? baseInstructions + readOnlyInstructions
25
- : baseInstructions;
26
- }
27
- function createServerInstance(state, environment) {
28
- const readOnly = environment.readOnly;
29
- const allowedDatabases = getAllowedDatabases();
30
- const availableTools = getAvailableTools(readOnly);
31
- const server = new McpServer({
32
- name: SERVER_NAME,
33
- version: SERVER_VERSION,
34
- websiteUrl: "https://github.com/eamonboyle/mssql-mcp",
35
- icons: [
36
- {
37
- src: "https://raw.githubusercontent.com/eamonboyle/mssql-mcp/main/src/img/logo.png",
38
- mimeType: "image/png",
39
- },
40
- ],
41
- }, {
42
- instructions: createInstructions(readOnly),
43
- capabilities: {
44
- logging: {},
45
- },
46
- });
47
- for (const definition of availableTools) {
48
- server.registerTool(definition.tool.name, {
49
- title: definition.tool.name
50
- .split("_")
51
- .map((part) => part[0].toUpperCase() + part.slice(1))
52
- .join(" "),
53
- description: definition.tool.description,
54
- inputSchema: definition.inputSchema,
55
- outputSchema: definition.outputSchema,
56
- annotations: definition.annotations,
57
- }, async (args, extra) => {
58
- if (definition.requiresDdl && !environment.enableDdl) {
59
- return createToolResult({
60
- version: 1,
61
- success: false,
62
- message: "DDL tools are disabled. Set ENABLE_DDL=true to allow create_table, create_index, and drop_table.",
63
- error: {
64
- code: "DDL_DISABLED",
65
- },
66
- });
67
- }
68
- const requestArgs = typeof args === "object" && args !== null
69
- ? { ...args }
70
- : {};
71
- if (definition.requiresConfirmation && requestArgs.confirmed !== true) {
72
- try {
73
- const elicited = await server.server.elicitInput({
74
- mode: "form",
75
- message: `Confirm ${definition.tool.name} after reviewing its preview and impact.`,
76
- requestedSchema: {
77
- type: "object",
78
- properties: {
79
- confirmed: {
80
- type: "boolean",
81
- title: "Confirmed",
82
- description: "I reviewed the preview and want to proceed with this operation.",
83
- },
84
- },
85
- required: ["confirmed"],
86
- },
87
- });
88
- if (elicited.action !== "accept" || !elicited.content?.confirmed) {
89
- if (definition.writePreviewTool &&
90
- environment.requireWritePreview) {
91
- return createToolResult({
92
- version: 1,
93
- success: false,
94
- message: `Confirmation canceled. Call ${definition.writePreviewTool}, then run ${definition.tool.name} with the returned previewToken and confirmed=true.`,
95
- error: { code: "PREVIEW_REQUIRED" },
96
- });
97
- }
98
- if (definition.writePreviewTool) {
99
- return createToolResult({
100
- version: 1,
101
- success: false,
102
- message: `Confirmation canceled. Retry with confirmed=true after reviewing ${definition.writePreviewTool}.`,
103
- error: { code: "CONFIRMATION_REQUIRED" },
104
- });
105
- }
106
- return createToolResult({
107
- version: 1,
108
- success: false,
109
- message: "Confirmation canceled. Retry with confirmed=true after reviewing the operation.",
110
- error: { code: "CONFIRMATION_REQUIRED" },
111
- });
112
- }
113
- requestArgs.confirmed = true;
114
- }
115
- catch {
116
- if (definition.writePreviewTool &&
117
- environment.requireWritePreview) {
118
- return createToolResult({
119
- version: 1,
120
- success: false,
121
- message: `Interactive confirmation is unavailable. Call ${definition.writePreviewTool}, then run ${definition.tool.name} with previewToken and confirmed=true.`,
122
- error: { code: "PREVIEW_REQUIRED" },
123
- });
124
- }
125
- if (definition.writePreviewTool) {
126
- return createToolResult({
127
- version: 1,
128
- success: false,
129
- message: `Interactive confirmation is unavailable. Retry with confirmed=true after reviewing ${definition.writePreviewTool}.`,
130
- error: { code: "CONFIRMATION_REQUIRED" },
131
- });
132
- }
133
- return createToolResult({
134
- version: 1,
135
- success: false,
136
- message: "Interactive confirmation is unavailable. Retry with confirmed=true after reviewing the operation.",
137
- error: { code: "CONFIRMATION_REQUIRED" },
138
- });
139
- }
140
- }
141
- if (definition.tool.name === "update_data" ||
142
- definition.tool.name === "delete_data") {
143
- const preview = await previewFilteredRows({
144
- tableName: String(requestArgs.tableName),
145
- schemaName: typeof requestArgs.schemaName === "string"
146
- ? requestArgs.schemaName
147
- : undefined,
148
- filters: requestArgs.filters ?? [],
149
- databaseName: typeof requestArgs.databaseName === "string"
150
- ? requestArgs.databaseName
151
- : undefined,
152
- limit: 1,
153
- }).catch((error) => ({
154
- affectedRowCount: -1,
155
- rows: [],
156
- query: "",
157
- countQuery: "",
158
- previewError: String(error),
159
- }));
160
- if ("previewError" in preview) {
161
- return createToolResult({
162
- version: 1,
163
- success: false,
164
- message: `Failed to validate write impact: ${preview.previewError}`,
165
- error: {
166
- code: "WRITE_PREVIEW_FAILED",
167
- },
168
- });
169
- }
170
- if (preview.affectedRowCount > environment.maxWriteRows) {
171
- return createToolResult({
172
- version: 1,
173
- success: false,
174
- message: `Write exceeds MAX_WRITE_ROWS (${environment.maxWriteRows}). Matching rows: ${preview.affectedRowCount}. Narrow the filters or raise MAX_WRITE_ROWS.`,
175
- error: {
176
- code: "WRITE_LIMIT_EXCEEDED",
177
- },
178
- data: {
179
- affectedRowCount: preview.affectedRowCount,
180
- },
181
- });
182
- }
183
- if (environment.requireWritePreview) {
184
- const writeName = definition.tool.name;
185
- const fingerprint = fingerprintForWriteTool(writeName, requestArgs);
186
- const previewToken = typeof requestArgs.previewToken === "string"
187
- ? requestArgs.previewToken.trim()
188
- : "";
189
- if (!writePreviewGrantStore.consume(previewToken, fingerprint, writeName)) {
190
- return createToolResult({
191
- version: 1,
192
- success: false,
193
- message: `Invalid or expired write preview token. Call ${writeName === "update_data"
194
- ? "preview_update"
195
- : "preview_delete"} with the same table, filters${writeName === "update_data" ? ", and updates" : ""}, then pass the returned previewToken with confirmed=true.`,
196
- error: { code: "PREVIEW_TOKEN_INVALID" },
197
- });
198
- }
199
- }
200
- }
201
- if (definition.tool.name === "insert_data") {
202
- const rows = Array.isArray(requestArgs.data)
203
- ? requestArgs.data.length
204
- : 1;
205
- if (rows > environment.maxWriteRows) {
206
- return createToolResult({
207
- version: 1,
208
- success: false,
209
- message: `Insert exceeds MAX_WRITE_ROWS (${environment.maxWriteRows}). Requested rows: ${rows}.`,
210
- error: {
211
- code: "WRITE_LIMIT_EXCEEDED",
212
- },
213
- data: {
214
- requestedRows: rows,
215
- },
216
- });
217
- }
218
- }
219
- if (definition.tool.name === "explain_query" &&
220
- extra._meta?.progressToken !== undefined) {
221
- await extra.sendNotification({
222
- method: "notifications/progress",
223
- params: {
224
- progressToken: extra._meta.progressToken,
225
- progress: 1,
226
- total: 2,
227
- message: "Generating estimated execution plan",
228
- },
229
- });
230
- }
231
- const rawResult = await definition.tool.run(requestArgs);
232
- if ((definition.tool.name === "preview_update" ||
233
- definition.tool.name === "preview_delete") &&
234
- environment.requireWritePreview &&
235
- typeof rawResult === "object" &&
236
- rawResult !== null &&
237
- rawResult.success === true) {
238
- const fingerprint = fingerprintForWriteTool(definition.tool.name, requestArgs);
239
- const writeTool = definition.tool.name === "preview_update"
240
- ? "update_data"
241
- : "delete_data";
242
- const previewToken = writePreviewGrantStore.issue(fingerprint, writeTool);
243
- const withData = rawResult;
244
- if (typeof withData.data === "object" &&
245
- withData.data !== null &&
246
- !Array.isArray(withData.data)) {
247
- withData.data = { ...withData.data, previewToken };
248
- }
249
- else {
250
- withData.data = { preview: withData.data, previewToken };
251
- }
252
- }
253
- const payload = normalizeToolResult(rawResult, `${definition.tool.name} completed.`);
254
- const extraContent = [];
255
- if (definition.tool.name === "explain_query" &&
256
- typeof rawResult === "object" &&
257
- rawResult) {
258
- const planXml = typeof rawResult.planXml === "string"
259
- ? rawResult.planXml
260
- : undefined;
261
- const databaseName = typeof requestArgs.databaseName === "string"
262
- ? requestArgs.databaseName
263
- : undefined;
264
- if (planXml) {
265
- const plan = state.storeQueryPlan(databaseName, String(requestArgs.query ?? ""), planXml);
266
- extraContent.push(createResourceLink(`mssql://query-plan/${plan.id}`, "query-plan", "Execution Plan", "Stored estimated execution plan for this query.", "application/json"));
267
- payload.meta = {
268
- ...(payload.meta ?? {}),
269
- queryPlanUri: `mssql://query-plan/${plan.id}`,
270
- };
271
- await server.server.sendResourceListChanged();
272
- await server.server.sendResourceUpdated({
273
- uri: `mssql://query-plan/${plan.id}`,
274
- });
275
- }
276
- }
277
- if ((definition.tool.name === "read_data" ||
278
- definition.tool.name === "search_data") &&
279
- payload.success) {
280
- const data = payload.data;
281
- const recordCount = Array.isArray(data)
282
- ? data.length
283
- : Array.isArray(data?.data)
284
- ? data.data.length
285
- : 0;
286
- if (recordCount >= 25 || payload.truncated) {
287
- const result = state.storeQueryResult(typeof requestArgs.databaseName === "string"
288
- ? requestArgs.databaseName
289
- : undefined, definition.tool.name, data);
290
- extraContent.push(createResourceLink(`mssql://query-result/${result.id}`, "query-result", "Query Result", "Stored query result for larger result-grid rendering.", "application/json"));
291
- payload.meta = {
292
- ...(payload.meta ?? {}),
293
- queryResultUri: `mssql://query-result/${result.id}`,
294
- };
295
- await server.server.sendResourceListChanged();
296
- await server.server.sendResourceUpdated({
297
- uri: `mssql://query-result/${result.id}`,
298
- });
299
- }
300
- }
301
- if (definition.tool.name === "explain_query" &&
302
- extra._meta?.progressToken !== undefined) {
303
- await extra.sendNotification({
304
- method: "notifications/progress",
305
- params: {
306
- progressToken: extra._meta.progressToken,
307
- progress: 2,
308
- total: 2,
309
- message: "Execution plan ready",
310
- },
311
- });
312
- }
313
- return createToolResult(payload, extraContent);
314
- });
315
- }
316
- registerResources(server, {
317
- serverName: SERVER_NAME,
318
- serverVersion: SERVER_VERSION,
319
- isReadOnly: readOnly,
320
- allowedDatabases,
321
- toolNames: availableTools.map((tool) => tool.tool.name),
322
- maxRows: environment.maxRows,
323
- queryTimeoutMs: environment.queryTimeoutMs,
324
- transport: environment.mcpTransport,
325
- publicEndpoint: environment.mcpTransport === "http"
326
- ? getMcpEndpointUrl(environment)
327
- : undefined,
328
- encrypt: environment.encrypt,
329
- trustServerCertificate: environment.trustServerCertificate,
330
- enableDdl: environment.enableDdl,
331
- requireWritePreview: environment.requireWritePreview,
332
- state,
13
+ const SHUTDOWN_TIMEOUT_MS = 5000;
14
+ function runStdioServer(state, environment) {
15
+ const handle = serveStdio(() => createServerInstance(state, environment), {
16
+ onerror: (error) => console.error("stdio transport error:", error),
333
17
  });
334
- registerPrompts(server, { isReadOnly: readOnly });
335
- return server;
336
- }
337
- async function readRequestBody(req) {
338
- const chunks = [];
339
- for await (const chunk of req) {
340
- chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
341
- }
342
- if (chunks.length === 0) {
343
- return undefined;
344
- }
345
- const raw = Buffer.concat(chunks).toString("utf8").trim();
346
- if (!raw) {
347
- return undefined;
348
- }
349
- return JSON.parse(raw);
18
+ return () => handle.close();
350
19
  }
351
- async function handleHttpRequest(req, res, environment) {
352
- const server = createServerInstance(new ServerState(), environment);
353
- const transport = new StreamableHTTPServerTransport({
354
- sessionIdGenerator: undefined,
20
+ async function runHttpServer(state, environment) {
21
+ const httpServer = await startHttpServer(state, environment);
22
+ return () => new Promise((resolve) => {
23
+ httpServer.close(() => resolve());
24
+ httpServer.closeAllConnections();
355
25
  });
356
- try {
357
- await server.connect(transport);
358
- const parsedBody = req.method === "POST" ? await readRequestBody(req) : undefined;
359
- await transport.handleRequest(req, res, parsedBody);
360
- }
361
- catch (error) {
362
- console.error("HTTP transport error:", error);
363
- if (!res.headersSent) {
364
- res.writeHead(500, { "content-type": "application/json" });
365
- res.end(JSON.stringify({
366
- jsonrpc: "2.0",
367
- error: {
368
- code: -32603,
369
- message: "Internal server error",
370
- },
371
- id: null,
372
- }));
373
- }
374
- }
375
- finally {
376
- await transport.close().catch(() => undefined);
377
- await server.close().catch(() => undefined);
378
- }
379
- }
380
- async function runStdioServer(environment) {
381
- const server = createServerInstance(new ServerState(), environment);
382
- const transport = new StdioServerTransport();
383
- await server.connect(transport);
384
26
  }
385
- async function runHttpServer(environment) {
386
- const host = environment.mcpHttpHost;
387
- const port = environment.mcpHttpPort;
388
- const localEndpoint = `http://${host}:${port}/mcp`;
389
- const publicEndpoint = getMcpEndpointUrl(environment);
390
- const httpServer = createServer((req, res) => {
391
- void handleHttpRequest(req, res, environment);
392
- });
393
- await new Promise((resolve, reject) => {
394
- httpServer.once("error", reject);
395
- httpServer.listen(port, host, () => resolve());
396
- });
397
- console.error(`MCP Streamable HTTP server listening on ${localEndpoint}`);
398
- if (publicEndpoint !== localEndpoint) {
399
- console.error(`Public MCP endpoint: ${publicEndpoint}`);
400
- }
27
+ function registerShutdown(closeServer) {
28
+ let shuttingDown = false;
29
+ const shutdown = async () => {
30
+ if (shuttingDown) {
31
+ return;
32
+ }
33
+ shuttingDown = true;
34
+ // Never let a stuck connection keep the process alive.
35
+ setTimeout(() => process.exit(0), SHUTDOWN_TIMEOUT_MS).unref();
36
+ await closeServer().catch(() => undefined);
37
+ await closeAllPools();
38
+ process.exit(0);
39
+ };
40
+ process.once("SIGINT", shutdown);
41
+ process.once("SIGTERM", shutdown);
42
+ return shutdown;
401
43
  }
402
44
  async function main() {
403
45
  const environment = parseEnvironmentConfig();
404
46
  configureRuntimeEnvironment(environment);
405
47
  configureDatabase(environment);
48
+ // One state store per process so query-result and query-plan resource
49
+ // links stay readable across stateless HTTP requests.
50
+ const state = new ServerState();
406
51
  if (environment.mcpTransport === "http") {
407
- await runHttpServer(environment);
52
+ registerShutdown(await runHttpServer(state, environment));
408
53
  return;
409
54
  }
410
- await runStdioServer(environment);
55
+ const shutdown = registerShutdown(runStdioServer(state, environment));
56
+ // The client closing stdin ends the session; release SQL pools so the
57
+ // process can exit promptly.
58
+ process.stdin.once("end", shutdown);
411
59
  }
412
60
  main().catch((error) => {
413
61
  console.error("Fatal error running server:", error);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EACL,YAAY,GAGb,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAEnG,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,OAAO,EAEL,2BAA2B,EAC3B,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,GAEpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,cAAc,GAAG,OAAO,CAAC;AAC/B,MAAM,WAAW,GAAG,kBAAkB,CAAC;AAEvC,SAAS,kBAAkB,CAAC,UAAmB;IAC7C,MAAM,gBAAgB,GACpB,yeAAye,CAAC;IAC5e,MAAM,oBAAoB,GACxB,6JAA6J,CAAC;IAEhK,OAAO,UAAU;QACf,CAAC,CAAC,gBAAgB,GAAG,oBAAoB;QACzC,CAAC,CAAC,gBAAgB,CAAC;AACvB,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAkB,EAClB,WAA8B;IAE9B,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;IACtC,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;IAC/C,MAAM,cAAc,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;QACE,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,cAAc;QACvB,UAAU,EAAE,yCAAyC;QACrD,KAAK,EAAE;YACL;gBACE,GAAG,EAAE,8EAA8E;gBACnF,QAAQ,EAAE,WAAW;aACtB;SACF;KACF,EACD;QACE,YAAY,EAAE,kBAAkB,CAAC,QAAQ,CAAC;QAC1C,YAAY,EAAE;YACZ,OAAO,EAAE,EAAE;SACZ;KACF,CACF,CAAC;IAEF,KAAK,MAAM,UAAU,IAAI,cAAc,EAAE,CAAC;QACxC,MAAM,CAAC,YAAY,CACjB,UAAU,CAAC,IAAI,CAAC,IAAI,EACpB;YACE,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI;iBACxB,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBACpD,IAAI,CAAC,GAAG,CAAC;YACZ,WAAW,EAAE,UAAU,CAAC,IAAI,CAAC,WAAW;YACxC,WAAW,EAAE,UAAU,CAAC,WAAW;YACnC,YAAY,EAAE,UAAU,CAAC,YAAY;YACrC,WAAW,EAAE,UAAU,CAAC,WAAW;SACpC,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;YACpB,IAAI,UAAU,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;gBACrD,OAAO,gBAAgB,CAAC;oBACtB,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,KAAK;oBACd,OAAO,EACL,kGAAkG;oBACpG,KAAK,EAAE;wBACL,IAAI,EAAE,cAAc;qBACrB;iBACF,CAAC,CAAC;YACL,CAAC;YAED,MAAM,WAAW,GACf,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;gBACvC,CAAC,CAAE,EAAE,GAAG,IAAI,EAA8B;gBAC1C,CAAC,CAAC,EAAE,CAAC;YAET,IAAI,UAAU,CAAC,oBAAoB,IAAI,WAAW,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;gBACtE,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;wBAC/C,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,WAAW,UAAU,CAAC,IAAI,CAAC,IAAI,0CAA0C;wBAClF,eAAe,EAAE;4BACf,IAAI,EAAE,QAAQ;4BACd,UAAU,EAAE;gCACV,SAAS,EAAE;oCACT,IAAI,EAAE,SAAS;oCACf,KAAK,EAAE,WAAW;oCAClB,WAAW,EACT,iEAAiE;iCACpE;6BACF;4BACD,QAAQ,EAAE,CAAC,WAAW,CAAC;yBACxB;qBACF,CAAC,CAAC;oBAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;wBACjE,IACE,UAAU,CAAC,gBAAgB;4BAC3B,WAAW,CAAC,mBAAmB,EAC/B,CAAC;4BACD,OAAO,gBAAgB,CAAC;gCACtB,OAAO,EAAE,CAAC;gCACV,OAAO,EAAE,KAAK;gCACd,OAAO,EAAE,+BAA+B,UAAU,CAAC,gBAAgB,cAAc,UAAU,CAAC,IAAI,CAAC,IAAI,qDAAqD;gCAC1J,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE;6BACpC,CAAC,CAAC;wBACL,CAAC;wBACD,IAAI,UAAU,CAAC,gBAAgB,EAAE,CAAC;4BAChC,OAAO,gBAAgB,CAAC;gCACtB,OAAO,EAAE,CAAC;gCACV,OAAO,EAAE,KAAK;gCACd,OAAO,EAAE,oEAAoE,UAAU,CAAC,gBAAgB,GAAG;gCAC3G,KAAK,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE;6BACzC,CAAC,CAAC;wBACL,CAAC;wBACD,OAAO,gBAAgB,CAAC;4BACtB,OAAO,EAAE,CAAC;4BACV,OAAO,EAAE,KAAK;4BACd,OAAO,EACL,iFAAiF;4BACnF,KAAK,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE;yBACzC,CAAC,CAAC;oBACL,CAAC;oBAED,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC;gBAC/B,CAAC;gBAAC,MAAM,CAAC;oBACP,IACE,UAAU,CAAC,gBAAgB;wBAC3B,WAAW,CAAC,mBAAmB,EAC/B,CAAC;wBACD,OAAO,gBAAgB,CAAC;4BACtB,OAAO,EAAE,CAAC;4BACV,OAAO,EAAE,KAAK;4BACd,OAAO,EAAE,iDAAiD,UAAU,CAAC,gBAAgB,cAAc,UAAU,CAAC,IAAI,CAAC,IAAI,wCAAwC;4BAC/J,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE;yBACpC,CAAC,CAAC;oBACL,CAAC;oBACD,IAAI,UAAU,CAAC,gBAAgB,EAAE,CAAC;wBAChC,OAAO,gBAAgB,CAAC;4BACtB,OAAO,EAAE,CAAC;4BACV,OAAO,EAAE,KAAK;4BACd,OAAO,EAAE,sFAAsF,UAAU,CAAC,gBAAgB,GAAG;4BAC7H,KAAK,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE;yBACzC,CAAC,CAAC;oBACL,CAAC;oBACD,OAAO,gBAAgB,CAAC;wBACtB,OAAO,EAAE,CAAC;wBACV,OAAO,EAAE,KAAK;wBACd,OAAO,EACL,mGAAmG;wBACrG,KAAK,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE;qBACzC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,IACE,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa;gBACtC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,EACtC,CAAC;gBACD,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC;oBACxC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC;oBACxC,UAAU,EACR,OAAO,WAAW,CAAC,UAAU,KAAK,QAAQ;wBACxC,CAAC,CAAC,WAAW,CAAC,UAAU;wBACxB,CAAC,CAAC,SAAS;oBACf,OAAO,EACJ,WAAW,CAAC,OAEG,IAAI,EAAE;oBACxB,YAAY,EACV,OAAO,WAAW,CAAC,YAAY,KAAK,QAAQ;wBAC1C,CAAC,CAAC,WAAW,CAAC,YAAY;wBAC1B,CAAC,CAAC,SAAS;oBACf,KAAK,EAAE,CAAC;iBACT,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBACnB,gBAAgB,EAAE,CAAC,CAAC;oBACpB,IAAI,EAAE,EAAE;oBACR,KAAK,EAAE,EAAE;oBACT,UAAU,EAAE,EAAE;oBACd,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC;iBAC5B,CAAC,CAAC,CAAC;gBAEJ,IAAI,cAAc,IAAI,OAAO,EAAE,CAAC;oBAC9B,OAAO,gBAAgB,CAAC;wBACtB,OAAO,EAAE,CAAC;wBACV,OAAO,EAAE,KAAK;wBACd,OAAO,EAAE,oCAAoC,OAAO,CAAC,YAAY,EAAE;wBACnE,KAAK,EAAE;4BACL,IAAI,EAAE,sBAAsB;yBAC7B;qBACF,CAAC,CAAC;gBACL,CAAC;gBAED,IAAI,OAAO,CAAC,gBAAgB,GAAG,WAAW,CAAC,YAAY,EAAE,CAAC;oBACxD,OAAO,gBAAgB,CAAC;wBACtB,OAAO,EAAE,CAAC;wBACV,OAAO,EAAE,KAAK;wBACd,OAAO,EAAE,iCAAiC,WAAW,CAAC,YAAY,qBAAqB,OAAO,CAAC,gBAAgB,+CAA+C;wBAC9J,KAAK,EAAE;4BACL,IAAI,EAAE,sBAAsB;yBAC7B;wBACD,IAAI,EAAE;4BACJ,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;yBAC3C;qBACF,CAAC,CAAC;gBACL,CAAC;gBAED,IAAI,WAAW,CAAC,mBAAmB,EAAE,CAAC;oBACpC,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,IACH,CAAC;oBAChC,MAAM,WAAW,GAAG,uBAAuB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;oBACpE,MAAM,YAAY,GAChB,OAAO,WAAW,CAAC,YAAY,KAAK,QAAQ;wBAC1C,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,EAAE;wBACjC,CAAC,CAAC,EAAE,CAAC;oBACT,IACE,CAAC,sBAAsB,CAAC,OAAO,CAC7B,YAAY,EACZ,WAAW,EACX,SAAS,CACV,EACD,CAAC;wBACD,OAAO,gBAAgB,CAAC;4BACtB,OAAO,EAAE,CAAC;4BACV,OAAO,EAAE,KAAK;4BACd,OAAO,EAAE,gDACP,SAAS,KAAK,aAAa;gCACzB,CAAC,CAAC,gBAAgB;gCAClB,CAAC,CAAC,gBACN,gCACE,SAAS,KAAK,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAClD,4DAA4D;4BAC5D,KAAK,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE;yBACzC,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;oBAC1C,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM;oBACzB,CAAC,CAAC,CAAC,CAAC;gBACN,IAAI,IAAI,GAAG,WAAW,CAAC,YAAY,EAAE,CAAC;oBACpC,OAAO,gBAAgB,CAAC;wBACtB,OAAO,EAAE,CAAC;wBACV,OAAO,EAAE,KAAK;wBACd,OAAO,EAAE,kCAAkC,WAAW,CAAC,YAAY,sBAAsB,IAAI,GAAG;wBAChG,KAAK,EAAE;4BACL,IAAI,EAAE,sBAAsB;yBAC7B;wBACD,IAAI,EAAE;4BACJ,aAAa,EAAE,IAAI;yBACpB;qBACF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,IACE,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe;gBACxC,KAAK,CAAC,KAAK,EAAE,aAAa,KAAK,SAAS,EACxC,CAAC;gBACD,MAAM,KAAK,CAAC,gBAAgB,CAAC;oBAC3B,MAAM,EAAE,wBAAwB;oBAChC,MAAM,EAAE;wBACN,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,aAAa;wBACxC,QAAQ,EAAE,CAAC;wBACX,KAAK,EAAE,CAAC;wBACR,OAAO,EAAE,qCAAqC;qBAC/C;iBACF,CAAC,CAAC;YACL,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACzD,IACE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB;gBACxC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC;gBAC5C,WAAW,CAAC,mBAAmB;gBAC/B,OAAO,SAAS,KAAK,QAAQ;gBAC7B,SAAS,KAAK,IAAI;gBACjB,SAAmC,CAAC,OAAO,KAAK,IAAI,EACrD,CAAC;gBACD,MAAM,WAAW,GAAG,uBAAuB,CACzC,UAAU,CAAC,IAAI,CAAC,IAAI,EACpB,WAAW,CACZ,CAAC;gBACF,MAAM,SAAS,GACb,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB;oBACvC,CAAC,CAAC,aAAa;oBACf,CAAC,CAAC,aAAa,CAAC;gBACpB,MAAM,YAAY,GAAG,sBAAsB,CAAC,KAAK,CAC/C,WAAW,EACX,SAAS,CACV,CAAC;gBACF,MAAM,QAAQ,GAAG,SAA+B,CAAC;gBACjD,IACE,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ;oBACjC,QAAQ,CAAC,IAAI,KAAK,IAAI;oBACtB,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC7B,CAAC;oBACD,QAAQ,CAAC,IAAI,GAAG,EAAE,GAAI,QAAQ,CAAC,IAAe,EAAE,YAAY,EAAE,CAAC;gBACjE,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,IAAI,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC;gBAC3D,CAAC;YACH,CAAC;YACD,MAAM,OAAO,GAAG,mBAAmB,CACjC,SAAS,EACT,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,aAAa,CACrC,CAAC;YACF,MAAM,YAAY,GAAG,EAAE,CAAC;YAExB,IACE,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe;gBACxC,OAAO,SAAS,KAAK,QAAQ;gBAC7B,SAAS,EACT,CAAC;gBACD,MAAM,OAAO,GACX,OAAQ,SAAqC,CAAC,OAAO,KAAK,QAAQ;oBAChE,CAAC,CAAG,SAAqC,CAAC,OAAkB;oBAC5D,CAAC,CAAC,SAAS,CAAC;gBAChB,MAAM,YAAY,GAChB,OAAO,WAAW,CAAC,YAAY,KAAK,QAAQ;oBAC1C,CAAC,CAAC,WAAW,CAAC,YAAY;oBAC1B,CAAC,CAAC,SAAS,CAAC;gBAEhB,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,CAC/B,YAAY,EACZ,MAAM,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC,EAC/B,OAAO,CACR,CAAC;oBACF,YAAY,CAAC,IAAI,CACf,kBAAkB,CAChB,sBAAsB,IAAI,CAAC,EAAE,EAAE,EAC/B,YAAY,EACZ,gBAAgB,EAChB,iDAAiD,EACjD,kBAAkB,CACnB,CACF,CAAC;oBACF,OAAO,CAAC,IAAI,GAAG;wBACb,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;wBACvB,YAAY,EAAE,sBAAsB,IAAI,CAAC,EAAE,EAAE;qBAC9C,CAAC;oBACF,MAAM,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,CAAC;oBAC9C,MAAM,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC;wBACtC,GAAG,EAAE,sBAAsB,IAAI,CAAC,EAAE,EAAE;qBACrC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,IACE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW;gBACnC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC;gBACzC,OAAO,CAAC,OAAO,EACf,CAAC;gBACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;gBAC1B,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;oBACrC,CAAC,CAAC,IAAI,CAAC,MAAM;oBACb,CAAC,CAAC,KAAK,CAAC,OAAO,CAAE,IAAyC,EAAE,IAAI,CAAC;wBAC/D,CAAC,CAAE,IAA4B,CAAC,IAAI,CAAC,MAAM;wBAC3C,CAAC,CAAC,CAAC,CAAC;gBACR,IAAI,WAAW,IAAI,EAAE,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;oBAC3C,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB,CACnC,OAAO,WAAW,CAAC,YAAY,KAAK,QAAQ;wBAC1C,CAAC,CAAC,WAAW,CAAC,YAAY;wBAC1B,CAAC,CAAC,SAAS,EACb,UAAU,CAAC,IAAI,CAAC,IAAI,EACpB,IAAI,CACL,CAAC;oBACF,YAAY,CAAC,IAAI,CACf,kBAAkB,CAChB,wBAAwB,MAAM,CAAC,EAAE,EAAE,EACnC,cAAc,EACd,cAAc,EACd,uDAAuD,EACvD,kBAAkB,CACnB,CACF,CAAC;oBACF,OAAO,CAAC,IAAI,GAAG;wBACb,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;wBACvB,cAAc,EAAE,wBAAwB,MAAM,CAAC,EAAE,EAAE;qBACpD,CAAC;oBACF,MAAM,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,CAAC;oBAC9C,MAAM,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC;wBACtC,GAAG,EAAE,wBAAwB,MAAM,CAAC,EAAE,EAAE;qBACzC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,IACE,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe;gBACxC,KAAK,CAAC,KAAK,EAAE,aAAa,KAAK,SAAS,EACxC,CAAC;gBACD,MAAM,KAAK,CAAC,gBAAgB,CAAC;oBAC3B,MAAM,EAAE,wBAAwB;oBAChC,MAAM,EAAE;wBACN,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,aAAa;wBACxC,QAAQ,EAAE,CAAC;wBACX,KAAK,EAAE,CAAC;wBACR,OAAO,EAAE,sBAAsB;qBAChC;iBACF,CAAC,CAAC;YACL,CAAC;YAED,OAAO,gBAAgB,CAAC,OAA8B,EAAE,YAAY,CAAC,CAAC;QACxE,CAAC,CACF,CAAC;IACJ,CAAC;IAED,iBAAiB,CAAC,MAAM,EAAE;QACxB,UAAU,EAAE,WAAW;QACvB,aAAa,EAAE,cAAc;QAC7B,UAAU,EAAE,QAAQ;QACpB,gBAAgB;QAChB,SAAS,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QACvD,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,cAAc,EAAE,WAAW,CAAC,cAAc;QAC1C,SAAS,EAAE,WAAW,CAAC,YAAY;QACnC,cAAc,EACZ,WAAW,CAAC,YAAY,KAAK,MAAM;YACjC,CAAC,CAAC,iBAAiB,CAAC,WAAW,CAAC;YAChC,CAAC,CAAC,SAAS;QACf,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,sBAAsB,EAAE,WAAW,CAAC,sBAAsB;QAC1D,SAAS,EAAE,WAAW,CAAC,SAAS;QAChC,mBAAmB,EAAE,WAAW,CAAC,mBAAmB;QACpD,KAAK;KACN,CAAC,CAAC;IACH,eAAe,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;IAElD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,GAAoB;IACjD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1D,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,GAAoB,EACpB,GAAmB,EACnB,WAA8B;IAE9B,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,WAAW,EAAE,EAAE,WAAW,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC;QAClD,kBAAkB,EAAE,SAAS;KAC9B,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,UAAU,GACd,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACjE,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YACrB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAC3D,GAAG,CAAC,GAAG,CACL,IAAI,CAAC,SAAS,CAAC;gBACb,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACL,IAAI,EAAE,CAAC,KAAK;oBACZ,OAAO,EAAE,uBAAuB;iBACjC;gBACD,EAAE,EAAE,IAAI;aACT,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,WAA8B;IAC1D,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,WAAW,EAAE,EAAE,WAAW,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,WAA8B;IACzD,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC;IACrC,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC;IACrC,MAAM,aAAa,GAAG,UAAU,IAAI,IAAI,IAAI,MAAM,CAAC;IACnD,MAAM,cAAc,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAEtD,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC3C,KAAK,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACjC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,KAAK,CAAC,2CAA2C,aAAa,EAAE,CAAC,CAAC;IAC1E,IAAI,cAAc,KAAK,aAAa,EAAE,CAAC;QACrC,OAAO,CAAC,KAAK,CAAC,wBAAwB,cAAc,EAAE,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,WAAW,GAAG,sBAAsB,EAAE,CAAC;IAC7C,2BAA2B,CAAC,WAAW,CAAC,CAAC;IACzC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAE/B,IAAI,WAAW,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;QACxC,MAAM,aAAa,CAAC,WAAW,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IAED,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;AACpC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;IACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,8EAA8E;AAC9E,OAAO,uBAAuB,CAAC;AAC/B,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAEhE,6EAA6E;AAC7E,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAE/B,OAAO,EAEL,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI/C,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC,SAAS,cAAc,CACrB,KAAkB,EAClB,WAA8B;IAE9B,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE;QACxE,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC;KACnE,CAAC,CAAC;IACH,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AAC9B,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,KAAkB,EAClB,WAA8B;IAE9B,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC7D,OAAO,GAAG,EAAE,CACV,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAC5B,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAClC,UAAU,CAAC,mBAAmB,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,gBAAgB,CAAC,WAAwB;IAChD,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,YAAY,GAAG,IAAI,CAAC;QACpB,uDAAuD;QACvD,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC;QAC/D,MAAM,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,aAAa,EAAE,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACjC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAClC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,WAAW,GAAG,sBAAsB,EAAE,CAAC;IAC7C,2BAA2B,CAAC,WAAW,CAAC,CAAC;IACzC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAE/B,sEAAsE;IACtE,sDAAsD;IACtD,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC;IAEhC,IAAI,WAAW,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;QACxC,gBAAgB,CAAC,MAAM,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;IACtE,sEAAsE;IACtE,6BAA6B;IAC7B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;IACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { CallToolResult, ContentBlock, ResourceLink } from "@modelcontextprotocol/sdk/types.js";
1
+ import type { CallToolResult, ContentBlock, ResourceLink } from "@modelcontextprotocol/server";
2
2
  import { z } from "zod";
3
3
  export declare const toolResultOutputSchema: {
4
4
  version: z.ZodLiteral<1>;