mcp-server-db2i 2.0.0 → 2.2.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 (75) hide show
  1. package/README.md +11 -0
  2. package/dist/config.d.ts +104 -1
  3. package/dist/config.d.ts.map +1 -1
  4. package/dist/config.js +273 -5
  5. package/dist/config.js.map +1 -1
  6. package/dist/customTools/context.d.ts +27 -0
  7. package/dist/customTools/context.d.ts.map +1 -0
  8. package/dist/customTools/context.js +35 -0
  9. package/dist/customTools/context.js.map +1 -0
  10. package/dist/customTools/execute.d.ts +22 -0
  11. package/dist/customTools/execute.d.ts.map +1 -0
  12. package/dist/customTools/execute.js +134 -0
  13. package/dist/customTools/execute.js.map +1 -0
  14. package/dist/customTools/loader.d.ts +56 -0
  15. package/dist/customTools/loader.d.ts.map +1 -0
  16. package/dist/customTools/loader.js +213 -0
  17. package/dist/customTools/loader.js.map +1 -0
  18. package/dist/customTools/params.d.ts +23 -0
  19. package/dist/customTools/params.d.ts.map +1 -0
  20. package/dist/customTools/params.js +93 -0
  21. package/dist/customTools/params.js.map +1 -0
  22. package/dist/customTools/registry.d.ts +18 -0
  23. package/dist/customTools/registry.d.ts.map +1 -0
  24. package/dist/customTools/registry.js +23 -0
  25. package/dist/customTools/registry.js.map +1 -0
  26. package/dist/customTools/schema.d.ts +127 -0
  27. package/dist/customTools/schema.d.ts.map +1 -0
  28. package/dist/customTools/schema.js +193 -0
  29. package/dist/customTools/schema.js.map +1 -0
  30. package/dist/db/connection.d.ts +9 -0
  31. package/dist/db/connection.d.ts.map +1 -1
  32. package/dist/db/connection.js +91 -0
  33. package/dist/db/connection.js.map +1 -1
  34. package/dist/db/sqlServices.d.ts +65 -0
  35. package/dist/db/sqlServices.d.ts.map +1 -0
  36. package/dist/db/sqlServices.js +311 -0
  37. package/dist/db/sqlServices.js.map +1 -0
  38. package/dist/index.js +23 -1
  39. package/dist/index.js.map +1 -1
  40. package/dist/server.d.ts +1 -1
  41. package/dist/server.d.ts.map +1 -1
  42. package/dist/server.js +260 -104
  43. package/dist/server.js.map +1 -1
  44. package/dist/tools/metadata.d.ts +24 -12
  45. package/dist/tools/metadata.d.ts.map +1 -1
  46. package/dist/tools/metadata.js +43 -8
  47. package/dist/tools/metadata.js.map +1 -1
  48. package/dist/tools/query.d.ts +5 -0
  49. package/dist/tools/query.d.ts.map +1 -1
  50. package/dist/tools/query.js +50 -2
  51. package/dist/tools/query.js.map +1 -1
  52. package/dist/tools/sqlLimit.d.ts +5 -0
  53. package/dist/tools/sqlLimit.d.ts.map +1 -1
  54. package/dist/tools/sqlLimit.js +12 -0
  55. package/dist/tools/sqlLimit.js.map +1 -1
  56. package/dist/tools/sqlServices.d.ts +51 -0
  57. package/dist/tools/sqlServices.d.ts.map +1 -0
  58. package/dist/tools/sqlServices.js +122 -0
  59. package/dist/tools/sqlServices.js.map +1 -0
  60. package/dist/transports/http.d.ts.map +1 -1
  61. package/dist/transports/http.js +40 -1
  62. package/dist/transports/http.js.map +1 -1
  63. package/dist/utils/formatResult.d.ts +22 -0
  64. package/dist/utils/formatResult.d.ts.map +1 -0
  65. package/dist/utils/formatResult.js +66 -0
  66. package/dist/utils/formatResult.js.map +1 -0
  67. package/dist/utils/security/schemaAllowlist.d.ts +27 -0
  68. package/dist/utils/security/schemaAllowlist.d.ts.map +1 -0
  69. package/dist/utils/security/schemaAllowlist.js +156 -0
  70. package/dist/utils/security/schemaAllowlist.js.map +1 -0
  71. package/dist/utils/security/sqlSecurityValidator.d.ts +0 -4
  72. package/dist/utils/security/sqlSecurityValidator.d.ts.map +1 -1
  73. package/dist/utils/security/sqlSecurityValidator.js +134 -38
  74. package/dist/utils/security/sqlSecurityValidator.js.map +1 -1
  75. package/package.json +2 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatResult.js","sourceRoot":"","sources":["../../src/utils/formatResult.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Schema allowlist for execute_query and the SQL service tools.
