@performance-agent/mcp-server 1.0.1 → 1.0.6

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.

Potentially problematic release.


This version of @performance-agent/mcp-server might be problematic. Click here for more details.

Files changed (45) hide show
  1. package/README.md +400 -25
  2. package/dist/index.d.ts +14 -4
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +783 -47
  5. package/dist/index.js.map +1 -1
  6. package/dist/prompts/jmx_prompt.txt +262 -0
  7. package/dist/prompts/prompts/jmx_prompt.txt +262 -0
  8. package/dist/tools/azure-infra/config-parser.d.ts +14 -0
  9. package/dist/tools/azure-infra/config-parser.d.ts.map +1 -0
  10. package/dist/tools/azure-infra/config-parser.js +361 -0
  11. package/dist/tools/azure-infra/config-parser.js.map +1 -0
  12. package/dist/tools/azure-infra/index.d.ts +52 -0
  13. package/dist/tools/azure-infra/index.d.ts.map +1 -0
  14. package/dist/tools/azure-infra/index.js +448 -0
  15. package/dist/tools/azure-infra/index.js.map +1 -0
  16. package/dist/tools/azure-infra/terraform-generator.d.ts +19 -0
  17. package/dist/tools/azure-infra/terraform-generator.d.ts.map +1 -0
  18. package/dist/tools/azure-infra/terraform-generator.js +458 -0
  19. package/dist/tools/azure-infra/terraform-generator.js.map +1 -0
  20. package/dist/tools/azure-infra/types.d.ts +123 -0
  21. package/dist/tools/azure-infra/types.d.ts.map +1 -0
  22. package/dist/tools/azure-infra/types.js +95 -0
  23. package/dist/tools/azure-infra/types.js.map +1 -0
  24. package/dist/tools/cloud-executor/index.d.ts +78 -0
  25. package/dist/tools/cloud-executor/index.d.ts.map +1 -0
  26. package/dist/tools/cloud-executor/index.js +528 -0
  27. package/dist/tools/cloud-executor/index.js.map +1 -0
  28. package/dist/tools/cloud-executor/result-analyzer.d.ts +65 -0
  29. package/dist/tools/cloud-executor/result-analyzer.d.ts.map +1 -0
  30. package/dist/tools/cloud-executor/result-analyzer.js +367 -0
  31. package/dist/tools/cloud-executor/result-analyzer.js.map +1 -0
  32. package/dist/tools/cloud-executor/vm-metrics.d.ts +87 -0
  33. package/dist/tools/cloud-executor/vm-metrics.d.ts.map +1 -0
  34. package/dist/tools/cloud-executor/vm-metrics.js +506 -0
  35. package/dist/tools/cloud-executor/vm-metrics.js.map +1 -0
  36. package/dist/tools/jmx-generator/index.d.ts +20 -0
  37. package/dist/tools/jmx-generator/index.d.ts.map +1 -0
  38. package/dist/tools/jmx-generator/index.js +115 -0
  39. package/dist/tools/jmx-generator/index.js.map +1 -0
  40. package/dist/tools/jmx-generator/sanitizer.d.ts +19 -0
  41. package/dist/tools/jmx-generator/sanitizer.d.ts.map +1 -0
  42. package/dist/tools/jmx-generator/sanitizer.js +166 -0
  43. package/dist/tools/jmx-generator/sanitizer.js.map +1 -0
  44. package/package.json +5 -2
  45. package/scripts/copy-prompts.js +46 -0
