ncloud-mcp-server 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +159 -0
- package/README_EN.md +159 -0
- package/dist/auth/signature.d.ts +16 -0
- package/dist/auth/signature.js +18 -0
- package/dist/auth/signature.js.map +1 -0
- package/dist/auth/signature.test.d.ts +1 -0
- package/dist/auth/signature.test.js +90 -0
- package/dist/auth/signature.test.js.map +1 -0
- package/dist/client/ncloud-client.d.ts +27 -0
- package/dist/client/ncloud-client.js +270 -0
- package/dist/client/ncloud-client.js.map +1 -0
- package/dist/client/ncloud-client.test.d.ts +1 -0
- package/dist/client/ncloud-client.test.js +477 -0
- package/dist/client/ncloud-client.test.js.map +1 -0
- package/dist/client/s3-compatible-client.d.ts +49 -0
- package/dist/client/s3-compatible-client.js +210 -0
- package/dist/client/s3-compatible-client.js.map +1 -0
- package/dist/client/swift-compatible-client.d.ts +68 -0
- package/dist/client/swift-compatible-client.js +173 -0
- package/dist/client/swift-compatible-client.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +362 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/acg.d.ts +3 -0
- package/dist/tools/acg.js +220 -0
- package/dist/tools/acg.js.map +1 -0
- package/dist/tools/activity-tracer.d.ts +3 -0
- package/dist/tools/activity-tracer.js +77 -0
- package/dist/tools/activity-tracer.js.map +1 -0
- package/dist/tools/analytics-cdss.d.ts +3 -0
- package/dist/tools/analytics-cdss.js +618 -0
- package/dist/tools/analytics-cdss.js.map +1 -0
- package/dist/tools/analytics-datacatalog.d.ts +10 -0
- package/dist/tools/analytics-datacatalog.js +409 -0
- package/dist/tools/analytics-datacatalog.js.map +1 -0
- package/dist/tools/analytics-dataflow.d.ts +16 -0
- package/dist/tools/analytics-dataflow.js +478 -0
- package/dist/tools/analytics-dataflow.js.map +1 -0
- package/dist/tools/analytics-dataforest.d.ts +10 -0
- package/dist/tools/analytics-dataforest.js +379 -0
- package/dist/tools/analytics-dataforest.js.map +1 -0
- package/dist/tools/analytics-dataquery.d.ts +16 -0
- package/dist/tools/analytics-dataquery.js +143 -0
- package/dist/tools/analytics-dataquery.js.map +1 -0
- package/dist/tools/analytics-datastream.d.ts +13 -0
- package/dist/tools/analytics-datastream.js +359 -0
- package/dist/tools/analytics-datastream.js.map +1 -0
- package/dist/tools/analytics-hadoop.d.ts +12 -0
- package/dist/tools/analytics-hadoop.js +450 -0
- package/dist/tools/analytics-hadoop.js.map +1 -0
- package/dist/tools/analytics-ses.d.ts +3 -0
- package/dist/tools/analytics-ses.js +653 -0
- package/dist/tools/analytics-ses.js.map +1 -0
- package/dist/tools/api-gateway.d.ts +3 -0
- package/dist/tools/api-gateway.js +202 -0
- package/dist/tools/api-gateway.js.map +1 -0
- package/dist/tools/autoscaling.d.ts +3 -0
- package/dist/tools/autoscaling.js +430 -0
- package/dist/tools/autoscaling.js.map +1 -0
- package/dist/tools/billing.d.ts +14 -0
- package/dist/tools/billing.js +545 -0
- package/dist/tools/billing.js.map +1 -0
- package/dist/tools/certificate-manager.d.ts +18 -0
- package/dist/tools/certificate-manager.js +84 -0
- package/dist/tools/certificate-manager.js.map +1 -0
- package/dist/tools/cloud-advisor.d.ts +3 -0
- package/dist/tools/cloud-advisor.js +202 -0
- package/dist/tools/cloud-advisor.js.map +1 -0
- package/dist/tools/cloud-functions.d.ts +3 -0
- package/dist/tools/cloud-functions.js +497 -0
- package/dist/tools/cloud-functions.js.map +1 -0
- package/dist/tools/cloud-insight-integration.d.ts +3 -0
- package/dist/tools/cloud-insight-integration.js +90 -0
- package/dist/tools/cloud-insight-integration.js.map +1 -0
- package/dist/tools/cloud-insight-plugin.d.ts +3 -0
- package/dist/tools/cloud-insight-plugin.js +600 -0
- package/dist/tools/cloud-insight-plugin.js.map +1 -0
- package/dist/tools/cloud-insight-rule.d.ts +3 -0
- package/dist/tools/cloud-insight-rule.js +570 -0
- package/dist/tools/cloud-insight-rule.js.map +1 -0
- package/dist/tools/cloud-insight.d.ts +3 -0
- package/dist/tools/cloud-insight.js +246 -0
- package/dist/tools/cloud-insight.js.map +1 -0
- package/dist/tools/common.d.ts +3 -0
- package/dist/tools/common.js +120 -0
- package/dist/tools/common.js.map +1 -0
- package/dist/tools/compute-initscript.d.ts +3 -0
- package/dist/tools/compute-initscript.js +62 -0
- package/dist/tools/compute-initscript.js.map +1 -0
- package/dist/tools/compute-loginkey.d.ts +3 -0
- package/dist/tools/compute-loginkey.js +59 -0
- package/dist/tools/compute-loginkey.js.map +1 -0
- package/dist/tools/compute-placement.d.ts +3 -0
- package/dist/tools/compute-placement.js +196 -0
- package/dist/tools/compute-placement.js.map +1 -0
- package/dist/tools/compute-publicip.d.ts +3 -0
- package/dist/tools/compute-publicip.js +97 -0
- package/dist/tools/compute-publicip.js.map +1 -0
- package/dist/tools/compute-server.d.ts +3 -0
- package/dist/tools/compute-server.js +445 -0
- package/dist/tools/compute-server.js.map +1 -0
- package/dist/tools/compute-server.test.d.ts +1 -0
- package/dist/tools/compute-server.test.js +224 -0
- package/dist/tools/compute-server.test.js.map +1 -0
- package/dist/tools/compute-storage.d.ts +3 -0
- package/dist/tools/compute-storage.js +240 -0
- package/dist/tools/compute-storage.js.map +1 -0
- package/dist/tools/containers-nks.d.ts +13 -0
- package/dist/tools/containers-nks.js +576 -0
- package/dist/tools/containers-nks.js.map +1 -0
- package/dist/tools/containers-registry.d.ts +3 -0
- package/dist/tools/containers-registry.js +181 -0
- package/dist/tools/containers-registry.js.map +1 -0
- package/dist/tools/database-cache.d.ts +3 -0
- package/dist/tools/database-cache.js +388 -0
- package/dist/tools/database-cache.js.map +1 -0
- package/dist/tools/database-mongodb.d.ts +3 -0
- package/dist/tools/database-mongodb.js +460 -0
- package/dist/tools/database-mongodb.js.map +1 -0
- package/dist/tools/database-mssql.d.ts +3 -0
- package/dist/tools/database-mssql.js +345 -0
- package/dist/tools/database-mssql.js.map +1 -0
- package/dist/tools/database-mysql.d.ts +3 -0
- package/dist/tools/database-mysql.js +500 -0
- package/dist/tools/database-mysql.js.map +1 -0
- package/dist/tools/database-postgresql.d.ts +3 -0
- package/dist/tools/database-postgresql.js +432 -0
- package/dist/tools/database-postgresql.js.map +1 -0
- package/dist/tools/global-dns.d.ts +3 -0
- package/dist/tools/global-dns.js +207 -0
- package/dist/tools/global-dns.js.map +1 -0
- package/dist/tools/global-edge.d.ts +3 -0
- package/dist/tools/global-edge.js +386 -0
- package/dist/tools/global-edge.js.map +1 -0
- package/dist/tools/global-traffic-manager.d.ts +3 -0
- package/dist/tools/global-traffic-manager.js +497 -0
- package/dist/tools/global-traffic-manager.js.map +1 -0
- package/dist/tools/index.d.ts +63 -0
- package/dist/tools/index.js +64 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/kms.d.ts +8 -0
- package/dist/tools/kms.js +529 -0
- package/dist/tools/kms.js.map +1 -0
- package/dist/tools/loadbalancer.d.ts +3 -0
- package/dist/tools/loadbalancer.js +341 -0
- package/dist/tools/loadbalancer.js.map +1 -0
- package/dist/tools/log-analytics.d.ts +3 -0
- package/dist/tools/log-analytics.js +183 -0
- package/dist/tools/log-analytics.js.map +1 -0
- package/dist/tools/media-imageoptimizer.d.ts +3 -0
- package/dist/tools/media-imageoptimizer.js +187 -0
- package/dist/tools/media-imageoptimizer.js.map +1 -0
- package/dist/tools/media-livestation.d.ts +3 -0
- package/dist/tools/media-livestation.js +252 -0
- package/dist/tools/media-livestation.js.map +1 -0
- package/dist/tools/media-vodstation.d.ts +3 -0
- package/dist/tools/media-vodstation.js +197 -0
- package/dist/tools/media-vodstation.js.map +1 -0
- package/dist/tools/nat-gateway.d.ts +3 -0
- package/dist/tools/nat-gateway.js +91 -0
- package/dist/tools/nat-gateway.js.map +1 -0
- package/dist/tools/network-acl.d.ts +3 -0
- package/dist/tools/network-acl.js +322 -0
- package/dist/tools/network-acl.js.map +1 -0
- package/dist/tools/network-interface.d.ts +3 -0
- package/dist/tools/network-interface.js +193 -0
- package/dist/tools/network-interface.js.map +1 -0
- package/dist/tools/private-ca.d.ts +8 -0
- package/dist/tools/private-ca.js +368 -0
- package/dist/tools/private-ca.js.map +1 -0
- package/dist/tools/resource-manager.d.ts +3 -0
- package/dist/tools/resource-manager.js +151 -0
- package/dist/tools/resource-manager.js.map +1 -0
- package/dist/tools/route-table.d.ts +3 -0
- package/dist/tools/route-table.js +205 -0
- package/dist/tools/route-table.js.map +1 -0
- package/dist/tools/security-monitoring.d.ts +3 -0
- package/dist/tools/security-monitoring.js +182 -0
- package/dist/tools/security-monitoring.js.map +1 -0
- package/dist/tools/sens.d.ts +3 -0
- package/dist/tools/sens.js +240 -0
- package/dist/tools/sens.js.map +1 -0
- package/dist/tools/sourcebuild.d.ts +3 -0
- package/dist/tools/sourcebuild.js +481 -0
- package/dist/tools/sourcebuild.js.map +1 -0
- package/dist/tools/sourcecommit.d.ts +13 -0
- package/dist/tools/sourcecommit.js +228 -0
- package/dist/tools/sourcecommit.js.map +1 -0
- package/dist/tools/sourcedeploy.d.ts +3 -0
- package/dist/tools/sourcedeploy.js +448 -0
- package/dist/tools/sourcedeploy.js.map +1 -0
- package/dist/tools/sourcepipeline.d.ts +12 -0
- package/dist/tools/sourcepipeline.js +357 -0
- package/dist/tools/sourcepipeline.js.map +1 -0
- package/dist/tools/storage-archive.d.ts +3 -0
- package/dist/tools/storage-archive.js +337 -0
- package/dist/tools/storage-archive.js.map +1 -0
- package/dist/tools/storage-nas.d.ts +3 -0
- package/dist/tools/storage-nas.js +288 -0
- package/dist/tools/storage-nas.js.map +1 -0
- package/dist/tools/storage-ncloud.d.ts +3 -0
- package/dist/tools/storage-ncloud.js +864 -0
- package/dist/tools/storage-ncloud.js.map +1 -0
- package/dist/tools/storage-object.d.ts +3 -0
- package/dist/tools/storage-object.js +982 -0
- package/dist/tools/storage-object.js.map +1 -0
- package/dist/tools/sub-account.d.ts +3 -0
- package/dist/tools/sub-account.js +311 -0
- package/dist/tools/sub-account.js.map +1 -0
- package/dist/tools/target-group.d.ts +3 -0
- package/dist/tools/target-group.js +207 -0
- package/dist/tools/target-group.js.map +1 -0
- package/dist/tools/vpc-peering.d.ts +3 -0
- package/dist/tools/vpc-peering.js +109 -0
- package/dist/tools/vpc-peering.js.map +1 -0
- package/dist/tools/vpc.d.ts +3 -0
- package/dist/tools/vpc.js +194 -0
- package/dist/tools/vpc.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export function registerComputePlacementTools(server, client) {
|
|
3
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
4
|
+
// Placement Group Tools
|
|
5
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
6
|
+
// ─── Query Tools ───────────────────────────────────────────────────────────
|
|
7
|
+
server.tool("ncloud_list_placement_groups", "List all placement groups in the current region", {
|
|
8
|
+
placementGroupNoList: z.array(z.string()).optional().describe("Filter by placement group numbers"),
|
|
9
|
+
placementGroupName: z.string().optional().describe("Filter by placement group name"),
|
|
10
|
+
}, async (params) => {
|
|
11
|
+
try {
|
|
12
|
+
const result = await client.request("/vserver/v2/getPlacementGroupList", params);
|
|
13
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
server.tool("ncloud_get_placement_group_detail", "Get detailed information about a specific placement group", {
|
|
20
|
+
placementGroupNo: z.string({ required_error: "필수 파라미터 'placementGroupNo'가 누락되었습니다." }).describe("Placement group number to query"),
|
|
21
|
+
}, async (params) => {
|
|
22
|
+
try {
|
|
23
|
+
const result = await client.request("/vserver/v2/getPlacementGroupDetail", params);
|
|
24
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
// ─── Create Tool ─────────────────────────────────────────────────────────
|
|
31
|
+
server.tool("ncloud_create_placement_group", "Create a new placement group for physical server placement control", {
|
|
32
|
+
placementGroupName: z.string().max(30, {
|
|
33
|
+
message: "잘못된 파라미터: 'placementGroupName'은 30자 이하여야 합니다.",
|
|
34
|
+
}).optional().describe("Placement group name (max 30 characters)"),
|
|
35
|
+
placementGroupTypeCode: z.string().optional().describe("Placement group type code (default: AA - Anti-Affinity)"),
|
|
36
|
+
}, async (params) => {
|
|
37
|
+
try {
|
|
38
|
+
const result = await client.request("/vserver/v2/createPlacementGroup", params);
|
|
39
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
// ─── Server Management Tools ───────────────────────────────────────────────
|
|
46
|
+
server.tool("ncloud_add_placement_group_server", "Add a server instance to a placement group", {
|
|
47
|
+
placementGroupNo: z.string({ required_error: "필수 파라미터 'placementGroupNo'가 누락되었습니다." }).describe("Placement group number"),
|
|
48
|
+
serverInstanceNo: z.string({ required_error: "필수 파라미터 'serverInstanceNo'가 누락되었습니다." }).describe("Server instance number to add"),
|
|
49
|
+
}, async (params) => {
|
|
50
|
+
try {
|
|
51
|
+
const result = await client.request("/vserver/v2/addPlacementGroupServerInstance", params);
|
|
52
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
server.tool("ncloud_remove_placement_group_server", "⚠️ Destructive: Remove a server instance from a placement group. Set confirm=true to execute.", {
|
|
59
|
+
placementGroupNo: z.string({ required_error: "필수 파라미터 'placementGroupNo'가 누락되었습니다." }).describe("Placement group number"),
|
|
60
|
+
serverInstanceNo: z.string({ required_error: "필수 파라미터 'serverInstanceNo'가 누락되었습니다." }).describe("Server instance number to remove"),
|
|
61
|
+
confirm: z.boolean().optional().default(false).describe("Must be true to actually execute the destructive operation"),
|
|
62
|
+
}, async (params) => {
|
|
63
|
+
try {
|
|
64
|
+
if (!params.confirm) {
|
|
65
|
+
const message = `⚠️ This will remove server [${params.serverInstanceNo}] from placement group [${params.placementGroupNo}]. Do you want to proceed? (yes/no)\n\nTo execute, call this tool again with confirm=true.`;
|
|
66
|
+
return { content: [{ type: "text", text: message }] };
|
|
67
|
+
}
|
|
68
|
+
const { confirm, ...apiParams } = params;
|
|
69
|
+
const result = await client.request("/vserver/v2/removePlacementGroupServerInstance", apiParams);
|
|
70
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
// ─── Destructive Tool ──────────────────────────────────────────────────────
|
|
77
|
+
server.tool("ncloud_delete_placement_group", "⚠️ Destructive: Permanently delete a placement group. Set confirm=true to execute.", {
|
|
78
|
+
placementGroupNo: z.string({ required_error: "필수 파라미터 'placementGroupNo'가 누락되었습니다." }).describe("Placement group number to delete"),
|
|
79
|
+
confirm: z.boolean().optional().default(false).describe("Must be true to actually execute the destructive operation"),
|
|
80
|
+
}, async (params) => {
|
|
81
|
+
try {
|
|
82
|
+
if (!params.confirm) {
|
|
83
|
+
const message = `⚠️ This will permanently delete placement group [${params.placementGroupNo}]. Do you want to proceed? (yes/no)\n\nTo execute, call this tool again with confirm=true.`;
|
|
84
|
+
return { content: [{ type: "text", text: message }] };
|
|
85
|
+
}
|
|
86
|
+
const { confirm, ...apiParams } = params;
|
|
87
|
+
const result = await client.request("/vserver/v2/deletePlacementGroup", apiParams);
|
|
88
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
95
|
+
// Fabric Cluster Tools
|
|
96
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
97
|
+
// ─── Query Tools ───────────────────────────────────────────────────────────
|
|
98
|
+
server.tool("ncloud_list_fabric_clusters", "List all fabric clusters in the current region", {
|
|
99
|
+
fabricClusterNoList: z.array(z.string()).optional().describe("Filter by fabric cluster numbers"),
|
|
100
|
+
fabricClusterName: z.string().optional().describe("Filter by fabric cluster name"),
|
|
101
|
+
}, async (params) => {
|
|
102
|
+
try {
|
|
103
|
+
const result = await client.request("/vserver/v2/getFabricClusterList", params);
|
|
104
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
server.tool("ncloud_get_fabric_cluster_detail", "Get detailed information about a specific fabric cluster", {
|
|
111
|
+
fabricClusterNo: z.string({ required_error: "필수 파라미터 'fabricClusterNo'가 누락되었습니다." }).describe("Fabric cluster number to query"),
|
|
112
|
+
}, async (params) => {
|
|
113
|
+
try {
|
|
114
|
+
const result = await client.request("/vserver/v2/getFabricClusterDetail", params);
|
|
115
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
server.tool("ncloud_get_fabric_cluster_pools", "List available fabric cluster pools (physical resource pools)", {
|
|
122
|
+
fabricClusterPoolNoList: z.array(z.string()).optional().describe("Filter by fabric cluster pool numbers"),
|
|
123
|
+
}, async (params) => {
|
|
124
|
+
try {
|
|
125
|
+
const result = await client.request("/vserver/v2/getFabricClusterPoolList", params);
|
|
126
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
// ─── Create Tool ─────────────────────────────────────────────────────────
|
|
133
|
+
server.tool("ncloud_create_fabric_cluster", "Create a new fabric cluster for dedicated physical server grouping", {
|
|
134
|
+
fabricClusterName: z.string({ required_error: "필수 파라미터 'fabricClusterName'이 누락되었습니다." }).max(30, {
|
|
135
|
+
message: "잘못된 파라미터: 'fabricClusterName'은 30자 이하여야 합니다.",
|
|
136
|
+
}).describe("Fabric cluster name (max 30 characters)"),
|
|
137
|
+
fabricClusterPoolNo: z.string({ required_error: "필수 파라미터 'fabricClusterPoolNo'가 누락되었습니다." }).describe("Fabric cluster pool number"),
|
|
138
|
+
fabricClusterDescription: z.string().optional().describe("Description for the fabric cluster"),
|
|
139
|
+
}, async (params) => {
|
|
140
|
+
try {
|
|
141
|
+
const result = await client.request("/vserver/v2/createFabricCluster", params);
|
|
142
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
// ─── Update Tool ─────────────────────────────────────────────────────────
|
|
149
|
+
server.tool("ncloud_update_fabric_cluster", "Update a fabric cluster's name or description", {
|
|
150
|
+
fabricClusterNo: z.string({ required_error: "필수 파라미터 'fabricClusterNo'가 누락되었습니다." }).describe("Fabric cluster number to update"),
|
|
151
|
+
fabricClusterName: z.string().max(30, {
|
|
152
|
+
message: "잘못된 파라미터: 'fabricClusterName'은 30자 이하여야 합니다.",
|
|
153
|
+
}).optional().describe("New fabric cluster name"),
|
|
154
|
+
fabricClusterDescription: z.string().optional().describe("New description for the fabric cluster"),
|
|
155
|
+
}, async (params) => {
|
|
156
|
+
try {
|
|
157
|
+
const result = await client.request("/vserver/v2/updateFabricCluster", params);
|
|
158
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
// ─── Server Management Tool ────────────────────────────────────────────────
|
|
165
|
+
server.tool("ncloud_change_fabric_cluster_servers", "Change server instances assigned to a fabric cluster", {
|
|
166
|
+
fabricClusterNo: z.string({ required_error: "필수 파라미터 'fabricClusterNo'가 누락되었습니다." }).describe("Fabric cluster number"),
|
|
167
|
+
serverInstanceNoList: z.array(z.string()).describe("List of server instance numbers to assign to the fabric cluster"),
|
|
168
|
+
}, async (params) => {
|
|
169
|
+
try {
|
|
170
|
+
const result = await client.request("/vserver/v2/changeFabricClusterServerInstances", params);
|
|
171
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
// ─── Destructive Tool ──────────────────────────────────────────────────────
|
|
178
|
+
server.tool("ncloud_delete_fabric_cluster", "⚠️ Destructive: Permanently delete a fabric cluster. Set confirm=true to execute.", {
|
|
179
|
+
fabricClusterNo: z.string({ required_error: "필수 파라미터 'fabricClusterNo'가 누락되었습니다." }).describe("Fabric cluster number to delete"),
|
|
180
|
+
confirm: z.boolean().optional().default(false).describe("Must be true to actually execute the destructive operation"),
|
|
181
|
+
}, async (params) => {
|
|
182
|
+
try {
|
|
183
|
+
if (!params.confirm) {
|
|
184
|
+
const message = `⚠️ This will permanently delete fabric cluster [${params.fabricClusterNo}]. Do you want to proceed? (yes/no)\n\nTo execute, call this tool again with confirm=true.`;
|
|
185
|
+
return { content: [{ type: "text", text: message }] };
|
|
186
|
+
}
|
|
187
|
+
const { confirm, ...apiParams } = params;
|
|
188
|
+
const result = await client.request("/vserver/v2/deleteFabricCluster", apiParams);
|
|
189
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=compute-placement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compute-placement.js","sourceRoot":"","sources":["../../src/tools/compute-placement.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,6BAA6B,CAAC,MAAiB,EAAE,MAAoB;IACnF,8EAA8E;IAC9E,wBAAwB;IACxB,8EAA8E;IAE9E,8EAA8E;IAE9E,MAAM,CAAC,IAAI,CACT,8BAA8B,EAC9B,iDAAiD,EACjD;QACE,oBAAoB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QAClG,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;KACrF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,mCAAmC,EAAE,MAAM,CAAC,CAAC;YACjF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACzF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACtF,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,mCAAmC,EACnC,2DAA2D,EAC3D;QACE,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,sCAAsC,EAAE,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;KACnI,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,qCAAqC,EAAE,MAAM,CAAC,CAAC;YACnF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACzF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACtF,CAAC;IACH,CAAC,CACF,CAAC;IAEF,4EAA4E;IAE5E,MAAM,CAAC,IAAI,CACT,+BAA+B,EAC/B,oEAAoE,EACpE;QACE,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE;YACrC,OAAO,EAAE,+CAA+C;SACzD,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;QAClE,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;KAClH,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,kCAAkC,EAAE,MAAM,CAAC,CAAC;YAChF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACzF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACtF,CAAC;IACH,CAAC,CACF,CAAC;IAEF,8EAA8E;IAE9E,MAAM,CAAC,IAAI,CACT,mCAAmC,EACnC,4CAA4C,EAC5C;QACE,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,sCAAsC,EAAE,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QACzH,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,sCAAsC,EAAE,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;KACjI,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,6CAA6C,EAAE,MAAM,CAAC,CAAC;YAC3F,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACzF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACtF,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,sCAAsC,EACtC,+FAA+F,EAC/F;QACE,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,sCAAsC,EAAE,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QACzH,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,sCAAsC,EAAE,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QACnI,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,4DAA4D,CAAC;KACtH,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,OAAO,GAAG,+BAA+B,MAAM,CAAC,gBAAgB,2BAA2B,MAAM,CAAC,gBAAgB,4FAA4F,CAAC;gBACrN,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;YACjE,CAAC;YACD,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,GAAG,MAAM,CAAC;YACzC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,gDAAgD,EAAE,SAAS,CAAC,CAAC;YACjG,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACzF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACtF,CAAC;IACH,CAAC,CACF,CAAC;IAEF,8EAA8E;IAE9E,MAAM,CAAC,IAAI,CACT,+BAA+B,EAC/B,oFAAoF,EACpF;QACE,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,sCAAsC,EAAE,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QACnI,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,4DAA4D,CAAC;KACtH,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,OAAO,GAAG,oDAAoD,MAAM,CAAC,gBAAgB,4FAA4F,CAAC;gBACxL,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;YACjE,CAAC;YACD,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,GAAG,MAAM,CAAC;YACzC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,kCAAkC,EAAE,SAAS,CAAC,CAAC;YACnF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACzF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACtF,CAAC;IACH,CAAC,CACF,CAAC;IAEF,8EAA8E;IAC9E,uBAAuB;IACvB,8EAA8E;IAE9E,8EAA8E;IAE9E,MAAM,CAAC,IAAI,CACT,6BAA6B,EAC7B,gDAAgD,EAChD;QACE,mBAAmB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QAChG,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;KACnF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,kCAAkC,EAAE,MAAM,CAAC,CAAC;YAChF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACzF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACtF,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,kCAAkC,EAClC,0DAA0D,EAC1D;QACE,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,qCAAqC,EAAE,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC;KAChI,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,oCAAoC,EAAE,MAAM,CAAC,CAAC;YAClF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACzF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACtF,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,iCAAiC,EACjC,+DAA+D,EAC/D;QACE,uBAAuB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;KAC1G,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,sCAAsC,EAAE,MAAM,CAAC,CAAC;YACpF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACzF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACtF,CAAC;IACH,CAAC,CACF,CAAC;IAEF,4EAA4E;IAE5E,MAAM,CAAC,IAAI,CACT,8BAA8B,EAC9B,oEAAoE,EACpE;QACE,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,uCAAuC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE;YAC/F,OAAO,EAAE,8CAA8C;SACxD,CAAC,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QACtD,mBAAmB,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,yCAAyC,EAAE,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACnI,wBAAwB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;KAC/F,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC;YAC/E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACzF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACtF,CAAC;IACH,CAAC,CACF,CAAC;IAEF,4EAA4E;IAE5E,MAAM,CAAC,IAAI,CACT,8BAA8B,EAC9B,+CAA+C,EAC/C;QACE,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,qCAAqC,EAAE,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QAChI,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE;YACpC,OAAO,EAAE,8CAA8C;SACxD,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACjD,wBAAwB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KACnG,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC;YAC/E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACzF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACtF,CAAC;IACH,CAAC,CACF,CAAC;IAEF,8EAA8E;IAE9E,MAAM,CAAC,IAAI,CACT,sCAAsC,EACtC,sDAAsD,EACtD;QACE,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,qCAAqC,EAAE,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACtH,oBAAoB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,iEAAiE,CAAC;KACtH,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,gDAAgD,EAAE,MAAM,CAAC,CAAC;YAC9F,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACzF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACtF,CAAC;IACH,CAAC,CACF,CAAC;IAEF,8EAA8E;IAE9E,MAAM,CAAC,IAAI,CACT,8BAA8B,EAC9B,mFAAmF,EACnF;QACE,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,qCAAqC,EAAE,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QAChI,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,4DAA4D,CAAC;KACtH,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,OAAO,GAAG,mDAAmD,MAAM,CAAC,eAAe,4FAA4F,CAAC;gBACtL,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;YACjE,CAAC;YACD,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,GAAG,MAAM,CAAC;YACzC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,iCAAiC,EAAE,SAAS,CAAC,CAAC;YAClF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACzF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACtF,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export function registerComputePublicIpTools(server, client) {
|
|
3
|
+
// ─── Query Tools ───────────────────────────────────────────────────────────
|
|
4
|
+
server.tool("ncloud_list_public_ips", "List all public IP instances in the current region", {
|
|
5
|
+
publicIpInstanceNoList: z.array(z.string()).optional().describe("Filter by public IP instance numbers"),
|
|
6
|
+
isAssociated: z.boolean().optional().describe("Filter by association status"),
|
|
7
|
+
pageNo: z.number().optional().describe("Page number for pagination"),
|
|
8
|
+
pageSize: z.number().optional().describe("Page size for pagination"),
|
|
9
|
+
}, async (params) => {
|
|
10
|
+
try {
|
|
11
|
+
const result = await client.request("/vserver/v2/getPublicIpInstanceList", params);
|
|
12
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
server.tool("ncloud_get_public_ip_detail", "Get detailed information about a specific public IP instance", {
|
|
19
|
+
publicIpInstanceNo: z.string().describe("Public IP instance number"),
|
|
20
|
+
}, async (params) => {
|
|
21
|
+
try {
|
|
22
|
+
const result = await client.request("/vserver/v2/getPublicIpInstanceDetail", params);
|
|
23
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
server.tool("ncloud_get_public_ip_target_servers", "List server instances that can be assigned a public IP", {}, async () => {
|
|
30
|
+
try {
|
|
31
|
+
const result = await client.request("/vserver/v2/getPublicIpTargetServerInstanceList");
|
|
32
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
// ─── Create & Associate Tools ──────────────────────────────────────────────
|
|
39
|
+
server.tool("ncloud_create_public_ip", "Create a new public IP instance", {
|
|
40
|
+
serverInstanceNo: z.string().optional().describe("Server instance number to associate with immediately"),
|
|
41
|
+
publicIpDescription: z.string().optional().describe("Description for the public IP"),
|
|
42
|
+
}, async (params) => {
|
|
43
|
+
try {
|
|
44
|
+
const result = await client.request("/vserver/v2/createPublicIpInstance", params);
|
|
45
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
server.tool("ncloud_associate_public_ip", "Associate a public IP with a server instance", {
|
|
52
|
+
publicIpInstanceNo: z.string({ required_error: "필수 파라미터 'publicIpInstanceNo'가 누락되었습니다." }).describe("Public IP instance number"),
|
|
53
|
+
serverInstanceNo: z.string({ required_error: "필수 파라미터 'serverInstanceNo'가 누락되었습니다." }).describe("Server instance number to associate with"),
|
|
54
|
+
}, async (params) => {
|
|
55
|
+
try {
|
|
56
|
+
const result = await client.request("/vserver/v2/associatePublicIpWithServerInstance", params);
|
|
57
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
server.tool("ncloud_disassociate_public_ip", "Disassociate a public IP from its currently associated server instance", {
|
|
64
|
+
publicIpInstanceNo: z.string({ required_error: "필수 파라미터 'publicIpInstanceNo'가 누락되었습니다." }).describe("Public IP instance number to disassociate"),
|
|
65
|
+
}, async (params) => {
|
|
66
|
+
try {
|
|
67
|
+
const result = await client.request("/vserver/v2/disassociatePublicIpFromServerInstance", params);
|
|
68
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
// ─── Destructive Tools (with confirm gate) ─────────────────────────────────
|
|
75
|
+
// Destructive tool includes:
|
|
76
|
+
// 1. "⚠️ Destructive" in description
|
|
77
|
+
// 2. confirm parameter (default false) that gates API execution
|
|
78
|
+
// 3. Required parameter validation via zod
|
|
79
|
+
server.tool("ncloud_delete_public_ip", "⚠️ Destructive: Delete a public IP instance. Set confirm=true to execute.", {
|
|
80
|
+
publicIpInstanceNo: z.string({ required_error: "필수 파라미터 'publicIpInstanceNo'가 누락되었습니다." }).describe("Public IP instance number to delete"),
|
|
81
|
+
confirm: z.boolean().optional().default(false).describe("Must be true to actually execute the destructive operation"),
|
|
82
|
+
}, async (params) => {
|
|
83
|
+
try {
|
|
84
|
+
if (!params.confirm) {
|
|
85
|
+
const message = `⚠️ This will permanently delete PublicIP [${params.publicIpInstanceNo}]. Do you want to proceed? (yes/no)\n\nTo execute, call this tool again with confirm=true.`;
|
|
86
|
+
return { content: [{ type: "text", text: message }] };
|
|
87
|
+
}
|
|
88
|
+
const { confirm, ...apiParams } = params;
|
|
89
|
+
const result = await client.request("/vserver/v2/deletePublicIpInstance", apiParams);
|
|
90
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=compute-publicip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compute-publicip.js","sourceRoot":"","sources":["../../src/tools/compute-publicip.ts"],"names":[],"mappings":"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"}
|