@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProfileTableTool.js","sourceRoot":"","sources":["../../src/tools/ProfileTableTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ export declare class ReadDataTool implements Tool {
3
+ [key: string]: any;
4
+ name: string;
5
+ description: string;
6
+ private readonly defaultMaxRows;
7
+ inputSchema: any;
8
+ constructor();
9
+ private static readonly DANGEROUS_KEYWORDS;
10
+ private static readonly DANGEROUS_PATTERNS;
11
+ /**
12
+ * Validates the SQL query for security issues
13
+ * @param query The SQL query to validate
14
+ * @returns Validation result with success flag and error message if invalid
15
+ */
16
+ private validateQuery;
17
+ /**
18
+ * Enforces row limit by injecting TOP n if not already present
19
+ * @param query The validated SQL query
20
+ * @returns Query with TOP clause if needed, plus flag indicating if limit was added
21
+ */
22
+ private enforceRowLimit;
23
+ /**
24
+ * Resolves the maximum number of rows to return based on the input parameters and environment
25
+ * @param params Input parameters
26
+ * @returns Maximum number of rows to return
27
+ */
28
+ private resolveMaxRows;
29
+ /**
30
+ * Sanitizes the query result to prevent any potential security issues
31
+ * @param data The query result data
32
+ * @returns Sanitized data
33
+ */
34
+ private sanitizeResult;
35
+ /**
36
+ * Executes the validated SQL query
37
+ * @param params Query parameters
38
+ * @returns Query execution result
39
+ */
40
+ run(params: any): Promise<{
41
+ success: boolean;
42
+ message: string;
43
+ error: string;
44
+ data?: undefined;
45
+ recordCount?: undefined;
46
+ totalRecords?: undefined;
47
+ autoLimited?: undefined;
48
+ } | {
49
+ success: boolean;
50
+ message: string;
51
+ data: any[];
52
+ recordCount: number;
53
+ totalRecords: number;
54
+ autoLimited: boolean;
55
+ error?: undefined;
56
+ }>;
57
+ }
58
+ //# sourceMappingURL=ReadDataTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReadDataTool.d.ts","sourceRoot":"","sources":["../../src/tools/ReadDataTool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE1D,qBAAa,YAAa,YAAW,IAAI;IACvC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,IAAI,SAAe;IACnB,WAAW,SAA8Q;IAEzR,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IAExC,WAAW,EAaN,GAAG,CAAC;;IAWT,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAOxC;IAGF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CA+CxC;IAEF;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAkFrB;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAqBvB;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAQtB;;;;OAIG;IACH,OAAO,CAAC,cAAc;IA6BtB;;;;OAIG;IACG,GAAG,CAAC,MAAM,EAAE,GAAG;;;;;;;;;;;;;;;;;CA0DtB"}
@@ -0,0 +1,265 @@
1
+ import sql from "mssql";
2
+ export class ReadDataTool {
3
+ constructor() {
4
+ this.name = "read_data";
5
+ this.description = "Executes a SELECT query on an MSSQL Database table. The query must start with SELECT and cannot contain any destructive SQL operations for security reasons. Automatically limits results to MAX_ROWS_DEFAULT (env var, default 1000) if no TOP/LIMIT clause is present.";
6
+ this.inputSchema = {
7
+ type: "object",
8
+ properties: {
9
+ query: {
10
+ type: "string",
11
+ description: "SQL SELECT query to execute (must start with SELECT and cannot contain destructive operations). Example: SELECT * FROM movies WHERE genre = 'comedy'"
12
+ },
13
+ maxRows: {
14
+ type: "number",
15
+ description: "Optional override for maximum rows returned (1-100000).",
16
+ },
17
+ },
18
+ required: ["query"],
19
+ };
20
+ // Read max rows from env var, default to 1000
21
+ const envMaxRows = process.env.MAX_ROWS_DEFAULT;
22
+ this.defaultMaxRows = envMaxRows && !isNaN(parseInt(envMaxRows, 10))
23
+ ? Math.min(Math.max(parseInt(envMaxRows, 10), 1), 100000) // Clamp between 1 and 100k
24
+ : 1000;
25
+ }
26
+ /**
27
+ * Validates the SQL query for security issues
28
+ * @param query The SQL query to validate
29
+ * @returns Validation result with success flag and error message if invalid
30
+ */
31
+ validateQuery(query) {
32
+ if (!query || typeof query !== 'string') {
33
+ return {
34
+ isValid: false,
35
+ error: 'Query must be a non-empty string'
36
+ };
37
+ }
38
+ // Remove comments and normalize whitespace for analysis
39
+ const cleanQuery = query
40
+ .replace(/--.*$/gm, '') // Remove line comments
41
+ .replace(/\/\*[\s\S]*?\*\//g, '') // Remove block comments
42
+ .replace(/\s+/g, ' ') // Normalize whitespace
43
+ .trim();
44
+ if (!cleanQuery) {
45
+ return {
46
+ isValid: false,
47
+ error: 'Query cannot be empty after removing comments'
48
+ };
49
+ }
50
+ const upperQuery = cleanQuery.toUpperCase();
51
+ // Must start with SELECT
52
+ if (!upperQuery.startsWith('SELECT')) {
53
+ return {
54
+ isValid: false,
55
+ error: 'Query must start with SELECT for security reasons'
56
+ };
57
+ }
58
+ // Check for dangerous keywords in the cleaned query using word boundaries
59
+ for (const keyword of ReadDataTool.DANGEROUS_KEYWORDS) {
60
+ // Use word boundary regex to match only complete keywords, not parts of words
61
+ const keywordRegex = new RegExp(`(^|\\s|[^A-Za-z0-9_])${keyword}($|\\s|[^A-Za-z0-9_])`, 'i');
62
+ if (keywordRegex.test(upperQuery)) {
63
+ return {
64
+ isValid: false,
65
+ error: `Dangerous keyword '${keyword}' detected in query. Only SELECT operations are allowed.`
66
+ };
67
+ }
68
+ }
69
+ // Check for dangerous patterns using regex
70
+ for (const pattern of ReadDataTool.DANGEROUS_PATTERNS) {
71
+ if (pattern.test(query)) {
72
+ return {
73
+ isValid: false,
74
+ error: 'Potentially malicious SQL pattern detected. Only simple SELECT queries are allowed.'
75
+ };
76
+ }
77
+ }
78
+ // Additional validation: Check for multiple statements
79
+ const statements = cleanQuery.split(';').filter(stmt => stmt.trim().length > 0);
80
+ if (statements.length > 1) {
81
+ return {
82
+ isValid: false,
83
+ error: 'Multiple SQL statements are not allowed. Use only a single SELECT statement.'
84
+ };
85
+ }
86
+ // Check for suspicious string patterns that might indicate obfuscation
87
+ if (query.includes('CHAR(') || query.includes('NCHAR(') || query.includes('ASCII(')) {
88
+ return {
89
+ isValid: false,
90
+ error: 'Character conversion functions are not allowed as they may be used for obfuscation.'
91
+ };
92
+ }
93
+ // Limit query length to prevent potential DoS
94
+ if (query.length > 10000) {
95
+ return {
96
+ isValid: false,
97
+ error: 'Query is too long. Maximum allowed length is 10,000 characters.'
98
+ };
99
+ }
100
+ return { isValid: true };
101
+ }
102
+ /**
103
+ * Enforces row limit by injecting TOP n if not already present
104
+ * @param query The validated SQL query
105
+ * @returns Query with TOP clause if needed, plus flag indicating if limit was added
106
+ */
107
+ enforceRowLimit(query, maxRows) {
108
+ const upperQuery = query.toUpperCase();
109
+ // Check if query already has TOP or LIMIT
110
+ const hasTop = /\bSELECT\s+TOP\s+\d+\b/i.test(query);
111
+ const hasLimit = /\bLIMIT\s+\d+\b/i.test(query);
112
+ if (hasTop || hasLimit) {
113
+ return { query, limitAdded: false };
114
+ }
115
+ // Inject TOP n after SELECT
116
+ // Handle SELECT DISTINCT separately
117
+ const modifiedQuery = query.replace(/^(\s*SELECT\s+)(DISTINCT\s+)?/i, `$1$2TOP ${maxRows} `);
118
+ return { query: modifiedQuery, limitAdded: true };
119
+ }
120
+ /**
121
+ * Resolves the maximum number of rows to return based on the input parameters and environment
122
+ * @param params Input parameters
123
+ * @returns Maximum number of rows to return
124
+ */
125
+ resolveMaxRows(params) {
126
+ const maxRows = params.maxRows;
127
+ if (maxRows && !isNaN(parseInt(maxRows, 10))) {
128
+ return Math.min(Math.max(parseInt(maxRows, 10), 1), 100000); // Clamp between 1 and 100k
129
+ }
130
+ return this.defaultMaxRows;
131
+ }
132
+ /**
133
+ * Sanitizes the query result to prevent any potential security issues
134
+ * @param data The query result data
135
+ * @returns Sanitized data
136
+ */
137
+ sanitizeResult(data) {
138
+ if (!Array.isArray(data)) {
139
+ return [];
140
+ }
141
+ // Limit the number of returned records to prevent memory issues
142
+ const maxRecords = 10000;
143
+ if (data.length > maxRecords) {
144
+ console.warn(`Query returned ${data.length} records, limiting to ${maxRecords}`);
145
+ return data.slice(0, maxRecords);
146
+ }
147
+ return data.map(record => {
148
+ if (typeof record === 'object' && record !== null) {
149
+ const sanitized = {};
150
+ for (const [key, value] of Object.entries(record)) {
151
+ // Sanitize column names (remove any suspicious characters)
152
+ const sanitizedKey = key.replace(/[^\w\s-_.]/g, '');
153
+ if (sanitizedKey !== key) {
154
+ console.warn(`Column name sanitized: ${key} -> ${sanitizedKey}`);
155
+ }
156
+ sanitized[sanitizedKey] = value;
157
+ }
158
+ return sanitized;
159
+ }
160
+ return record;
161
+ });
162
+ }
163
+ /**
164
+ * Executes the validated SQL query
165
+ * @param params Query parameters
166
+ * @returns Query execution result
167
+ */
168
+ async run(params) {
169
+ try {
170
+ const { query } = params;
171
+ // Validate the query for security issues
172
+ const validation = this.validateQuery(query);
173
+ if (!validation.isValid) {
174
+ console.warn(`Security validation failed for query: ${query.substring(0, 100)}...`);
175
+ return {
176
+ success: false,
177
+ message: `Security validation failed: ${validation.error}`,
178
+ error: 'SECURITY_VALIDATION_FAILED'
179
+ };
180
+ }
181
+ // Enforce row limit
182
+ const maxRowsToUse = this.resolveMaxRows(params);
183
+ const { query: limitedQuery, limitAdded } = this.enforceRowLimit(query, maxRowsToUse);
184
+ // Log the query for audit purposes (in production, consider more secure logging)
185
+ console.log(`Executing validated SELECT query${limitAdded ? ` (auto-limited to ${maxRowsToUse} rows)` : ''}: ${limitedQuery.substring(0, 200)}${limitedQuery.length > 200 ? '...' : ''}`);
186
+ // Execute the query
187
+ const request = new sql.Request();
188
+ const result = await request.query(limitedQuery);
189
+ // Sanitize the result
190
+ const sanitizedData = this.sanitizeResult(result.recordset);
191
+ return {
192
+ success: true,
193
+ message: `Query executed successfully. Retrieved ${sanitizedData.length} record(s)${result.recordset.length !== sanitizedData.length
194
+ ? ` (limited from ${result.recordset.length} total records)`
195
+ : ''}${limitAdded ? ` [auto-limited to ${maxRowsToUse} rows]` : ''}`,
196
+ data: sanitizedData,
197
+ recordCount: sanitizedData.length,
198
+ totalRecords: result.recordset.length,
199
+ autoLimited: limitAdded
200
+ };
201
+ }
202
+ catch (error) {
203
+ console.error("Error executing query:", error);
204
+ // Don't expose internal error details to prevent information leakage
205
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
206
+ const safeErrorMessage = errorMessage.includes('Invalid object name')
207
+ ? errorMessage
208
+ : 'Database query execution failed';
209
+ return {
210
+ success: false,
211
+ message: `Failed to execute query: ${safeErrorMessage}`,
212
+ error: 'QUERY_EXECUTION_FAILED'
213
+ };
214
+ }
215
+ }
216
+ }
217
+ // List of dangerous SQL keywords that should not be allowed
218
+ ReadDataTool.DANGEROUS_KEYWORDS = [
219
+ 'DELETE', 'DROP', 'UPDATE', 'INSERT', 'ALTER', 'CREATE',
220
+ 'TRUNCATE', 'EXEC', 'EXECUTE', 'MERGE', 'REPLACE',
221
+ 'GRANT', 'REVOKE', 'COMMIT', 'ROLLBACK', 'TRANSACTION',
222
+ 'BEGIN', 'DECLARE', 'SET', 'USE', 'BACKUP',
223
+ 'RESTORE', 'KILL', 'SHUTDOWN', 'WAITFOR', 'OPENROWSET',
224
+ 'OPENDATASOURCE', 'OPENQUERY', 'OPENXML', 'BULK', 'INTO'
225
+ ];
226
+ // Regex patterns to detect common SQL injection techniques
227
+ ReadDataTool.DANGEROUS_PATTERNS = [
228
+ // SELECT INTO operations that create new tables
229
+ /SELECT\s+.*?\s+INTO\s+/i,
230
+ // Semicolon followed by dangerous keywords
231
+ /;\s*(DELETE|DROP|UPDATE|INSERT|ALTER|CREATE|TRUNCATE|EXEC|EXECUTE|MERGE|REPLACE|GRANT|REVOKE)/i,
232
+ // UNION injection attempts with dangerous keywords
233
+ /UNION\s+(?:ALL\s+)?SELECT.*?(DELETE|DROP|UPDATE|INSERT|ALTER|CREATE|TRUNCATE|EXEC|EXECUTE)/i,
234
+ // Comment-based injection attempts
235
+ /--.*?(DELETE|DROP|UPDATE|INSERT|ALTER|CREATE|TRUNCATE|EXEC|EXECUTE)/i,
236
+ /\/\*.*?(DELETE|DROP|UPDATE|INSERT|ALTER|CREATE|TRUNCATE|EXEC|EXECUTE).*?\*\//i,
237
+ // Stored procedure execution patterns
238
+ /EXEC\s*\(/i,
239
+ /EXECUTE\s*\(/i,
240
+ /sp_/i,
241
+ /xp_/i,
242
+ // Dynamic SQL construction
243
+ /EXEC\s*\(/i,
244
+ /EXECUTE\s*\(/i,
245
+ // Bulk operations
246
+ /BULK\s+INSERT/i,
247
+ /OPENROWSET/i,
248
+ /OPENDATASOURCE/i,
249
+ // System functions that could be dangerous
250
+ /@@/,
251
+ /SYSTEM_USER/i,
252
+ /USER_NAME/i,
253
+ /DB_NAME/i,
254
+ /HOST_NAME/i,
255
+ // Time delay attacks
256
+ /WAITFOR\s+DELAY/i,
257
+ /WAITFOR\s+TIME/i,
258
+ // Multiple statements (semicolon not at end)
259
+ /;\s*\w/,
260
+ // String concatenation that might hide malicious code
261
+ /\+\s*CHAR\s*\(/i,
262
+ /\+\s*NCHAR\s*\(/i,
263
+ /\+\s*ASCII\s*\(/i,
264
+ ];
265
+ //# sourceMappingURL=ReadDataTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReadDataTool.js","sourceRoot":"","sources":["../../src/tools/ReadDataTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ type RelationshipParams = {
3
+ tableName: string;
4
+ schemaName?: string;
5
+ includeOutbound?: boolean;
6
+ includeInbound?: boolean;
7
+ };
8
+ type ColumnMapping = {
9
+ fromColumn: string;
10
+ toColumn: string;
11
+ };
12
+ type Relationship = {
13
+ constraintName: string;
14
+ from: {
15
+ schemaName: string;
16
+ tableName: string;
17
+ };
18
+ to: {
19
+ schemaName: string;
20
+ tableName: string;
21
+ };
22
+ columnMapping: ColumnMapping[];
23
+ updateRule: string;
24
+ deleteRule: string;
25
+ };
26
+ type RelationshipResult = {
27
+ success: boolean;
28
+ message?: string;
29
+ tableName?: string;
30
+ schemaName?: string;
31
+ outbound?: Relationship[];
32
+ inbound?: Relationship[];
33
+ };
34
+ export declare class RelationshipInspectorTool implements Tool {
35
+ [key: string]: any;
36
+ name: string;
37
+ description: string;
38
+ inputSchema: any;
39
+ private normalizeBool;
40
+ private ensureTableExists;
41
+ private mapRelationships;
42
+ private fetchRelationships;
43
+ run(params: RelationshipParams): Promise<RelationshipResult>;
44
+ }
45
+ export {};
46
+ //# sourceMappingURL=RelationshipInspectorTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationshipInspectorTool.d.ts","sourceRoot":"","sources":["../../src/tools/RelationshipInspectorTool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE1D,KAAK,kBAAkB,GAAG;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,EAAE,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,aAAa,EAAE,aAAa,EAAE,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;CAC1B,CAAC;AAeF,qBAAa,yBAA0B,YAAW,IAAI;IACpD,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,IAAI,SAA2B;IAC/B,WAAW,SAAoI;IAE/I,WAAW,EAqBN,GAAG,CAAC;IAET,OAAO,CAAC,aAAa;YAIP,iBAAiB;IAY/B,OAAO,CAAC,gBAAgB;YAuBV,kBAAkB;IA6C1B,GAAG,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAsDnE"}
@@ -0,0 +1,155 @@
1
+ import sql from "mssql";
2
+ export class RelationshipInspectorTool {
3
+ constructor() {
4
+ this.name = "inspect_relationships";
5
+ this.description = "Describes inbound and outbound foreign-key relationships for a given table, including column mappings and referential actions.";
6
+ this.inputSchema = {
7
+ type: "object",
8
+ properties: {
9
+ tableName: {
10
+ type: "string",
11
+ description: "Target table name (without schema).",
12
+ },
13
+ schemaName: {
14
+ type: "string",
15
+ description: "Schema name (defaults to 'dbo').",
16
+ },
17
+ includeOutbound: {
18
+ type: "boolean",
19
+ description: "Include relationships where the table references other tables (default true).",
20
+ },
21
+ includeInbound: {
22
+ type: "boolean",
23
+ description: "Include relationships where other tables reference this table (default true).",
24
+ },
25
+ },
26
+ required: ["tableName"],
27
+ };
28
+ }
29
+ normalizeBool(value, fallback) {
30
+ return typeof value === "boolean" ? value : fallback;
31
+ }
32
+ async ensureTableExists(schemaName, tableName) {
33
+ const request = new sql.Request();
34
+ request.input("schemaName", sql.NVarChar, schemaName);
35
+ request.input("tableName", sql.NVarChar, tableName);
36
+ const result = await request.query(`
37
+ SELECT 1
38
+ FROM INFORMATION_SCHEMA.TABLES
39
+ WHERE TABLE_SCHEMA = @schemaName AND TABLE_NAME = @tableName
40
+ `);
41
+ return result.recordset.length > 0;
42
+ }
43
+ mapRelationships(rows) {
44
+ const grouped = new Map();
45
+ for (const row of rows) {
46
+ if (!grouped.has(row.constraintName)) {
47
+ grouped.set(row.constraintName, {
48
+ constraintName: row.constraintName,
49
+ from: { schemaName: row.fromSchema, tableName: row.fromTable },
50
+ to: { schemaName: row.toSchema, tableName: row.toTable },
51
+ columnMapping: [],
52
+ updateRule: row.updateRule,
53
+ deleteRule: row.deleteRule,
54
+ });
55
+ }
56
+ const relationship = grouped.get(row.constraintName);
57
+ relationship.columnMapping.push({ fromColumn: row.fromColumn, toColumn: row.toColumn });
58
+ }
59
+ return Array.from(grouped.values()).map((rel) => ({
60
+ ...rel,
61
+ columnMapping: rel.columnMapping.sort((a, b) => a.fromColumn.localeCompare(b.fromColumn)),
62
+ }));
63
+ }
64
+ async fetchRelationships(schemaName, tableName, direction) {
65
+ const request = new sql.Request();
66
+ request.input("schemaName", sql.NVarChar, schemaName);
67
+ request.input("tableName", sql.NVarChar, tableName);
68
+ const baseQuery = `
69
+ SELECT
70
+ fk.CONSTRAINT_NAME AS constraintName,
71
+ fk.UPDATE_RULE AS updateRule,
72
+ fk.DELETE_RULE AS deleteRule,
73
+ child.TABLE_SCHEMA AS fromSchema,
74
+ child.TABLE_NAME AS fromTable,
75
+ parent.TABLE_SCHEMA AS toSchema,
76
+ parent.TABLE_NAME AS toTable,
77
+ childCol.COLUMN_NAME AS fromColumn,
78
+ parentCol.COLUMN_NAME AS toColumn,
79
+ childCol.ORDINAL_POSITION AS ordinal
80
+ FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS fk
81
+ JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS child
82
+ ON child.CONSTRAINT_NAME = fk.CONSTRAINT_NAME
83
+ AND child.CONSTRAINT_TYPE = 'FOREIGN KEY'
84
+ JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS parent
85
+ ON parent.CONSTRAINT_NAME = fk.UNIQUE_CONSTRAINT_NAME
86
+ JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE childCol
87
+ ON childCol.CONSTRAINT_NAME = fk.CONSTRAINT_NAME
88
+ AND childCol.TABLE_SCHEMA = child.TABLE_SCHEMA
89
+ AND childCol.TABLE_NAME = child.TABLE_NAME
90
+ JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE parentCol
91
+ ON parentCol.CONSTRAINT_NAME = fk.UNIQUE_CONSTRAINT_NAME
92
+ AND parentCol.TABLE_SCHEMA = parent.TABLE_SCHEMA
93
+ AND parentCol.TABLE_NAME = parent.TABLE_NAME
94
+ AND childCol.ORDINAL_POSITION = parentCol.ORDINAL_POSITION
95
+ WHERE {{FILTER}}
96
+ ORDER BY fk.CONSTRAINT_NAME, childCol.ORDINAL_POSITION
97
+ `;
98
+ const filter = direction === "outbound"
99
+ ? "child.TABLE_SCHEMA = @schemaName AND child.TABLE_NAME = @tableName"
100
+ : "parent.TABLE_SCHEMA = @schemaName AND parent.TABLE_NAME = @tableName";
101
+ const query = baseQuery.replace("{{FILTER}}", filter);
102
+ const result = await request.query(query);
103
+ return this.mapRelationships(result.recordset ?? []);
104
+ }
105
+ async run(params) {
106
+ try {
107
+ const tableName = params.tableName?.trim();
108
+ if (!tableName) {
109
+ return { success: false, message: "tableName is required." };
110
+ }
111
+ const schemaName = params.schemaName?.trim() || "dbo";
112
+ const includeOutbound = this.normalizeBool(params.includeOutbound, true);
113
+ const includeInbound = this.normalizeBool(params.includeInbound, true);
114
+ if (!includeOutbound && !includeInbound) {
115
+ return {
116
+ success: false,
117
+ message: "At least one of includeOutbound or includeInbound must be true.",
118
+ };
119
+ }
120
+ const tableExists = await this.ensureTableExists(schemaName, tableName);
121
+ if (!tableExists) {
122
+ return {
123
+ success: false,
124
+ message: `Table [${schemaName}].[${tableName}] was not found.`,
125
+ };
126
+ }
127
+ const [outbound, inbound] = await Promise.all([
128
+ includeOutbound ? this.fetchRelationships(schemaName, tableName, "outbound") : Promise.resolve([]),
129
+ includeInbound ? this.fetchRelationships(schemaName, tableName, "inbound") : Promise.resolve([]),
130
+ ]);
131
+ if ((!outbound || outbound.length === 0) && (!inbound || inbound.length === 0)) {
132
+ return {
133
+ success: true,
134
+ tableName,
135
+ schemaName,
136
+ message: "No foreign key relationships found for the specified table.",
137
+ };
138
+ }
139
+ return {
140
+ success: true,
141
+ tableName,
142
+ schemaName,
143
+ outbound: outbound.length ? outbound : undefined,
144
+ inbound: inbound.length ? inbound : undefined,
145
+ };
146
+ }
147
+ catch (error) {
148
+ return {
149
+ success: false,
150
+ message: `Failed to inspect relationships: ${error}`,
151
+ };
152
+ }
153
+ }
154
+ }
155
+ //# sourceMappingURL=RelationshipInspectorTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationshipInspectorTool.js","sourceRoot":"","sources":["../../src/tools/RelationshipInspectorTool.ts"],"names":[],"mappings":"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"}