@@ -0,0 +1,448 @@
1
+ /**
2
+ * Azure Infrastructure Provisioning Tool
3
+ * Main entry point for VM provisioning via MCP
4
+ */
5
+ import { execSync, spawn } from 'child_process';
6
+ import { VM_SIZE_PRESETS, } from './types.js';
7
+ import { parseVMDescription, resolveVMConfig } from './config-parser.js';
8
+ import { saveTerraformConfig, } from './terraform-generator.js';
9
+ /**
10
+ * Execute command and capture output with progress tracking
11
+ */
12
+ function executeCommand(command, args, cwd) {
13
+ return new Promise((resolve) => {
14
+ const proc = spawn(command, args, {
15
+ cwd,
16
+ shell: true,
17
+ env: { ...process.env, TF_IN_AUTOMATION: 'true' },
18
+ });
19
+ let stdout = '';
20
+ let stderr = '';
21
+ proc.stdout.on('data', (data) => {
22
+ const text = data.toString();
23
+ stdout += text;
24
+ // Log progress to stderr for MCP visibility
25
+ console.error(`[terraform] ${text.trim()}`);
26
+ });
27
+ proc.stderr.on('data', (data) => {
28
+ const text = data.toString();
29
+ stderr += text;
30
+ console.error(`[terraform] ${text.trim()}`);
31
+ });
32
+ proc.on('close', (code) => {
33
+ if (code === 0) {
34
+ resolve({ success: true, output: stdout });
35
+ }
36
+ else {
37
+ resolve({ success: false, output: stdout, error: stderr || stdout });
38
+ }
39
+ });
40
+ proc.on('error', (err) => {
41
+ resolve({ success: false, output: '', error: err.message });
42
+ });
43
+ });
44
+ }
45
+ /**
46
+ * List all Azure subscriptions the user has access to
47
+ */
48
+ export async function listAzureSubscriptions() {
49
+ try {
50
+ // Check if logged in
51
+ try {
52
+ execSync('az account show', { stdio: 'pipe' });
53
+ }
54
+ catch {
55
+ return {
56
+ success: false,
57
+ error: 'Not logged into Azure CLI. Please run: az login',
58
+ };
59
+ }
60
+ // Get all subscriptions
61
+ const subsJson = execSync('az account list --output json', {
62
+ encoding: 'utf-8',
63
+ stdio: ['pipe', 'pipe', 'pipe'],
64
+ });
65
+ const subscriptions = JSON.parse(subsJson).map((sub) => ({
66
+ id: sub.id,
67
+ name: sub.name,
68
+ state: sub.state,
69
+ isDefault: sub.isDefault,
70
+ tenantId: sub.tenantId,
71
+ }));
72
+ const currentSubscription = subscriptions.find((s) => s.isDefault);
73
+ return {
74
+ success: true,
75
+ subscriptions,
76
+ currentSubscription,
77
+ };
78
+ }
79
+ catch (error) {
80
+ return {
81
+ success: false,
82
+ error: `Failed to list subscriptions: ${error.message}`,
83
+ };
84
+ }
85
+ }
86
+ /**
87
+ * Set the active Azure subscription
88
+ */
89
+ export async function setAzureSubscription(subscriptionId) {
90
+ try {
91
+ execSync(`az account set --subscription "${subscriptionId}"`, { stdio: 'pipe' });
92
+ return {
93
+ success: true,
94
+ message: `Switched to subscription: ${subscriptionId}`,
95
+ };
96
+ }
97
+ catch (error) {
98
+ return {
99
+ success: false,
100
+ error: `Failed to set subscription: ${error.message}`,
101
+ };
102
+ }
103
+ }
104
+ /**
105
+ * List resource groups in the current subscription
106
+ */
107
+ export async function listResourceGroups(subscriptionId) {
108
+ try {
109
+ let cmd = 'az group list --output json';
110
+ if (subscriptionId) {
111
+ cmd += ` --subscription "${subscriptionId}"`;
112
+ }
113
+ const rgsJson = execSync(cmd, {
114
+ encoding: 'utf-8',
115
+ stdio: ['pipe', 'pipe', 'pipe'],
116
+ });
117
+ const resourceGroups = JSON.parse(rgsJson).map((rg) => ({
118
+ name: rg.name,
119
+ location: rg.location,
120
+ provisioningState: rg.properties?.provisioningState || 'Unknown',
121
+ tags: rg.tags || {},
122
+ }));
123
+ return {
124
+ success: true,
125
+ resourceGroups,
126
+ };
127
+ }
128
+ catch (error) {
129
+ return {
130
+ success: false,
131
+ error: `Failed to list resource groups: ${error.message}`,
132
+ };
133
+ }
134
+ }
135
+ /**
136
+ * Main function to provision Azure VM
137
+ */
138
+ export async function provisionAzureVM(args) {
139
+ // Parse configuration from description or use provided config
140
+ let configInput;
141
+ if (args.description) {
142
+ configInput = parseVMDescription(args.description);
143
+ // Merge with any explicit config provided
144
+ if (args.config) {
145
+ configInput = { ...configInput, ...args.config };
146
+ }
147
+ }
148
+ else if (args.config) {
149
+ configInput = args.config;
150
+ }
151
+ else {
152
+ throw new Error('Either description or config must be provided');
153
+ }
154
+ // Resolve full configuration with defaults
155
+ const vmConfig = resolveVMConfig(configInput);
156
+ // Determine output path
157
+ const outputPath = args.outputPath || process.cwd();
158
+ // Handle based on provisioning method
159
+ const method = args.method || 'dry-run';
160
+ switch (method) {
161
+ case 'dry-run':
162
+ return handleDryRun(vmConfig, outputPath, args.generateTerraform ?? true);
163
+ case 'terraform':
164
+ return handleTerraformProvisioning(vmConfig, outputPath);
165
+ case 'azure-cli':
166
+ return handleAzureCLIProvisioning(vmConfig, outputPath);
167
+ default:
168
+ throw new Error(`Unknown provisioning method: ${method}`);
169
+ }
170
+ }
171
+ /**
172
+ * Dry run - generates configuration without provisioning
173
+ */
174
+ async function handleDryRun(config, outputPath, generateTerraform) {
175
+ const result = {
176
+ success: true,
177
+ vmName: config.name,
178
+ resourceGroup: config.resourceGroup,
179
+ region: config.region,
180
+ vmSize: config.vmSize,
181
+ provisioningState: 'DryRun',
182
+ azurePortalUrl: `https://portal.azure.com/#create/Microsoft.VirtualMachine`,
183
+ estimatedCost: estimateVMCost(config.vmSize),
184
+ message: 'Dry run completed. Configuration generated but not applied.',
185
+ };
186
+ if (generateTerraform) {
187
+ const terraformDir = await saveTerraformConfig(config, outputPath);
188
+ result.terraformGenerated = true;
189
+ result.terraformPath = terraformDir;
190
+ result.message = `Dry run completed. Terraform files generated at: ${terraformDir}`;
191
+ }
192
+ return result;
193
+ }
194
+ /**
195
+ * Provision VM using Terraform with progress tracking
196
+ */
197
+ async function handleTerraformProvisioning(config, outputPath) {
198
+ const steps = [];
199
+ // Step 1: Check if Terraform is installed
200
+ console.error('🔍 Step 1/5: Checking prerequisites...');
201
+ steps.push('✅ Checking prerequisites');
202
+ try {
203
+ execSync('terraform version', { stdio: 'pipe' });
204
+ console.error(' ✓ Terraform is installed');
205
+ }
206
+ catch {
207
+ return {
208
+ success: false,
209
+ vmName: config.name,
210
+ resourceGroup: config.resourceGroup,
211
+ region: config.region,
212
+ vmSize: config.vmSize,
213
+ provisioningState: 'Failed',
214
+ message: '❌ Terraform is not installed. Please install it from https://terraform.io/downloads',
215
+ steps,
216
+ };
217
+ }
218
+ // Check if Azure CLI is logged in
219
+ try {
220
+ const accountInfo = execSync('az account show --output json', { stdio: 'pipe', encoding: 'utf-8' });
221
+ const account = JSON.parse(accountInfo);
222
+ console.error(` ✓ Azure CLI logged in (Subscription: ${account.name})`);
223
+ }
224
+ catch {
225
+ return {
226
+ success: false,
227
+ vmName: config.name,
228
+ resourceGroup: config.resourceGroup,
229
+ region: config.region,
230
+ vmSize: config.vmSize,
231
+ provisioningState: 'Failed',
232
+ message: '❌ Azure CLI is not logged in. Please run: az login',
233
+ steps,
234
+ };
235
+ }
236
+ // Step 2: Generate and save Terraform configuration
237
+ console.error('📁 Step 2/5: Generating Terraform configuration...');
238
+ steps.push('✅ Generating Terraform configuration');
239
+ const terraformDir = await saveTerraformConfig(config, outputPath);
240
+ console.error(` ✓ Configuration saved to: ${terraformDir}`);
241
+ // Step 3: Initialize Terraform
242
+ console.error('🔧 Step 3/5: Initializing Terraform...');
243
+ steps.push('⏳ Initializing Terraform');
244
+ const initResult = await executeCommand('terraform', ['init', '-no-color'], terraformDir);
245
+ if (!initResult.success) {
246
+ steps[steps.length - 1] = '❌ Terraform init failed';
247
+ return {
248
+ success: false,
249
+ vmName: config.name,
250
+ resourceGroup: config.resourceGroup,
251
+ region: config.region,
252
+ vmSize: config.vmSize,
253
+ provisioningState: 'Failed',
254
+ terraformGenerated: true,
255
+ terraformPath: terraformDir,
256
+ message: `❌ Terraform init failed:\n${initResult.error}`,
257
+ steps,
258
+ };
259
+ }
260
+ steps[steps.length - 1] = '✅ Terraform initialized';
261
+ console.error(' ✓ Terraform initialized successfully');
262
+ // Step 4: Apply Terraform configuration
263
+ console.error('🚀 Step 4/5: Provisioning Azure VM (this may take 2-5 minutes)...');
264
+ steps.push('⏳ Provisioning Azure VM');
265
+ const applyResult = await executeCommand('terraform', ['apply', '-auto-approve', '-no-color'], terraformDir);
266
+ if (!applyResult.success) {
267
+ steps[steps.length - 1] = '❌ VM provisioning failed';
268
+ // Parse common errors for user-friendly messages
269
+ let errorMessage = applyResult.error || applyResult.output;
270
+ let suggestion = '';
271
+ if (errorMessage.includes('AuthorizationFailed')) {
272
+ suggestion = '\n💡 Suggestion: Check your Azure subscription permissions.';
273
+ }
274
+ else if (errorMessage.includes('QuotaExceeded')) {
275
+ suggestion = '\n💡 Suggestion: You have exceeded your VM quota. Try a different region or VM size.';
276
+ }
277
+ else if (errorMessage.includes('InvalidResourceName')) {
278
+ suggestion = '\n💡 Suggestion: The VM name contains invalid characters. Use only alphanumeric and hyphens.';
279
+ }
280
+ return {
281
+ success: false,
282
+ vmName: config.name,
283
+ resourceGroup: config.resourceGroup,
284
+ region: config.region,
285
+ vmSize: config.vmSize,
286
+ provisioningState: 'Failed',
287
+ terraformGenerated: true,
288
+ terraformPath: terraformDir,
289
+ message: `❌ VM provisioning failed:\n${errorMessage}${suggestion}`,
290
+ steps,
291
+ };
292
+ }
293
+ steps[steps.length - 1] = '✅ Azure VM provisioned';
294
+ console.error(' ✓ VM provisioned successfully');
295
+ // Step 5: Get outputs
296
+ console.error('📊 Step 5/5: Retrieving VM details...');
297
+ steps.push('⏳ Retrieving VM details');
298
+ let publicIP = '';
299
+ let sshCommand = '';
300
+ let portalUrl = '';
301
+ try {
302
+ const outputResult = await executeCommand('terraform', ['output', '-json'], terraformDir);
303
+ if (outputResult.success) {
304
+ const outputs = JSON.parse(outputResult.output);
305
+ publicIP = outputs.public_ip_address?.value || '';
306
+ sshCommand = outputs.ssh_command?.value || '';
307
+ portalUrl = outputs.azure_portal_url?.value || '';
308
+ }
309
+ }
310
+ catch (e) {
311
+ console.error(' ⚠ Could not parse Terraform outputs, continuing...');
312
+ }
313
+ steps[steps.length - 1] = '✅ VM details retrieved';
314
+ console.error(' ✓ VM details retrieved');
315
+ return {
316
+ success: true,
317
+ vmName: config.name,
318
+ resourceGroup: config.resourceGroup,
319
+ region: config.region,
320
+ publicIP,
321
+ vmSize: config.vmSize,
322
+ provisioningState: 'Succeeded',
323
+ sshCommand,
324
+ azurePortalUrl: portalUrl || `https://portal.azure.com/#resource/subscriptions//resourceGroups/${config.resourceGroup}/providers/Microsoft.Compute/virtualMachines/${config.name}`,
325
+ terraformGenerated: true,
326
+ terraformPath: terraformDir,
327
+ estimatedCost: estimateVMCost(config.vmSize),
328
+ message: `🎉 VM ${config.name} provisioned successfully!`,
329
+ steps,
330
+ };
331
+ }
332
+ /**
333
+ * Provision VM using Azure CLI
334
+ */
335
+ async function handleAzureCLIProvisioning(config, outputPath) {
336
+ // Check if Azure CLI is installed and logged in
337
+ try {
338
+ execSync('az account show', { stdio: 'pipe' });
339
+ }
340
+ catch {
341
+ throw new Error('Azure CLI is not logged in. Please run: az login');
342
+ }
343
+ const isWindows = config.imageReference.publisher === 'MicrosoftWindowsServer';
344
+ const image = `${config.imageReference.publisher}:${config.imageReference.offer}:${config.imageReference.sku}:${config.imageReference.version}`;
345
+ try {
346
+ // Create resource group
347
+ console.error(`Creating resource group ${config.resourceGroup}...`);
348
+ execSync(`az group create --name ${config.resourceGroup} --location ${config.region}`, { stdio: 'inherit' });
349
+ // Create VM
350
+ console.error(`Creating VM ${config.name}...`);
351
+ const vmCreateCmd = [
352
+ 'az vm create',
353
+ `--resource-group ${config.resourceGroup}`,
354
+ `--name ${config.name}`,
355
+ `--image "${image}"`,
356
+ `--size ${config.vmSize}`,
357
+ `--admin-username ${config.adminUsername}`,
358
+ isWindows ? '' : '--generate-ssh-keys',
359
+ `--os-disk-size-gb ${config.osDisk.sizeGB}`,
360
+ `--storage-sku ${config.osDisk.storageAccountType}`,
361
+ config.networkConfig.publicIP ? '' : '--public-ip-address ""',
362
+ config.priority === 'Spot' ? '--priority Spot --eviction-policy Deallocate --max-price -1' : '',
363
+ '--output json',
364
+ ]
365
+ .filter(Boolean)
366
+ .join(' ');
367
+ const vmResult = execSync(vmCreateCmd, { encoding: 'utf-8' });
368
+ const vmInfo = JSON.parse(vmResult);
369
+ // Configure NSG rules
370
+ console.error('Configuring network security rules...');
371
+ for (let i = 0; i < config.networkConfig.openPorts.length; i++) {
372
+ const port = config.networkConfig.openPorts[i];
373
+ execSync(`az vm open-port --resource-group ${config.resourceGroup} --name ${config.name} --port ${port} --priority ${100 + i * 10}`, { stdio: 'inherit' });
374
+ }
375
+ return {
376
+ success: true,
377
+ vmName: config.name,
378
+ resourceGroup: config.resourceGroup,
379
+ region: config.region,
380
+ publicIP: vmInfo.publicIpAddress,
381
+ privateIP: vmInfo.privateIpAddress,
382
+ vmSize: config.vmSize,
383
+ provisioningState: 'Succeeded',
384
+ sshCommand: vmInfo.publicIpAddress
385
+ ? `ssh ${config.adminUsername}@${vmInfo.publicIpAddress}`
386
+ : undefined,
387
+ azurePortalUrl: `https://portal.azure.com/#@/resource${vmInfo.id}`,
388
+ estimatedCost: estimateVMCost(config.vmSize),
389
+ message: `VM ${config.name} provisioned successfully using Azure CLI!`,
390
+ };
391
+ }
392
+ catch (error) {
393
+ throw new Error(`Azure CLI provisioning failed: ${error.message}`);
394
+ }
395
+ }
396
+ /**
397
+ * Estimate VM cost based on size
398
+ */
399
+ function estimateVMCost(vmSize) {
400
+ // Approximate pricing (actual prices vary by region and may change)
401
+ const pricing = {
402
+ 'Standard_B1ms': 0.021,
403
+ 'Standard_B2s': 0.042,
404
+ 'Standard_D2s_v3': 0.096,
405
+ 'Standard_D4s_v3': 0.192,
406
+ 'Standard_D8s_v3': 0.384,
407
+ 'Standard_E4s_v3': 0.252,
408
+ 'Standard_F4s_v2': 0.169,
409
+ 'Standard_NC6s_v3': 3.06,
410
+ };
411
+ const hourlyRate = pricing[vmSize] || 0.10; // Default estimate
412
+ return {
413
+ hourly: hourlyRate,
414
+ monthly: Math.round(hourlyRate * 730 * 100) / 100, // ~730 hours per month
415
+ currency: 'USD',
416
+ };
417
+ }
418
+ /**
419
+ * Get available VM size presets
420
+ */
421
+ export function getVMSizePresets() {
422
+ return VM_SIZE_PRESETS;
423
+ }
424
+ /**
425
+ * Validate Azure CLI and Terraform availability
426
+ */
427
+ export function checkPrerequisites() {
428
+ let azureCli = false;
429
+ let azureLoggedIn = false;
430
+ let terraform = false;
431
+ try {
432
+ execSync('az version', { stdio: 'pipe' });
433
+ azureCli = true;
434
+ try {
435
+ execSync('az account show', { stdio: 'pipe' });
436
+ azureLoggedIn = true;
437
+ }
438
+ catch { }
439
+ }
440
+ catch { }
441
+ try {
442
+ execSync('terraform version', { stdio: 'pipe' });
443
+ terraform = true;
444
+ }
445
+ catch { }
446
+ return { azureCli, azureLoggedIn, terraform };
447
+ }
448
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/azure-infra/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Terraform Generator for Azure VMs
3
+ * Generates Terraform configuration files for VM provisioning
4
+ */
5
+ import { VMConfig } from './types.js';
6
+ /**
7
+ * Generate complete Terraform configuration for a VM
8
+ */
9
+ export declare function generateTerraformConfig(config: VMConfig): string;
10
+ /**
11
+ * Generate Azure CLI commands as an alternative
12
+ */
13
+ export declare function generateAzureCLICommands(config: VMConfig): string;
14
+ export declare const PERF_OUTPUT_DIR = ".perf-output";
15
+ /**
16
+ * Save Terraform configuration to a file
17
+ */
18
+ export declare function saveTerraformConfig(config: VMConfig, outputDir: string): Promise<string>;
19
+ //# sourceMappingURL=terraform-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terraform-generator.d.ts","sourceRoot":"","sources":["../../../src/tools/azure-infra/terraform-generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,CAmNhE;AA2FD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,CAwFjE;AAGD,eAAO,MAAM,eAAe,iBAAiB,CAAC;AAE9C;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,QAAQ,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAsEjB"}