@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,46 @@
1
+ import { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ interface DependencyReference {
3
+ name: string;
4
+ schema: string;
5
+ type: string;
6
+ columns?: string[];
7
+ }
8
+ interface DependencyResult {
9
+ success: boolean;
10
+ object: string;
11
+ objectType?: string;
12
+ referencedBy?: {
13
+ views: DependencyReference[];
14
+ storedProcedures: DependencyReference[];
15
+ functions: DependencyReference[];
16
+ triggers: DependencyReference[];
17
+ foreignKeys: {
18
+ table: string;
19
+ schema: string;
20
+ column: string;
21
+ constraint: string;
22
+ }[];
23
+ };
24
+ references?: {
25
+ tables: DependencyReference[];
26
+ views: DependencyReference[];
27
+ functions: DependencyReference[];
28
+ };
29
+ message?: string;
30
+ error?: string;
31
+ hint?: string;
32
+ }
33
+ export declare class InspectDependenciesTool implements Tool {
34
+ [key: string]: any;
35
+ name: string;
36
+ description: string;
37
+ inputSchema: any;
38
+ run(params: {
39
+ objectName: string;
40
+ includeColumns?: boolean;
41
+ environment?: string;
42
+ pool?: any;
43
+ }): Promise<DependencyResult>;
44
+ }
45
+ export {};
46
+ //# sourceMappingURL=InspectDependenciesTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InspectDependenciesTool.d.ts","sourceRoot":"","sources":["../../src/tools/InspectDependenciesTool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE1D,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,UAAU,gBAAgB;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE;QACb,KAAK,EAAE,mBAAmB,EAAE,CAAC;QAC7B,gBAAgB,EAAE,mBAAmB,EAAE,CAAC;QACxC,SAAS,EAAE,mBAAmB,EAAE,CAAC;QACjC,QAAQ,EAAE,mBAAmB,EAAE,CAAC;QAChC,WAAW,EAAE;YACX,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,EAAE,MAAM,CAAC;YACf,MAAM,EAAE,MAAM,CAAC;YACf,UAAU,EAAE,MAAM,CAAC;SACpB,EAAE,CAAC;KACL,CAAC;IACF,UAAU,CAAC,EAAE;QACX,MAAM,EAAE,mBAAmB,EAAE,CAAC;QAC9B,KAAK,EAAE,mBAAmB,EAAE,CAAC;QAC7B,SAAS,EAAE,mBAAmB,EAAE,CAAC;KAClC,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,uBAAwB,YAAW,IAAI;IAClD,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,IAAI,SAA0B;IAC9B,WAAW,SAA0H;IAErI,WAAW,EAaN,GAAG,CAAC;IAEH,GAAG,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,GAAG,CAAA;KAAE;CAsNrG"}
@@ -0,0 +1,215 @@
1
+ import sql from "mssql";
2
+ export class InspectDependenciesTool {
3
+ constructor() {
4
+ this.name = "inspect_dependencies";
5
+ this.description = "Shows what database objects depend on a table, view, or other object. Use for impact analysis before schema changes.";
6
+ this.inputSchema = {
7
+ type: "object",
8
+ properties: {
9
+ objectName: {
10
+ type: "string",
11
+ description: "Name of the object to inspect (e.g., 'dbo.Customers' or 'Customers')",
12
+ },
13
+ includeColumns: {
14
+ type: "boolean",
15
+ description: "Include column-level dependency details. Default: false",
16
+ },
17
+ },
18
+ required: ["objectName"],
19
+ };
20
+ }
21
+ async run(params) {
22
+ const { objectName, includeColumns = false } = params;
23
+ try {
24
+ // Parse schema and object name
25
+ const parts = objectName.split(".");
26
+ let schemaName = "dbo";
27
+ let objName = objectName;
28
+ if (parts.length === 2) {
29
+ schemaName = parts[0];
30
+ objName = parts[1];
31
+ }
32
+ const pool = params.pool;
33
+ if (!pool) {
34
+ return {
35
+ success: false,
36
+ object: objectName,
37
+ error: "NO_CONNECTION",
38
+ message: "No database connection available.",
39
+ };
40
+ }
41
+ // First, get the object type
42
+ const objectTypeResult = await pool.request()
43
+ .input("schema", sql.NVarChar, schemaName)
44
+ .input("name", sql.NVarChar, objName)
45
+ .query(`
46
+ SELECT
47
+ o.type_desc AS objectType,
48
+ o.object_id AS objectId
49
+ FROM sys.objects o
50
+ INNER JOIN sys.schemas s ON o.schema_id = s.schema_id
51
+ WHERE s.name = @schema AND o.name = @name
52
+ `);
53
+ if (objectTypeResult.recordset.length === 0) {
54
+ return {
55
+ success: false,
56
+ object: objectName,
57
+ error: "OBJECT_NOT_FOUND",
58
+ message: `Object '${schemaName}.${objName}' not found.`,
59
+ };
60
+ }
61
+ const objectType = objectTypeResult.recordset[0].objectType;
62
+ const objectId = objectTypeResult.recordset[0].objectId;
63
+ // Get objects that reference this object (what depends on this)
64
+ const referencedByResult = await pool.request()
65
+ .input("schema", sql.NVarChar, schemaName)
66
+ .input("name", sql.NVarChar, objName)
67
+ .query(`
68
+ SELECT DISTINCT
69
+ OBJECT_SCHEMA_NAME(d.referencing_id) AS referencingSchema,
70
+ OBJECT_NAME(d.referencing_id) AS referencingName,
71
+ o.type_desc AS referencingType
72
+ FROM sys.sql_expression_dependencies d
73
+ INNER JOIN sys.objects o ON d.referencing_id = o.object_id
74
+ WHERE d.referenced_schema_name = @schema
75
+ AND d.referenced_entity_name = @name
76
+ AND d.referencing_id != d.referenced_id
77
+ ORDER BY o.type_desc, referencingName
78
+ `);
79
+ // Get foreign keys pointing to this table (if it's a table)
80
+ let foreignKeys = [];
81
+ if (objectType === "USER_TABLE") {
82
+ const fkResult = await pool.request()
83
+ .input("objectId", sql.Int, objectId)
84
+ .query(`
85
+ SELECT
86
+ OBJECT_SCHEMA_NAME(fk.parent_object_id) AS referencingSchema,
87
+ OBJECT_NAME(fk.parent_object_id) AS referencingTable,
88
+ COL_NAME(fkc.parent_object_id, fkc.parent_column_id) AS referencingColumn,
89
+ fk.name AS constraintName
90
+ FROM sys.foreign_keys fk
91
+ INNER JOIN sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id
92
+ WHERE fk.referenced_object_id = @objectId
93
+ ORDER BY referencingTable, referencingColumn
94
+ `);
95
+ foreignKeys = fkResult.recordset;
96
+ }
97
+ // Get objects that this object references (what this depends on)
98
+ const referencesResult = await pool.request()
99
+ .input("schema", sql.NVarChar, schemaName)
100
+ .input("name", sql.NVarChar, objName)
101
+ .query(`
102
+ SELECT DISTINCT
103
+ d.referenced_schema_name AS referencedSchema,
104
+ d.referenced_entity_name AS referencedName,
105
+ COALESCE(o.type_desc, 'UNKNOWN') AS referencedType
106
+ FROM sys.sql_expression_dependencies d
107
+ LEFT JOIN sys.objects o ON d.referenced_id = o.object_id
108
+ WHERE OBJECT_SCHEMA_NAME(d.referencing_id) = @schema
109
+ AND OBJECT_NAME(d.referencing_id) = @name
110
+ AND d.referenced_entity_name IS NOT NULL
111
+ ORDER BY referencedType, referencedName
112
+ `);
113
+ // Categorize referencing objects
114
+ const views = [];
115
+ const storedProcedures = [];
116
+ const functions = [];
117
+ const triggers = [];
118
+ for (const row of referencedByResult.recordset) {
119
+ const ref = {
120
+ name: row.referencingName,
121
+ schema: row.referencingSchema,
122
+ type: row.referencingType,
123
+ };
124
+ switch (row.referencingType) {
125
+ case "VIEW":
126
+ views.push(ref);
127
+ break;
128
+ case "SQL_STORED_PROCEDURE":
129
+ storedProcedures.push(ref);
130
+ break;
131
+ case "SQL_SCALAR_FUNCTION":
132
+ case "SQL_TABLE_VALUED_FUNCTION":
133
+ case "SQL_INLINE_TABLE_VALUED_FUNCTION":
134
+ functions.push(ref);
135
+ break;
136
+ case "SQL_TRIGGER":
137
+ triggers.push(ref);
138
+ break;
139
+ default:
140
+ // Other types go to functions as catch-all
141
+ functions.push(ref);
142
+ }
143
+ }
144
+ // Categorize referenced objects
145
+ const referencedTables = [];
146
+ const referencedViews = [];
147
+ const referencedFunctions = [];
148
+ for (const row of referencesResult.recordset) {
149
+ const ref = {
150
+ name: row.referencedName,
151
+ schema: row.referencedSchema || "dbo",
152
+ type: row.referencedType,
153
+ };
154
+ switch (row.referencedType) {
155
+ case "USER_TABLE":
156
+ referencedTables.push(ref);
157
+ break;
158
+ case "VIEW":
159
+ referencedViews.push(ref);
160
+ break;
161
+ default:
162
+ referencedFunctions.push(ref);
163
+ }
164
+ }
165
+ const result = {
166
+ success: true,
167
+ object: `${schemaName}.${objName}`,
168
+ objectType,
169
+ referencedBy: {
170
+ views,
171
+ storedProcedures,
172
+ functions,
173
+ triggers,
174
+ foreignKeys: foreignKeys.map((fk) => ({
175
+ table: fk.referencingTable,
176
+ schema: fk.referencingSchema,
177
+ column: fk.referencingColumn,
178
+ constraint: fk.constraintName,
179
+ })),
180
+ },
181
+ references: {
182
+ tables: referencedTables,
183
+ views: referencedViews,
184
+ functions: referencedFunctions,
185
+ },
186
+ };
187
+ // Add summary counts
188
+ const totalReferencedBy = views.length +
189
+ storedProcedures.length +
190
+ functions.length +
191
+ triggers.length +
192
+ foreignKeys.length;
193
+ const totalReferences = referencedTables.length + referencedViews.length + referencedFunctions.length;
194
+ if (totalReferencedBy === 0 && totalReferences === 0) {
195
+ result.message = `No dependencies found for '${schemaName}.${objName}'.`;
196
+ }
197
+ else {
198
+ result.message = `Found ${totalReferencedBy} object(s) that reference this ${objectType.toLowerCase().replace(/_/g, " ")}, and ${totalReferences} object(s) that it references.`;
199
+ }
200
+ if (totalReferencedBy > 0) {
201
+ result.hint = "Modifying or dropping this object may affect the listed dependents.";
202
+ }
203
+ return result;
204
+ }
205
+ catch (error) {
206
+ return {
207
+ success: false,
208
+ object: objectName,
209
+ error: "QUERY_ERROR",
210
+ message: `Failed to inspect dependencies: ${error.message}`,
211
+ };
212
+ }
213
+ }
214
+ }
215
+ //# sourceMappingURL=InspectDependenciesTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InspectDependenciesTool.js","sourceRoot":"","sources":["../../src/tools/InspectDependenciesTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ export declare class ListDatabasesTool 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
+ error: string;
11
+ environment?: undefined;
12
+ accessLevel?: undefined;
13
+ totalDatabases?: undefined;
14
+ accessibleDatabases?: undefined;
15
+ databases?: undefined;
16
+ } | {
17
+ success: boolean;
18
+ message: string;
19
+ environment: string;
20
+ accessLevel: "server";
21
+ totalDatabases: number;
22
+ accessibleDatabases: number;
23
+ databases: any[];
24
+ error?: undefined;
25
+ }>;
26
+ }
27
+ //# sourceMappingURL=ListDatabasesTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListDatabasesTool.d.ts","sourceRoot":"","sources":["../../src/tools/ListDatabasesTool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG1D,qBAAa,iBAAkB,YAAW,IAAI;IAC5C,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,IAAI,SAAoB;IACxB,WAAW,SAAiH;IAC5H,WAAW,EAkBN,GAAG,CAAC;IAEH,GAAG,CAAC,MAAM,EAAE,GAAG;;;;;;;;;;;;;;;;;;;CAyFtB"}
@@ -0,0 +1,107 @@
1
+ import sql from "mssql";
2
+ import { getEnvironmentManager } from "../config/EnvironmentManager.js";
3
+ export class ListDatabasesTool {
4
+ constructor() {
5
+ this.name = "list_databases";
6
+ this.description = "Lists databases on the SQL Server instance. Requires server-level access. Filtered by environment policies.";
7
+ this.inputSchema = {
8
+ type: "object",
9
+ properties: {
10
+ environment: {
11
+ type: "string",
12
+ description: "Target environment name (optional, uses default if not specified)",
13
+ },
14
+ includeSystemDbs: {
15
+ type: "boolean",
16
+ description: "Include system databases (master, msdb, model, tempdb). Default: false",
17
+ },
18
+ stateFilter: {
19
+ type: "string",
20
+ enum: ["ONLINE", "OFFLINE", "RESTORING", "RECOVERING", "SUSPECT", "ALL"],
21
+ description: "Filter by database state. Default: ONLINE",
22
+ },
23
+ },
24
+ required: [],
25
+ };
26
+ }
27
+ async run(params) {
28
+ const { environment, includeSystemDbs = false, stateFilter = "ONLINE" } = params ?? {};
29
+ try {
30
+ const envManager = getEnvironmentManager();
31
+ const envConfig = envManager.getEnvironment(environment);
32
+ // Check if environment has server-level access
33
+ const accessLevel = envConfig.accessLevel ?? "database";
34
+ if (accessLevel !== "server") {
35
+ return {
36
+ success: false,
37
+ message: `Environment '${envConfig.name}' has database-level access only. ` +
38
+ `list_databases requires server-level access (accessLevel: "server").`,
39
+ error: "ACCESS_LEVEL_DENIED",
40
+ };
41
+ }
42
+ const request = new sql.Request(params.pool);
43
+ // Build the query
44
+ let query = `
45
+ SELECT
46
+ d.name AS database_name,
47
+ d.database_id,
48
+ d.state_desc AS state,
49
+ d.recovery_model_desc AS recovery_model,
50
+ d.compatibility_level,
51
+ d.collation_name,
52
+ d.create_date,
53
+ d.is_read_only,
54
+ CAST(SUM(mf.size) * 8.0 / 1024 AS DECIMAL(10,2)) AS size_mb
55
+ FROM sys.databases d
56
+ LEFT JOIN sys.master_files mf ON d.database_id = mf.database_id
57
+ WHERE 1=1
58
+ `;
59
+ // Filter by state
60
+ if (stateFilter && stateFilter !== "ALL") {
61
+ query += ` AND d.state_desc = '${stateFilter}'`;
62
+ }
63
+ // Exclude system databases if not requested
64
+ if (!includeSystemDbs) {
65
+ query += ` AND d.database_id > 4`; // System DBs have IDs 1-4
66
+ }
67
+ query += `
68
+ GROUP BY d.name, d.database_id, d.state_desc, d.recovery_model_desc,
69
+ d.compatibility_level, d.collation_name, d.create_date, d.is_read_only
70
+ ORDER BY d.name
71
+ `;
72
+ const result = await request.query(query);
73
+ // Filter results by allowedDatabases/deniedDatabases policies
74
+ const filteredDatabases = result.recordset.filter((db) => {
75
+ const check = envManager.isDatabaseAllowed(environment, db.database_name);
76
+ return check.allowed;
77
+ });
78
+ // Mark which databases are accessible vs restricted
79
+ const databases = result.recordset.map((db) => {
80
+ const check = envManager.isDatabaseAllowed(environment, db.database_name);
81
+ return {
82
+ ...db,
83
+ accessible: check.allowed,
84
+ restriction_reason: check.reason,
85
+ };
86
+ });
87
+ return {
88
+ success: true,
89
+ message: `Found ${result.recordset.length} database(s), ${filteredDatabases.length} accessible`,
90
+ environment: envConfig.name,
91
+ accessLevel: accessLevel,
92
+ totalDatabases: result.recordset.length,
93
+ accessibleDatabases: filteredDatabases.length,
94
+ databases: databases,
95
+ };
96
+ }
97
+ catch (error) {
98
+ console.error("Error listing databases:", error);
99
+ return {
100
+ success: false,
101
+ message: `Failed to list databases: ${error}`,
102
+ error: "QUERY_FAILED",
103
+ };
104
+ }
105
+ }
106
+ }
107
+ //# sourceMappingURL=ListDatabasesTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListDatabasesTool.js","sourceRoot":"","sources":["../../src/tools/ListDatabasesTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ export declare class ListEnvironmentsTool 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
+ defaultEnvironment: string | null;
11
+ environmentCount: number;
12
+ environments: ({
13
+ name: string;
14
+ description: string | null;
15
+ server: string;
16
+ database: string;
17
+ accessLevel: import("../config/EnvironmentManager.js").AccessLevel;
18
+ readonly: boolean;
19
+ tier: import("../config/EnvironmentManager.js").TierLevel | null;
20
+ } | {
21
+ authMode: "sql" | "windows" | "aad";
22
+ port: number;
23
+ allowedTools: string[] | null;
24
+ deniedTools: string[] | null;
25
+ allowedDatabases: string[] | "*" | null;
26
+ deniedDatabases: string[] | null;
27
+ allowedSchemas: string[] | null;
28
+ deniedSchemas: string[] | null;
29
+ maxRowsDefault: number | null;
30
+ requireApproval: boolean;
31
+ name: string;
32
+ description: string | null;
33
+ server: string;
34
+ database: string;
35
+ accessLevel: import("../config/EnvironmentManager.js").AccessLevel;
36
+ readonly: boolean;
37
+ tier: import("../config/EnvironmentManager.js").TierLevel | null;
38
+ })[];
39
+ error?: undefined;
40
+ } | {
41
+ success: boolean;
42
+ message: string;
43
+ error: string;
44
+ defaultEnvironment?: undefined;
45
+ environmentCount?: undefined;
46
+ environments?: undefined;
47
+ }>;
48
+ }
49
+ //# sourceMappingURL=ListEnvironmentsTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListEnvironmentsTool.d.ts","sourceRoot":"","sources":["../../src/tools/ListEnvironmentsTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG1D,qBAAa,oBAAqB,YAAW,IAAI;IAC/C,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,IAAI,SAAuB;IAC3B,WAAW,SAGuE;IAClF,WAAW,EASN,GAAG,CAAC;IAEH,GAAG,CAAC,MAAM,EAAE,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4DtB"}
@@ -0,0 +1,73 @@
1
+ import { getEnvironmentManager } from "../config/EnvironmentManager.js";
2
+ export class ListEnvironmentsTool {
3
+ constructor() {
4
+ this.name = "list_environments";
5
+ this.description = "Lists all configured database environments available for connection. " +
6
+ "Shows environment names, descriptions, access levels, and policy restrictions. " +
7
+ "Use this to discover which environments are available before running queries.";
8
+ this.inputSchema = {
9
+ type: "object",
10
+ properties: {
11
+ includeDetails: {
12
+ type: "boolean",
13
+ description: "Include full policy details (allowedTools, deniedSchemas, etc.). Default: false",
14
+ },
15
+ },
16
+ required: [],
17
+ };
18
+ }
19
+ async run(params) {
20
+ const { includeDetails = false } = params ?? {};
21
+ try {
22
+ const envManager = getEnvironmentManager();
23
+ const environments = envManager.listEnvironments();
24
+ const environmentList = environments.map((env) => {
25
+ // Basic info always included
26
+ const basic = {
27
+ name: env.name,
28
+ description: env.description || null,
29
+ server: env.server,
30
+ database: env.database,
31
+ accessLevel: env.accessLevel || "database",
32
+ readonly: env.readonly ?? false,
33
+ tier: env.tier || null,
34
+ };
35
+ if (!includeDetails) {
36
+ return basic;
37
+ }
38
+ // Full details when requested
39
+ return {
40
+ ...basic,
41
+ authMode: env.authMode,
42
+ port: env.port || 1433,
43
+ allowedTools: env.allowedTools || null,
44
+ deniedTools: env.deniedTools || null,
45
+ allowedDatabases: env.allowedDatabases || null,
46
+ deniedDatabases: env.deniedDatabases || null,
47
+ allowedSchemas: env.allowedSchemas || null,
48
+ deniedSchemas: env.deniedSchemas || null,
49
+ maxRowsDefault: env.maxRowsDefault || null,
50
+ requireApproval: env.requireApproval ?? false,
51
+ };
52
+ });
53
+ // Get default environment name
54
+ const defaultEnv = environments.find((e) => e.name === envManager.defaultEnvironment);
55
+ return {
56
+ success: true,
57
+ message: `Found ${environments.length} configured environment(s)`,
58
+ defaultEnvironment: defaultEnv?.name || environments[0]?.name || null,
59
+ environmentCount: environments.length,
60
+ environments: environmentList,
61
+ };
62
+ }
63
+ catch (error) {
64
+ console.error("Error listing environments:", error);
65
+ return {
66
+ success: false,
67
+ message: `Failed to list environments: ${error}`,
68
+ error: "LIST_ENVIRONMENTS_FAILED",
69
+ };
70
+ }
71
+ }
72
+ }
73
+ //# sourceMappingURL=ListEnvironmentsTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListEnvironmentsTool.js","sourceRoot":"","sources":["../../src/tools/ListEnvironmentsTool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAExE,MAAM,OAAO,oBAAoB;IAAjC;QAEE,SAAI,GAAG,mBAAmB,CAAC;QAC3B,gBAAW,GACT,uEAAuE;YACvE,iFAAiF;YACjF,+EAA+E,CAAC;QAClF,gBAAW,GAAG;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,cAAc,EAAE;oBACd,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,iFAAiF;iBAC/F;aACF;YACD,QAAQ,EAAE,EAAE;SACN,CAAC;IA8DX,CAAC;IA5DC,KAAK,CAAC,GAAG,CAAC,MAAW;QACnB,MAAM,EAAE,cAAc,GAAG,KAAK,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QAEhD,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,qBAAqB,EAAE,CAAC;YAC3C,MAAM,YAAY,GAAG,UAAU,CAAC,gBAAgB,EAAE,CAAC;YAEnD,MAAM,eAAe,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC/C,6BAA6B;gBAC7B,MAAM,KAAK,GAAG;oBACZ,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,IAAI;oBACpC,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ;oBACtB,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,UAAU;oBAC1C,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,KAAK;oBAC/B,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,IAAI;iBACvB,CAAC;gBAEF,IAAI,CAAC,cAAc,EAAE,CAAC;oBACpB,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,8BAA8B;gBAC9B,OAAO;oBACL,GAAG,KAAK;oBACR,QAAQ,EAAE,GAAG,CAAC,QAAQ;oBACtB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,IAAI;oBACtB,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,IAAI;oBACtC,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,IAAI;oBACpC,gBAAgB,EAAE,GAAG,CAAC,gBAAgB,IAAI,IAAI;oBAC9C,eAAe,EAAE,GAAG,CAAC,eAAe,IAAI,IAAI;oBAC5C,cAAc,EAAE,GAAG,CAAC,cAAc,IAAI,IAAI;oBAC1C,aAAa,EAAE,GAAG,CAAC,aAAa,IAAI,IAAI;oBACxC,cAAc,EAAE,GAAG,CAAC,cAAc,IAAI,IAAI;oBAC1C,eAAe,EAAE,GAAG,CAAC,eAAe,IAAI,KAAK;iBAC9C,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,+BAA+B;YAC/B,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACzC,CAAC,CAAC,IAAI,KAAM,UAAkB,CAAC,kBAAkB,CAClD,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,SAAS,YAAY,CAAC,MAAM,4BAA4B;gBACjE,kBAAkB,EAAE,UAAU,EAAE,IAAI,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI;gBACrE,gBAAgB,EAAE,YAAY,CAAC,MAAM;gBACrC,YAAY,EAAE,eAAe;aAC9B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;YACpD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,gCAAgC,KAAK,EAAE;gBAChD,KAAK,EAAE,0BAA0B;aAClC,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,41 @@
1
+ import { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ export declare class ListScriptsTool implements Tool {
3
+ [key: string]: any;
4
+ name: string;
5
+ description: string;
6
+ inputSchema: any;
7
+ run(params?: {
8
+ environment?: string;
9
+ tier?: string;
10
+ }): Promise<{
11
+ success: boolean;
12
+ message: string;
13
+ scriptsPath: string | null;
14
+ scripts: never[];
15
+ totalScripts?: undefined;
16
+ filteredCount?: undefined;
17
+ } | {
18
+ success: boolean;
19
+ scriptsPath: string | null;
20
+ totalScripts: number;
21
+ filteredCount: number;
22
+ scripts: {
23
+ name: string;
24
+ description: string;
25
+ parameters: {
26
+ name: string;
27
+ type: "string" | "number" | "boolean";
28
+ required: boolean;
29
+ default: string | number | boolean | undefined;
30
+ description: string | undefined;
31
+ }[] | undefined;
32
+ tier: import("../index.js").ConfigTierLevel | undefined;
33
+ requiresApproval: boolean | undefined;
34
+ readonly: boolean | undefined;
35
+ allowedEnvironments: string[] | undefined;
36
+ deniedEnvironments: string[] | undefined;
37
+ }[];
38
+ message?: undefined;
39
+ }>;
40
+ }
41
+ //# sourceMappingURL=ListScriptsTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListScriptsTool.d.ts","sourceRoot":"","sources":["../../src/tools/ListScriptsTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG1D,qBAAa,eAAgB,YAAW,IAAI;IAC1C,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,IAAI,SAAkB;IACtB,WAAW,SAAqH;IAEhI,WAAW,EAcN,GAAG,CAAC;IAEH,GAAG,CAAC,MAAM,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsE3D"}