@connorbritain/mssql-mcp-server 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 (70) hide show
  1. package/README.md +61 -0
  2. package/dist/audit/AuditLogger.d.ts +25 -0
  3. package/dist/audit/AuditLogger.d.ts.map +1 -0
  4. package/dist/audit/AuditLogger.js +91 -0
  5. package/dist/audit/AuditLogger.js.map +1 -0
  6. package/dist/config/EnvironmentManager.d.ts +36 -0
  7. package/dist/config/EnvironmentManager.d.ts.map +1 -0
  8. package/dist/config/EnvironmentManager.js +185 -0
  9. package/dist/config/EnvironmentManager.js.map +1 -0
  10. package/dist/index.d.ts +3 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +615 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/tools/CreateIndexTool.d.ts +24 -0
  15. package/dist/tools/CreateIndexTool.d.ts.map +1 -0
  16. package/dist/tools/CreateIndexTool.js +64 -0
  17. package/dist/tools/CreateIndexTool.js.map +1 -0
  18. package/dist/tools/CreateTableTool.d.ts +12 -0
  19. package/dist/tools/CreateTableTool.d.ts.map +1 -0
  20. package/dist/tools/CreateTableTool.js +49 -0
  21. package/dist/tools/CreateTableTool.js.map +1 -0
  22. package/dist/tools/DeleteDataTool.d.ts +56 -0
  23. package/dist/tools/DeleteDataTool.d.ts.map +1 -0
  24. package/dist/tools/DeleteDataTool.js +103 -0
  25. package/dist/tools/DeleteDataTool.js.map +1 -0
  26. package/dist/tools/DescribeTableTool.d.ts +20 -0
  27. package/dist/tools/DescribeTableTool.d.ts.map +1 -0
  28. package/dist/tools/DescribeTableTool.js +34 -0
  29. package/dist/tools/DescribeTableTool.js.map +1 -0
  30. package/dist/tools/DropTableTool.d.ts +12 -0
  31. package/dist/tools/DropTableTool.d.ts.map +1 -0
  32. package/dist/tools/DropTableTool.js +37 -0
  33. package/dist/tools/DropTableTool.js.map +1 -0
  34. package/dist/tools/ExplainQueryTool.d.ts +24 -0
  35. package/dist/tools/ExplainQueryTool.d.ts.map +1 -0
  36. package/dist/tools/ExplainQueryTool.js +98 -0
  37. package/dist/tools/ExplainQueryTool.js.map +1 -0
  38. package/dist/tools/InsertDataTool.d.ts +17 -0
  39. package/dist/tools/InsertDataTool.d.ts.map +1 -0
  40. package/dist/tools/InsertDataTool.js +144 -0
  41. package/dist/tools/InsertDataTool.js.map +1 -0
  42. package/dist/tools/ListTableTool.d.ts +18 -0
  43. package/dist/tools/ListTableTool.d.ts.map +1 -0
  44. package/dist/tools/ListTableTool.js +43 -0
  45. package/dist/tools/ListTableTool.js.map +1 -0
  46. package/dist/tools/ProfileTableTool.d.ts +78 -0
  47. package/dist/tools/ProfileTableTool.d.ts.map +1 -0
  48. package/dist/tools/ProfileTableTool.js +372 -0
  49. package/dist/tools/ProfileTableTool.js.map +1 -0
  50. package/dist/tools/ReadDataTool.d.ts +58 -0
  51. package/dist/tools/ReadDataTool.d.ts.map +1 -0
  52. package/dist/tools/ReadDataTool.js +265 -0
  53. package/dist/tools/ReadDataTool.js.map +1 -0
  54. package/dist/tools/RelationshipInspectorTool.d.ts +46 -0
  55. package/dist/tools/RelationshipInspectorTool.d.ts.map +1 -0
  56. package/dist/tools/RelationshipInspectorTool.js +155 -0
  57. package/dist/tools/RelationshipInspectorTool.js.map +1 -0
  58. package/dist/tools/SearchSchemaTool.d.ts +88 -0
  59. package/dist/tools/SearchSchemaTool.d.ts.map +1 -0
  60. package/dist/tools/SearchSchemaTool.js +236 -0
  61. package/dist/tools/SearchSchemaTool.js.map +1 -0
  62. package/dist/tools/TestConnectionTool.d.ts +36 -0
  63. package/dist/tools/TestConnectionTool.d.ts.map +1 -0
  64. package/dist/tools/TestConnectionTool.js +155 -0
  65. package/dist/tools/TestConnectionTool.js.map +1 -0
  66. package/dist/tools/UpdateDataTool.d.ts +61 -0
  67. package/dist/tools/UpdateDataTool.d.ts.map +1 -0
  68. package/dist/tools/UpdateDataTool.js +117 -0
  69. package/dist/tools/UpdateDataTool.js.map +1 -0
  70. package/package.json +42 -0
