@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
package/dist/config.js CHANGED
@@ -5,6 +5,13 @@ const DEFAULT_CONNECTION_TIMEOUT_SECONDS = 30;
5
5
  const DEFAULT_HTTP_PORT = 3333;
6
6
  const DEFAULT_HTTP_HOST = "127.0.0.1";
7
7
  const DEFAULT_MAX_WRITE_ROWS = 100;
8
+ export const SQL_AUTH_TYPES = [
9
+ "sql",
10
+ "ntlm",
11
+ "azure-default",
12
+ "azure-service-principal",
13
+ "azure-access-token",
14
+ ];
8
15
  let runtimeEnvironment;
9
16
  export function configureRuntimeEnvironment(environment) {
10
17
  runtimeEnvironment = {
@@ -97,14 +104,61 @@ export function parseDatabaseList(value) {
97
104
  .map((database) => database.trim())
98
105
  .filter(Boolean);
99
106
  }
107
+ function parseSqlAuthType(value) {
108
+ if (value === undefined || value.trim() === "") {
109
+ return "sql";
110
+ }
111
+ const normalized = value.trim().toLowerCase();
112
+ if (SQL_AUTH_TYPES.includes(normalized)) {
113
+ return normalized;
114
+ }
115
+ throw new Error(`SQL_AUTH_TYPE must be one of: ${SQL_AUTH_TYPES.join(", ")}.`);
116
+ }
117
+ export function parseSqlAuthConfig(env = process.env) {
118
+ const type = parseSqlAuthType(env.SQL_AUTH_TYPE);
119
+ switch (type) {
120
+ case "sql":
121
+ return {
122
+ type,
123
+ user: parseRequiredString("DB_USER", env.DB_USER),
124
+ password: parseRequiredString("DB_PASSWORD", env.DB_PASSWORD),
125
+ };
126
+ case "ntlm":
127
+ return {
128
+ type,
129
+ user: parseRequiredString("DB_USER", env.DB_USER),
130
+ password: parseRequiredString("DB_PASSWORD", env.DB_PASSWORD),
131
+ domain: parseRequiredString("DB_DOMAIN", env.DB_DOMAIN),
132
+ };
133
+ case "azure-default": {
134
+ const clientId = env.AZURE_CLIENT_ID?.trim();
135
+ return clientId ? { type, clientId } : { type };
136
+ }
137
+ case "azure-service-principal":
138
+ return {
139
+ type,
140
+ clientId: parseRequiredString("AZURE_CLIENT_ID", env.AZURE_CLIENT_ID),
141
+ clientSecret: parseRequiredString("AZURE_CLIENT_SECRET", env.AZURE_CLIENT_SECRET),
142
+ tenantId: parseRequiredString("AZURE_TENANT_ID", env.AZURE_TENANT_ID),
143
+ };
144
+ case "azure-access-token":
145
+ return {
146
+ type,
147
+ token: parseRequiredString("AZURE_ACCESS_TOKEN", env.AZURE_ACCESS_TOKEN),
148
+ };
149
+ }
150
+ }
100
151
  export function parseSqlConnectionConfig(env = process.env) {
152
+ const auth = parseSqlAuthConfig(env);
153
+ const isEntraAuth = auth.type.startsWith("azure-");
101
154
  return {
102
155
  serverName: env.SERVER_NAME?.trim() || "localhost",
103
156
  serverPort: parseServerPort(env.SERVER_PORT),
104
- dbUser: parseRequiredString("DB_USER", env.DB_USER),
105
- dbPassword: parseRequiredString("DB_PASSWORD", env.DB_PASSWORD),
106
- encrypt: parseBoolean("ENCRYPT", env.ENCRYPT, false),
107
- trustServerCertificate: parseBoolean("TRUST_SERVER_CERTIFICATE", env.TRUST_SERVER_CERTIFICATE, true),
157
+ auth,
158
+ // Azure SQL requires TLS and presents publicly trusted certificates, so
159
+ // Entra ID auth types default to encrypting and validating the certificate.
160
+ encrypt: parseBoolean("ENCRYPT", env.ENCRYPT, isEntraAuth),
161
+ trustServerCertificate: parseBoolean("TRUST_SERVER_CERTIFICATE", env.TRUST_SERVER_CERTIFICATE, !isEntraAuth),
108
162
  connectionTimeoutSeconds: parseInteger("CONNECTION_TIMEOUT", env.CONNECTION_TIMEOUT, DEFAULT_CONNECTION_TIMEOUT_SECONDS),
109
163
  queryTimeoutMs: parseInteger("QUERY_TIMEOUT_MS", env.QUERY_TIMEOUT_MS, DEFAULT_QUERY_TIMEOUT_MS),
110
164
  };
@@ -136,6 +190,9 @@ export function parseEnvironmentConfig(env = process.env) {
136
190
  mcpHttpHost: env.MCP_HTTP_HOST?.trim() || DEFAULT_HTTP_HOST,
137
191
  mcpHttpPort: parseInteger("MCP_HTTP_PORT", env.MCP_HTTP_PORT, DEFAULT_HTTP_PORT, 1, 65535),
138
192
  mcpBaseUrl: parseMcpBaseUrl(env.MCP_BASE_URL),
193
+ mcpHttpAuthToken: env.MCP_HTTP_AUTH_TOKEN?.trim() || undefined,
194
+ mcpHttpAllowUnauthenticated: parseBoolean("MCP_HTTP_ALLOW_UNAUTHENTICATED", env.MCP_HTTP_ALLOW_UNAUTHENTICATED, false),
195
+ mcpHttpAllowedHosts: parseDatabaseList(env.MCP_HTTP_ALLOWED_HOSTS).map((host) => host.toLowerCase()),
139
196
  };
140
197
  }
141
198
  function parseMcpTransport(value) {
@@ -170,9 +227,13 @@ export function clampRowLimit(limit, fallback = getMaxRows()) {
170
227
  }
171
228
  export function getMcpEndpointUrl(environment) {
172
229
  const baseUrl = environment.mcpBaseUrl ??
173
- `http://${environment.mcpHttpHost}:${environment.mcpHttpPort}`;
230
+ `http://${formatUrlHost(environment.mcpHttpHost)}:${environment.mcpHttpPort}`;
174
231
  return `${baseUrl.replace(/\/+$/, "")}/mcp`;
175
232
  }
233
+ /** Brackets IPv6 literals (`::1` -> `[::1]`) for use in a URL authority. */
234
+ export function formatUrlHost(host) {
235
+ return host.includes(":") && !host.startsWith("[") ? `[${host}]` : host;
236
+ }
176
237
  export function getMaxWriteRows() {
177
238
  if (runtimeEnvironment) {
178
239
  return runtimeEnvironment.maxWriteRows;
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function describeConfirmation(toolName: string, args: Record<string, unknown>, defaultDatabase: string | null): string;
2
+ //# sourceMappingURL=confirmationMessage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirmationMessage.d.ts","sourceRoot":"","sources":["../src/confirmationMessage.ts"],"names":[],"mappings":"AAkFA,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,eAAe,EAAE,MAAM,GAAG,IAAI,GAC7B,MAAM,CAwCR"}
@@ -0,0 +1,105 @@
1
+ // Builds the elicitation message for write/DDL confirmations so the user sees
2
+ // what they are approving before they accept: target database and table,
3
+ // filters, and a bounded preview of inserted or updated values.
4
+ const MAX_VALUE_LENGTH = 40;
5
+ const MAX_LIST_ITEMS = 5;
6
+ function formatValue(value) {
7
+ const text = typeof value === "string" ? `'${value}'` : JSON.stringify(value);
8
+ const rendered = text ?? String(value);
9
+ return rendered.length > MAX_VALUE_LENGTH
10
+ ? `${rendered.slice(0, MAX_VALUE_LENGTH - 1)}…`
11
+ : rendered;
12
+ }
13
+ function formatList(items) {
14
+ const shown = items.slice(0, MAX_LIST_ITEMS).join(", ");
15
+ const hidden = items.length - MAX_LIST_ITEMS;
16
+ return hidden > 0 ? `${shown} (+${hidden} more)` : shown;
17
+ }
18
+ function formatFilter(filter) {
19
+ if (typeof filter !== "object" || filter === null) {
20
+ return "?";
21
+ }
22
+ const { column, operator, value, values } = filter;
23
+ if (operator === "IS NULL" || operator === "IS NOT NULL") {
24
+ return `${String(column)} ${operator}`;
25
+ }
26
+ if (operator === "IN" && Array.isArray(values)) {
27
+ return `${String(column)} IN (${formatList(values.map(formatValue))})`;
28
+ }
29
+ return `${String(column)} ${String(operator)} ${formatValue(value)}`;
30
+ }
31
+ function formatTarget(args, defaultDatabase) {
32
+ const parts = [
33
+ typeof args.databaseName === "string" && args.databaseName.trim()
34
+ ? args.databaseName.trim()
35
+ : defaultDatabase,
36
+ typeof args.schemaName === "string" && args.schemaName.trim()
37
+ ? args.schemaName.trim()
38
+ : undefined,
39
+ String(args.tableName ?? "?"),
40
+ ];
41
+ return parts.filter(Boolean).join(".");
42
+ }
43
+ function formatWhere(filters) {
44
+ return Array.isArray(filters) && filters.length > 0
45
+ ? ` where ${filters.map(formatFilter).join(" AND ")}`
46
+ : "";
47
+ }
48
+ function isRecord(value) {
49
+ return typeof value === "object" && value !== null && !Array.isArray(value);
50
+ }
51
+ function formatAssignments(record) {
52
+ return formatList(Object.entries(record).map(([column, value]) => `${column} = ${formatValue(value)}`));
53
+ }
54
+ function formatInsertValues(data) {
55
+ const rows = Array.isArray(data) ? data : [data];
56
+ const first = rows.find(isRecord);
57
+ if (!first) {
58
+ return "";
59
+ }
60
+ const assignments = formatAssignments(first);
61
+ if (!assignments) {
62
+ return "";
63
+ }
64
+ return rows.length > 1 ? `. First row: ${assignments}` : `: ${assignments}`;
65
+ }
66
+ export function describeConfirmation(toolName, args, defaultDatabase) {
67
+ const target = formatTarget(args, defaultDatabase);
68
+ let detail;
69
+ switch (toolName) {
70
+ case "insert_data": {
71
+ const rows = Array.isArray(args.data) ? args.data.length : 1;
72
+ detail = `insert ${rows} row${rows === 1 ? "" : "s"} into ${target}${formatInsertValues(args.data)}`;
73
+ break;
74
+ }
75
+ case "update_data": {
76
+ const assignments = isRecord(args.updates)
77
+ ? formatAssignments(args.updates)
78
+ : "";
79
+ detail = `update ${target}: set ${assignments}${formatWhere(args.filters)}`;
80
+ break;
81
+ }
82
+ case "delete_data":
83
+ detail = `delete from ${target}${formatWhere(args.filters)}`;
84
+ break;
85
+ case "create_table": {
86
+ const columns = Array.isArray(args.columns) ? args.columns.length : 0;
87
+ detail = `create table ${target} with ${columns} column${columns === 1 ? "" : "s"}`;
88
+ break;
89
+ }
90
+ case "create_index": {
91
+ const columns = Array.isArray(args.columns)
92
+ ? args.columns.map(String)
93
+ : [];
94
+ detail = `create index ${String(args.indexName ?? "?")} on ${target} (${formatList(columns)})`;
95
+ break;
96
+ }
97
+ case "drop_table":
98
+ detail = `drop table ${target}`;
99
+ break;
100
+ default:
101
+ detail = `run ${toolName} on ${target}`;
102
+ }
103
+ return `Confirm ${toolName}: ${detail}. Review the preview and impact before accepting.`;
104
+ }
105
+ //# sourceMappingURL=confirmationMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirmationMessage.js","sourceRoot":"","sources":["../src/confirmationMessage.ts"],"names":[],"mappings":"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"}
package/dist/db.d.ts CHANGED
@@ -1,5 +1,15 @@
1
1
  import sql from "mssql";
2
2
  import { type EnvironmentConfig, type SqlConnectionConfig } from "./config.js";
3
+ interface SqlRequestContext {
4
+ signal?: AbortSignal;
5
+ }
6
+ /**
7
+ * Runs `fn` with an MCP request context so SQL requests created inside it are
8
+ * cancelled when the client cancels the MCP request.
9
+ */
10
+ export declare function runWithSqlRequestContext<T>(context: SqlRequestContext, fn: () => Promise<T>): Promise<T>;
11
+ /** Cancels `request` when the current MCP request is aborted. */
12
+ export declare function bindRequestCancellation(request: sql.Request): sql.Request;
3
13
  export declare function configureSqlConnection(config: SqlConnectionConfig): void;
4
14
  export declare function configureDatabase(environment: EnvironmentConfig): void;
5
15
  export declare function getDefaultDatabaseName(): string | null;
@@ -18,6 +28,15 @@ export declare function buildSqlConfig(databaseName: string, environment: SqlCon
18
28
  * Ensures a connection pool exists for the given database.
19
29
  */
20
30
  export declare function ensureSqlConnection(databaseName: string): Promise<sql.ConnectionPool>;
31
+ /** Closes every cached connection pool (used on shutdown). */
32
+ export declare function closeAllPools(): Promise<void>;
33
+ /**
34
+ * Returns the shared connection pool for the given (or default) database.
35
+ */
36
+ export declare function getSqlPool(databaseName?: string): Promise<{
37
+ pool: sql.ConnectionPool;
38
+ error?: string;
39
+ }>;
21
40
  /**
22
41
  * Returns a sql.Request for the given database.
23
42
  * Resolves database name (param or default), validates against allowed list,
@@ -31,4 +50,5 @@ export declare function getDedicatedSqlPool(databaseName?: string): Promise<{
31
50
  pool: sql.ConnectionPool;
32
51
  error?: string;
33
52
  }>;
53
+ export {};
34
54
  //# sourceMappingURL=db.d.ts.map
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;AACxB,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EAEzB,MAAM,aAAa,CAAC;AAQrB,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAExE;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,iBAAiB,GAAG,IAAI,CAItE;AASD,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAgBtD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAW9C;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQxE;AAED,wBAAgB,cAAc,CAC5B,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,mBAAmB,GAC/B,GAAG,CAAC,MAAM,CAqBZ;AAsBD;;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":"AACA,OAAO,GAAG,MAAM,OAAO,CAAC;AACxB,OAAO,EACL,KAAK,iBAAiB,EAEtB,KAAK,mBAAmB,EAEzB,MAAM,aAAa,CAAC;AAOrB,UAAU,iBAAiB;IACzB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAUD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,OAAO,EAAE,iBAAiB,EAC1B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAYZ;AAED,iEAAiE;AACjE,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAmBzE;AAMD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAExE;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,iBAAiB,GAAG,IAAI,CAItE;AASD,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAgBtD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAW9C;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQxE;AAsCD,wBAAgB,cAAc,CAC5B,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,mBAAmB,GAC/B,GAAG,CAAC,MAAM,CAoBZ;AAsBD;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CA8B7B;AAED,8DAA8D;AAC9D,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAInD;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC;IAAE,IAAI,EAAE,GAAG,CAAC,cAAc,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAUvD;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
@@ -1,7 +1,50 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
1
2
  import sql from "mssql";
2
3
  import { parseDatabaseList, } from "./config.js";
3
- // Connection pools keyed by database name
4
+ // Connection pools keyed by database name. Pending connects are tracked so
5
+ // concurrent first requests share one pool instead of racing to create two.
4
6
  const sqlPools = new Map();
7
+ const pendingPools = new Map();
8
+ const requestContext = new AsyncLocalStorage();
9
+ /**
10
+ * Runs `fn` with an MCP request context so SQL requests created inside it are
11
+ * cancelled when the client cancels the MCP request.
12
+ */
13
+ export function runWithSqlRequestContext(context, fn) {
14
+ const store = { ...context, cleanups: new Set() };
15
+ return requestContext.run(store, async () => {
16
+ try {
17
+ return await fn();
18
+ }
19
+ finally {
20
+ for (const cleanup of store.cleanups) {
21
+ cleanup();
22
+ }
23
+ store.cleanups.clear();
24
+ }
25
+ });
26
+ }
27
+ /** Cancels `request` when the current MCP request is aborted. */
28
+ export function bindRequestCancellation(request) {
29
+ const store = requestContext.getStore();
30
+ const signal = store?.signal;
31
+ if (!store || !signal) {
32
+ return request;
33
+ }
34
+ // mssql resets its cancel flag when a query starts, so a cancel issued
35
+ // before then would be lost: fail fast instead.
36
+ signal.throwIfAborted();
37
+ const onAbort = () => request.cancel();
38
+ const cleanup = () => {
39
+ signal.removeEventListener("abort", onAbort);
40
+ store.cleanups.delete(cleanup);
41
+ };
42
+ signal.addEventListener("abort", onAbort, { once: true });
43
+ store.cleanups.add(cleanup);
44
+ // Streamed requests can release the listener as soon as they finish.
45
+ request.once("done", cleanup);
46
+ return request;
47
+ }
5
48
  let sqlConnectionConfig;
6
49
  let configuredDefaultDatabase;
7
50
  let configuredDatabases;
@@ -63,12 +106,44 @@ export function resolveDatabaseName(databaseName) {
63
106
  return resolved;
64
107
  return null;
65
108
  }
109
+ function buildAuthentication(auth) {
110
+ switch (auth.type) {
111
+ case "sql":
112
+ return { user: auth.user, password: auth.password };
113
+ case "ntlm":
114
+ return { user: auth.user, password: auth.password, domain: auth.domain };
115
+ case "azure-default":
116
+ return {
117
+ authentication: {
118
+ type: "azure-active-directory-default",
119
+ options: auth.clientId ? { clientId: auth.clientId } : {},
120
+ },
121
+ };
122
+ case "azure-service-principal":
123
+ return {
124
+ authentication: {
125
+ type: "azure-active-directory-service-principal-secret",
126
+ options: {
127
+ clientId: auth.clientId,
128
+ clientSecret: auth.clientSecret,
129
+ tenantId: auth.tenantId,
130
+ },
131
+ },
132
+ };
133
+ case "azure-access-token":
134
+ return {
135
+ authentication: {
136
+ type: "azure-active-directory-access-token",
137
+ options: { token: auth.token },
138
+ },
139
+ };
140
+ }
141
+ }
66
142
  export function buildSqlConfig(databaseName, environment) {
67
143
  const config = {
68
144
  server: environment.serverName,
69
145
  database: databaseName,
70
- user: environment.dbUser,
71
- password: environment.dbPassword,
146
+ ...buildAuthentication(environment.auth),
72
147
  requestTimeout: environment.queryTimeoutMs,
73
148
  options: {
74
149
  encrypt: environment.encrypt,
@@ -105,20 +180,47 @@ export async function ensureSqlConnection(databaseName) {
105
180
  if (existing && existing.connected) {
106
181
  return existing;
107
182
  }
108
- if (existing) {
109
- try {
110
- await existing.close();
111
- }
112
- catch {
113
- // Ignore close errors
183
+ const pending = pendingPools.get(databaseName);
184
+ if (pending) {
185
+ return pending;
186
+ }
187
+ const connecting = (async () => {
188
+ if (existing) {
189
+ sqlPools.delete(databaseName);
190
+ await existing.close().catch(() => undefined);
114
191
  }
115
- sqlPools.delete(databaseName);
192
+ const config = buildSqlConfig(databaseName, getSqlConnectionConfig());
193
+ const pool = new sql.ConnectionPool(config);
194
+ await pool.connect();
195
+ sqlPools.set(databaseName, pool);
196
+ return pool;
197
+ })();
198
+ pendingPools.set(databaseName, connecting);
199
+ try {
200
+ return await connecting;
116
201
  }
117
- const config = buildSqlConfig(databaseName, getSqlConnectionConfig());
118
- const pool = new sql.ConnectionPool(config);
119
- await pool.connect();
120
- sqlPools.set(databaseName, pool);
121
- return pool;
202
+ finally {
203
+ pendingPools.delete(databaseName);
204
+ }
205
+ }
206
+ /** Closes every cached connection pool (used on shutdown). */
207
+ export async function closeAllPools() {
208
+ const pools = [...sqlPools.values()];
209
+ sqlPools.clear();
210
+ await Promise.allSettled(pools.map((pool) => pool.close()));
211
+ }
212
+ /**
213
+ * Returns the shared connection pool for the given (or default) database.
214
+ */
215
+ export async function getSqlPool(databaseName) {
216
+ const resolved = await resolveConfiguredDatabase(databaseName);
217
+ if (resolved.error) {
218
+ return {
219
+ pool: null,
220
+ error: resolved.error,
221
+ };
222
+ }
223
+ return { pool: await ensureSqlConnection(resolved.databaseName) };
122
224
  }
123
225
  /**
124
226
  * Returns a sql.Request for the given database.
@@ -134,7 +236,7 @@ export async function getSqlRequest(databaseName) {
134
236
  };
135
237
  }
136
238
  const pool = await ensureSqlConnection(resolved.databaseName);
137
- return { request: pool.request() };
239
+ return { request: bindRequestCancellation(pool.request()) };
138
240
  }
139
241
  export async function getDedicatedSqlPool(databaseName) {
140
242
  const resolved = await resolveConfiguredDatabase(databaseName);
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":"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"}
File without changes
@@ -0,0 +1,25 @@
1
+ import { type IncomingMessage, type Server, type ServerResponse } from "node:http";
2
+ import { type EnvironmentConfig } from "./config.js";
3
+ import type { ServerState } from "./serverState.js";
4
+ export declare function isLoopbackHost(host: string): boolean;
5
+ /**
6
+ * Hostnames accepted in the Host and Origin headers. Guards against DNS
7
+ * rebinding: a browser page on another site cannot reach the server through a
8
+ * hostname it controls.
9
+ */
10
+ export declare function resolveAllowedHostnames(environment: Pick<EnvironmentConfig, "mcpHttpAllowedHosts" | "mcpHttpHost" | "mcpBaseUrl">): string[];
11
+ /**
12
+ * Refuses to expose an unauthenticated server beyond loopback unless the
13
+ * operator explicitly opts in.
14
+ */
15
+ export declare function assertHttpExposureAllowed(environment: Pick<EnvironmentConfig, "mcpHttpHost" | "mcpHttpAuthToken" | "mcpHttpAllowUnauthenticated">): void;
16
+ /**
17
+ * Warns when the listener is reachable off-host over plain HTTP: the bearer
18
+ * token and query results would cross the network unencrypted. An https
19
+ * MCP_BASE_URL signals that a TLS-terminating proxy sits in front.
20
+ */
21
+ export declare function httpExposureWarning(environment: Pick<EnvironmentConfig, "mcpHttpHost" | "mcpBaseUrl">): string | undefined;
22
+ export declare function isAuthorized(authorizationHeader: string | undefined, expectedToken: string): boolean;
23
+ export declare function createHttpRequestListener(state: ServerState, environment: EnvironmentConfig): (req: IncomingMessage, res: ServerResponse) => void;
24
+ export declare function startHttpServer(state: ServerState, environment: EnvironmentConfig): Promise<Server>;
25
+ //# sourceMappingURL=httpServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpServer.d.ts","sourceRoot":"","sources":["../src/httpServer.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,cAAc,EACpB,MAAM,WAAW,CAAC;AAOnB,OAAO,EACL,KAAK,iBAAiB,EAGvB,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAKpD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQpD;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,IAAI,CACf,iBAAiB,EACjB,qBAAqB,GAAG,aAAa,GAAG,YAAY,CACrD,GACA,MAAM,EAAE,CAkBV;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,IAAI,CACf,iBAAiB,EACjB,aAAa,GAAG,kBAAkB,GAAG,6BAA6B,CACnE,GACA,IAAI,CAYN;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,IAAI,CAAC,iBAAiB,EAAE,aAAa,GAAG,YAAY,CAAC,GACjE,MAAM,GAAG,SAAS,CAQpB;AAED,wBAAgB,YAAY,CAC1B,mBAAmB,EAAE,MAAM,GAAG,SAAS,EACvC,aAAa,EAAE,MAAM,GACpB,OAAO,CAUT;AAkBD,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,WAAW,EAClB,WAAW,EAAE,iBAAiB,GAC7B,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,IAAI,CAmCrD;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,WAAW,EAClB,WAAW,EAAE,iBAAiB,GAC7B,OAAO,CAAC,MAAM,CAAC,CA6BjB"}