@purplesquirrel/ibmcloud-mcp-server 1.0.0 → 1.0.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.
package/dist/index.js ADDED
@@ -0,0 +1,1455 @@
1
+ #!/usr/bin/env node
2
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
5
+ import { executeIBMCloud, formatResult } from "./cli.js";
6
+ // Authentication Tools
7
+ const authTools = [
8
+ {
9
+ name: "ibmcloud_login",
10
+ description: "Login to IBM Cloud with API key or SSO",
11
+ inputSchema: {
12
+ type: "object",
13
+ properties: {
14
+ apikey: { type: "string", description: "IBM Cloud API key" },
15
+ sso: { type: "boolean", description: "Use SSO for login" },
16
+ region: { type: "string", description: "Target region (e.g., us-south)" },
17
+ },
18
+ },
19
+ },
20
+ {
21
+ name: "ibmcloud_logout",
22
+ description: "Logout from IBM Cloud",
23
+ inputSchema: { type: "object", properties: {} },
24
+ },
25
+ {
26
+ name: "ibmcloud_target",
27
+ description: "View or set target region, resource group, org, and space",
28
+ inputSchema: {
29
+ type: "object",
30
+ properties: {
31
+ region: { type: "string", description: "Target region" },
32
+ resource_group: { type: "string", description: "Target resource group" },
33
+ org: { type: "string", description: "Target Cloud Foundry org" },
34
+ space: { type: "string", description: "Target Cloud Foundry space" },
35
+ },
36
+ },
37
+ },
38
+ {
39
+ name: "ibmcloud_api",
40
+ description: "View or set IBM Cloud API endpoint",
41
+ inputSchema: {
42
+ type: "object",
43
+ properties: {
44
+ endpoint: { type: "string", description: "API endpoint URL" },
45
+ },
46
+ },
47
+ },
48
+ {
49
+ name: "ibmcloud_regions",
50
+ description: "List available IBM Cloud regions",
51
+ inputSchema: { type: "object", properties: {} },
52
+ },
53
+ {
54
+ name: "ibmcloud_account_show",
55
+ description: "Show current account information",
56
+ inputSchema: { type: "object", properties: {} },
57
+ },
58
+ {
59
+ name: "ibmcloud_account_list",
60
+ description: "List all accessible accounts",
61
+ inputSchema: { type: "object", properties: {} },
62
+ },
63
+ {
64
+ name: "ibmcloud_config_list",
65
+ description: "List CLI configuration",
66
+ inputSchema: { type: "object", properties: {} },
67
+ },
68
+ ];
69
+ // Resource Management Tools
70
+ const resourceTools = [
71
+ {
72
+ name: "ibmcloud_resource_groups",
73
+ description: "List resource groups",
74
+ inputSchema: { type: "object", properties: {} },
75
+ },
76
+ {
77
+ name: "ibmcloud_resource_group_create",
78
+ description: "Create a resource group",
79
+ inputSchema: {
80
+ type: "object",
81
+ properties: {
82
+ name: { type: "string", description: "Resource group name" },
83
+ },
84
+ required: ["name"],
85
+ },
86
+ },
87
+ {
88
+ name: "ibmcloud_resource_service_instances",
89
+ description: "List service instances",
90
+ inputSchema: {
91
+ type: "object",
92
+ properties: {
93
+ service_name: { type: "string", description: "Filter by service name" },
94
+ resource_group: { type: "string", description: "Filter by resource group" },
95
+ },
96
+ },
97
+ },
98
+ {
99
+ name: "ibmcloud_resource_service_instance",
100
+ description: "Get details of a service instance",
101
+ inputSchema: {
102
+ type: "object",
103
+ properties: {
104
+ name: { type: "string", description: "Service instance name or ID" },
105
+ },
106
+ required: ["name"],
107
+ },
108
+ },
109
+ {
110
+ name: "ibmcloud_resource_service_instance_create",
111
+ description: "Create a service instance",
112
+ inputSchema: {
113
+ type: "object",
114
+ properties: {
115
+ name: { type: "string", description: "Instance name" },
116
+ service: { type: "string", description: "Service name (e.g., cloud-object-storage)" },
117
+ plan: { type: "string", description: "Service plan (e.g., standard, lite)" },
118
+ location: { type: "string", description: "Location (e.g., global, us-south)" },
119
+ resource_group: { type: "string", description: "Resource group name" },
120
+ parameters: { type: "string", description: "Service-specific parameters as JSON" },
121
+ },
122
+ required: ["name", "service", "plan"],
123
+ },
124
+ },
125
+ {
126
+ name: "ibmcloud_resource_service_instance_delete",
127
+ description: "Delete a service instance",
128
+ inputSchema: {
129
+ type: "object",
130
+ properties: {
131
+ name: { type: "string", description: "Service instance name or ID" },
132
+ force: { type: "boolean", description: "Force deletion without confirmation" },
133
+ },
134
+ required: ["name"],
135
+ },
136
+ },
137
+ {
138
+ name: "ibmcloud_resource_service_instance_update",
139
+ description: "Update a service instance",
140
+ inputSchema: {
141
+ type: "object",
142
+ properties: {
143
+ name: { type: "string", description: "Service instance name or ID" },
144
+ new_name: { type: "string", description: "New name for the instance" },
145
+ plan: { type: "string", description: "New service plan" },
146
+ parameters: { type: "string", description: "Service-specific parameters as JSON" },
147
+ },
148
+ required: ["name"],
149
+ },
150
+ },
151
+ {
152
+ name: "ibmcloud_resource_service_keys",
153
+ description: "List service keys/credentials",
154
+ inputSchema: {
155
+ type: "object",
156
+ properties: {
157
+ instance: { type: "string", description: "Service instance name" },
158
+ },
159
+ },
160
+ },
161
+ {
162
+ name: "ibmcloud_resource_service_key",
163
+ description: "Get details of a service key",
164
+ inputSchema: {
165
+ type: "object",
166
+ properties: {
167
+ name: { type: "string", description: "Service key name" },
168
+ },
169
+ required: ["name"],
170
+ },
171
+ },
172
+ {
173
+ name: "ibmcloud_resource_service_key_create",
174
+ description: "Create a service key/credential",
175
+ inputSchema: {
176
+ type: "object",
177
+ properties: {
178
+ name: { type: "string", description: "Key name" },
179
+ instance: { type: "string", description: "Service instance name" },
180
+ role: { type: "string", description: "IAM role (e.g., Writer, Reader, Manager)" },
181
+ parameters: { type: "string", description: "Service-specific parameters as JSON" },
182
+ },
183
+ required: ["name", "instance"],
184
+ },
185
+ },
186
+ {
187
+ name: "ibmcloud_resource_service_key_delete",
188
+ description: "Delete a service key",
189
+ inputSchema: {
190
+ type: "object",
191
+ properties: {
192
+ name: { type: "string", description: "Service key name" },
193
+ force: { type: "boolean", description: "Force deletion without confirmation" },
194
+ },
195
+ required: ["name"],
196
+ },
197
+ },
198
+ {
199
+ name: "ibmcloud_resource_search",
200
+ description: "Search for resources",
201
+ inputSchema: {
202
+ type: "object",
203
+ properties: {
204
+ query: { type: "string", description: "Search query (Lucene syntax)" },
205
+ },
206
+ required: ["query"],
207
+ },
208
+ },
209
+ {
210
+ name: "ibmcloud_resource_tags",
211
+ description: "List tags",
212
+ inputSchema: {
213
+ type: "object",
214
+ properties: {
215
+ resource_id: { type: "string", description: "Filter by resource CRN" },
216
+ },
217
+ },
218
+ },
219
+ {
220
+ name: "ibmcloud_resource_tag_attach",
221
+ description: "Attach tags to a resource",
222
+ inputSchema: {
223
+ type: "object",
224
+ properties: {
225
+ resource_id: { type: "string", description: "Resource CRN" },
226
+ tags: { type: "string", description: "Comma-separated list of tags" },
227
+ },
228
+ required: ["resource_id", "tags"],
229
+ },
230
+ },
231
+ ];
232
+ // Cloud Foundry Tools
233
+ const cfTools = [
234
+ {
235
+ name: "ibmcloud_cf_orgs",
236
+ description: "List Cloud Foundry organizations",
237
+ inputSchema: { type: "object", properties: {} },
238
+ },
239
+ {
240
+ name: "ibmcloud_cf_spaces",
241
+ description: "List Cloud Foundry spaces",
242
+ inputSchema: {
243
+ type: "object",
244
+ properties: {
245
+ org: { type: "string", description: "Organization name" },
246
+ },
247
+ },
248
+ },
249
+ {
250
+ name: "ibmcloud_cf_apps",
251
+ description: "List Cloud Foundry applications",
252
+ inputSchema: { type: "object", properties: {} },
253
+ },
254
+ {
255
+ name: "ibmcloud_cf_app",
256
+ description: "Get Cloud Foundry application details",
257
+ inputSchema: {
258
+ type: "object",
259
+ properties: {
260
+ name: { type: "string", description: "Application name" },
261
+ },
262
+ required: ["name"],
263
+ },
264
+ },
265
+ {
266
+ name: "ibmcloud_cf_push",
267
+ description: "Deploy a Cloud Foundry application",
268
+ inputSchema: {
269
+ type: "object",
270
+ properties: {
271
+ name: { type: "string", description: "Application name" },
272
+ path: { type: "string", description: "Path to application" },
273
+ manifest: { type: "string", description: "Path to manifest file" },
274
+ memory: { type: "string", description: "Memory limit (e.g., 256M, 1G)" },
275
+ instances: { type: "number", description: "Number of instances" },
276
+ buildpack: { type: "string", description: "Buildpack name or URL" },
277
+ docker_image: { type: "string", description: "Docker image" },
278
+ },
279
+ },
280
+ },
281
+ {
282
+ name: "ibmcloud_cf_start",
283
+ description: "Start a Cloud Foundry application",
284
+ inputSchema: {
285
+ type: "object",
286
+ properties: {
287
+ name: { type: "string", description: "Application name" },
288
+ },
289
+ required: ["name"],
290
+ },
291
+ },
292
+ {
293
+ name: "ibmcloud_cf_stop",
294
+ description: "Stop a Cloud Foundry application",
295
+ inputSchema: {
296
+ type: "object",
297
+ properties: {
298
+ name: { type: "string", description: "Application name" },
299
+ },
300
+ required: ["name"],
301
+ },
302
+ },
303
+ {
304
+ name: "ibmcloud_cf_restart",
305
+ description: "Restart a Cloud Foundry application",
306
+ inputSchema: {
307
+ type: "object",
308
+ properties: {
309
+ name: { type: "string", description: "Application name" },
310
+ },
311
+ required: ["name"],
312
+ },
313
+ },
314
+ {
315
+ name: "ibmcloud_cf_delete",
316
+ description: "Delete a Cloud Foundry application",
317
+ inputSchema: {
318
+ type: "object",
319
+ properties: {
320
+ name: { type: "string", description: "Application name" },
321
+ force: { type: "boolean", description: "Force deletion without confirmation" },
322
+ delete_routes: { type: "boolean", description: "Also delete mapped routes" },
323
+ },
324
+ required: ["name"],
325
+ },
326
+ },
327
+ {
328
+ name: "ibmcloud_cf_logs",
329
+ description: "View recent logs for an application",
330
+ inputSchema: {
331
+ type: "object",
332
+ properties: {
333
+ name: { type: "string", description: "Application name" },
334
+ recent: { type: "boolean", description: "Show recent logs (default: true)" },
335
+ },
336
+ required: ["name"],
337
+ },
338
+ },
339
+ {
340
+ name: "ibmcloud_cf_env",
341
+ description: "Show environment variables for an application",
342
+ inputSchema: {
343
+ type: "object",
344
+ properties: {
345
+ name: { type: "string", description: "Application name" },
346
+ },
347
+ required: ["name"],
348
+ },
349
+ },
350
+ {
351
+ name: "ibmcloud_cf_set_env",
352
+ description: "Set an environment variable for an application",
353
+ inputSchema: {
354
+ type: "object",
355
+ properties: {
356
+ name: { type: "string", description: "Application name" },
357
+ var_name: { type: "string", description: "Environment variable name" },
358
+ var_value: { type: "string", description: "Environment variable value" },
359
+ },
360
+ required: ["name", "var_name", "var_value"],
361
+ },
362
+ },
363
+ {
364
+ name: "ibmcloud_cf_scale",
365
+ description: "Scale a Cloud Foundry application",
366
+ inputSchema: {
367
+ type: "object",
368
+ properties: {
369
+ name: { type: "string", description: "Application name" },
370
+ instances: { type: "number", description: "Number of instances" },
371
+ memory: { type: "string", description: "Memory limit (e.g., 512M)" },
372
+ disk: { type: "string", description: "Disk limit (e.g., 1G)" },
373
+ },
374
+ required: ["name"],
375
+ },
376
+ },
377
+ {
378
+ name: "ibmcloud_cf_routes",
379
+ description: "List Cloud Foundry routes",
380
+ inputSchema: { type: "object", properties: {} },
381
+ },
382
+ {
383
+ name: "ibmcloud_cf_services",
384
+ description: "List Cloud Foundry services",
385
+ inputSchema: { type: "object", properties: {} },
386
+ },
387
+ {
388
+ name: "ibmcloud_cf_marketplace",
389
+ description: "List marketplace services",
390
+ inputSchema: {
391
+ type: "object",
392
+ properties: {
393
+ service: { type: "string", description: "Show plans for a specific service" },
394
+ },
395
+ },
396
+ },
397
+ {
398
+ name: "ibmcloud_cf_create_service",
399
+ description: "Create a Cloud Foundry service instance",
400
+ inputSchema: {
401
+ type: "object",
402
+ properties: {
403
+ service: { type: "string", description: "Service offering name" },
404
+ plan: { type: "string", description: "Service plan" },
405
+ instance_name: { type: "string", description: "Service instance name" },
406
+ parameters: { type: "string", description: "JSON parameters" },
407
+ },
408
+ required: ["service", "plan", "instance_name"],
409
+ },
410
+ },
411
+ {
412
+ name: "ibmcloud_cf_bind_service",
413
+ description: "Bind a service to an application",
414
+ inputSchema: {
415
+ type: "object",
416
+ properties: {
417
+ app_name: { type: "string", description: "Application name" },
418
+ service_instance: { type: "string", description: "Service instance name" },
419
+ parameters: { type: "string", description: "JSON binding parameters" },
420
+ },
421
+ required: ["app_name", "service_instance"],
422
+ },
423
+ },
424
+ {
425
+ name: "ibmcloud_cf_unbind_service",
426
+ description: "Unbind a service from an application",
427
+ inputSchema: {
428
+ type: "object",
429
+ properties: {
430
+ app_name: { type: "string", description: "Application name" },
431
+ service_instance: { type: "string", description: "Service instance name" },
432
+ },
433
+ required: ["app_name", "service_instance"],
434
+ },
435
+ },
436
+ ];
437
+ // Kubernetes & Container Registry Tools
438
+ const ksTools = [
439
+ {
440
+ name: "ibmcloud_ks_clusters",
441
+ description: "List Kubernetes clusters",
442
+ inputSchema: {
443
+ type: "object",
444
+ properties: {
445
+ provider: { type: "string", description: "Filter by provider (vpc-gen2, classic)" },
446
+ },
447
+ },
448
+ },
449
+ {
450
+ name: "ibmcloud_ks_cluster",
451
+ description: "Get cluster details",
452
+ inputSchema: {
453
+ type: "object",
454
+ properties: {
455
+ cluster: { type: "string", description: "Cluster name or ID" },
456
+ },
457
+ required: ["cluster"],
458
+ },
459
+ },
460
+ {
461
+ name: "ibmcloud_ks_cluster_config",
462
+ description: "Configure kubectl for a cluster",
463
+ inputSchema: {
464
+ type: "object",
465
+ properties: {
466
+ cluster: { type: "string", description: "Cluster name or ID" },
467
+ admin: { type: "boolean", description: "Download admin certificates" },
468
+ },
469
+ required: ["cluster"],
470
+ },
471
+ },
472
+ {
473
+ name: "ibmcloud_ks_cluster_create",
474
+ description: "Create a Kubernetes cluster",
475
+ inputSchema: {
476
+ type: "object",
477
+ properties: {
478
+ name: { type: "string", description: "Cluster name" },
479
+ zone: { type: "string", description: "Zone (e.g., dal10)" },
480
+ flavor: { type: "string", description: "Worker node flavor" },
481
+ workers: { type: "number", description: "Number of workers" },
482
+ version: { type: "string", description: "Kubernetes version" },
483
+ vpc_id: { type: "string", description: "VPC ID for VPC clusters" },
484
+ subnet_id: { type: "string", description: "Subnet ID for VPC clusters" },
485
+ },
486
+ required: ["name", "zone"],
487
+ },
488
+ },
489
+ {
490
+ name: "ibmcloud_ks_cluster_delete",
491
+ description: "Delete a Kubernetes cluster",
492
+ inputSchema: {
493
+ type: "object",
494
+ properties: {
495
+ cluster: { type: "string", description: "Cluster name or ID" },
496
+ force: { type: "boolean", description: "Force deletion" },
497
+ },
498
+ required: ["cluster"],
499
+ },
500
+ },
501
+ {
502
+ name: "ibmcloud_ks_workers",
503
+ description: "List worker nodes in a cluster",
504
+ inputSchema: {
505
+ type: "object",
506
+ properties: {
507
+ cluster: { type: "string", description: "Cluster name or ID" },
508
+ },
509
+ required: ["cluster"],
510
+ },
511
+ },
512
+ {
513
+ name: "ibmcloud_ks_worker_pools",
514
+ description: "List worker pools in a cluster",
515
+ inputSchema: {
516
+ type: "object",
517
+ properties: {
518
+ cluster: { type: "string", description: "Cluster name or ID" },
519
+ },
520
+ required: ["cluster"],
521
+ },
522
+ },
523
+ {
524
+ name: "ibmcloud_ks_worker_pool_create",
525
+ description: "Create a worker pool",
526
+ inputSchema: {
527
+ type: "object",
528
+ properties: {
529
+ cluster: { type: "string", description: "Cluster name or ID" },
530
+ name: { type: "string", description: "Worker pool name" },
531
+ flavor: { type: "string", description: "Worker node flavor" },
532
+ size_per_zone: { type: "number", description: "Workers per zone" },
533
+ },
534
+ required: ["cluster", "name", "flavor"],
535
+ },
536
+ },
537
+ {
538
+ name: "ibmcloud_ks_worker_pool_resize",
539
+ description: "Resize a worker pool",
540
+ inputSchema: {
541
+ type: "object",
542
+ properties: {
543
+ cluster: { type: "string", description: "Cluster name or ID" },
544
+ pool: { type: "string", description: "Worker pool name" },
545
+ size_per_zone: { type: "number", description: "New workers per zone" },
546
+ },
547
+ required: ["cluster", "pool", "size_per_zone"],
548
+ },
549
+ },
550
+ {
551
+ name: "ibmcloud_ks_zones",
552
+ description: "List available zones",
553
+ inputSchema: {
554
+ type: "object",
555
+ properties: {
556
+ provider: { type: "string", description: "Filter by provider" },
557
+ location: { type: "string", description: "Filter by location" },
558
+ },
559
+ },
560
+ },
561
+ {
562
+ name: "ibmcloud_ks_versions",
563
+ description: "List available Kubernetes versions",
564
+ inputSchema: { type: "object", properties: {} },
565
+ },
566
+ {
567
+ name: "ibmcloud_ks_flavors",
568
+ description: "List available machine types/flavors",
569
+ inputSchema: {
570
+ type: "object",
571
+ properties: {
572
+ zone: { type: "string", description: "Zone to list flavors for" },
573
+ provider: { type: "string", description: "Provider (vpc-gen2, classic)" },
574
+ },
575
+ required: ["zone"],
576
+ },
577
+ },
578
+ {
579
+ name: "ibmcloud_cr_namespaces",
580
+ description: "List Container Registry namespaces",
581
+ inputSchema: { type: "object", properties: {} },
582
+ },
583
+ {
584
+ name: "ibmcloud_cr_namespace_add",
585
+ description: "Create a Container Registry namespace",
586
+ inputSchema: {
587
+ type: "object",
588
+ properties: {
589
+ name: { type: "string", description: "Namespace name" },
590
+ resource_group: { type: "string", description: "Resource group" },
591
+ },
592
+ required: ["name"],
593
+ },
594
+ },
595
+ {
596
+ name: "ibmcloud_cr_images",
597
+ description: "List container images",
598
+ inputSchema: {
599
+ type: "object",
600
+ properties: {
601
+ repository: { type: "string", description: "Filter by repository" },
602
+ include_ibm: { type: "boolean", description: "Include IBM images" },
603
+ },
604
+ },
605
+ },
606
+ {
607
+ name: "ibmcloud_cr_image_rm",
608
+ description: "Remove a container image",
609
+ inputSchema: {
610
+ type: "object",
611
+ properties: {
612
+ image: { type: "string", description: "Image name with tag" },
613
+ force: { type: "boolean", description: "Force deletion" },
614
+ },
615
+ required: ["image"],
616
+ },
617
+ },
618
+ {
619
+ name: "ibmcloud_cr_quota",
620
+ description: "Get Container Registry quota information",
621
+ inputSchema: { type: "object", properties: {} },
622
+ },
623
+ ];
624
+ // IAM Tools
625
+ const iamTools = [
626
+ {
627
+ name: "ibmcloud_iam_users",
628
+ description: "List users in the account",
629
+ inputSchema: { type: "object", properties: {} },
630
+ },
631
+ {
632
+ name: "ibmcloud_iam_user_invite",
633
+ description: "Invite a user to the account",
634
+ inputSchema: {
635
+ type: "object",
636
+ properties: {
637
+ email: { type: "string", description: "User email address" },
638
+ access_groups: { type: "string", description: "Comma-separated access group names" },
639
+ },
640
+ required: ["email"],
641
+ },
642
+ },
643
+ {
644
+ name: "ibmcloud_iam_api_keys",
645
+ description: "List API keys",
646
+ inputSchema: { type: "object", properties: {} },
647
+ },
648
+ {
649
+ name: "ibmcloud_iam_api_key_create",
650
+ description: "Create an API key",
651
+ inputSchema: {
652
+ type: "object",
653
+ properties: {
654
+ name: { type: "string", description: "API key name" },
655
+ description: { type: "string", description: "API key description" },
656
+ file: { type: "string", description: "File path to save the key" },
657
+ },
658
+ required: ["name"],
659
+ },
660
+ },
661
+ {
662
+ name: "ibmcloud_iam_api_key_delete",
663
+ description: "Delete an API key",
664
+ inputSchema: {
665
+ type: "object",
666
+ properties: {
667
+ name: { type: "string", description: "API key name or ID" },
668
+ force: { type: "boolean", description: "Force deletion" },
669
+ },
670
+ required: ["name"],
671
+ },
672
+ },
673
+ {
674
+ name: "ibmcloud_iam_service_ids",
675
+ description: "List service IDs",
676
+ inputSchema: { type: "object", properties: {} },
677
+ },
678
+ {
679
+ name: "ibmcloud_iam_service_id",
680
+ description: "Get service ID details",
681
+ inputSchema: {
682
+ type: "object",
683
+ properties: {
684
+ name: { type: "string", description: "Service ID name or UUID" },
685
+ },
686
+ required: ["name"],
687
+ },
688
+ },
689
+ {
690
+ name: "ibmcloud_iam_service_id_create",
691
+ description: "Create a service ID",
692
+ inputSchema: {
693
+ type: "object",
694
+ properties: {
695
+ name: { type: "string", description: "Service ID name" },
696
+ description: { type: "string", description: "Description" },
697
+ },
698
+ required: ["name"],
699
+ },
700
+ },
701
+ {
702
+ name: "ibmcloud_iam_service_id_delete",
703
+ description: "Delete a service ID",
704
+ inputSchema: {
705
+ type: "object",
706
+ properties: {
707
+ name: { type: "string", description: "Service ID name or UUID" },
708
+ force: { type: "boolean", description: "Force deletion" },
709
+ },
710
+ required: ["name"],
711
+ },
712
+ },
713
+ {
714
+ name: "ibmcloud_iam_service_api_keys",
715
+ description: "List API keys for a service ID",
716
+ inputSchema: {
717
+ type: "object",
718
+ properties: {
719
+ service_id: { type: "string", description: "Service ID name or UUID" },
720
+ },
721
+ required: ["service_id"],
722
+ },
723
+ },
724
+ {
725
+ name: "ibmcloud_iam_service_api_key_create",
726
+ description: "Create an API key for a service ID",
727
+ inputSchema: {
728
+ type: "object",
729
+ properties: {
730
+ name: { type: "string", description: "API key name" },
731
+ service_id: { type: "string", description: "Service ID name or UUID" },
732
+ description: { type: "string", description: "Description" },
733
+ file: { type: "string", description: "File path to save the key" },
734
+ },
735
+ required: ["name", "service_id"],
736
+ },
737
+ },
738
+ {
739
+ name: "ibmcloud_iam_access_groups",
740
+ description: "List access groups",
741
+ inputSchema: { type: "object", properties: {} },
742
+ },
743
+ {
744
+ name: "ibmcloud_iam_access_group",
745
+ description: "Get access group details",
746
+ inputSchema: {
747
+ type: "object",
748
+ properties: {
749
+ name: { type: "string", description: "Access group name" },
750
+ },
751
+ required: ["name"],
752
+ },
753
+ },
754
+ {
755
+ name: "ibmcloud_iam_access_group_create",
756
+ description: "Create an access group",
757
+ inputSchema: {
758
+ type: "object",
759
+ properties: {
760
+ name: { type: "string", description: "Access group name" },
761
+ description: { type: "string", description: "Description" },
762
+ },
763
+ required: ["name"],
764
+ },
765
+ },
766
+ {
767
+ name: "ibmcloud_iam_access_group_users",
768
+ description: "List users in an access group",
769
+ inputSchema: {
770
+ type: "object",
771
+ properties: {
772
+ group: { type: "string", description: "Access group name" },
773
+ },
774
+ required: ["group"],
775
+ },
776
+ },
777
+ {
778
+ name: "ibmcloud_iam_access_group_user_add",
779
+ description: "Add users to an access group",
780
+ inputSchema: {
781
+ type: "object",
782
+ properties: {
783
+ group: { type: "string", description: "Access group name" },
784
+ users: { type: "string", description: "Comma-separated user IDs" },
785
+ },
786
+ required: ["group", "users"],
787
+ },
788
+ },
789
+ {
790
+ name: "ibmcloud_iam_access_group_policies",
791
+ description: "List policies for an access group",
792
+ inputSchema: {
793
+ type: "object",
794
+ properties: {
795
+ group: { type: "string", description: "Access group name" },
796
+ },
797
+ required: ["group"],
798
+ },
799
+ },
800
+ {
801
+ name: "ibmcloud_iam_access_group_policy_create",
802
+ description: "Create a policy for an access group",
803
+ inputSchema: {
804
+ type: "object",
805
+ properties: {
806
+ group: { type: "string", description: "Access group name" },
807
+ roles: { type: "string", description: "Comma-separated roles" },
808
+ service_name: { type: "string", description: "Service name" },
809
+ resource_group: { type: "string", description: "Resource group name" },
810
+ resource_type: { type: "string", description: "Resource type" },
811
+ resource: { type: "string", description: "Resource name" },
812
+ },
813
+ required: ["group", "roles"],
814
+ },
815
+ },
816
+ {
817
+ name: "ibmcloud_iam_roles",
818
+ description: "List IAM roles",
819
+ inputSchema: {
820
+ type: "object",
821
+ properties: {
822
+ service: { type: "string", description: "Filter by service name" },
823
+ },
824
+ },
825
+ },
826
+ ];
827
+ // Catalog & Billing Tools
828
+ const catalogBillingTools = [
829
+ {
830
+ name: "ibmcloud_catalog_search",
831
+ description: "Search the service catalog",
832
+ inputSchema: {
833
+ type: "object",
834
+ properties: {
835
+ query: { type: "string", description: "Search query" },
836
+ },
837
+ required: ["query"],
838
+ },
839
+ },
840
+ {
841
+ name: "ibmcloud_catalog_service",
842
+ description: "Get details about a catalog service",
843
+ inputSchema: {
844
+ type: "object",
845
+ properties: {
846
+ service: { type: "string", description: "Service name" },
847
+ },
848
+ required: ["service"],
849
+ },
850
+ },
851
+ {
852
+ name: "ibmcloud_catalog_service_plans",
853
+ description: "List plans for a catalog service",
854
+ inputSchema: {
855
+ type: "object",
856
+ properties: {
857
+ service: { type: "string", description: "Service name" },
858
+ },
859
+ required: ["service"],
860
+ },
861
+ },
862
+ {
863
+ name: "ibmcloud_billing_account_usage",
864
+ description: "Get account usage for a billing period",
865
+ inputSchema: {
866
+ type: "object",
867
+ properties: {
868
+ month: { type: "string", description: "Month (YYYY-MM)" },
869
+ },
870
+ },
871
+ },
872
+ {
873
+ name: "ibmcloud_billing_resource_group_usage",
874
+ description: "Get resource group usage",
875
+ inputSchema: {
876
+ type: "object",
877
+ properties: {
878
+ resource_group: { type: "string", description: "Resource group name" },
879
+ month: { type: "string", description: "Month (YYYY-MM)" },
880
+ },
881
+ required: ["resource_group"],
882
+ },
883
+ },
884
+ {
885
+ name: "ibmcloud_billing_resource_instances_usage",
886
+ description: "Get usage for resource instances",
887
+ inputSchema: {
888
+ type: "object",
889
+ properties: {
890
+ month: { type: "string", description: "Month (YYYY-MM)" },
891
+ resource_group: { type: "string", description: "Filter by resource group" },
892
+ },
893
+ },
894
+ },
895
+ {
896
+ name: "ibmcloud_billing_org_usage",
897
+ description: "Get Cloud Foundry org usage",
898
+ inputSchema: {
899
+ type: "object",
900
+ properties: {
901
+ org: { type: "string", description: "Organization name" },
902
+ month: { type: "string", description: "Month (YYYY-MM)" },
903
+ },
904
+ required: ["org"],
905
+ },
906
+ },
907
+ {
908
+ name: "ibmcloud_plugin_list",
909
+ description: "List installed CLI plugins",
910
+ inputSchema: { type: "object", properties: {} },
911
+ },
912
+ {
913
+ name: "ibmcloud_plugin_repo_plugins",
914
+ description: "List available plugins from repository",
915
+ inputSchema: { type: "object", properties: {} },
916
+ },
917
+ {
918
+ name: "ibmcloud_plugin_install",
919
+ description: "Install a CLI plugin",
920
+ inputSchema: {
921
+ type: "object",
922
+ properties: {
923
+ plugin: { type: "string", description: "Plugin name" },
924
+ force: { type: "boolean", description: "Force reinstall if exists" },
925
+ },
926
+ required: ["plugin"],
927
+ },
928
+ },
929
+ {
930
+ name: "ibmcloud_version",
931
+ description: "Show IBM Cloud CLI version",
932
+ inputSchema: { type: "object", properties: {} },
933
+ },
934
+ ];
935
+ // All tools combined
936
+ const allTools = [
937
+ ...authTools,
938
+ ...resourceTools,
939
+ ...cfTools,
940
+ ...ksTools,
941
+ ...iamTools,
942
+ ...catalogBillingTools,
943
+ ];
944
+ // Tool handlers
945
+ async function handleAuthTool(name, args) {
946
+ switch (name) {
947
+ case "ibmcloud_login": {
948
+ const cmdArgs = ["login"];
949
+ if (args.apikey)
950
+ cmdArgs.push("--apikey", args.apikey);
951
+ if (args.sso)
952
+ cmdArgs.push("--sso");
953
+ if (args.region)
954
+ cmdArgs.push("-r", args.region);
955
+ return formatResult(await executeIBMCloud(cmdArgs));
956
+ }
957
+ case "ibmcloud_logout":
958
+ return formatResult(await executeIBMCloud(["logout"]));
959
+ case "ibmcloud_target": {
960
+ const cmdArgs = ["target"];
961
+ if (args.region)
962
+ cmdArgs.push("-r", args.region);
963
+ if (args.resource_group)
964
+ cmdArgs.push("-g", args.resource_group);
965
+ if (args.org)
966
+ cmdArgs.push("-o", args.org);
967
+ if (args.space)
968
+ cmdArgs.push("-s", args.space);
969
+ return formatResult(await executeIBMCloud(cmdArgs));
970
+ }
971
+ case "ibmcloud_api": {
972
+ const cmdArgs = ["api"];
973
+ if (args.endpoint)
974
+ cmdArgs.push(args.endpoint);
975
+ return formatResult(await executeIBMCloud(cmdArgs));
976
+ }
977
+ case "ibmcloud_regions":
978
+ return formatResult(await executeIBMCloud(["regions"]));
979
+ case "ibmcloud_account_show":
980
+ return formatResult(await executeIBMCloud(["account", "show"]));
981
+ case "ibmcloud_account_list":
982
+ return formatResult(await executeIBMCloud(["account", "list"]));
983
+ case "ibmcloud_config_list":
984
+ return formatResult(await executeIBMCloud(["config", "list"]));
985
+ default:
986
+ throw new Error(`Unknown auth tool: ${name}`);
987
+ }
988
+ }
989
+ async function handleResourceTool(name, args) {
990
+ switch (name) {
991
+ case "ibmcloud_resource_groups":
992
+ return formatResult(await executeIBMCloud(["resource", "groups"]));
993
+ case "ibmcloud_resource_group_create":
994
+ return formatResult(await executeIBMCloud(["resource", "group-create", args.name]));
995
+ case "ibmcloud_resource_service_instances": {
996
+ const cmdArgs = ["resource", "service-instances"];
997
+ if (args.service_name)
998
+ cmdArgs.push("--service-name", args.service_name);
999
+ if (args.resource_group)
1000
+ cmdArgs.push("-g", args.resource_group);
1001
+ return formatResult(await executeIBMCloud(cmdArgs));
1002
+ }
1003
+ case "ibmcloud_resource_service_instance":
1004
+ return formatResult(await executeIBMCloud(["resource", "service-instance", args.name]));
1005
+ case "ibmcloud_resource_service_instance_create": {
1006
+ const cmdArgs = ["resource", "service-instance-create", args.name, args.service, args.plan];
1007
+ if (args.location)
1008
+ cmdArgs.push("-l", args.location);
1009
+ if (args.resource_group)
1010
+ cmdArgs.push("-g", args.resource_group);
1011
+ if (args.parameters)
1012
+ cmdArgs.push("-p", args.parameters);
1013
+ return formatResult(await executeIBMCloud(cmdArgs));
1014
+ }
1015
+ case "ibmcloud_resource_service_instance_delete": {
1016
+ const cmdArgs = ["resource", "service-instance-delete", args.name];
1017
+ if (args.force)
1018
+ cmdArgs.push("-f");
1019
+ return formatResult(await executeIBMCloud(cmdArgs));
1020
+ }
1021
+ case "ibmcloud_resource_service_instance_update": {
1022
+ const cmdArgs = ["resource", "service-instance-update", args.name];
1023
+ if (args.new_name)
1024
+ cmdArgs.push("-n", args.new_name);
1025
+ if (args.plan)
1026
+ cmdArgs.push("--service-plan-id", args.plan);
1027
+ if (args.parameters)
1028
+ cmdArgs.push("-p", args.parameters);
1029
+ return formatResult(await executeIBMCloud(cmdArgs));
1030
+ }
1031
+ case "ibmcloud_resource_service_keys": {
1032
+ const cmdArgs = ["resource", "service-keys"];
1033
+ if (args.instance)
1034
+ cmdArgs.push("--instance-name", args.instance);
1035
+ return formatResult(await executeIBMCloud(cmdArgs));
1036
+ }
1037
+ case "ibmcloud_resource_service_key":
1038
+ return formatResult(await executeIBMCloud(["resource", "service-key", args.name]));
1039
+ case "ibmcloud_resource_service_key_create": {
1040
+ const cmdArgs = ["resource", "service-key-create", args.name, "--instance-name", args.instance];
1041
+ if (args.role)
1042
+ cmdArgs.push("--service-endpoint", args.role);
1043
+ if (args.parameters)
1044
+ cmdArgs.push("-p", args.parameters);
1045
+ return formatResult(await executeIBMCloud(cmdArgs));
1046
+ }
1047
+ case "ibmcloud_resource_service_key_delete": {
1048
+ const cmdArgs = ["resource", "service-key-delete", args.name];
1049
+ if (args.force)
1050
+ cmdArgs.push("-f");
1051
+ return formatResult(await executeIBMCloud(cmdArgs));
1052
+ }
1053
+ case "ibmcloud_resource_search":
1054
+ return formatResult(await executeIBMCloud(["resource", "search", args.query]));
1055
+ case "ibmcloud_resource_tags": {
1056
+ const cmdArgs = ["resource", "tags"];
1057
+ if (args.resource_id)
1058
+ cmdArgs.push("--tag-type", "user");
1059
+ return formatResult(await executeIBMCloud(cmdArgs));
1060
+ }
1061
+ case "ibmcloud_resource_tag_attach":
1062
+ return formatResult(await executeIBMCloud(["resource", "tag-attach", "--tag-names", args.tags, "--resource-id", args.resource_id]));
1063
+ default:
1064
+ throw new Error(`Unknown resource tool: ${name}`);
1065
+ }
1066
+ }
1067
+ async function handleCFTool(name, args) {
1068
+ switch (name) {
1069
+ case "ibmcloud_cf_orgs":
1070
+ return formatResult(await executeIBMCloud(["cf", "orgs"]));
1071
+ case "ibmcloud_cf_spaces": {
1072
+ const cmdArgs = ["cf", "spaces"];
1073
+ if (args.org)
1074
+ cmdArgs.push("-o", args.org);
1075
+ return formatResult(await executeIBMCloud(cmdArgs));
1076
+ }
1077
+ case "ibmcloud_cf_apps":
1078
+ return formatResult(await executeIBMCloud(["cf", "apps"]));
1079
+ case "ibmcloud_cf_app":
1080
+ return formatResult(await executeIBMCloud(["cf", "app", args.name]));
1081
+ case "ibmcloud_cf_push": {
1082
+ const cmdArgs = ["cf", "push"];
1083
+ if (args.name)
1084
+ cmdArgs.push(args.name);
1085
+ if (args.path)
1086
+ cmdArgs.push("-p", args.path);
1087
+ if (args.manifest)
1088
+ cmdArgs.push("-f", args.manifest);
1089
+ if (args.memory)
1090
+ cmdArgs.push("-m", args.memory);
1091
+ if (args.instances)
1092
+ cmdArgs.push("-i", String(args.instances));
1093
+ if (args.buildpack)
1094
+ cmdArgs.push("-b", args.buildpack);
1095
+ if (args.docker_image)
1096
+ cmdArgs.push("--docker-image", args.docker_image);
1097
+ return formatResult(await executeIBMCloud(cmdArgs));
1098
+ }
1099
+ case "ibmcloud_cf_start":
1100
+ return formatResult(await executeIBMCloud(["cf", "start", args.name]));
1101
+ case "ibmcloud_cf_stop":
1102
+ return formatResult(await executeIBMCloud(["cf", "stop", args.name]));
1103
+ case "ibmcloud_cf_restart":
1104
+ return formatResult(await executeIBMCloud(["cf", "restart", args.name]));
1105
+ case "ibmcloud_cf_delete": {
1106
+ const cmdArgs = ["cf", "delete", args.name];
1107
+ if (args.force)
1108
+ cmdArgs.push("-f");
1109
+ if (args.delete_routes)
1110
+ cmdArgs.push("-r");
1111
+ return formatResult(await executeIBMCloud(cmdArgs));
1112
+ }
1113
+ case "ibmcloud_cf_logs": {
1114
+ const cmdArgs = ["cf", "logs", args.name];
1115
+ if (args.recent !== false)
1116
+ cmdArgs.push("--recent");
1117
+ return formatResult(await executeIBMCloud(cmdArgs));
1118
+ }
1119
+ case "ibmcloud_cf_env":
1120
+ return formatResult(await executeIBMCloud(["cf", "env", args.name]));
1121
+ case "ibmcloud_cf_set_env":
1122
+ return formatResult(await executeIBMCloud(["cf", "set-env", args.name, args.var_name, args.var_value]));
1123
+ case "ibmcloud_cf_scale": {
1124
+ const cmdArgs = ["cf", "scale", args.name];
1125
+ if (args.instances)
1126
+ cmdArgs.push("-i", String(args.instances));
1127
+ if (args.memory)
1128
+ cmdArgs.push("-m", args.memory);
1129
+ if (args.disk)
1130
+ cmdArgs.push("-k", args.disk);
1131
+ cmdArgs.push("-f");
1132
+ return formatResult(await executeIBMCloud(cmdArgs));
1133
+ }
1134
+ case "ibmcloud_cf_routes":
1135
+ return formatResult(await executeIBMCloud(["cf", "routes"]));
1136
+ case "ibmcloud_cf_services":
1137
+ return formatResult(await executeIBMCloud(["cf", "services"]));
1138
+ case "ibmcloud_cf_marketplace": {
1139
+ const cmdArgs = ["cf", "marketplace"];
1140
+ if (args.service)
1141
+ cmdArgs.push("-e", args.service);
1142
+ return formatResult(await executeIBMCloud(cmdArgs));
1143
+ }
1144
+ case "ibmcloud_cf_create_service": {
1145
+ const cmdArgs = ["cf", "create-service", args.service, args.plan, args.instance_name];
1146
+ if (args.parameters)
1147
+ cmdArgs.push("-c", args.parameters);
1148
+ return formatResult(await executeIBMCloud(cmdArgs));
1149
+ }
1150
+ case "ibmcloud_cf_bind_service": {
1151
+ const cmdArgs = ["cf", "bind-service", args.app_name, args.service_instance];
1152
+ if (args.parameters)
1153
+ cmdArgs.push("-c", args.parameters);
1154
+ return formatResult(await executeIBMCloud(cmdArgs));
1155
+ }
1156
+ case "ibmcloud_cf_unbind_service":
1157
+ return formatResult(await executeIBMCloud(["cf", "unbind-service", args.app_name, args.service_instance]));
1158
+ default:
1159
+ throw new Error(`Unknown CF tool: ${name}`);
1160
+ }
1161
+ }
1162
+ async function handleKSTool(name, args) {
1163
+ switch (name) {
1164
+ case "ibmcloud_ks_clusters": {
1165
+ const cmdArgs = ["ks", "clusters"];
1166
+ if (args.provider)
1167
+ cmdArgs.push("--provider", args.provider);
1168
+ return formatResult(await executeIBMCloud(cmdArgs));
1169
+ }
1170
+ case "ibmcloud_ks_cluster":
1171
+ return formatResult(await executeIBMCloud(["ks", "cluster", "get", "--cluster", args.cluster]));
1172
+ case "ibmcloud_ks_cluster_config": {
1173
+ const cmdArgs = ["ks", "cluster", "config", "--cluster", args.cluster];
1174
+ if (args.admin)
1175
+ cmdArgs.push("--admin");
1176
+ return formatResult(await executeIBMCloud(cmdArgs));
1177
+ }
1178
+ case "ibmcloud_ks_cluster_create": {
1179
+ const cmdArgs = ["ks", "cluster", "create", "classic", "--name", args.name, "--zone", args.zone];
1180
+ if (args.flavor)
1181
+ cmdArgs.push("--flavor", args.flavor);
1182
+ if (args.workers)
1183
+ cmdArgs.push("--workers", String(args.workers));
1184
+ if (args.version)
1185
+ cmdArgs.push("--version", args.version);
1186
+ if (args.vpc_id) {
1187
+ cmdArgs[4] = "vpc-gen2";
1188
+ cmdArgs.push("--vpc-id", args.vpc_id);
1189
+ }
1190
+ if (args.subnet_id)
1191
+ cmdArgs.push("--subnet-id", args.subnet_id);
1192
+ return formatResult(await executeIBMCloud(cmdArgs));
1193
+ }
1194
+ case "ibmcloud_ks_cluster_delete": {
1195
+ const cmdArgs = ["ks", "cluster", "rm", "--cluster", args.cluster];
1196
+ if (args.force)
1197
+ cmdArgs.push("-f");
1198
+ return formatResult(await executeIBMCloud(cmdArgs));
1199
+ }
1200
+ case "ibmcloud_ks_workers":
1201
+ return formatResult(await executeIBMCloud(["ks", "workers", "--cluster", args.cluster]));
1202
+ case "ibmcloud_ks_worker_pools":
1203
+ return formatResult(await executeIBMCloud(["ks", "worker-pools", "--cluster", args.cluster]));
1204
+ case "ibmcloud_ks_worker_pool_create": {
1205
+ const cmdArgs = ["ks", "worker-pool", "create", "classic", "--cluster", args.cluster, "--name", args.name, "--flavor", args.flavor];
1206
+ if (args.size_per_zone)
1207
+ cmdArgs.push("--size-per-zone", String(args.size_per_zone));
1208
+ return formatResult(await executeIBMCloud(cmdArgs));
1209
+ }
1210
+ case "ibmcloud_ks_worker_pool_resize":
1211
+ return formatResult(await executeIBMCloud(["ks", "worker-pool", "resize", "--cluster", args.cluster, "--worker-pool", args.pool, "--size-per-zone", String(args.size_per_zone)]));
1212
+ case "ibmcloud_ks_zones": {
1213
+ const cmdArgs = ["ks", "zones"];
1214
+ if (args.provider)
1215
+ cmdArgs.push("--provider", args.provider);
1216
+ if (args.location)
1217
+ cmdArgs.push("--location", args.location);
1218
+ return formatResult(await executeIBMCloud(cmdArgs));
1219
+ }
1220
+ case "ibmcloud_ks_versions":
1221
+ return formatResult(await executeIBMCloud(["ks", "versions"]));
1222
+ case "ibmcloud_ks_flavors": {
1223
+ const cmdArgs = ["ks", "flavors", "--zone", args.zone];
1224
+ if (args.provider)
1225
+ cmdArgs.push("--provider", args.provider);
1226
+ return formatResult(await executeIBMCloud(cmdArgs));
1227
+ }
1228
+ case "ibmcloud_cr_namespaces":
1229
+ return formatResult(await executeIBMCloud(["cr", "namespaces"]));
1230
+ case "ibmcloud_cr_namespace_add": {
1231
+ const cmdArgs = ["cr", "namespace-add", args.name];
1232
+ if (args.resource_group)
1233
+ cmdArgs.push("-g", args.resource_group);
1234
+ return formatResult(await executeIBMCloud(cmdArgs));
1235
+ }
1236
+ case "ibmcloud_cr_images": {
1237
+ const cmdArgs = ["cr", "images"];
1238
+ if (args.repository)
1239
+ cmdArgs.push("--repository", args.repository);
1240
+ if (args.include_ibm)
1241
+ cmdArgs.push("--include-ibm");
1242
+ return formatResult(await executeIBMCloud(cmdArgs));
1243
+ }
1244
+ case "ibmcloud_cr_image_rm": {
1245
+ const cmdArgs = ["cr", "image-rm", args.image];
1246
+ if (args.force)
1247
+ cmdArgs.push("-f");
1248
+ return formatResult(await executeIBMCloud(cmdArgs));
1249
+ }
1250
+ case "ibmcloud_cr_quota":
1251
+ return formatResult(await executeIBMCloud(["cr", "quota"]));
1252
+ default:
1253
+ throw new Error(`Unknown KS tool: ${name}`);
1254
+ }
1255
+ }
1256
+ async function handleIAMTool(name, args) {
1257
+ switch (name) {
1258
+ case "ibmcloud_iam_users":
1259
+ return formatResult(await executeIBMCloud(["iam", "users"]));
1260
+ case "ibmcloud_iam_user_invite": {
1261
+ const cmdArgs = ["iam", "user-invite", args.email];
1262
+ if (args.access_groups)
1263
+ cmdArgs.push("--access-groups", args.access_groups);
1264
+ return formatResult(await executeIBMCloud(cmdArgs));
1265
+ }
1266
+ case "ibmcloud_iam_api_keys":
1267
+ return formatResult(await executeIBMCloud(["iam", "api-keys"]));
1268
+ case "ibmcloud_iam_api_key_create": {
1269
+ const cmdArgs = ["iam", "api-key-create", args.name];
1270
+ if (args.description)
1271
+ cmdArgs.push("-d", args.description);
1272
+ if (args.file)
1273
+ cmdArgs.push("--file", args.file);
1274
+ return formatResult(await executeIBMCloud(cmdArgs));
1275
+ }
1276
+ case "ibmcloud_iam_api_key_delete": {
1277
+ const cmdArgs = ["iam", "api-key-delete", args.name];
1278
+ if (args.force)
1279
+ cmdArgs.push("-f");
1280
+ return formatResult(await executeIBMCloud(cmdArgs));
1281
+ }
1282
+ case "ibmcloud_iam_service_ids":
1283
+ return formatResult(await executeIBMCloud(["iam", "service-ids"]));
1284
+ case "ibmcloud_iam_service_id":
1285
+ return formatResult(await executeIBMCloud(["iam", "service-id", args.name]));
1286
+ case "ibmcloud_iam_service_id_create": {
1287
+ const cmdArgs = ["iam", "service-id-create", args.name];
1288
+ if (args.description)
1289
+ cmdArgs.push("-d", args.description);
1290
+ return formatResult(await executeIBMCloud(cmdArgs));
1291
+ }
1292
+ case "ibmcloud_iam_service_id_delete": {
1293
+ const cmdArgs = ["iam", "service-id-delete", args.name];
1294
+ if (args.force)
1295
+ cmdArgs.push("-f");
1296
+ return formatResult(await executeIBMCloud(cmdArgs));
1297
+ }
1298
+ case "ibmcloud_iam_service_api_keys":
1299
+ return formatResult(await executeIBMCloud(["iam", "service-api-keys", args.service_id]));
1300
+ case "ibmcloud_iam_service_api_key_create": {
1301
+ const cmdArgs = ["iam", "service-api-key-create", args.name, args.service_id];
1302
+ if (args.description)
1303
+ cmdArgs.push("-d", args.description);
1304
+ if (args.file)
1305
+ cmdArgs.push("--file", args.file);
1306
+ return formatResult(await executeIBMCloud(cmdArgs));
1307
+ }
1308
+ case "ibmcloud_iam_access_groups":
1309
+ return formatResult(await executeIBMCloud(["iam", "access-groups"]));
1310
+ case "ibmcloud_iam_access_group":
1311
+ return formatResult(await executeIBMCloud(["iam", "access-group", args.name]));
1312
+ case "ibmcloud_iam_access_group_create": {
1313
+ const cmdArgs = ["iam", "access-group-create", args.name];
1314
+ if (args.description)
1315
+ cmdArgs.push("-d", args.description);
1316
+ return formatResult(await executeIBMCloud(cmdArgs));
1317
+ }
1318
+ case "ibmcloud_iam_access_group_users":
1319
+ return formatResult(await executeIBMCloud(["iam", "access-group-users", args.group]));
1320
+ case "ibmcloud_iam_access_group_user_add":
1321
+ return formatResult(await executeIBMCloud(["iam", "access-group-user-add", args.group, "--users", args.users]));
1322
+ case "ibmcloud_iam_access_group_policies":
1323
+ return formatResult(await executeIBMCloud(["iam", "access-group-policies", args.group]));
1324
+ case "ibmcloud_iam_access_group_policy_create": {
1325
+ const cmdArgs = ["iam", "access-group-policy-create", args.group, "--roles", args.roles];
1326
+ if (args.service_name)
1327
+ cmdArgs.push("--service-name", args.service_name);
1328
+ if (args.resource_group)
1329
+ cmdArgs.push("--resource-group-name", args.resource_group);
1330
+ if (args.resource_type)
1331
+ cmdArgs.push("--resource-type", args.resource_type);
1332
+ if (args.resource)
1333
+ cmdArgs.push("--resource", args.resource);
1334
+ return formatResult(await executeIBMCloud(cmdArgs));
1335
+ }
1336
+ case "ibmcloud_iam_roles": {
1337
+ const cmdArgs = ["iam", "roles"];
1338
+ if (args.service)
1339
+ cmdArgs.push("--service", args.service);
1340
+ return formatResult(await executeIBMCloud(cmdArgs));
1341
+ }
1342
+ default:
1343
+ throw new Error(`Unknown IAM tool: ${name}`);
1344
+ }
1345
+ }
1346
+ async function handleCatalogBillingTool(name, args) {
1347
+ switch (name) {
1348
+ case "ibmcloud_catalog_search":
1349
+ return formatResult(await executeIBMCloud(["catalog", "search", args.query]));
1350
+ case "ibmcloud_catalog_service":
1351
+ return formatResult(await executeIBMCloud(["catalog", "service", args.service]));
1352
+ case "ibmcloud_catalog_service_plans":
1353
+ return formatResult(await executeIBMCloud(["catalog", "service", args.service]));
1354
+ case "ibmcloud_billing_account_usage": {
1355
+ const cmdArgs = ["billing", "account-usage"];
1356
+ if (args.month)
1357
+ cmdArgs.push("-d", args.month);
1358
+ return formatResult(await executeIBMCloud(cmdArgs));
1359
+ }
1360
+ case "ibmcloud_billing_resource_group_usage": {
1361
+ const cmdArgs = ["billing", "resource-group-usage", args.resource_group];
1362
+ if (args.month)
1363
+ cmdArgs.push("-d", args.month);
1364
+ return formatResult(await executeIBMCloud(cmdArgs));
1365
+ }
1366
+ case "ibmcloud_billing_resource_instances_usage": {
1367
+ const cmdArgs = ["billing", "resource-instances-usage"];
1368
+ if (args.month)
1369
+ cmdArgs.push("-d", args.month);
1370
+ if (args.resource_group)
1371
+ cmdArgs.push("-g", args.resource_group);
1372
+ return formatResult(await executeIBMCloud(cmdArgs));
1373
+ }
1374
+ case "ibmcloud_billing_org_usage": {
1375
+ const cmdArgs = ["billing", "org-usage", args.org];
1376
+ if (args.month)
1377
+ cmdArgs.push("-d", args.month);
1378
+ return formatResult(await executeIBMCloud(cmdArgs));
1379
+ }
1380
+ case "ibmcloud_plugin_list":
1381
+ return formatResult(await executeIBMCloud(["plugin", "list"]));
1382
+ case "ibmcloud_plugin_repo_plugins":
1383
+ return formatResult(await executeIBMCloud(["plugin", "repo-plugins"]));
1384
+ case "ibmcloud_plugin_install": {
1385
+ const cmdArgs = ["plugin", "install", args.plugin];
1386
+ if (args.force)
1387
+ cmdArgs.push("-f");
1388
+ return formatResult(await executeIBMCloud(cmdArgs));
1389
+ }
1390
+ case "ibmcloud_version":
1391
+ return formatResult(await executeIBMCloud(["version"]));
1392
+ default:
1393
+ throw new Error(`Unknown catalog/billing tool: ${name}`);
1394
+ }
1395
+ }
1396
+ // Main server setup
1397
+ const server = new Server({
1398
+ name: "ibmcloud-mcp",
1399
+ version: "1.0.0",
1400
+ }, {
1401
+ capabilities: {
1402
+ tools: {},
1403
+ },
1404
+ });
1405
+ // Register tool list handler
1406
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
1407
+ tools: allTools,
1408
+ }));
1409
+ // Register tool call handler
1410
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
1411
+ const { name, arguments: args } = request.params;
1412
+ const typedArgs = (args ?? {});
1413
+ try {
1414
+ let result;
1415
+ if (authTools.find((t) => t.name === name)) {
1416
+ result = await handleAuthTool(name, typedArgs);
1417
+ }
1418
+ else if (resourceTools.find((t) => t.name === name)) {
1419
+ result = await handleResourceTool(name, typedArgs);
1420
+ }
1421
+ else if (cfTools.find((t) => t.name === name)) {
1422
+ result = await handleCFTool(name, typedArgs);
1423
+ }
1424
+ else if (ksTools.find((t) => t.name === name)) {
1425
+ result = await handleKSTool(name, typedArgs);
1426
+ }
1427
+ else if (iamTools.find((t) => t.name === name)) {
1428
+ result = await handleIAMTool(name, typedArgs);
1429
+ }
1430
+ else if (catalogBillingTools.find((t) => t.name === name)) {
1431
+ result = await handleCatalogBillingTool(name, typedArgs);
1432
+ }
1433
+ else {
1434
+ throw new Error(`Unknown tool: ${name}`);
1435
+ }
1436
+ return {
1437
+ content: [{ type: "text", text: result }],
1438
+ };
1439
+ }
1440
+ catch (error) {
1441
+ const errorMessage = error instanceof Error ? error.message : String(error);
1442
+ return {
1443
+ content: [{ type: "text", text: `Error: ${errorMessage}` }],
1444
+ isError: true,
1445
+ };
1446
+ }
1447
+ });
1448
+ // Start server
1449
+ async function main() {
1450
+ const transport = new StdioServerTransport();
1451
+ await server.connect(transport);
1452
+ console.error("IBM Cloud MCP Server running on stdio");
1453
+ }
1454
+ main().catch(console.error);
1455
+ //# sourceMappingURL=index.js.map