package/dist/index.js ADDED
@@ -0,0 +1,615 @@
1
+ #!/usr/bin/env node
2
+ // External imports
3
+ import { Buffer } from "node:buffer";
4
+ import * as dotenv from "dotenv";
5
+ import sql from "mssql";
6
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
7
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
8
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
9
+ // Node 21+ dropped the legacy global SlowBuffer. Some transitive deps (jsonwebtoken)
10
+ // still reference it, so reintroduce a shim to keep compatibility with latest Node.
11
+ if (!globalThis.SlowBuffer) {
12
+ globalThis.SlowBuffer = Buffer.allocUnsafeSlow;
13
+ }
14
+ dotenv.config();
15
+ // Internal imports
16
+ import { UpdateDataTool } from "./tools/UpdateDataTool.js";
17
+ import { InsertDataTool } from "./tools/InsertDataTool.js";
18
+ import { ReadDataTool } from "./tools/ReadDataTool.js";
19
+ import { CreateTableTool } from "./tools/CreateTableTool.js";
20
+ import { CreateIndexTool } from "./tools/CreateIndexTool.js";
21
+ import { ListTableTool } from "./tools/ListTableTool.js";
22
+ import { DropTableTool } from "./tools/DropTableTool.js";
23
+ import { TestConnectionTool } from "./tools/TestConnectionTool.js";
24
+ import { DeleteDataTool } from "./tools/DeleteDataTool.js";
25
+ import { DescribeTableTool } from "./tools/DescribeTableTool.js";
26
+ import { SearchSchemaTool } from "./tools/SearchSchemaTool.js";
27
+ import { ProfileTableTool } from "./tools/ProfileTableTool.js";
28
+ import { RelationshipInspectorTool } from "./tools/RelationshipInspectorTool.js";
29
+ import { ExplainQueryTool } from "./tools/ExplainQueryTool.js";
30
+ import { auditLogger } from "./audit/AuditLogger.js";
31
+ import { getEnvironmentManager } from "./config/EnvironmentManager.js";
32
+ class IntentRouter {
33
+ constructor(options) {
34
+ this.tools = options.tools;
35
+ this.allowMutations = options.allowMutations;
36
+ this.requireConfirmationForMutations = options.requireConfirmationForMutations;
37
+ }
38
+ async route(params) {
39
+ const prompt = typeof params.prompt === "string" ? params.prompt.trim() : "";
40
+ if (!prompt) {
41
+ return {
42
+ success: false,
43
+ message: "Prompt is required to route intent.",
44
+ error: "MISSING_PROMPT",
45
+ };
46
+ }
47
+ const toolArguments = this.normalizeArguments(params.toolArguments ?? {});
48
+ const confirmIntent = Boolean(params.confirmIntent);
49
+ const preferredToolName = params.preferredToolName;
50
+ const normalizedPrompt = prompt.toLowerCase();
51
+ // Infer environment from prompt if not explicitly provided
52
+ const environment = params.environment || this.inferEnvironment(normalizedPrompt);
53
+ if (environment) {
54
+ toolArguments.environment = environment;
55
+ }
56
+ const inferredIntent = this.inferIntent(normalizedPrompt, toolArguments);
57
+ const eligibleTools = this.tools.filter((tool) => this.isToolEligible(tool));
58
+ const candidates = eligibleTools
59
+ .map((tool) => this.scoreTool(tool, normalizedPrompt, toolArguments, inferredIntent, preferredToolName))
60
+ .filter((candidate) => candidate.score > Number.NEGATIVE_INFINITY)
61
+ .sort((a, b) => b.score - a.score);
62
+ const bestCandidate = candidates[0];
63
+ if (!bestCandidate || bestCandidate.score <= 0) {
64
+ return {
65
+ success: false,
66
+ message: "Unable to determine an appropriate SQL tool for the provided prompt. Try specifying the desired action more concretely (e.g., 'list tables', 'describe table X', 'run SELECT ...').",
67
+ error: "NO_TOOL_MATCH",
68
+ };
69
+ }
70
+ const missingArgs = this.getMissingArguments(bestCandidate.config, toolArguments);
71
+ if (missingArgs.length) {
72
+ return {
73
+ success: false,
74
+ routedTool: bestCandidate.config.name,
75
+ message: `Selected tool '${bestCandidate.config.name}' requires argument(s): ${missingArgs.join(", ")}. Provide them in the request arguments.`,
76
+ error: "MISSING_ARGUMENTS",
77
+ };
78
+ }
79
+ const requiresConfirmation = (bestCandidate.config.requiresConfirmation ||
80
+ bestCandidate.config.mutatesData ||
81
+ bestCandidate.config.schemaChange) &&
82
+ this.requireConfirmationForMutations;
83
+ if (requiresConfirmation && !confirmIntent) {
84
+ return {
85
+ success: false,
86
+ routedTool: bestCandidate.config.name,
87
+ message: "This operation modifies data or schema. Re-run with confirmIntent: true to proceed.",
88
+ error: "CONFIRMATION_REQUIRED",
89
+ };
90
+ }
91
+ try {
92
+ const result = await bestCandidate.config.tool.run(toolArguments);
93
+ return {
94
+ success: true,
95
+ routedTool: bestCandidate.config.name,
96
+ intent: inferredIntent,
97
+ reasoning: bestCandidate.reasons,
98
+ toolResult: result,
99
+ selectedEnvironment: environment,
100
+ };
101
+ }
102
+ catch (error) {
103
+ return {
104
+ success: false,
105
+ routedTool: bestCandidate.config.name,
106
+ message: `Routed tool '${bestCandidate.config.name}' failed: ${error}`,
107
+ error: "ROUTED_TOOL_FAILED",
108
+ selectedEnvironment: environment,
109
+ };
110
+ }
111
+ }
112
+ inferEnvironment(prompt) {
113
+ // Get available environments from the manager
114
+ const envManager = getEnvironmentManager();
115
+ const environments = envManager.listEnvironments();
116
+ // Look for exact environment name mentions
117
+ for (const env of environments) {
118
+ const patterns = [
119
+ new RegExp(`\\b${env.name}\\b`, "i"),
120
+ new RegExp(`\\b${env.name.replace(/-/g, "\\s")}\\b`, "i"), // Handle dashes as spaces
121
+ ];
122
+ for (const pattern of patterns) {
123
+ if (pattern.test(prompt)) {
124
+ return env.name;
125
+ }
126
+ }
127
+ }
128
+ // Look for common environment keywords
129
+ const envKeywords = {
130
+ prod: ["production", "prod", "live"],
131
+ staging: ["staging", "stage", "uat"],
132
+ dev: ["development", "dev", "local"],
133
+ };
134
+ for (const [envSuffix, keywords] of Object.entries(envKeywords)) {
135
+ for (const keyword of keywords) {
136
+ if (prompt.includes(keyword)) {
137
+ // Try to find an environment with this suffix
138
+ const matchingEnv = environments.find((e) => e.name.toLowerCase().includes(envSuffix));
139
+ if (matchingEnv) {
140
+ return matchingEnv.name;
141
+ }
142
+ }
143
+ }
144
+ }
145
+ // No environment inferred, will use default
146
+ return undefined;
147
+ }
148
+ normalizeArguments(args) {
149
+ if (!args || typeof args !== "object") {
150
+ return {};
151
+ }
152
+ const cloned = {};
153
+ for (const [key, value] of Object.entries(args)) {
154
+ if (value !== undefined) {
155
+ cloned[key] = value;
156
+ }
157
+ }
158
+ return cloned;
159
+ }
160
+ isToolEligible(tool) {
161
+ if (this.allowMutations) {
162
+ return true;
163
+ }
164
+ return !tool.mutatesData && !tool.schemaChange;
165
+ }
166
+ inferIntent(prompt, toolArguments) {
167
+ const detectors = [
168
+ {
169
+ intent: "schema_change",
170
+ keywords: ["create table", "drop table", "create index", "drop index", "alter", "ddl"],
171
+ },
172
+ {
173
+ intent: "data_write",
174
+ keywords: ["update", "insert", "delete", "fix", "modify", "change", "correct"],
175
+ },
176
+ {
177
+ intent: "metadata",
178
+ keywords: ["profile", "sample", "statistics", "distribution", "quality"],
179
+ },
180
+ {
181
+ intent: "schema_discovery",
182
+ keywords: ["describe", "columns", "list tables", "show tables", "schema", "search"],
183
+ },
184
+ {
185
+ intent: "data_read",
186
+ keywords: ["select", "query", "fetch", "count", "report", "view"],
187
+ },
188
+ ];
189
+ for (const detector of detectors) {
190
+ if (detector.keywords.some((keyword) => prompt.includes(keyword))) {
191
+ return detector.intent;
192
+ }
193
+ }
194
+ const sqlSnippet = this.extractSqlSnippet(toolArguments);
195
+ if (sqlSnippet) {
196
+ if (sqlSnippet.startsWith("select")) {
197
+ return "data_read";
198
+ }
199
+ if (sqlSnippet.startsWith("update") || sqlSnippet.startsWith("delete")) {
200
+ return "data_write";
201
+ }
202
+ if (sqlSnippet.startsWith("insert")) {
203
+ return "data_write";
204
+ }
205
+ if (sqlSnippet.startsWith("create") || sqlSnippet.startsWith("drop")) {
206
+ return "schema_change";
207
+ }
208
+ }
209
+ if (toolArguments?.tablePattern || toolArguments?.columnPattern) {
210
+ return "schema_discovery";
211
+ }
212
+ return "data_read";
213
+ }
214
+ extractSqlSnippet(args) {
215
+ const sqlCandidate = typeof args?.query === "string" ? args.query : typeof args?.sql === "string" ? args.sql : null;
216
+ return sqlCandidate?.trim().toLowerCase() ?? null;
217
+ }
218
+ scoreTool(config, prompt, toolArguments, inferredIntent, preferredToolName) {
219
+ let score = config.baseScore ?? 0.5;
220
+ const reasons = [];
221
+ if (config.intents.includes(inferredIntent)) {
222
+ score += 5;
223
+ reasons.push(`intent match (${inferredIntent})`);
224
+ }
225
+ if (preferredToolName && config.name === preferredToolName) {
226
+ score += 3;
227
+ reasons.push("preferred tool match");
228
+ }
229
+ if (config.keywords?.length) {
230
+ for (const keyword of config.keywords) {
231
+ if (prompt.includes(keyword)) {
232
+ score += 2;
233
+ reasons.push(`keyword '${keyword}'`);
234
+ }
235
+ }
236
+ }
237
+ if (config.requiredArgs?.length) {
238
+ for (const arg of config.requiredArgs) {
239
+ if (this.hasArgument(toolArguments, arg)) {
240
+ score += 1;
241
+ }
242
+ else {
243
+ score -= 1;
244
+ }
245
+ }
246
+ }
247
+ if ((config.mutatesData || config.schemaChange) && !this.allowMutations) {
248
+ score = Number.NEGATIVE_INFINITY;
249
+ }
250
+ return { config, score, reasons };
251
+ }
252
+ hasArgument(args, key) {
253
+ if (!args) {
254
+ return false;
255
+ }
256
+ const value = args[key];
257
+ if (value === null || value === undefined) {
258
+ return false;
259
+ }
260
+ if (typeof value === "string") {
261
+ return value.trim().length > 0;
262
+ }
263
+ if (Array.isArray(value)) {
264
+ return value.length > 0;
265
+ }
266
+ if (typeof value === "object") {
267
+ return Object.keys(value).length > 0;
268
+ }
269
+ return true;
270
+ }
271
+ getMissingArguments(config, args) {
272
+ if (!config.requiredArgs || config.requiredArgs.length === 0) {
273
+ return [];
274
+ }
275
+ return config.requiredArgs.filter((arg) => !this.hasArgument(args, arg));
276
+ }
277
+ }
278
+ // ─────────────────────────────────────────────────────────────────────────────
279
+ // Initialize environment manager
280
+ const environmentManager = getEnvironmentManager();
281
+ const updateDataTool = new UpdateDataTool();
282
+ const insertDataTool = new InsertDataTool();
283
+ const deleteDataTool = new DeleteDataTool();
284
+ const readDataTool = new ReadDataTool();
285
+ const createTableTool = new CreateTableTool();
286
+ const createIndexTool = new CreateIndexTool();
287
+ const listTableTool = new ListTableTool();
288
+ const dropTableTool = new DropTableTool();
289
+ const describeTableTool = new DescribeTableTool();
290
+ const searchSchemaTool = new SearchSchemaTool();
291
+ const profileTableTool = new ProfileTableTool();
292
+ const relationshipInspectorTool = new RelationshipInspectorTool();
293
+ const testConnectionTool = new TestConnectionTool();
294
+ const explainQueryTool = new ExplainQueryTool();
295
+ const MUTATING_TOOL_NAMES = new Set([
296
+ "insert_data",
297
+ "delete_data",
298
+ "update_data",
299
+ "create_table",
300
+ "create_index",
301
+ "drop_table",
302
+ ]);
303
+ const toolRegistry = [
304
+ {
305
+ tool: readDataTool,
306
+ name: readDataTool.name,
307
+ intents: ["data_read"],
308
+ keywords: ["select", "query", "fetch", "report", "count"],
309
+ requiredArgs: ["query"],
310
+ baseScore: 2,
311
+ },
312
+ {
313
+ tool: listTableTool,
314
+ name: listTableTool.name,
315
+ intents: ["schema_discovery"],
316
+ keywords: ["list tables", "show tables", "tables"],
317
+ baseScore: 1.5,
318
+ },
319
+ {
320
+ tool: describeTableTool,
321
+ name: describeTableTool.name,
322
+ intents: ["schema_discovery"],
323
+ keywords: ["describe", "columns", "structure"],
324
+ requiredArgs: ["tableName"],
325
+ baseScore: 1.5,
326
+ },
327
+ {
328
+ tool: searchSchemaTool,
329
+ name: searchSchemaTool.name,
330
+ intents: ["schema_discovery"],
331
+ keywords: ["search", "find", "look up"],
332
+ baseScore: 1.5,
333
+ },
334
+ {
335
+ tool: profileTableTool,
336
+ name: profileTableTool.name,
337
+ intents: ["metadata"],
338
+ keywords: ["profile", "sample", "distribution"],
339
+ requiredArgs: ["tableName"],
340
+ },
341
+ {
342
+ tool: relationshipInspectorTool,
343
+ name: relationshipInspectorTool.name,
344
+ intents: ["metadata", "schema_discovery"],
345
+ keywords: ["relationships", "foreign key", "references"],
346
+ requiredArgs: ["tableName"],
347
+ },
348
+ {
349
+ tool: insertDataTool,
350
+ name: insertDataTool.name,
351
+ intents: ["data_write"],
352
+ keywords: ["insert", "add", "create record"],
353
+ requiredArgs: ["tableName", "data"],
354
+ mutatesData: true,
355
+ },
356
+ {
357
+ tool: deleteDataTool,
358
+ name: deleteDataTool.name,
359
+ intents: ["data_write"],
360
+ keywords: ["delete", "remove", "purge"],
361
+ requiredArgs: ["tableName", "whereClause"],
362
+ mutatesData: true,
363
+ },
364
+ {
365
+ tool: updateDataTool,
366
+ name: updateDataTool.name,
367
+ intents: ["data_write"],
368
+ keywords: ["update", "modify", "fix"],
369
+ requiredArgs: ["tableName", "updates", "whereClause"],
370
+ mutatesData: true,
371
+ },
372
+ {
373
+ tool: createTableTool,
374
+ name: createTableTool.name,
375
+ intents: ["schema_change"],
376
+ keywords: ["create table", "new table"],
377
+ requiredArgs: ["tableName", "columns"],
378
+ schemaChange: true,
379
+ },
380
+ {
381
+ tool: createIndexTool,
382
+ name: createIndexTool.name,
383
+ intents: ["schema_change"],
384
+ keywords: ["create index", "add index"],
385
+ requiredArgs: ["tableName", "columns", "indexName"],
386
+ schemaChange: true,
387
+ },
388
+ {
389
+ tool: dropTableTool,
390
+ name: dropTableTool.name,
391
+ intents: ["schema_change"],
392
+ keywords: ["drop table", "remove table", "delete table"],
393
+ requiredArgs: ["tableName"],
394
+ schemaChange: true,
395
+ mutatesData: true,
396
+ },
397
+ {
398
+ tool: testConnectionTool,
399
+ name: testConnectionTool.name,
400
+ intents: ["metadata"],
401
+ keywords: ["test", "connection", "ping", "health"],
402
+ baseScore: 1,
403
+ },
404
+ {
405
+ tool: explainQueryTool,
406
+ name: explainQueryTool.name,
407
+ intents: ["metadata"],
408
+ keywords: ["plan", "explain", "showplan", "estimate"],
409
+ requiredArgs: ["query"],
410
+ baseScore: 1,
411
+ },
412
+ ];
413
+ const server = new Server({
414
+ name: "mssql-mcp-server",
415
+ version: "0.1.0",
416
+ }, {
417
+ capabilities: {
418
+ tools: {},
419
+ },
420
+ });
421
+ // Read READONLY env variable
422
+ const isReadOnly = process.env.READONLY === "true";
423
+ const requireMutationConfirmation = process.env.REQUIRE_MUTATION_CONFIRMATION !== "false";
424
+ const intentRouter = new IntentRouter({
425
+ tools: toolRegistry,
426
+ allowMutations: !isReadOnly,
427
+ requireConfirmationForMutations: requireMutationConfirmation,
428
+ });
429
+ const readOnlyToolList = [
430
+ listTableTool,
431
+ readDataTool,
432
+ describeTableTool,
433
+ searchSchemaTool,
434
+ profileTableTool,
435
+ relationshipInspectorTool,
436
+ testConnectionTool,
437
+ explainQueryTool,
438
+ ];
439
+ const fullToolList = [
440
+ insertDataTool,
441
+ deleteDataTool,
442
+ readDataTool,
443
+ describeTableTool,
444
+ updateDataTool,
445
+ createTableTool,
446
+ createIndexTool,
447
+ dropTableTool,
448
+ listTableTool,
449
+ searchSchemaTool,
450
+ profileTableTool,
451
+ relationshipInspectorTool,
452
+ testConnectionTool,
453
+ explainQueryTool,
454
+ ];
455
+ const exposedTools = isReadOnly ? readOnlyToolList : fullToolList;
456
+ // Request handlers
457
+ // ... (rest of the code remains the same)
458
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
459
+ tools: exposedTools,
460
+ }));
461
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
462
+ const { name, arguments: args } = request.params;
463
+ try {
464
+ let result;
465
+ switch (name) {
466
+ case insertDataTool.name:
467
+ result = await insertDataTool.run(args);
468
+ break;
469
+ case deleteDataTool.name:
470
+ result = await deleteDataTool.run(args);
471
+ break;
472
+ case readDataTool.name:
473
+ result = await readDataTool.run(args);
474
+ break;
475
+ case updateDataTool.name:
476
+ result = await updateDataTool.run(args);
477
+ break;
478
+ case createTableTool.name:
479
+ result = await createTableTool.run(args);
480
+ break;
481
+ case createIndexTool.name:
482
+ result = await createIndexTool.run(args);
483
+ break;
484
+ case listTableTool.name:
485
+ result = await listTableTool.run(args);
486
+ break;
487
+ case dropTableTool.name:
488
+ result = await dropTableTool.run(args);
489
+ break;
490
+ case testConnectionTool.name:
491
+ result = await testConnectionTool.run(args);
492
+ break;
493
+ case explainQueryTool.name:
494
+ result = await explainQueryTool.run(args);
495
+ break;
496
+ case describeTableTool.name:
497
+ if (!args || typeof args.tableName !== "string") {
498
+ return {
499
+ content: [{ type: "text", text: `Missing or invalid 'tableName' argument for describe_table tool.` }],
500
+ isError: true,
501
+ };
502
+ }
503
+ result = await describeTableTool.run(args);
504
+ break;
505
+ case searchSchemaTool.name:
506
+ result = await searchSchemaTool.run(args ?? {});
507
+ break;
508
+ case profileTableTool.name:
509
+ if (!args || typeof args.tableName !== "string") {
510
+ return {
511
+ content: [{ type: "text", text: `Missing or invalid 'tableName' argument for profile_table tool.` }],
512
+ isError: true,
513
+ };
514
+ }
515
+ result = await profileTableTool.run(args);
516
+ break;
517
+ case relationshipInspectorTool.name:
518
+ if (!args || typeof args.tableName !== "string") {
519
+ return {
520
+ content: [{ type: "text", text: `Missing or invalid 'tableName' argument for inspect_relationships tool.` }],
521
+ isError: true,
522
+ };
523
+ }
524
+ result = await relationshipInspectorTool.run(args);
525
+ break;
526
+ default:
527
+ return {
528
+ content: [{ type: "text", text: `Unknown tool: ${name}` }],
529
+ isError: true,
530
+ };
531
+ }
532
+ return {
533
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
534
+ };
535
+ }
536
+ catch (error) {
537
+ return {
538
+ content: [{ type: "text", text: `Error occurred: ${error}` }],
539
+ isError: true,
540
+ };
541
+ }
542
+ });
543
+ // Server startup
544
+ async function runServer() {
545
+ try {
546
+ const transport = new StdioServerTransport();
547
+ await server.connect(transport);
548
+ }
549
+ catch (error) {
550
+ console.error("Fatal error running server:", error);
551
+ process.exit(1);
552
+ }
553
+ }
554
+ runServer().catch((error) => {
555
+ console.error("Fatal error running server:", error);
556
+ process.exit(1);
557
+ });
558
+ // Patch all tool handlers to ensure SQL connection, policy enforcement, and audit logging
559
+ function wrapToolRun(tool) {
560
+ const originalRun = tool.run.bind(tool);
561
+ tool.run = async function (...args) {
562
+ const startTime = Date.now();
563
+ const rawArgs = (args[0] ?? {});
564
+ const requestedEnvironment = typeof rawArgs.environment === "string" ? rawArgs.environment : undefined;
565
+ const envConfig = environmentManager.getEnvironment(requestedEnvironment);
566
+ // Build policy object from environment config
567
+ const policy = {
568
+ name: envConfig.name,
569
+ readonly: envConfig.readonly ?? false,
570
+ allowedTools: envConfig.allowedTools,
571
+ maxRowsDefault: envConfig.maxRowsDefault,
572
+ };
573
+ // Check allowed tools policy
574
+ if (policy.allowedTools && policy.allowedTools.length > 0 && !policy.allowedTools.includes(tool.name)) {
575
+ return {
576
+ success: false,
577
+ message: `Tool '${tool.name}' is not permitted in environment '${policy.name}'. Allowed tools: ${policy.allowedTools.join(", ")}.`,
578
+ error: "TOOL_NOT_ALLOWED",
579
+ };
580
+ }
581
+ // Check readonly policy for mutating tools
582
+ if (policy.readonly && MUTATING_TOOL_NAMES.has(tool.name)) {
583
+ return {
584
+ success: false,
585
+ message: `Environment '${policy.name}' is read-only. Tool '${tool.name}' cannot be executed.`,
586
+ error: "ENVIRONMENT_READONLY",
587
+ };
588
+ }
589
+ // Enrich args with environment info and policy
590
+ const toolArgs = {
591
+ ...rawArgs,
592
+ environment: policy.name,
593
+ environmentPolicy: policy,
594
+ };
595
+ // Get connection for the specified or default environment
596
+ const pool = await environmentManager.getConnection(policy.name);
597
+ // Store the pool in global sql for tools that use sql directly
598
+ sql.globalPool = pool;
599
+ try {
600
+ const result = await originalRun(toolArgs);
601
+ const durationMs = Date.now() - startTime;
602
+ // Audit log the successful invocation
603
+ auditLogger.logToolInvocation(tool.name, toolArgs, result, durationMs);
604
+ return result;
605
+ }
606
+ catch (error) {
607
+ const durationMs = Date.now() - startTime;
608
+ // Audit log the failed invocation
609
+ auditLogger.logToolInvocation(tool.name, toolArgs, { success: false, error: String(error) }, durationMs);
610
+ throw error;
611
+ }
612
+ };
613
+ }
614
+ [insertDataTool, deleteDataTool, readDataTool, updateDataTool, createTableTool, createIndexTool, dropTableTool, listTableTool, describeTableTool, searchSchemaTool, profileTableTool, relationshipInspectorTool, testConnectionTool, explainQueryTool].forEach(wrapToolRun);
615
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ export declare class CreateIndexTool implements Tool {
3
+ [key: string]: any;
4
+ name: string;
5
+ description: string;
6
+ inputSchema: any;
7
+ run(params: any): Promise<{
8
+ success: boolean;
9
+ message: string;
10
+ details: {
11
+ schemaName: any;
12
+ tableName: any;
13
+ indexName: any;
14
+ columnNames: any;
15
+ isUnique: any;
16
+ isClustered: any;
17
+ };
18
+ } | {
19
+ success: boolean;
20
+ message: string;
21
+ details?: undefined;
22
+ }>;
23
+ }
24
+ //# sourceMappingURL=CreateIndexTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateIndexTool.d.ts","sourceRoot":"","sources":["../../src/tools/CreateIndexTool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE1D,qBAAa,eAAgB,YAAW,IAAI;IAC1C,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,IAAI,SAAkB;IACtB,WAAW,SAAkF;IAC7F,WAAW,EAuBN,GAAG,CAAC;IAEH,GAAG,CAAC,MAAM,EAAE,GAAG;;;;;;;;;;;;;;;;CAkCtB"}