@ibm/ibmi-mcp-server 0.3.2 → 0.4.1

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 (139) hide show
  1. package/README.md +36 -24
  2. package/dist/cli/commands/columns.d.ts +7 -0
  3. package/dist/cli/commands/columns.d.ts.map +1 -0
  4. package/dist/cli/commands/columns.js +29 -0
  5. package/dist/cli/commands/columns.js.map +1 -0
  6. package/dist/cli/commands/completion.d.ts +10 -0
  7. package/dist/cli/commands/completion.d.ts.map +1 -0
  8. package/dist/cli/commands/completion.js +225 -0
  9. package/dist/cli/commands/completion.js.map +1 -0
  10. package/dist/cli/commands/related.d.ts +7 -0
  11. package/dist/cli/commands/related.d.ts.map +1 -0
  12. package/dist/cli/commands/related.js +32 -0
  13. package/dist/cli/commands/related.js.map +1 -0
  14. package/dist/cli/commands/schemas.d.ts +7 -0
  15. package/dist/cli/commands/schemas.d.ts.map +1 -0
  16. package/dist/cli/commands/schemas.js +49 -0
  17. package/dist/cli/commands/schemas.js.map +1 -0
  18. package/dist/cli/commands/sql.d.ts +8 -0
  19. package/dist/cli/commands/sql.d.ts.map +1 -0
  20. package/dist/cli/commands/sql.js +106 -0
  21. package/dist/cli/commands/sql.js.map +1 -0
  22. package/dist/cli/commands/system.d.ts +11 -0
  23. package/dist/cli/commands/system.d.ts.map +1 -0
  24. package/dist/cli/commands/system.js +263 -0
  25. package/dist/cli/commands/system.js.map +1 -0
  26. package/dist/cli/commands/tables.d.ts +7 -0
  27. package/dist/cli/commands/tables.d.ts.map +1 -0
  28. package/dist/cli/commands/tables.js +48 -0
  29. package/dist/cli/commands/tables.js.map +1 -0
  30. package/dist/cli/commands/tool.d.ts +18 -0
  31. package/dist/cli/commands/tool.d.ts.map +1 -0
  32. package/dist/cli/commands/tool.js +194 -0
  33. package/dist/cli/commands/tool.js.map +1 -0
  34. package/dist/cli/commands/tools-list.d.ts +20 -0
  35. package/dist/cli/commands/tools-list.d.ts.map +1 -0
  36. package/dist/cli/commands/tools-list.js +209 -0
  37. package/dist/cli/commands/tools-list.js.map +1 -0
  38. package/dist/cli/commands/validate.d.ts +7 -0
  39. package/dist/cli/commands/validate.d.ts.map +1 -0
  40. package/dist/cli/commands/validate.js +77 -0
  41. package/dist/cli/commands/validate.js.map +1 -0
  42. package/dist/cli/config/credentials.d.ts +21 -0
  43. package/dist/cli/config/credentials.d.ts.map +1 -0
  44. package/dist/cli/config/credentials.js +96 -0
  45. package/dist/cli/config/credentials.js.map +1 -0
  46. package/dist/cli/config/index.d.ts +10 -0
  47. package/dist/cli/config/index.d.ts.map +1 -0
  48. package/dist/cli/config/index.js +9 -0
  49. package/dist/cli/config/index.js.map +1 -0
  50. package/dist/cli/config/loader.d.ts +36 -0
  51. package/dist/cli/config/loader.d.ts.map +1 -0
  52. package/dist/cli/config/loader.js +206 -0
  53. package/dist/cli/config/loader.js.map +1 -0
  54. package/dist/cli/config/resolver.d.ts +26 -0
  55. package/dist/cli/config/resolver.d.ts.map +1 -0
  56. package/dist/cli/config/resolver.js +102 -0
  57. package/dist/cli/config/resolver.js.map +1 -0
  58. package/dist/cli/config/schema.d.ts +128 -0
  59. package/dist/cli/config/schema.d.ts.map +1 -0
  60. package/dist/cli/config/schema.js +37 -0
  61. package/dist/cli/config/schema.js.map +1 -0
  62. package/dist/cli/config/types.d.ts +59 -0
  63. package/dist/cli/config/types.d.ts.map +1 -0
  64. package/dist/cli/config/types.js +6 -0
  65. package/dist/cli/config/types.js.map +1 -0
  66. package/dist/cli/formatters/output.d.ts +60 -0
  67. package/dist/cli/formatters/output.d.ts.map +1 -0
  68. package/dist/cli/formatters/output.js +190 -0
  69. package/dist/cli/formatters/output.js.map +1 -0
  70. package/dist/cli/index.d.ts +13 -0
  71. package/dist/cli/index.d.ts.map +1 -0
  72. package/dist/cli/index.js +98 -0
  73. package/dist/cli/index.js.map +1 -0
  74. package/dist/cli/utils/command-helpers.d.ts +47 -0
  75. package/dist/cli/utils/command-helpers.d.ts.map +1 -0
  76. package/dist/cli/utils/command-helpers.js +211 -0
  77. package/dist/cli/utils/command-helpers.js.map +1 -0
  78. package/dist/cli/utils/connection.d.ts +20 -0
  79. package/dist/cli/utils/connection.d.ts.map +1 -0
  80. package/dist/cli/utils/connection.js +37 -0
  81. package/dist/cli/utils/connection.js.map +1 -0
  82. package/dist/cli/utils/exit-codes.d.ts +48 -0
  83. package/dist/cli/utils/exit-codes.d.ts.map +1 -0
  84. package/dist/cli/utils/exit-codes.js +111 -0
  85. package/dist/cli/utils/exit-codes.js.map +1 -0
  86. package/dist/cli/utils/yaml-loader.d.ts +69 -0
  87. package/dist/cli/utils/yaml-loader.d.ts.map +1 -0
  88. package/dist/cli/utils/yaml-loader.js +135 -0
  89. package/dist/cli/utils/yaml-loader.js.map +1 -0
  90. package/dist/cli/utils/yaml-to-commander.d.ts +26 -0
  91. package/dist/cli/utils/yaml-to-commander.d.ts.map +1 -0
  92. package/dist/cli/utils/yaml-to-commander.js +156 -0
  93. package/dist/cli/utils/yaml-to-commander.js.map +1 -0
  94. package/dist/config/index.d.ts +1 -0
  95. package/dist/config/index.d.ts.map +1 -1
  96. package/dist/config/index.js +9 -10
  97. package/dist/config/index.js.map +1 -1
  98. package/dist/config/resolver.d.ts.map +1 -1
  99. package/dist/config/resolver.js +6 -0
  100. package/dist/config/resolver.js.map +1 -1
  101. package/dist/ibmi-mcp-server/tools/executeSql.tool.d.ts.map +1 -1
  102. package/dist/ibmi-mcp-server/tools/executeSql.tool.js +6 -2
  103. package/dist/ibmi-mcp-server/tools/executeSql.tool.js.map +1 -1
  104. package/dist/ibmi-mcp-server/tools/generateSql.tool.js +1 -1
  105. package/dist/ibmi-mcp-server/tools/generateSql.tool.js.map +1 -1
  106. package/dist/ibmi-mcp-server/tools/getRelatedObjects.tool.d.ts +93 -0
  107. package/dist/ibmi-mcp-server/tools/getRelatedObjects.tool.d.ts.map +1 -0
  108. package/dist/ibmi-mcp-server/tools/getRelatedObjects.tool.js +198 -0
  109. package/dist/ibmi-mcp-server/tools/getRelatedObjects.tool.js.map +1 -0
  110. package/dist/ibmi-mcp-server/tools/getTableColumns.tool.d.ts +87 -0
  111. package/dist/ibmi-mcp-server/tools/getTableColumns.tool.d.ts.map +1 -0
  112. package/dist/ibmi-mcp-server/tools/getTableColumns.tool.js +163 -0
  113. package/dist/ibmi-mcp-server/tools/getTableColumns.tool.js.map +1 -0
  114. package/dist/ibmi-mcp-server/tools/index.d.ts +175 -0
  115. package/dist/ibmi-mcp-server/tools/index.d.ts.map +1 -1
  116. package/dist/ibmi-mcp-server/tools/index.js +27 -1
  117. package/dist/ibmi-mcp-server/tools/index.js.map +1 -1
  118. package/dist/ibmi-mcp-server/tools/listSchemas.tool.d.ts +107 -0
  119. package/dist/ibmi-mcp-server/tools/listSchemas.tool.d.ts.map +1 -0
  120. package/dist/ibmi-mcp-server/tools/listSchemas.tool.js +195 -0
  121. package/dist/ibmi-mcp-server/tools/listSchemas.tool.js.map +1 -0
  122. package/dist/ibmi-mcp-server/tools/listTablesInSchema.tool.d.ts +107 -0
  123. package/dist/ibmi-mcp-server/tools/listTablesInSchema.tool.d.ts.map +1 -0
  124. package/dist/ibmi-mcp-server/tools/listTablesInSchema.tool.js +198 -0
  125. package/dist/ibmi-mcp-server/tools/listTablesInSchema.tool.js.map +1 -0
  126. package/dist/ibmi-mcp-server/tools/validateQuery.tool.d.ts +229 -0
  127. package/dist/ibmi-mcp-server/tools/validateQuery.tool.d.ts.map +1 -0
  128. package/dist/ibmi-mcp-server/tools/validateQuery.tool.js +401 -0
  129. package/dist/ibmi-mcp-server/tools/validateQuery.tool.js.map +1 -0
  130. package/dist/ibmi-mcp-server/utils/cli/argumentParser.d.ts +2 -0
  131. package/dist/ibmi-mcp-server/utils/cli/argumentParser.d.ts.map +1 -1
  132. package/dist/ibmi-mcp-server/utils/cli/argumentParser.js +21 -7
  133. package/dist/ibmi-mcp-server/utils/cli/argumentParser.js.map +1 -1
  134. package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.js +1 -1
  135. package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.js.map +1 -1
  136. package/dist/mcp-server/tools/index.d.ts.map +1 -1
  137. package/dist/mcp-server/tools/index.js +5 -3
  138. package/dist/mcp-server/tools/index.js.map +1 -1
  139. package/package.json +6 -4
