@connorbritain/mssql-mcp-core 0.1.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 (129) hide show
  1. package/dist/audit/AuditLogger.d.ts +37 -0
  2. package/dist/audit/AuditLogger.d.ts.map +1 -0
  3. package/dist/audit/AuditLogger.js +145 -0
  4. package/dist/audit/AuditLogger.js.map +1 -0
  5. package/dist/config/EnvironmentManager.d.ts +75 -0
  6. package/dist/config/EnvironmentManager.d.ts.map +1 -0
  7. package/dist/config/EnvironmentManager.js +305 -0
  8. package/dist/config/EnvironmentManager.js.map +1 -0
  9. package/dist/config/ScriptManager.d.ts +69 -0
  10. package/dist/config/ScriptManager.d.ts.map +1 -0
  11. package/dist/config/ScriptManager.js +166 -0
  12. package/dist/config/ScriptManager.js.map +1 -0
  13. package/dist/config/SecretResolver.d.ts +66 -0
  14. package/dist/config/SecretResolver.d.ts.map +1 -0
  15. package/dist/config/SecretResolver.js +230 -0
  16. package/dist/config/SecretResolver.js.map +1 -0
  17. package/dist/index.d.ts +14 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +17 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/routing/IntentRouter.d.ts +17 -0
  22. package/dist/routing/IntentRouter.d.ts.map +1 -0
  23. package/dist/routing/IntentRouter.js +243 -0
  24. package/dist/routing/IntentRouter.js.map +1 -0
  25. package/dist/server/createMcpServer.d.ts +7 -0
  26. package/dist/server/createMcpServer.d.ts.map +1 -0
  27. package/dist/server/createMcpServer.js +100 -0
  28. package/dist/server/createMcpServer.js.map +1 -0
  29. package/dist/server/toolsets.d.ts +42 -0
  30. package/dist/server/toolsets.d.ts.map +1 -0
  31. package/dist/server/toolsets.js +303 -0
  32. package/dist/server/toolsets.js.map +1 -0
  33. package/dist/server/wrapToolRun.d.ts +13 -0
  34. package/dist/server/wrapToolRun.d.ts.map +1 -0
  35. package/dist/server/wrapToolRun.js +102 -0
  36. package/dist/server/wrapToolRun.js.map +1 -0
  37. package/dist/shims.d.ts +2 -0
  38. package/dist/shims.d.ts.map +1 -0
  39. package/dist/shims.js +15 -0
  40. package/dist/shims.js.map +1 -0
  41. package/dist/tools/CreateIndexTool.d.ts +24 -0
  42. package/dist/tools/CreateIndexTool.d.ts.map +1 -0
  43. package/dist/tools/CreateIndexTool.js +64 -0
  44. package/dist/tools/CreateIndexTool.js.map +1 -0
  45. package/dist/tools/CreateTableTool.d.ts +12 -0
  46. package/dist/tools/CreateTableTool.d.ts.map +1 -0
  47. package/dist/tools/CreateTableTool.js +49 -0
  48. package/dist/tools/CreateTableTool.js.map +1 -0
  49. package/dist/tools/DeleteDataTool.d.ts +56 -0
  50. package/dist/tools/DeleteDataTool.d.ts.map +1 -0
  51. package/dist/tools/DeleteDataTool.js +103 -0
  52. package/dist/tools/DeleteDataTool.js.map +1 -0
  53. package/dist/tools/DescribeTableTool.d.ts +32 -0
  54. package/dist/tools/DescribeTableTool.d.ts.map +1 -0
  55. package/dist/tools/DescribeTableTool.js +116 -0
  56. package/dist/tools/DescribeTableTool.js.map +1 -0
  57. package/dist/tools/DropTableTool.d.ts +12 -0
  58. package/dist/tools/DropTableTool.d.ts.map +1 -0
  59. package/dist/tools/DropTableTool.js +37 -0
  60. package/dist/tools/DropTableTool.js.map +1 -0
  61. package/dist/tools/ExplainQueryTool.d.ts +24 -0
  62. package/dist/tools/ExplainQueryTool.d.ts.map +1 -0
  63. package/dist/tools/ExplainQueryTool.js +98 -0
  64. package/dist/tools/ExplainQueryTool.js.map +1 -0
  65. package/dist/tools/InsertDataTool.d.ts +17 -0
  66. package/dist/tools/InsertDataTool.d.ts.map +1 -0
  67. package/dist/tools/InsertDataTool.js +102 -0
  68. package/dist/tools/InsertDataTool.js.map +1 -0
  69. package/dist/tools/InspectDependenciesTool.d.ts +46 -0
  70. package/dist/tools/InspectDependenciesTool.d.ts.map +1 -0
  71. package/dist/tools/InspectDependenciesTool.js +215 -0
  72. package/dist/tools/InspectDependenciesTool.js.map +1 -0
  73. package/dist/tools/ListDatabasesTool.d.ts +27 -0
  74. package/dist/tools/ListDatabasesTool.d.ts.map +1 -0
  75. package/dist/tools/ListDatabasesTool.js +107 -0
  76. package/dist/tools/ListDatabasesTool.js.map +1 -0
  77. package/dist/tools/ListEnvironmentsTool.d.ts +49 -0
  78. package/dist/tools/ListEnvironmentsTool.d.ts.map +1 -0
  79. package/dist/tools/ListEnvironmentsTool.js +73 -0
  80. package/dist/tools/ListEnvironmentsTool.js.map +1 -0
  81. package/dist/tools/ListScriptsTool.d.ts +41 -0
  82. package/dist/tools/ListScriptsTool.d.ts.map +1 -0
  83. package/dist/tools/ListScriptsTool.js +86 -0
  84. package/dist/tools/ListScriptsTool.js.map +1 -0
  85. package/dist/tools/ListTableTool.d.ts +24 -0
  86. package/dist/tools/ListTableTool.d.ts.map +1 -0
  87. package/dist/tools/ListTableTool.js +85 -0
  88. package/dist/tools/ListTableTool.js.map +1 -0
  89. package/dist/tools/ProfileTableTool.d.ts +78 -0
  90. package/dist/tools/ProfileTableTool.d.ts.map +1 -0
  91. package/dist/tools/ProfileTableTool.js +373 -0
  92. package/dist/tools/ProfileTableTool.js.map +1 -0
  93. package/dist/tools/ReadDataTool.d.ts +61 -0
  94. package/dist/tools/ReadDataTool.d.ts.map +1 -0
  95. package/dist/tools/ReadDataTool.js +299 -0
  96. package/dist/tools/ReadDataTool.js.map +1 -0
  97. package/dist/tools/RelationshipInspectorTool.d.ts +46 -0
  98. package/dist/tools/RelationshipInspectorTool.d.ts.map +1 -0
  99. package/dist/tools/RelationshipInspectorTool.js +156 -0
  100. package/dist/tools/RelationshipInspectorTool.js.map +1 -0
  101. package/dist/tools/RunScriptTool.d.ts +214 -0
  102. package/dist/tools/RunScriptTool.d.ts.map +1 -0
  103. package/dist/tools/RunScriptTool.js +186 -0
  104. package/dist/tools/RunScriptTool.js.map +1 -0
  105. package/dist/tools/SearchSchemaTool.d.ts +88 -0
  106. package/dist/tools/SearchSchemaTool.d.ts.map +1 -0
  107. package/dist/tools/SearchSchemaTool.js +237 -0
  108. package/dist/tools/SearchSchemaTool.js.map +1 -0
  109. package/dist/tools/TestConnectionTool.d.ts +38 -0
  110. package/dist/tools/TestConnectionTool.d.ts.map +1 -0
  111. package/dist/tools/TestConnectionTool.js +156 -0
  112. package/dist/tools/TestConnectionTool.js.map +1 -0
  113. package/dist/tools/UpdateDataTool.d.ts +61 -0
  114. package/dist/tools/UpdateDataTool.d.ts.map +1 -0
  115. package/dist/tools/UpdateDataTool.js +117 -0
  116. package/dist/tools/UpdateDataTool.js.map +1 -0
  117. package/dist/tools/ValidateEnvironmentConfigTool.d.ts +51 -0
  118. package/dist/tools/ValidateEnvironmentConfigTool.d.ts.map +1 -0
  119. package/dist/tools/ValidateEnvironmentConfigTool.js +320 -0
  120. package/dist/tools/ValidateEnvironmentConfigTool.js.map +1 -0
  121. package/dist/tools/index.d.ts +21 -0
  122. package/dist/tools/index.d.ts.map +1 -0
  123. package/dist/tools/index.js +22 -0
  124. package/dist/tools/index.js.map +1 -0
  125. package/dist/types.d.ts +60 -0
  126. package/dist/types.d.ts.map +1 -0
  127. package/dist/types.js +2 -0
  128. package/dist/types.js.map +1 -0
  129. package/package.json +53 -0