3
+ *
4
+ * When QUERY_ALLOWED_SCHEMAS is set, every table reference must resolve to
5
+ * one of those libraries. Queries that cannot be parsed are rejected, so a
6
+ * dialect the parser does not understand cannot skip the check.
7
+ */
8
+ export interface SchemaCheckOptions {
9
+ /** Uppercased library names the query may use */
10
+ allowed: string[];
11
+ /** Schema unqualified names resolve to. Empty means none is configured. */
12
+ defaultSchema?: string;
13
+ }
14
+ export interface SchemaCheckResult {
15
+ ok: boolean;
16
+ violations: string[];
17
+ }
18
+ /**
19
+ * Check that every table reference stays inside the allowlist.
20
+ * Callers should skip this when the allowlist is unset.
21
+ */
22
+ export declare function checkQuerySchemas(sql: string, options: SchemaCheckOptions): SchemaCheckResult;
23
+ /**
24
+ * True when schema is in the allowlist. Comparison is case-insensitive.
25
+ */
26
+ export declare function isSchemaAllowed(schema: string, allowed: readonly string[]): boolean;
27
+ //# sourceMappingURL=schemaAllowlist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemaAllowlist.d.ts","sourceRoot":"","sources":["../../../src/utils/security/schemaAllowlist.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,MAAM,WAAW,kBAAkB;IACjC,iDAAiD;IACjD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,2EAA2E;IAC3E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AA4HD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,iBAAiB,CA+C7F;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAMnF"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Schema allowlist for execute_query and the SQL service tools.
3
+ *
4
+ * When QUERY_ALLOWED_SCHEMAS is set, every table reference must resolve to
5
+ * one of those libraries. Queries that cannot be parsed are rejected, so a
6
+ * dialect the parser does not understand cannot skip the check.
7
+ */
8
+ import nodeSqlParser from 'node-sql-parser';
9
+ import { stripTrailingRowLimit } from '../../tools/sqlLimit.js';
10
+ const { Parser } = nodeSqlParser;
11
+ const PARSE_DIALECTS = ['db2', 'mysql'];
12
+ const UNPARSEABLE_MESSAGE = 'Query could not be parsed, so its libraries could not be checked. ' +
13
+ 'While QUERY_ALLOWED_SCHEMAS is set, system naming (LIB/FILE) and TABLE(...) functions are not accepted.';
14
+ /**
15
+ * Replace `?` parameter markers with NULL, leaving markers inside quotes alone.
16
+ * The DB2 dialect rejects `?`, and real queries use it for prepared statements.
17
+ */
18
+ function replaceParameterMarkers(sql) {
19
+ let out = '';
20
+ let quote = null;
21
+ for (let i = 0; i < sql.length; i++) {
22
+ const ch = sql[i];
23
+ if (quote) {
24
+ out += ch;
25
+ if (ch === quote) {
26
+ if (sql[i + 1] === quote) {
27
+ out += sql[++i];
28
+ }
29
+ else {
30
+ quote = null;
31
+ }
32
+ }
33
+ continue;
34
+ }
35
+ if (ch === "'" || ch === '"') {
36
+ quote = ch;
37
+ out += ch;
38
+ continue;
39
+ }
40
+ if (ch === '?') {
41
+ out += 'NULL';
42
+ continue;
43
+ }
44
+ out += ch;
45
+ }
46
+ return out;
47
+ }
48
+ function normalizeForParsing(sql) {
49
+ return replaceParameterMarkers(stripTrailingRowLimit(sql));
50
+ }
51
+ function parseQuery(sql) {
52
+ const parser = new Parser();
53
+ for (const database of PARSE_DIALECTS) {
54
+ try {
55
+ const ast = parser.astify(sql, { database });
56
+ const tables = parser.tableList(sql, { database });
57
+ return { ast, tables };
58
+ }
59
+ catch {
60
+ // The other dialect may accept what this one rejects.
61
+ }
62
+ }
63
+ return undefined;
64
+ }
65
+ function collectCteNames(node, names) {
66
+ if (!node || typeof node !== 'object') {
67
+ return;
68
+ }
69
+ if (Array.isArray(node)) {
70
+ for (const item of node) {
71
+ collectCteNames(item, names);
72
+ }
73
+ return;
74
+ }
75
+ const record = node;
76
+ const withClause = record.with;
77
+ if (Array.isArray(withClause)) {
78
+ for (const cte of withClause) {
79
+ const name = cte?.name?.value;
80
+ if (typeof name === 'string' && name.length > 0) {
81
+ names.add(name.toUpperCase());
82
+ }
83
+ collectCteNames(cte, names);
84
+ }
85
+ }
86
+ for (const [key, value] of Object.entries(record)) {
87
+ if (key === 'with') {
88
+ continue;
89
+ }
90
+ collectCteNames(value, names);
91
+ }
92
+ }
93
+ function schemaOf(entry) {
94
+ const parts = entry.split('::');
95
+ if (parts.length < 3) {
96
+ return undefined;
97
+ }
98
+ const schema = parts[1];
99
+ const table = parts.slice(2).join('::').replace(/^"|"$/g, '');
100
+ if (!table || table === '*') {
101
+ return undefined;
102
+ }
103
+ if (!schema || schema.toLowerCase() === 'null') {
104
+ return { schema: undefined, table };
105
+ }
106
+ return { schema: schema.replace(/^"|"$/g, '').toUpperCase(), table };
107
+ }
108
+ /**
109
+ * Check that every table reference stays inside the allowlist.
110
+ * Callers should skip this when the allowlist is unset.
111
+ */
112
+ export function checkQuerySchemas(sql, options) {
113
+ const parsed = parseQuery(normalizeForParsing(sql));
114
+ if (!parsed) {
115
+ return { ok: false, violations: [UNPARSEABLE_MESSAGE] };
116
+ }
117
+ const cteNames = new Set();
118
+ collectCteNames(parsed.ast, cteNames);
119
+ const allowed = new Set(options.allowed.map((name) => name.toUpperCase()));
120
+ const defaultSchema = options.defaultSchema?.trim().toUpperCase() || undefined;
121
+ const violations = [];
122
+ for (const entry of parsed.tables) {
123
+ const ref = schemaOf(entry);
124
+ if (!ref) {
125
+ continue;
126
+ }
127
+ if (!ref.schema) {
128
+ if (cteNames.has(ref.table.toUpperCase())) {
129
+ continue;
130
+ }
131
+ if (!defaultSchema) {
132
+ violations.push(`Unqualified table ${ref.table} has no default schema. Set DB2I_SCHEMA or qualify the table with a library.`);
133
+ continue;
134
+ }
135
+ if (!allowed.has(defaultSchema)) {
136
+ violations.push(`Unqualified table ${ref.table} resolves to ${defaultSchema}, which is not in QUERY_ALLOWED_SCHEMAS.`);
137
+ }
138
+ continue;
139
+ }
140
+ if (!allowed.has(ref.schema)) {
141
+ violations.push(`Table ${ref.schema}.${ref.table} is not in QUERY_ALLOWED_SCHEMAS (${[...allowed].join(', ')}).`);
142
+ }
143
+ }
144
+ return { ok: violations.length === 0, violations };
145
+ }
146
+ /**
147
+ * True when schema is in the allowlist. Comparison is case-insensitive.
148
+ */
149
+ export function isSchemaAllowed(schema, allowed) {
150
+ const name = schema.trim().toUpperCase();
151
+ if (!name) {
152
+ return false;
153
+ }
154
+ return allowed.some((entry) => entry.toUpperCase() === name);
155
+ }
156
+ //# sourceMappingURL=schemaAllowlist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemaAllowlist.js","sourceRoot":"","sources":["../../../src/utils/security/schemaAllowlist.ts"],"names":[],"mappings":"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"}
@@ -62,10 +62,6 @@ export declare class SqlSecurityValidator {
62
62
  * Validate SQL query using regex patterns (fallback)
63
63
  */
64
64
  private static validateQueryRegex;
65
- /**
66
- * Check if a keyword is inside a string literal
67
- */
68
- private static isInsideStringLiteral;
69
65
  /**
70
66
  * Check if an operation is dangerous
71
67
  */
@@ -1 +1 @@
1
- {"version":3,"file":"sqlSecurityValidator.d.ts","sourceRoot":"","sources":["../../../src/utils/security/sqlSecurityValidator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,wCAAwC;IACxC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,6BAA6B;IAC7B,gBAAgB,EAAE,KAAK,GAAG,OAAO,GAAG,UAAU,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oCAAoC;IACpC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,4VA6CvB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,0BAA0B,+CAG7B,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,mBAAmB,0HAStB,CAAC;AAUX;;;;;GAKG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAgB;IAErC;;;;;;OAMG;IACH,MAAM,CAAC,aAAa,CAClB,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,cAAmB,GAC1B,wBAAwB;IA2C3B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAiD/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAgDjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAapC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAMnC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,2BAA2B;IA8B1C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAarC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;CAG3B;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGpD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,cAAc,GACtB,wBAAwB,CAE1B"}
1
+ {"version":3,"file":"sqlSecurityValidator.d.ts","sourceRoot":"","sources":["../../../src/utils/security/sqlSecurityValidator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,wCAAwC;IACxC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,6BAA6B;IAC7B,gBAAgB,EAAE,KAAK,GAAG,OAAO,GAAG,UAAU,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oCAAoC;IACpC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,4VA6CvB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,0BAA0B,+CAG7B,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,mBAAmB,0HAStB,CAAC;AA4BX;;;;;GAKG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAgB;IAErC;;;;;;OAMG;IACH,MAAM,CAAC,aAAa,CAClB,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,cAAmB,GAC1B,wBAAwB;IA0C3B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAiD/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IA2CjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAMnC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,2BAA2B;IA+B1C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAarC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;CAG3B;AAsGD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGpD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,cAAc,GACtB,wBAAwB,CAE1B"}
@@ -75,6 +75,23 @@ export const DANGEROUS_FUNCTIONS = [
75
75
  'EXECUTE_IMMEDIATE',
76
76
  'EVAL',
77
77
  ];
78
+ /**
79
+ * Prefixes of IBM i services that send data off the system or write outside the database.
80
+ * Matched against the unqualified function name, so QSYS2.HTTP_GET and SYSTOOLS.HTTPGETCLOB both hit.
81
+ */
82
+ const SIDE_EFFECT_FUNCTION_PREFIXES = [
83
+ 'HTTP_',
84
+ 'HTTPGET',
85
+ 'HTTPPOST',
86
+ 'HTTPPUT',
87
+ 'HTTPDELETE',
88
+ 'HTTPHEAD',
89
+ 'HTTPBLOB',
90
+ 'HTTPCLOB',
91
+ 'IFS_WRITE',
92
+ 'GENERATE_SPREADSHEET',
93
+ 'SEND_EMAIL',
94
+ ];
78
95
  /**
79
96
  * All dangerous operations combined
80
97
  */
@@ -105,12 +122,12 @@ export class SqlSecurityValidator {
105
122
  violations.push(`Query exceeds maximum length of ${maxQueryLength} characters`);
106
123
  return { isValid: false, violations, validationMethod: 'regex' };
107
124
  }
108
- // 2. If read-only mode, validate for write operations
125
+ // 2. If read-only mode, validate for write operations.
126
+ // Regex runs on text with literals, comments, and delimited-identifier quotes removed,
127
+ // so a string or a quoted name earlier in the statement cannot hide a later call.
109
128
  if (readOnly) {
110
- // Try AST-based validation first
111
129
  const astResult = this.validateQueryAST(query);
112
- // Also run regex validation for additional coverage
113
- const regexResult = this.validateQueryRegex(query);
130
+ const regexResult = this.validateQueryRegex(normalizeForScan(query));
114
131
  // Combine violations from both methods
115
132
  violations.push(...astResult.violations);
116
133
  // Add regex violations that weren't caught by AST
@@ -120,9 +137,9 @@ export class SqlSecurityValidator {
120
137
  }
121
138
  }
122
139
  }
123
- // 3. Check for custom forbidden keywords
140
+ // 3. Check for custom forbidden keywords on the same normalized text
124
141
  if (forbiddenKeywords.length > 0) {
125
- const keywordViolations = this.checkForbiddenKeywords(query, forbiddenKeywords);
142
+ const keywordViolations = this.checkForbiddenKeywords(normalizeForScan(query), forbiddenKeywords);
126
143
  violations.push(...keywordViolations);
127
144
  }
128
145
  return {
@@ -181,29 +198,24 @@ export class SqlSecurityValidator {
181
198
  */
182
199
  static validateQueryRegex(query) {
183
200
  const violations = [];
184
- // Check for dangerous operations
201
+ // query is already normalized: literals and comments are gone, delimited names are unquoted
185
202
  for (const operation of ALL_DANGEROUS_OPERATIONS) {
186
203
  const pattern = new RegExp(`\\b${operation}\\b`, 'i');
187
204
  if (pattern.test(query)) {
188
- // Make sure it's not inside a string literal
189
- if (!this.isInsideStringLiteral(query, operation)) {
190
- violations.push(`Dangerous operation detected: ${operation}`);
191
- }
205
+ violations.push(`Dangerous operation detected: ${operation}`);
192
206
  }
193
207
  }
194
- // Check for dangerous function calls
195
208
  for (const func of DANGEROUS_FUNCTIONS) {
196
209
  const pattern = new RegExp(`\\b${func}\\s*\\(`, 'i');
197
210
  if (pattern.test(query)) {
198
- // Make sure it's not inside a string literal (same check as operations)
199
- if (!this.isInsideStringLiteral(query, func)) {
200
- violations.push(`Dangerous function call detected: ${func}`);
201
- }
211
+ violations.push(`Dangerous function call detected: ${func}`);
202
212
  }
203
213
  }
204
- // Check for comment-based bypass attempts
205
- if (/\/\*.*?(DROP|DELETE|INSERT|UPDATE|TRUNCATE).*?\*\//i.test(query)) {
206
- violations.push('Suspicious comment pattern detected');
214
+ for (const prefix of SIDE_EFFECT_FUNCTION_PREFIXES) {
215
+ const pattern = new RegExp(`\\b(?:\\w+\\.)?${prefix}\\w*\\s*\\(`, 'i');
216
+ if (pattern.test(query)) {
217
+ violations.push(`Dangerous function call detected: ${prefix}`);
218
+ }
207
219
  }
208
220
  // Check for semicolon followed by dangerous operation (multi-statement)
209
221
  if (/;\s*(DROP|DELETE|INSERT|UPDATE|CREATE|ALTER|TRUNCATE)/i.test(query)) {
@@ -220,20 +232,6 @@ export class SqlSecurityValidator {
220
232
  validationMethod: 'regex',
221
233
  };
222
234
  }
223
- /**
224
- * Check if a keyword is inside a string literal
225
- */
226
- static isInsideStringLiteral(query, keyword) {
227
- // Simple heuristic: check if the keyword appears after an odd number of quotes
228
- const keywordIndex = query.toUpperCase().indexOf(keyword.toUpperCase());
229
- if (keywordIndex === -1)
230
- return false;
231
- const beforeKeyword = query.substring(0, keywordIndex);
232
- const singleQuotes = (beforeKeyword.match(/'/g) || []).length;
233
- const doubleQuotes = (beforeKeyword.match(/"/g) || []).length;
234
- // If odd number of quotes, we're inside a string
235
- return singleQuotes % 2 !== 0 || doubleQuotes % 2 !== 0;
236
- }
237
235
  /**
238
236
  * Check if an operation is dangerous
239
237
  */
@@ -248,11 +246,12 @@ export class SqlSecurityValidator {
248
246
  if (!node || typeof node !== 'object')
249
247
  return found;
250
248
  const nodeObj = node;
251
- // Check if this node is a function call
249
+ // Check if this node is a function call. Match the unqualified name so
250
+ // QSYS2.QCMDEXC is compared as QCMDEXC, not as the whole schema-qualified form.
252
251
  if (nodeObj.type === 'function' && nodeObj.name) {
253
- const funcName = String(nodeObj.name).toUpperCase();
254
- if (DANGEROUS_FUNCTIONS.some((f) => f.toUpperCase() === funcName)) {
255
- found.push(funcName);
252
+ const funcName = unqualifiedFunctionName(nodeObj.name);
253
+ if (funcName && isBlockedFunction(funcName)) {
254
+ found.push(funcName.toUpperCase());
256
255
  }
257
256
  }
258
257
  // Recursively check all properties
@@ -276,7 +275,7 @@ export class SqlSecurityValidator {
276
275
  const violations = [];
277
276
  for (const keyword of keywords) {
278
277
  const pattern = new RegExp(`\\b${this.escapeRegex(keyword)}\\b`, 'i');
279
- if (pattern.test(query) && !this.isInsideStringLiteral(query, keyword)) {
278
+ if (pattern.test(query)) {
280
279
  violations.push(`Forbidden keyword detected: ${keyword}`);
281
280
  }
282
281
  }
@@ -289,6 +288,103 @@ export class SqlSecurityValidator {
289
288
  return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
290
289
  }
291
290
  }
291
+ /**
292
+ * Remove text that must not affect keyword detection:
293
+ * string literals (including '' escapes), -- and block comments, and the quotes
294
+ * around delimited identifiers. "QCMDEXC" becomes QCMDEXC. Replaced regions become
295
+ * a space so adjacent tokens are not glued together.
296
+ */
297
+ function normalizeForScan(query) {
298
+ let out = '';
299
+ let i = 0;
300
+ while (i < query.length) {
301
+ const current = query[i];
302
+ const next = query[i + 1];
303
+ if (current === '-' && next === '-') {
304
+ i += 2;
305
+ while (i < query.length && query[i] !== '\n')
306
+ i++;
307
+ out += ' ';
308
+ continue;
309
+ }
310
+ if (current === '/' && next === '*') {
311
+ i += 2;
312
+ while (i < query.length && !(query[i] === '*' && query[i + 1] === '/'))
313
+ i++;
314
+ if (i < query.length)
315
+ i += 2;
316
+ out += ' ';
317
+ continue;
318
+ }
319
+ if (current === "'") {
320
+ i++;
321
+ while (i < query.length) {
322
+ if (query[i] === "'" && query[i + 1] === "'") {
323
+ i += 2;
324
+ continue;
325
+ }
326
+ if (query[i] === "'") {
327
+ i++;
328
+ break;
329
+ }
330
+ i++;
331
+ }
332
+ out += ' ';
333
+ continue;
334
+ }
335
+ if (current === '"') {
336
+ i++;
337
+ let ident = '';
338
+ while (i < query.length) {
339
+ if (query[i] === '"' && query[i + 1] === '"') {
340
+ ident += '"';
341
+ i += 2;
342
+ continue;
343
+ }
344
+ if (query[i] === '"') {
345
+ i++;
346
+ break;
347
+ }
348
+ ident += query[i];
349
+ i++;
350
+ }
351
+ out += ident;
352
+ continue;
353
+ }
354
+ out += current;
355
+ i++;
356
+ }
357
+ return out;
358
+ }
359
+ /**
360
+ * Unqualified function name from a node-sql-parser name node.
361
+ * The name may be a string, "schema.name", or { name: [{ value }] }.
362
+ */
363
+ function unqualifiedFunctionName(name) {
364
+ if (typeof name === 'string') {
365
+ const parts = name.split('.');
366
+ return parts[parts.length - 1];
367
+ }
368
+ if (!name || typeof name !== 'object')
369
+ return undefined;
370
+ const obj = name;
371
+ if (Array.isArray(obj.name) && obj.name.length > 0) {
372
+ const last = obj.name[obj.name.length - 1];
373
+ if (last && typeof last.value === 'string')
374
+ return last.value;
375
+ }
376
+ if (typeof obj.name === 'string')
377
+ return obj.name;
378
+ if (typeof obj.value === 'string')
379
+ return obj.value;
380
+ return undefined;
381
+ }
382
+ function isBlockedFunction(name) {
383
+ const upper = name.toUpperCase();
384
+ if (DANGEROUS_FUNCTIONS.some((func) => func.toUpperCase() === upper))
385
+ return true;
386
+ return SIDE_EFFECT_FUNCTION_PREFIXES.some((prefix) => upper.startsWith(prefix));
387
+ }
292
388
  /**
293
389
  * Convenience function for simple validation
294
390
  *
@@ -1 +1 @@
1
- {"version":3,"file":"sqlSecurityValidator.js","sourceRoot":"","sources":["../../../src/utils/security/sqlSecurityValidator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sqlSecurityValidator.js","sourceRoot":"","sources":["../../../src/utils/security/sqlSecurityValidator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-server-db2i",
3
- "version": "2.0.0",
3
+ "version": "2.2.0",
4
4
  "description": "MCP server for IBM DB2 for i (DB2i) database queries and metadata inspection",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -50,6 +50,7 @@
50
50
  "node-sql-parser": "^5.4.0",
51
51
  "pino": "^10.3.1",
52
52
  "pino-pretty": "^13.1.3",
53
+ "yaml": "^2.9.1",
53
54
  "zod": "^4.6.5"
54
55
  },
55
56
  "devDependencies": {