@@ -0,0 +1,194 @@
1
+ /**
2
+ * @fileoverview Dynamic YAML tool execution command.
3
+ *
4
+ * `ibmi tool <name> [options]` — run any YAML-defined tool from the CLI.
5
+ *
6
+ * The command uses allowUnknownOption() to accept arbitrary tool-specific
7
+ * options, then resolves them against the YAML parameter definitions.
8
+ *
9
+ * Supports --dry-run to show the resolved SQL and parameters without executing.
10
+ *
11
+ * @module cli/commands/tool
12
+ */
13
+ import { Command } from "commander";
14
+ import { loadYamlTools, } from "../utils/yaml-loader.js";
15
+ import { registerToolOptions, optsToParams, validateRequiredParams, } from "../utils/yaml-to-commander.js";
16
+ import { getFormat, isStreaming, createCliContext, } from "../utils/command-helpers.js";
17
+ import { resolveSystem } from "../config/resolver.js";
18
+ import { connectSystem } from "../utils/connection.js";
19
+ import { renderOutput, renderNdjson, renderError, } from "../formatters/output.js";
20
+ import { ExitCode, classifyError, ErrorCode } from "../utils/exit-codes.js";
21
+ /**
22
+ * Register `ibmi tool <name>` — dynamic YAML tool execution.
23
+ */
24
+ export function registerToolCommand(program) {
25
+ program
26
+ .command("tool <name>")
27
+ .description("Run a YAML-defined tool by name")
28
+ .option("--dry-run", "Show resolved SQL and parameters without executing")
29
+ .allowUnknownOption()
30
+ .allowExcessArguments()
31
+ .action(async (name, _opts, cmd) => {
32
+ const format = getFormat(cmd);
33
+ try {
34
+ // Resolve --tools paths from global options
35
+ const globalOpts = cmd.optsWithGlobals();
36
+ const toolsOpt = globalOpts["tools"];
37
+ if (!toolsOpt) {
38
+ renderError(new Error("No tools path specified. Use --tools <path> to specify YAML tool file(s)."), format, undefined, ErrorCode.USAGE_ERROR);
39
+ process.exitCode = ExitCode.USAGE;
40
+ return;
41
+ }
42
+ const paths = toolsOpt.split(",").map((p) => p.trim());
43
+ const config = loadYamlTools(paths);
44
+ // Find the tool
45
+ const tool = config.tools[name];
46
+ if (!tool) {
47
+ const available = Object.keys(config.tools).join(", ");
48
+ renderError(new Error(`Tool '${name}' not found. Available tools: ${available || "(none)"}`), format, undefined, ErrorCode.NOT_FOUND);
49
+ process.exitCode = ExitCode.USAGE;
50
+ return;
51
+ }
52
+ // Build a sub-command with tool-specific options and re-parse
53
+ const toolParams = resolveToolParams(cmd, tool);
54
+ // Validate required parameters
55
+ const missing = validateRequiredParams(toolParams, tool.parameters);
56
+ if (missing.length > 0) {
57
+ const flags = missing.map((n) => `--${n.replace(/_/g, "-")}`).join(", ");
58
+ renderError(new Error(`Missing required parameter(s): ${flags}`), format, undefined, ErrorCode.USAGE_ERROR);
59
+ process.exitCode = ExitCode.USAGE;
60
+ return;
61
+ }
62
+ // Dry-run: show SQL and parameters
63
+ const dryRun = globalOpts["dryRun"] || _opts["dryRun"];
64
+ if (dryRun) {
65
+ await handleDryRun(name, tool, toolParams, cmd);
66
+ return;
67
+ }
68
+ // Execute the tool
69
+ await executeTool(name, tool, toolParams, cmd);
70
+ }
71
+ catch (err) {
72
+ const error = err instanceof Error ? err : new Error(String(err));
73
+ const classified = classifyError(error);
74
+ renderError(error, format, undefined, classified.errorCode);
75
+ process.exitCode = classified.exitCode;
76
+ }
77
+ });
78
+ }
79
+ /**
80
+ * Parse tool-specific options from the raw argv using a dynamic Commander sub-command.
81
+ */
82
+ function resolveToolParams(cmd, tool) {
83
+ if (tool.parameters.length === 0)
84
+ return {};
85
+ // Build a temporary command with tool-specific options
86
+ const tempCmd = new Command("temp");
87
+ tempCmd.exitOverride();
88
+ tempCmd.allowUnknownOption();
89
+ registerToolOptions(tempCmd, tool.parameters);
90
+ // Extract the raw args that were passed through by the parent command
91
+ // Commander stores unparsed args in cmd.args (after the <name> positional)
92
+ const rawArgs = cmd.args ?? [];
93
+ try {
94
+ tempCmd.parse(rawArgs, { from: "user" });
95
+ }
96
+ catch {
97
+ // Commander may throw for unrecognized options; we allow that
98
+ }
99
+ return optsToParams(tempCmd.opts(), tool.parameters);
100
+ }
101
+ /**
102
+ * Handle --dry-run: show resolved SQL and parameters.
103
+ */
104
+ async function handleDryRun(name, tool, params, cmd) {
105
+ const format = getFormat(cmd);
106
+ if (!tool.statement) {
107
+ renderError(new Error(`Tool '${name}' has no SQL statement defined.`), format, undefined, ErrorCode.USAGE_ERROR);
108
+ process.exitCode = ExitCode.USAGE;
109
+ return;
110
+ }
111
+ if (format === "json") {
112
+ renderOutput([
113
+ {
114
+ tool: name,
115
+ dry_run: true,
116
+ sql: tool.statement.trim(),
117
+ parameters: params,
118
+ },
119
+ ], format, { rowCount: 1, command: `tool:${name}` });
120
+ return;
121
+ }
122
+ // Human-readable dry-run output
123
+ const globalOpts = cmd.optsWithGlobals();
124
+ const systemName = globalOpts["system"];
125
+ const lines = [];
126
+ if (systemName) {
127
+ lines.push(`Would execute on [${systemName}]:`);
128
+ }
129
+ else {
130
+ lines.push("Would execute:");
131
+ }
132
+ lines.push("────────────────────────────────────────");
133
+ lines.push(tool.statement.trim());
134
+ if (Object.keys(params).length > 0) {
135
+ lines.push("");
136
+ lines.push(`Parameters: ${JSON.stringify(params)}`);
137
+ }
138
+ lines.push("────────────────────────────────────────");
139
+ process.stdout.write(lines.join("\n") + "\n");
140
+ }
141
+ /**
142
+ * Execute a YAML tool against the connected system.
143
+ */
144
+ async function executeTool(name, tool, params, cmd) {
145
+ const format = getFormat(cmd);
146
+ const stream = isStreaming(cmd);
147
+ const globalOpts = cmd.optsWithGlobals();
148
+ if (!tool.statement) {
149
+ renderError(new Error(`Tool '${name}' has no SQL statement defined.`), format, undefined, ErrorCode.USAGE_ERROR);
150
+ process.exitCode = ExitCode.USAGE;
151
+ return;
152
+ }
153
+ // Resolve system and connect
154
+ const resolved = resolveSystem(globalOpts["system"]);
155
+ const cleanup = await connectSystem(resolved);
156
+ try {
157
+ const ctx = createCliContext(name);
158
+ const startTime = Date.now();
159
+ // Dynamic import to avoid loading server infrastructure until execution time
160
+ const { ParameterProcessor } = await import("../../ibmi-mcp-server/utils/sql/parameterProcessor.js");
161
+ const { IBMiConnectionPool } = await import("../../ibmi-mcp-server/services/connectionPool.js");
162
+ // Process SQL parameters (BindingValue from mapepire-js)
163
+ let processedSql;
164
+ let bindingParams = [];
165
+ if (tool.parameters.length > 0 && Object.keys(params).length > 0) {
166
+ // Convert YamlToolParameter[] to the SqlToolParameter shape expected by ParameterProcessor
167
+ const result = await ParameterProcessor.process(tool.statement, params, tool.parameters, { context: ctx });
168
+ processedSql = result.sql;
169
+ bindingParams = result.parameters;
170
+ }
171
+ else {
172
+ processedSql = tool.statement;
173
+ }
174
+ // Execute the query
175
+ const result = await IBMiConnectionPool.executeQuery(processedSql, bindingParams, ctx);
176
+ const elapsedMs = Date.now() - startTime;
177
+ const data = (result.data ?? []);
178
+ // NDJSON streaming: one JSON object per line
179
+ if (stream && format === "json") {
180
+ renderNdjson(data);
181
+ return;
182
+ }
183
+ renderOutput(data, format, {
184
+ rowCount: data.length,
185
+ elapsedMs,
186
+ system: resolved,
187
+ command: `tool:${name}`,
188
+ });
189
+ }
190
+ finally {
191
+ await cleanup();
192
+ }
193
+ }
194
+ //# sourceMappingURL=tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../src/cli/commands/tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @fileoverview Discovery commands for YAML-defined tools.
3
+ *
4
+ * - `ibmi tools` — List all available tools
5
+ * - `ibmi tools show <name>` — Show detailed info for a single tool
6
+ * - `ibmi toolsets` — List all toolsets
7
+ *
8
+ * These are read-only commands that parse YAML files without connecting to a system.
9
+ * @module cli/commands/tools-list
10
+ */
11
+ import { Command } from "commander";
12
+ /**
13
+ * Register `ibmi tools` — list available YAML tools.
14
+ */
15
+ export declare function registerToolsCommand(program: Command): void;
16
+ /**
17
+ * Register `ibmi toolsets` — list available toolsets.
18
+ */
19
+ export declare function registerToolsetsCommand(program: Command): void;
20
+ //# sourceMappingURL=tools-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools-list.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/tools-list.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0CpC;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+I3D;AAoBD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoC9D"}
@@ -0,0 +1,209 @@
1
+ /**
2
+ * @fileoverview Discovery commands for YAML-defined tools.
3
+ *
4
+ * - `ibmi tools` — List all available tools
5
+ * - `ibmi tools show <name>` — Show detailed info for a single tool
6
+ * - `ibmi toolsets` — List all toolsets
7
+ *
8
+ * These are read-only commands that parse YAML files without connecting to a system.
9
+ * @module cli/commands/tools-list
10
+ */
11
+ import { loadYamlTools, buildToolsetMap, } from "../utils/yaml-loader.js";
12
+ import { getFormat } from "../utils/command-helpers.js";
13
+ import { renderOutput, renderError, renderMessage, } from "../formatters/output.js";
14
+ import { ExitCode } from "../utils/exit-codes.js";
15
+ /**
16
+ * Resolve the --tools paths from command options.
17
+ * Falls back to the default tools/ directory relative to the package root.
18
+ */
19
+ function resolveToolsPaths(cmd) {
20
+ const opts = cmd.optsWithGlobals();
21
+ const toolsOpt = opts["tools"];
22
+ if (toolsOpt) {
23
+ return toolsOpt.split(",").map((p) => p.trim());
24
+ }
25
+ return [];
26
+ }
27
+ /**
28
+ * Load YAML tools config from CLI options, with error handling.
29
+ */
30
+ function loadToolsConfig(cmd) {
31
+ const paths = resolveToolsPaths(cmd);
32
+ if (paths.length === 0) {
33
+ process.stderr.write("No tools path specified. Use --tools <path> to specify YAML tool file(s) or directory.\n");
34
+ return null;
35
+ }
36
+ return loadYamlTools(paths);
37
+ }
38
+ /**
39
+ * Register `ibmi tools` — list available YAML tools.
40
+ */
41
+ export function registerToolsCommand(program) {
42
+ const toolsCmd = program
43
+ .command("tools")
44
+ .description("List available YAML-defined tools")
45
+ .option("--toolset <name>", "Filter by toolset name");
46
+ // ibmi tools (default: list all)
47
+ toolsCmd.action((opts, cmd) => {
48
+ const format = getFormat(cmd);
49
+ try {
50
+ const config = loadToolsConfig(cmd);
51
+ if (!config) {
52
+ process.exitCode = ExitCode.USAGE;
53
+ return;
54
+ }
55
+ const toolsetMap = buildToolsetMap(config.toolsets);
56
+ const toolsetFilter = opts["toolset"];
57
+ const rows = [];
58
+ for (const [name, tool] of Object.entries(config.tools)) {
59
+ if (tool.enabled === false)
60
+ continue;
61
+ const toolsets = toolsetMap.get(name) ?? [];
62
+ // Filter by toolset if specified
63
+ if (toolsetFilter && !toolsets.includes(toolsetFilter))
64
+ continue;
65
+ rows.push({
66
+ TOOL: name,
67
+ TOOLSET: toolsets.join(", ") || "-",
68
+ DESCRIPTION: tool.description,
69
+ PARAMS: tool.parameters.length,
70
+ READ_ONLY: tool.security?.readOnly ?? tool.annotations?.["readOnlyHint"] ?? true,
71
+ });
72
+ }
73
+ if (rows.length === 0) {
74
+ renderMessage(toolsetFilter
75
+ ? `No tools found in toolset '${toolsetFilter}'.`
76
+ : "No tools found.", format);
77
+ return;
78
+ }
79
+ renderOutput(rows, format, { rowCount: rows.length });
80
+ }
81
+ catch (err) {
82
+ renderError(err instanceof Error ? err : new Error(String(err)), format);
83
+ process.exitCode = ExitCode.GENERAL;
84
+ }
85
+ });
86
+ // ibmi tools show <name>
87
+ toolsCmd
88
+ .command("show <name>")
89
+ .description("Show detailed information for a tool")
90
+ .action((name, _opts, cmd) => {
91
+ const format = getFormat(cmd);
92
+ try {
93
+ const config = loadToolsConfig(cmd);
94
+ if (!config) {
95
+ process.exitCode = ExitCode.USAGE;
96
+ return;
97
+ }
98
+ const tool = config.tools[name];
99
+ if (!tool) {
100
+ renderError(new Error(`Tool '${name}' not found. Use 'ibmi tools --tools <path>' to list available tools.`), format);
101
+ process.exitCode = ExitCode.USAGE;
102
+ return;
103
+ }
104
+ const toolsetMap = buildToolsetMap(config.toolsets);
105
+ const toolsets = toolsetMap.get(name) ?? [];
106
+ if (format === "json") {
107
+ // JSON: output structured data
108
+ renderOutput([
109
+ {
110
+ name,
111
+ description: tool.description,
112
+ source: tool.source,
113
+ toolsets,
114
+ readOnly: tool.security?.readOnly ?? true,
115
+ parameters: tool.parameters,
116
+ sql: tool.statement ?? null,
117
+ },
118
+ ], format, { rowCount: 1 });
119
+ }
120
+ else {
121
+ // Human-readable detail view
122
+ const lines = [];
123
+ lines.push(`Tool: ${name}`);
124
+ lines.push(`Description: ${tool.description}`);
125
+ lines.push(`Source: ${tool.source}`);
126
+ if (toolsets.length > 0) {
127
+ lines.push(`Toolsets: ${toolsets.join(", ")}`);
128
+ }
129
+ lines.push(`Read-only: ${tool.security?.readOnly ?? tool.annotations?.["readOnlyHint"] ?? true}`);
130
+ lines.push("");
131
+ // Parameters
132
+ if (tool.parameters.length > 0) {
133
+ lines.push("Parameters:");
134
+ for (const p of tool.parameters) {
135
+ lines.push(formatParameter(p));
136
+ }
137
+ }
138
+ else {
139
+ lines.push("Parameters: (none)");
140
+ }
141
+ lines.push("");
142
+ // SQL
143
+ if (tool.statement) {
144
+ lines.push("SQL:");
145
+ lines.push(tool.statement.trim());
146
+ }
147
+ process.stdout.write(lines.join("\n") + "\n");
148
+ }
149
+ }
150
+ catch (err) {
151
+ renderError(err instanceof Error ? err : new Error(String(err)), format);
152
+ process.exitCode = ExitCode.GENERAL;
153
+ }
154
+ });
155
+ }
156
+ /**
157
+ * Format a parameter for human-readable display.
158
+ */
159
+ function formatParameter(p) {
160
+ const parts = [];
161
+ parts.push(` --${p.name.replace(/_/g, "-")}`);
162
+ parts.push(`(${p.type})`);
163
+ if (p.required)
164
+ parts.push("[required]");
165
+ if (p.default !== undefined)
166
+ parts.push(`default: ${JSON.stringify(p.default)}`);
167
+ if (p.enum && p.enum.length > 0) {
168
+ parts.push(`choices: ${p.enum.join(", ")}`);
169
+ }
170
+ if (p.description)
171
+ parts.push(`— ${p.description}`);
172
+ return parts.join(" ");
173
+ }
174
+ /**
175
+ * Register `ibmi toolsets` — list available toolsets.
176
+ */
177
+ export function registerToolsetsCommand(program) {
178
+ program
179
+ .command("toolsets")
180
+ .description("List available toolsets")
181
+ .action((_opts, cmd) => {
182
+ const format = getFormat(cmd);
183
+ try {
184
+ const config = loadToolsConfig(cmd);
185
+ if (!config) {
186
+ process.exitCode = ExitCode.USAGE;
187
+ return;
188
+ }
189
+ const rows = [];
190
+ for (const [name, ts] of Object.entries(config.toolsets)) {
191
+ rows.push({
192
+ TOOLSET: name,
193
+ TOOLS: ts.tools.length,
194
+ DESCRIPTION: ts.description ?? ts.title ?? "-",
195
+ });
196
+ }
197
+ if (rows.length === 0) {
198
+ renderMessage("No toolsets found.", format);
199
+ return;
200
+ }
201
+ renderOutput(rows, format, { rowCount: rows.length });
202
+ }
203
+ catch (err) {
204
+ renderError(err instanceof Error ? err : new Error(String(err)), format);
205
+ process.exitCode = ExitCode.GENERAL;
206
+ }
207
+ });
208
+ }
209
+ //# sourceMappingURL=tools-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools-list.js","sourceRoot":"","sources":["../../../src/cli/commands/tools-list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @fileoverview `ibmi validate "<sql>"` command — validate SQL syntax and object references.
3
+ * @module cli/commands/validate
4
+ */
5
+ import { Command } from "commander";
6
+ export declare function registerValidateCommand(program: Command): void;
7
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwF9D"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * @fileoverview `ibmi validate "<sql>"` command — validate SQL syntax and object references.
3
+ * @module cli/commands/validate
4
+ */
5
+ import { withConnection } from "../utils/command-helpers.js";
6
+ export function registerValidateCommand(program) {
7
+ program
8
+ .command("validate <sql>")
9
+ .description("Validate SQL syntax and verify referenced objects exist")
10
+ .action(async (sql, _opts, cmd) => {
11
+ await withConnection(cmd, "validate_query", async (_resolved, ctx) => {
12
+ const { validateQueryLogic } = await import("../../ibmi-mcp-server/tools/validateQuery.tool.js");
13
+ const result = await validateQueryLogic({ sql_statement: sql }, ctx, {});
14
+ if (!result.success) {
15
+ throw new Error(result.error?.message ?? "Failed to validate query");
16
+ }
17
+ // Build a summary view for CLI output
18
+ const summary = [];
19
+ // Parse results summary
20
+ if (result.data && result.data.length > 0) {
21
+ const stmtTypes = [
22
+ ...new Set(result.data
23
+ .map((r) => r.SQL_STATEMENT_TYPE)
24
+ .filter(Boolean)),
25
+ ];
26
+ summary.push({
27
+ CHECK: "Syntax",
28
+ STATUS: "PASS",
29
+ DETAILS: stmtTypes.length > 0
30
+ ? `Statement type: ${stmtTypes.join(", ")}`
31
+ : "Parsed successfully",
32
+ });
33
+ }
34
+ else {
35
+ summary.push({
36
+ CHECK: "Syntax",
37
+ STATUS: "FAIL",
38
+ DETAILS: "Statement could not be parsed (syntax error)",
39
+ });
40
+ }
41
+ // Object validation summary
42
+ const ov = result.objectValidation;
43
+ if (ov) {
44
+ summary.push({
45
+ CHECK: "Tables",
46
+ STATUS: ov.tables.invalid.length === 0 ? "PASS" : "FAIL",
47
+ DETAILS: ov.tables.invalid.length === 0
48
+ ? `${ov.tables.valid.length} table(s) verified`
49
+ : `Not found: ${ov.tables.invalid.join(", ")}`,
50
+ });
51
+ if (ov.columns.valid.length > 0 || ov.columns.invalid.length > 0) {
52
+ summary.push({
53
+ CHECK: "Columns",
54
+ STATUS: ov.columns.invalid.length === 0 ? "PASS" : "WARN",
55
+ DETAILS: ov.columns.invalid.length === 0
56
+ ? `${ov.columns.valid.length} column(s) verified`
57
+ : `Not verified: ${ov.columns.invalid.join(", ")}`,
58
+ });
59
+ }
60
+ if (ov.routines.valid.length > 0 || ov.routines.invalid.length > 0) {
61
+ summary.push({
62
+ CHECK: "Routines",
63
+ STATUS: ov.routines.invalid.length === 0 ? "PASS" : "WARN",
64
+ DETAILS: ov.routines.invalid.length === 0
65
+ ? `${ov.routines.valid.length} routine(s) verified`
66
+ : `Not verified: ${ov.routines.invalid.join(", ")}`,
67
+ });
68
+ }
69
+ }
70
+ return {
71
+ data: summary,
72
+ meta: { rowCount: summary.length },
73
+ };
74
+ });
75
+ });
76
+ }
77
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,OAAO;SACJ,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,yDAAyD,CAAC;SACtE,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,KAAK,EAAE,GAAY,EAAE,EAAE;QACjD,MAAM,cAAc,CAAC,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE;YACnE,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CACzC,mDAAmD,CACpD,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,kBAAkB,CACrC,EAAE,aAAa,EAAE,GAAG,EAAE,EACtB,GAAG,EACH,EAAgB,CACjB,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,0BAA0B,CAAC,CAAC;YACvE,CAAC;YAED,sCAAsC;YACtC,MAAM,OAAO,GAA8B,EAAE,CAAC;YAE9C,wBAAwB;YACxB,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1C,MAAM,SAAS,GAAG;oBAChB,GAAG,IAAI,GAAG,CACR,MAAM,CAAC,IAAI;yBACR,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAwC,CAAC;yBACtD,MAAM,CAAC,OAAO,CAAC,CACnB;iBACF,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC;oBACX,KAAK,EAAE,QAAQ;oBACf,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC;wBAC3B,CAAC,CAAC,mBAAmB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;wBAC3C,CAAC,CAAC,qBAAqB;iBAC1B,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC;oBACX,KAAK,EAAE,QAAQ;oBACf,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,8CAA8C;iBACxD,CAAC,CAAC;YACL,CAAC;YAED,4BAA4B;YAC5B,MAAM,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC;YACnC,IAAI,EAAE,EAAE,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC;oBACX,KAAK,EAAE,QAAQ;oBACf,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;oBACxD,OAAO,EACL,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;wBAC5B,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,oBAAoB;wBAC/C,CAAC,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBACnD,CAAC,CAAC;gBAEH,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACjE,OAAO,CAAC,IAAI,CAAC;wBACX,KAAK,EAAE,SAAS;wBAChB,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;wBACzD,OAAO,EACL,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;4BAC7B,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,qBAAqB;4BACjD,CAAC,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBACvD,CAAC,CAAC;gBACL,CAAC;gBAED,IAAI,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACnE,OAAO,CAAC,IAAI,CAAC;wBACX,KAAK,EAAE,UAAU;wBACjB,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;wBAC1D,OAAO,EACL,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;4BAC9B,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,sBAAsB;4BACnD,CAAC,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBACxD,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE;aACnC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @fileoverview Credential management for the IBM i CLI.
3
+ * Handles environment variable expansion in config values and interactive password prompting.
4
+ * @module cli/config/credentials
5
+ */
6
+ /**
7
+ * Expand ${ENV_VAR} references in a string value.
8
+ * Returns the original string if no env var pattern is found or the var is not set.
9
+ */
10
+ export declare function expandEnvVars(value: string): string;
11
+ /**
12
+ * Prompt the user for a password interactively (hidden input).
13
+ * Returns the entered password string.
14
+ */
15
+ export declare function promptPassword(prompt: string): Promise<string>;
16
+ /**
17
+ * Resolve the password for a system config.
18
+ * Priority: config password (with env expansion) → interactive prompt.
19
+ */
20
+ export declare function resolvePassword(systemName: string, configPassword: string | undefined, user: string, host: string): Promise<string>;
21
+ //# sourceMappingURL=credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../../src/cli/config/credentials.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQnD;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkDpE;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,CAkBjB"}