@@ -0,0 +1,51 @@
1
+ import { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ interface ValidationResult {
3
+ environment: string;
4
+ valid: boolean;
5
+ errors: string[];
6
+ warnings: string[];
7
+ }
8
+ interface SecretsValidationResult {
9
+ providers: {
10
+ type: string;
11
+ valid: boolean;
12
+ error?: string;
13
+ }[];
14
+ secrets: {
15
+ name: string;
16
+ resolved: boolean;
17
+ }[];
18
+ }
19
+ interface ValidateEnvironmentConfigResult {
20
+ success: boolean;
21
+ summary: {
22
+ totalEnvironments: number;
23
+ validCount: number;
24
+ invalidCount: number;
25
+ warningCount: number;
26
+ };
27
+ results: ValidationResult[];
28
+ secretsValidation?: SecretsValidationResult;
29
+ configPath?: string;
30
+ }
31
+ export declare class ValidateEnvironmentConfigTool implements Tool {
32
+ name: string;
33
+ description: string;
34
+ inputSchema: {
35
+ type: "object";
36
+ properties: {
37
+ environment: {
38
+ type: string;
39
+ description: string;
40
+ };
41
+ };
42
+ };
43
+ run(args?: {
44
+ environment?: string;
45
+ }): Promise<ValidateEnvironmentConfigResult>;
46
+ private validateEnvironment;
47
+ private validateSecrets;
48
+ private validateSecretsProviders;
49
+ }
50
+ export {};
51
+ //# sourceMappingURL=ValidateEnvironmentConfigTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValidateEnvironmentConfigTool.d.ts","sourceRoot":"","sources":["../../src/tools/ValidateEnvironmentConfigTool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAI1D,UAAU,gBAAgB;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,UAAU,uBAAuB;IAC/B,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9D,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;CAChD;AAED,UAAU,+BAA+B;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE;QACP,iBAAiB,EAAE,MAAM,CAAC;QAC1B,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,6BAA8B,YAAW,IAAI;IACxD,IAAI,SAAiC;IACrC,WAAW,SAU8D;IAEzE,WAAW;;;;;;;;MAQT;IAEI,GAAG,CAAC,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,+BAA+B,CAAC;IAwEpF,OAAO,CAAC,mBAAmB;IAmL3B,OAAO,CAAC,eAAe;IA4CvB,OAAO,CAAC,wBAAwB;CA8CjC"}
@@ -0,0 +1,320 @@
1
+ import * as fs from "fs";
2
+ import * as path from "path";
3
+ import { getEnvironmentManager } from "../config/EnvironmentManager.js";
4
+ import { SecretResolver, validateDotenvPath, validateFileDirectory } from "../config/SecretResolver.js";
5
+ export class ValidateEnvironmentConfigTool {
6
+ constructor() {
7
+ this.name = "validate_environment_config";
8
+ this.description = `Validates the environments.json configuration file for correctness and security best practices.
9
+
10
+ Checks include:
11
+ - Required fields (name, server, database for database-level; name, server for server-level)
12
+ - Valid authentication mode configuration
13
+ - Policy consistency (e.g., readonly + allowedTools including write tools)
14
+ - Secret placeholder syntax
15
+ - Access level configuration validity
16
+ - Tier designation consistency
17
+
18
+ Returns validation results for each environment with errors and warnings.`;
19
+ this.inputSchema = {
20
+ type: "object",
21
+ properties: {
22
+ environment: {
23
+ type: "string",
24
+ description: "Specific environment name to validate. If omitted, validates all environments.",
25
+ },
26
+ },
27
+ };
28
+ }
29
+ async run(args) {
30
+ const envManager = getEnvironmentManager();
31
+ const environments = envManager.listEnvironments();
32
+ if (environments.length === 0) {
33
+ return {
34
+ success: false,
35
+ summary: {
36
+ totalEnvironments: 0,
37
+ validCount: 0,
38
+ invalidCount: 0,
39
+ warningCount: 0,
40
+ },
41
+ results: [],
42
+ configPath: process.env.ENVIRONMENTS_CONFIG_PATH,
43
+ };
44
+ }
45
+ // Filter to specific environment if requested
46
+ const toValidate = args?.environment
47
+ ? environments.filter((e) => e.name === args.environment)
48
+ : environments;
49
+ if (args?.environment && toValidate.length === 0) {
50
+ return {
51
+ success: false,
52
+ summary: {
53
+ totalEnvironments: environments.length,
54
+ validCount: 0,
55
+ invalidCount: 1,
56
+ warningCount: 0,
57
+ },
58
+ results: [
59
+ {
60
+ environment: args.environment,
61
+ valid: false,
62
+ errors: [`Environment '${args.environment}' not found in configuration.`],
63
+ warnings: [],
64
+ },
65
+ ],
66
+ configPath: process.env.ENVIRONMENTS_CONFIG_PATH,
67
+ };
68
+ }
69
+ const results = [];
70
+ for (const env of toValidate) {
71
+ const result = this.validateEnvironment(env);
72
+ results.push(result);
73
+ }
74
+ const validCount = results.filter((r) => r.valid).length;
75
+ const invalidCount = results.filter((r) => !r.valid).length;
76
+ const warningCount = results.filter((r) => r.warnings.length > 0).length;
77
+ // Validate secrets configuration and resolution
78
+ const secretsValidation = this.validateSecrets(envManager, toValidate);
79
+ return {
80
+ success: invalidCount === 0,
81
+ summary: {
82
+ totalEnvironments: environments.length,
83
+ validCount,
84
+ invalidCount,
85
+ warningCount,
86
+ },
87
+ results,
88
+ secretsValidation,
89
+ configPath: process.env.ENVIRONMENTS_CONFIG_PATH,
90
+ };
91
+ }
92
+ validateEnvironment(env) {
93
+ const errors = [];
94
+ const warnings = [];
95
+ // Required fields
96
+ if (!env.name || env.name.trim() === "") {
97
+ errors.push("Missing required field: name");
98
+ }
99
+ if (!env.server || env.server.trim() === "") {
100
+ errors.push("Missing required field: server");
101
+ }
102
+ // Database is required for database-level access
103
+ const accessLevel = env.accessLevel ?? "database";
104
+ if (accessLevel === "database" && (!env.database || env.database.trim() === "")) {
105
+ errors.push("Missing required field: database (required when accessLevel is 'database')");
106
+ }
107
+ // Validate authentication mode
108
+ const validAuthModes = ["sql", "windows", "aad"];
109
+ if (env.authMode && !validAuthModes.includes(env.authMode)) {
110
+ errors.push(`Invalid authMode '${env.authMode}'. Must be one of: ${validAuthModes.join(", ")}`);
111
+ }
112
+ // Check credentials for sql/windows auth
113
+ if (env.authMode === "sql" || env.authMode === "windows") {
114
+ if (!env.username) {
115
+ errors.push(`Missing username for ${env.authMode} authentication`);
116
+ }
117
+ if (!env.password) {
118
+ errors.push(`Missing password for ${env.authMode} authentication`);
119
+ }
120
+ // Check for plaintext passwords (not using secret placeholders)
121
+ if (env.password && !env.password.startsWith("${secret:")) {
122
+ warnings.push("Password appears to be plaintext. Consider using ${secret:NAME} placeholder.");
123
+ }
124
+ }
125
+ // Windows auth requires domain
126
+ if (env.authMode === "windows" && !env.domain) {
127
+ warnings.push("Windows authentication typically requires a domain. Consider adding 'domain' field.");
128
+ }
129
+ // Validate access level
130
+ const validAccessLevels = ["server", "database"];
131
+ if (env.accessLevel && !validAccessLevels.includes(env.accessLevel)) {
132
+ errors.push(`Invalid accessLevel '${env.accessLevel}'. Must be one of: ${validAccessLevels.join(", ")}`);
133
+ }
134
+ // Server-level access warnings
135
+ if (env.accessLevel === "server") {
136
+ if (!env.allowedDatabases && !env.deniedDatabases) {
137
+ warnings.push("Server-level access without allowedDatabases or deniedDatabases allows access to all databases.");
138
+ }
139
+ }
140
+ // Validate tier
141
+ const validTiers = ["reader", "writer", "admin"];
142
+ if (env.tier && !validTiers.includes(env.tier)) {
143
+ errors.push(`Invalid tier '${env.tier}'. Must be one of: ${validTiers.join(", ")}`);
144
+ }
145
+ // Validate audit level
146
+ const validAuditLevels = ["none", "basic", "verbose"];
147
+ if (env.auditLevel && !validAuditLevels.includes(env.auditLevel)) {
148
+ errors.push(`Invalid auditLevel '${env.auditLevel}'. Must be one of: ${validAuditLevels.join(", ")}`);
149
+ }
150
+ // Production environment warnings
151
+ if (env.auditLevel === "none") {
152
+ warnings.push("Audit logging is disabled. Consider enabling for compliance and debugging.");
153
+ }
154
+ // Policy consistency checks
155
+ const writeTools = ["insert_data", "update_data", "delete_data"];
156
+ const schemaTools = ["create_table", "create_index", "drop_table"];
157
+ if (env.readonly) {
158
+ // Check if allowedTools includes write operations
159
+ if (env.allowedTools) {
160
+ const conflictingTools = env.allowedTools.filter((t) => writeTools.includes(t) || schemaTools.includes(t));
161
+ if (conflictingTools.length > 0) {
162
+ errors.push(`readonly=true conflicts with allowedTools containing write operations: ${conflictingTools.join(", ")}`);
163
+ }
164
+ }
165
+ }
166
+ // Tier consistency checks
167
+ if (env.tier === "reader") {
168
+ if (!env.readonly) {
169
+ warnings.push("Tier 'reader' typically has readonly=true. Consider setting readonly=true.");
170
+ }
171
+ if (env.allowedTools) {
172
+ const writingTools = env.allowedTools.filter((t) => writeTools.includes(t) || schemaTools.includes(t));
173
+ if (writingTools.length > 0) {
174
+ warnings.push(`Tier 'reader' should not include write tools: ${writingTools.join(", ")}`);
175
+ }
176
+ }
177
+ }
178
+ if (env.tier === "writer") {
179
+ if (env.allowedTools) {
180
+ const schemaChanges = env.allowedTools.filter((t) => schemaTools.includes(t));
181
+ if (schemaChanges.length > 0) {
182
+ warnings.push(`Tier 'writer' should not include schema modification tools: ${schemaChanges.join(", ")}`);
183
+ }
184
+ }
185
+ }
186
+ // Check for overlapping allowed/denied tools
187
+ if (env.allowedTools && env.deniedTools) {
188
+ const overlap = env.allowedTools.filter((t) => env.deniedTools.includes(t));
189
+ if (overlap.length > 0) {
190
+ errors.push(`Tools appear in both allowedTools and deniedTools: ${overlap.join(", ")}`);
191
+ }
192
+ }
193
+ // Check for overlapping allowed/denied schemas
194
+ if (env.allowedSchemas && env.deniedSchemas) {
195
+ const overlap = env.allowedSchemas.filter((s) => env.deniedSchemas.includes(s));
196
+ if (overlap.length > 0) {
197
+ warnings.push(`Schema patterns appear in both allowedSchemas and deniedSchemas: ${overlap.join(", ")}`);
198
+ }
199
+ }
200
+ // Check for overlapping allowed/denied databases
201
+ if (env.allowedDatabases && env.deniedDatabases && Array.isArray(env.allowedDatabases)) {
202
+ const overlap = env.allowedDatabases.filter((d) => env.deniedDatabases.includes(d));
203
+ if (overlap.length > 0) {
204
+ errors.push(`Databases appear in both allowedDatabases and deniedDatabases: ${overlap.join(", ")}`);
205
+ }
206
+ }
207
+ // Port validation
208
+ if (env.port !== undefined) {
209
+ if (typeof env.port !== "number" || env.port < 1 || env.port > 65535) {
210
+ errors.push(`Invalid port '${env.port}'. Must be a number between 1 and 65535.`);
211
+ }
212
+ }
213
+ // Connection timeout validation
214
+ if (env.connectionTimeout !== undefined) {
215
+ if (typeof env.connectionTimeout !== "number" || env.connectionTimeout < 1) {
216
+ errors.push(`Invalid connectionTimeout '${env.connectionTimeout}'. Must be a positive number.`);
217
+ }
218
+ }
219
+ // maxRowsDefault validation
220
+ if (env.maxRowsDefault !== undefined) {
221
+ if (typeof env.maxRowsDefault !== "number" || env.maxRowsDefault < 1) {
222
+ errors.push(`Invalid maxRowsDefault '${env.maxRowsDefault}'. Must be a positive number.`);
223
+ }
224
+ if (env.maxRowsDefault > 100000) {
225
+ warnings.push(`maxRowsDefault of ${env.maxRowsDefault} is very high. Consider limiting for performance.`);
226
+ }
227
+ }
228
+ return {
229
+ environment: env.name,
230
+ valid: errors.length === 0,
231
+ errors,
232
+ warnings,
233
+ };
234
+ }
235
+ validateSecrets(envManager, environments) {
236
+ const resolver = envManager.getSecretResolver();
237
+ // Validate provider configs by reading the raw config file
238
+ const providerResults = this.validateSecretsProviders();
239
+ // Extract all ${secret:NAME} references from the raw config
240
+ const configPath = process.env.ENVIRONMENTS_CONFIG_PATH;
241
+ const allSecretNames = new Set();
242
+ if (configPath) {
243
+ try {
244
+ const rawContent = fs.readFileSync(configPath, "utf-8");
245
+ for (const name of SecretResolver.extractSecretNames(rawContent)) {
246
+ allSecretNames.add(name);
247
+ }
248
+ }
249
+ catch {
250
+ // If we can't read the file, fall back to checking the resolved environments
251
+ }
252
+ }
253
+ // Also scan from the environment objects (in case loaded from env vars)
254
+ if (allSecretNames.size === 0) {
255
+ for (const env of environments) {
256
+ const json = JSON.stringify(env);
257
+ for (const name of SecretResolver.extractSecretNames(json)) {
258
+ allSecretNames.add(name);
259
+ }
260
+ }
261
+ }
262
+ const { resolved, unresolved } = resolver.checkResolvability(Array.from(allSecretNames));
263
+ const secrets = [
264
+ ...resolved.map((name) => ({ name, resolved: true })),
265
+ ...unresolved.map((name) => ({ name, resolved: false })),
266
+ ];
267
+ return { providers: providerResults, secrets };
268
+ }
269
+ validateSecretsProviders() {
270
+ const configPath = process.env.ENVIRONMENTS_CONFIG_PATH;
271
+ if (!configPath)
272
+ return [];
273
+ try {
274
+ const rawContent = fs.readFileSync(configPath, "utf-8");
275
+ const config = JSON.parse(rawContent);
276
+ if (!config.secrets?.providers)
277
+ return [];
278
+ const validTypes = ["env", "dotenv", "file"];
279
+ const results = [];
280
+ for (const provider of config.secrets.providers) {
281
+ if (!validTypes.includes(provider.type)) {
282
+ results.push({ type: provider.type, valid: false, error: `Unknown provider type '${provider.type}'. Valid types: ${validTypes.join(", ")}` });
283
+ continue;
284
+ }
285
+ if (provider.type === "env") {
286
+ results.push({ type: "env", valid: true });
287
+ }
288
+ else if (provider.type === "dotenv") {
289
+ if (!provider.path) {
290
+ results.push({ type: "dotenv", valid: false, error: "Missing required 'path' field" });
291
+ }
292
+ else if (!path.isAbsolute(provider.path)) {
293
+ results.push({ type: "dotenv", valid: false, error: `Path should be absolute: ${provider.path}` });
294
+ }
295
+ else {
296
+ const check = validateDotenvPath(provider.path);
297
+ results.push({ type: "dotenv", valid: check.valid, error: check.error });
298
+ }
299
+ }
300
+ else if (provider.type === "file") {
301
+ if (!provider.directory) {
302
+ results.push({ type: "file", valid: false, error: "Missing required 'directory' field" });
303
+ }
304
+ else if (!path.isAbsolute(provider.directory)) {
305
+ results.push({ type: "file", valid: false, error: `Directory should be absolute: ${provider.directory}` });
306
+ }
307
+ else {
308
+ const check = validateFileDirectory(provider.directory);
309
+ results.push({ type: "file", valid: check.valid, error: check.error });
310
+ }
311
+ }
312
+ }
313
+ return results;
314
+ }
315
+ catch {
316
+ return [];
317
+ }
318
+ }
319
+ }
320
+ //# sourceMappingURL=ValidateEnvironmentConfigTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValidateEnvironmentConfigTool.js","sourceRoot":"","sources":["../../src/tools/ValidateEnvironmentConfigTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export { CreateIndexTool } from "./CreateIndexTool.js";
2
+ export { CreateTableTool } from "./CreateTableTool.js";
3
+ export { DeleteDataTool } from "./DeleteDataTool.js";
4
+ export { DescribeTableTool } from "./DescribeTableTool.js";
5
+ export { DropTableTool } from "./DropTableTool.js";
6
+ export { ExplainQueryTool } from "./ExplainQueryTool.js";
7
+ export { InsertDataTool } from "./InsertDataTool.js";
8
+ export { InspectDependenciesTool } from "./InspectDependenciesTool.js";
9
+ export { ListDatabasesTool } from "./ListDatabasesTool.js";
10
+ export { ListEnvironmentsTool } from "./ListEnvironmentsTool.js";
11
+ export { ListScriptsTool } from "./ListScriptsTool.js";
12
+ export { ListTableTool } from "./ListTableTool.js";
13
+ export { ProfileTableTool } from "./ProfileTableTool.js";
14
+ export { ReadDataTool } from "./ReadDataTool.js";
15
+ export { RelationshipInspectorTool } from "./RelationshipInspectorTool.js";
16
+ export { RunScriptTool } from "./RunScriptTool.js";
17
+ export { SearchSchemaTool } from "./SearchSchemaTool.js";
18
+ export { TestConnectionTool } from "./TestConnectionTool.js";
19
+ export { UpdateDataTool } from "./UpdateDataTool.js";
20
+ export { ValidateEnvironmentConfigTool } from "./ValidateEnvironmentConfigTool.js";
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC"}
@@ -0,0 +1,22 @@
1
+ // Tool class exports
2
+ export { CreateIndexTool } from "./CreateIndexTool.js";
3
+ export { CreateTableTool } from "./CreateTableTool.js";
4
+ export { DeleteDataTool } from "./DeleteDataTool.js";
5
+ export { DescribeTableTool } from "./DescribeTableTool.js";
6
+ export { DropTableTool } from "./DropTableTool.js";
7
+ export { ExplainQueryTool } from "./ExplainQueryTool.js";
8
+ export { InsertDataTool } from "./InsertDataTool.js";
9
+ export { InspectDependenciesTool } from "./InspectDependenciesTool.js";
10
+ export { ListDatabasesTool } from "./ListDatabasesTool.js";
11
+ export { ListEnvironmentsTool } from "./ListEnvironmentsTool.js";
12
+ export { ListScriptsTool } from "./ListScriptsTool.js";
13
+ export { ListTableTool } from "./ListTableTool.js";
14
+ export { ProfileTableTool } from "./ProfileTableTool.js";
15
+ export { ReadDataTool } from "./ReadDataTool.js";
16
+ export { RelationshipInspectorTool } from "./RelationshipInspectorTool.js";
17
+ export { RunScriptTool } from "./RunScriptTool.js";
18
+ export { SearchSchemaTool } from "./SearchSchemaTool.js";
19
+ export { TestConnectionTool } from "./TestConnectionTool.js";
20
+ export { UpdateDataTool } from "./UpdateDataTool.js";
21
+ export { ValidateEnvironmentConfigTool } from "./ValidateEnvironmentConfigTool.js";
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC"}
@@ -0,0 +1,60 @@
1
+ import { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ export type TierLevel = "reader" | "writer" | "admin";
3
+ export interface McpServerConfig {
4
+ /** Display name shown to MCP clients, e.g. "mssql-mcp-reader" */
5
+ name: string;
6
+ /** SemVer string, e.g. "0.2.0" */
7
+ version: string;
8
+ /** Which tool-set tier to expose */
9
+ tier: TierLevel;
10
+ }
11
+ export type IntentCategory = "data_read" | "data_write" | "schema_discovery" | "schema_change" | "metadata";
12
+ export interface RunnableTool extends Tool {
13
+ run: (args: any) => Promise<any>;
14
+ }
15
+ export interface ToolRoutingConfig {
16
+ tool: RunnableTool;
17
+ name: string;
18
+ intents: IntentCategory[];
19
+ keywords?: string[];
20
+ requiredArgs?: string[];
21
+ mutatesData?: boolean;
22
+ schemaChange?: boolean;
23
+ baseScore?: number;
24
+ requiresConfirmation?: boolean;
25
+ }
26
+ export interface IntentRouterOptions {
27
+ tools: ToolRoutingConfig[];
28
+ allowMutations: boolean;
29
+ requireConfirmationForMutations: boolean;
30
+ }
31
+ export interface RoutingCandidate {
32
+ config: ToolRoutingConfig;
33
+ score: number;
34
+ reasons: string[];
35
+ }
36
+ export interface RouteParams {
37
+ prompt: string;
38
+ toolArguments?: Record<string, any>;
39
+ confirmIntent?: boolean;
40
+ preferredToolName?: string;
41
+ environment?: string;
42
+ }
43
+ export interface RouteResult {
44
+ success: boolean;
45
+ routedTool?: string;
46
+ intent?: IntentCategory;
47
+ reasoning?: string[];
48
+ toolResult?: any;
49
+ message?: string;
50
+ error?: string;
51
+ selectedEnvironment?: string;
52
+ }
53
+ export interface WrapToolRunOptions {
54
+ environmentManager: import("./config/EnvironmentManager.js").EnvironmentManager;
55
+ sessionId: string;
56
+ serverVersion: string;
57
+ mutatingToolNames: Set<string>;
58
+ approvalExemptTools: Set<string>;
59
+ }
60
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAI1D,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAItD,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,IAAI,EAAE,SAAS,CAAC;CACjB;AAID,MAAM,MAAM,cAAc,GACtB,WAAW,GACX,YAAY,GACZ,kBAAkB,GAClB,eAAe,GACf,UAAU,CAAC;AAEf,MAAM,WAAW,YAAa,SAAQ,IAAI;IACxC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,+BAA+B,EAAE,OAAO,CAAC;CAC1C;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAID,MAAM,WAAW,kBAAkB;IACjC,kBAAkB,EAAE,OAAO,gCAAgC,EAAE,kBAAkB,CAAC;IAChF,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAClC"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "@connorbritain/mssql-mcp-core",
3
+ "version": "0.1.0",
4
+ "description": "Shared core library for MSSQL MCP servers - tools, config, routing, and server harness",
5
+ "keywords": [
6
+ "mcp",
7
+ "sql-server",
8
+ "mssql",
9
+ "database",
10
+ "ai",
11
+ "claude",
12
+ "windsurf",
13
+ "model-context-protocol"
14
+ ],
15
+ "author": "Connor England <connor.r.england@gmail.com>",
16
+ "license": "MIT",
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "https://github.com/ConnorBritain/mssql-mcp-core.git"
20
+ },
21
+ "homepage": "https://github.com/ConnorBritain/mssql-mcp-core",
22
+ "bugs": {
23
+ "url": "https://github.com/ConnorBritain/mssql-mcp-core/issues"
24
+ },
25
+ "main": "dist/index.js",
26
+ "types": "dist/index.d.ts",
27
+ "exports": {
28
+ ".": {
29
+ "import": "./dist/index.js",
30
+ "types": "./dist/index.d.ts"
31
+ }
32
+ },
33
+ "scripts": {
34
+ "build": "npx tsc",
35
+ "prepare": "npm run build",
36
+ "watch": "tsc --watch"
37
+ },
38
+ "files": [
39
+ "dist"
40
+ ],
41
+ "devDependencies": {
42
+ "@types/mssql": "^9.1.7",
43
+ "@types/node": "^20.14.2",
44
+ "typescript": "^5.4.5"
45
+ },
46
+ "dependencies": {
47
+ "@azure/identity": "^4.4.0",
48
+ "@modelcontextprotocol/sdk": "^1.23.0",
49
+ "dotenv": "^16.4.5",
50
+ "mssql": "^10.0.1"
51
+ },
52
+ "type": "module"
53
+ }