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,207 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export function registerTargetGroupTools(server, client) {
|
|
3
|
+
// ─── Target Group Query Tools ──────────────────────────────────────────────
|
|
4
|
+
server.tool("ncloud_list_target_groups", "List all target groups in the current region", {
|
|
5
|
+
targetGroupNoList: z.array(z.string()).optional().describe("Filter by target group numbers"),
|
|
6
|
+
loadBalancerInstanceNo: z.string().optional().describe("Filter by load balancer instance number"),
|
|
7
|
+
vpcNo: z.string().optional().describe("Filter by VPC number"),
|
|
8
|
+
pageNo: z.number().optional().describe("Page number for pagination"),
|
|
9
|
+
pageSize: z.number().optional().describe("Page size for pagination"),
|
|
10
|
+
}, async (params) => {
|
|
11
|
+
try {
|
|
12
|
+
const result = await client.request("/vloadbalancer/v2/getTargetGroupList", 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_target_group_detail", "Get detailed information about a specific target group", {
|
|
20
|
+
targetGroupNo: z.string({
|
|
21
|
+
required_error: "필수 파라미터 'targetGroupNo'가 누락되었습니다.",
|
|
22
|
+
}).describe("Target group number to query"),
|
|
23
|
+
}, async (params) => {
|
|
24
|
+
try {
|
|
25
|
+
const result = await client.request("/vloadbalancer/v2/getTargetGroupDetail", params);
|
|
26
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
// ─── Target Group Create Tool ──────────────────────────────────────────────
|
|
33
|
+
server.tool("ncloud_create_target_group", "Create a new target group for a load balancer", {
|
|
34
|
+
vpcNo: z.string({
|
|
35
|
+
required_error: "필수 파라미터 'vpcNo'가 누락되었습니다.",
|
|
36
|
+
}).describe("VPC number"),
|
|
37
|
+
targetGroupName: z.string().max(30, {
|
|
38
|
+
message: "잘못된 파라미터: 'targetGroupName'은 30자 이하여야 합니다.",
|
|
39
|
+
}).optional().describe("Target group name (max 30 characters)"),
|
|
40
|
+
targetGroupProtocolTypeCode: z.string({
|
|
41
|
+
required_error: "필수 파라미터 'targetGroupProtocolTypeCode'가 누락되었습니다.",
|
|
42
|
+
}).describe("Target group protocol type (HTTP, HTTPS, TCP, PROXY_TCP)"),
|
|
43
|
+
targetTypeCode: z.string({
|
|
44
|
+
required_error: "필수 파라미터 'targetTypeCode'가 누락되었습니다.",
|
|
45
|
+
}).describe("Target type code (VSVR)"),
|
|
46
|
+
targetGroupPort: z.number().optional().describe("Target group port number"),
|
|
47
|
+
targetGroupDescription: z.string().optional().describe("Target group description"),
|
|
48
|
+
healthCheckProtocolTypeCode: z.string().optional().describe("Health check protocol (HTTP, HTTPS, TCP)"),
|
|
49
|
+
healthCheckPort: z.number().optional().describe("Health check port"),
|
|
50
|
+
healthCheckUrlPath: z.string().optional().describe("Health check URL path (for HTTP/HTTPS)"),
|
|
51
|
+
healthCheckHttpMethodTypeCode: z.string().optional().describe("HTTP method type for health check (HEAD, GET). Required if healthCheckProtocolTypeCode is HTTP or HTTPS"),
|
|
52
|
+
healthCheckCycle: z.number().optional().describe("Health check cycle in seconds (5-300, default: 30)"),
|
|
53
|
+
healthCheckUpThreshold: z.number().optional().describe("Healthy threshold count (2-10, default: 2)"),
|
|
54
|
+
healthCheckDownThreshold: z.number().optional().describe("Unhealthy threshold count (2-10, default: 2)"),
|
|
55
|
+
algorithmTypeCode: z.string().optional().describe("Load balancing algorithm (RR, LC, SIPHS, MH)"),
|
|
56
|
+
targetNoList: z.array(z.string()).optional().describe("List of target numbers to bind to the target group at creation"),
|
|
57
|
+
}, async (params) => {
|
|
58
|
+
try {
|
|
59
|
+
const result = await client.request("/vloadbalancer/v2/createTargetGroup", params);
|
|
60
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
// ─── Target Group Destructive Tool ─────────────────────────────────────────
|
|
67
|
+
server.tool("ncloud_delete_target_groups", "⚠️ Destructive: Permanently delete target groups. Set confirm=true to execute.", {
|
|
68
|
+
targetGroupNoList: z.array(z.string(), {
|
|
69
|
+
required_error: "필수 파라미터 'targetGroupNoList'가 누락되었습니다.",
|
|
70
|
+
}).describe("List of target group numbers to delete"),
|
|
71
|
+
confirm: z.boolean().optional().default(false).describe("Must be true to actually execute the destructive operation"),
|
|
72
|
+
}, async (params) => {
|
|
73
|
+
try {
|
|
74
|
+
if (!params.confirm) {
|
|
75
|
+
const message = `⚠️ This will permanently delete Target Group(s) [${params.targetGroupNoList.join(", ")}]. Do you want to proceed? (yes/no)\n\nTo execute, call this tool again with confirm=true.`;
|
|
76
|
+
return { content: [{ type: "text", text: message }] };
|
|
77
|
+
}
|
|
78
|
+
const { confirm, ...apiParams } = params;
|
|
79
|
+
const result = await client.request("/vloadbalancer/v2/deleteTargetGroups", apiParams);
|
|
80
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
// ─── Target Management Tools ───────────────────────────────────────────────
|
|
87
|
+
server.tool("ncloud_list_targets", "List all targets in a specific target group", {
|
|
88
|
+
targetGroupNo: z.string({
|
|
89
|
+
required_error: "필수 파라미터 'targetGroupNo'가 누락되었습니다.",
|
|
90
|
+
}).describe("Target group number"),
|
|
91
|
+
}, async (params) => {
|
|
92
|
+
try {
|
|
93
|
+
const result = await client.request("/vloadbalancer/v2/getTargetList", params);
|
|
94
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
server.tool("ncloud_add_target", "Add targets (server instances) to a target group", {
|
|
101
|
+
targetGroupNo: z.string({
|
|
102
|
+
required_error: "필수 파라미터 'targetGroupNo'가 누락되었습니다.",
|
|
103
|
+
}).describe("Target group number"),
|
|
104
|
+
targetNoList: z.array(z.string(), {
|
|
105
|
+
required_error: "필수 파라미터 'targetNoList'가 누락되었습니다.",
|
|
106
|
+
}).describe("List of target (server instance) numbers to add"),
|
|
107
|
+
}, async (params) => {
|
|
108
|
+
try {
|
|
109
|
+
const result = await client.request("/vloadbalancer/v2/addTarget", params);
|
|
110
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
server.tool("ncloud_remove_target", "⚠️ Destructive: Remove targets from a target group. Set confirm=true to execute.", {
|
|
117
|
+
targetGroupNo: z.string({
|
|
118
|
+
required_error: "필수 파라미터 'targetGroupNo'가 누락되었습니다.",
|
|
119
|
+
}).describe("Target group number"),
|
|
120
|
+
targetNoList: z.array(z.string(), {
|
|
121
|
+
required_error: "필수 파라미터 'targetNoList'가 누락되었습니다.",
|
|
122
|
+
}).describe("List of target (server instance) numbers to remove"),
|
|
123
|
+
confirm: z.boolean().optional().default(false).describe("Must be true to actually execute the destructive operation"),
|
|
124
|
+
}, async (params) => {
|
|
125
|
+
try {
|
|
126
|
+
if (!params.confirm) {
|
|
127
|
+
const message = `⚠️ This will remove Target(s) [${params.targetNoList.join(", ")}] from Target Group [${params.targetGroupNo}]. Do you want to proceed? (yes/no)\n\nTo execute, call this tool again with confirm=true.`;
|
|
128
|
+
return { content: [{ type: "text", text: message }] };
|
|
129
|
+
}
|
|
130
|
+
const { confirm, ...apiParams } = params;
|
|
131
|
+
const result = await client.request("/vloadbalancer/v2/removeTarget", apiParams);
|
|
132
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
// ─── Target Group Configuration Tools ──────────────────────────────────────
|
|
139
|
+
server.tool("ncloud_change_target_group_config", "Change target group configuration (algorithm, sticky session, proxy protocol)", {
|
|
140
|
+
targetGroupNo: z.string({
|
|
141
|
+
required_error: "필수 파라미터 'targetGroupNo'가 누락되었습니다.",
|
|
142
|
+
}).describe("Target group number"),
|
|
143
|
+
algorithmTypeCode: z.string().optional().describe("Load balancing algorithm type code (RR, SIPHS, LC, MH). HTTP/HTTPS/PROXY_TCP: RR|SIPHS|LC, TCP/UDP: RR|MH"),
|
|
144
|
+
useStickySession: z.boolean().optional().describe("Whether to enable per-session access (true/false). Available for TCP, UDP, HTTP, HTTPS protocols"),
|
|
145
|
+
useProxyProtocol: z.boolean().optional().describe("Whether to use proxy protocol (true/false). Available for PROXY_TCP protocol only"),
|
|
146
|
+
}, async (params) => {
|
|
147
|
+
try {
|
|
148
|
+
const result = await client.request("/vloadbalancer/v2/changeTargetGroupConfiguration", params);
|
|
149
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
server.tool("ncloud_change_target_group_health", "Change target group health check configuration", {
|
|
156
|
+
targetGroupNo: z.string({
|
|
157
|
+
required_error: "필수 파라미터 'targetGroupNo'가 누락되었습니다.",
|
|
158
|
+
}).describe("Target group number"),
|
|
159
|
+
healthCheckPort: z.number().optional().describe("Health check port number (1-65534, default: 80)"),
|
|
160
|
+
healthCheckUrlPath: z.string().optional().describe("Health check URL path (for HTTP/HTTPS, starts with /)"),
|
|
161
|
+
healthCheckHttpMethodTypeCode: z.string().optional().describe("HTTP method type for health check (HEAD, GET). Available if health check protocol is HTTP or HTTPS"),
|
|
162
|
+
healthCheckCycle: z.number().optional().describe("Health check cycle in seconds (5-300)"),
|
|
163
|
+
healthCheckUpThreshold: z.number().optional().describe("Healthy threshold count (2-10)"),
|
|
164
|
+
healthCheckDownThreshold: z.number().optional().describe("Unhealthy threshold count (2-10)"),
|
|
165
|
+
}, async (params) => {
|
|
166
|
+
try {
|
|
167
|
+
const result = await client.request("/vloadbalancer/v2/changeTargetGroupHealthCheckConfiguration", params);
|
|
168
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
server.tool("ncloud_set_target_group_description", "Set or update the description of a target group", {
|
|
175
|
+
targetGroupNo: z.string({
|
|
176
|
+
required_error: "필수 파라미터 'targetGroupNo'가 누락되었습니다.",
|
|
177
|
+
}).describe("Target group number"),
|
|
178
|
+
targetGroupDescription: z.string({
|
|
179
|
+
required_error: "필수 파라미터 'targetGroupDescription'가 누락되었습니다.",
|
|
180
|
+
}).describe("Target group description"),
|
|
181
|
+
}, async (params) => {
|
|
182
|
+
try {
|
|
183
|
+
const result = await client.request("/vloadbalancer/v2/setTargetGroupDescription", params);
|
|
184
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
server.tool("ncloud_set_targets", "Set targets for a target group (replaces all existing targets with the specified list)", {
|
|
191
|
+
targetGroupNo: z.string({
|
|
192
|
+
required_error: "필수 파라미터 'targetGroupNo'가 누락되었습니다.",
|
|
193
|
+
}).describe("Target group number"),
|
|
194
|
+
targetNoList: z.array(z.string(), {
|
|
195
|
+
required_error: "필수 파라미터 'targetNoList'가 누락되었습니다.",
|
|
196
|
+
}).describe("List of target (server instance) numbers to set (replaces existing targets)"),
|
|
197
|
+
}, async (params) => {
|
|
198
|
+
try {
|
|
199
|
+
const result = await client.request("/vloadbalancer/v2/setTarget", params);
|
|
200
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=target-group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"target-group.js","sourceRoot":"","sources":["../../src/tools/target-group.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export function registerVpcPeeringTools(server, client) {
|
|
3
|
+
// ─── Query Tools ───────────────────────────────────────────────────────────
|
|
4
|
+
server.tool("ncloud_list_vpc_peerings", "List all VPC Peering instances in the current region", {
|
|
5
|
+
vpcPeeringInstanceNoList: z.array(z.string()).optional().describe("Filter by VPC Peering instance numbers"),
|
|
6
|
+
vpcPeeringName: z.string().optional().describe("Filter by VPC Peering name"),
|
|
7
|
+
sourceVpcNo: z.string().optional().describe("Filter by source VPC number"),
|
|
8
|
+
targetVpcNo: z.string().optional().describe("Filter by target VPC number"),
|
|
9
|
+
vpcPeeringInstanceStatusCode: z.string().optional().describe("Filter by status code (RUN, INIT, TERMTING)"),
|
|
10
|
+
}, async (params) => {
|
|
11
|
+
try {
|
|
12
|
+
const result = await client.request("/vpc/v2/getVpcPeeringInstanceList", 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_vpc_peering_detail", "Get detailed information about a specific VPC Peering instance", {
|
|
20
|
+
vpcPeeringInstanceNo: z.string({ required_error: "필수 파라미터 'vpcPeeringInstanceNo'가 누락되었습니다." }).describe("VPC Peering instance number to query"),
|
|
21
|
+
}, async (params) => {
|
|
22
|
+
try {
|
|
23
|
+
const result = await client.request("/vpc/v2/getVpcPeeringInstanceDetail", 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 (with dryRun) ─────────────────────────────────────────────
|
|
31
|
+
server.tool("ncloud_create_vpc_peering", "Create a new VPC Peering connection between two VPCs. Use dryRun=true to preview without creating.", {
|
|
32
|
+
sourceVpcNo: z.string({ required_error: "필수 파라미터 'sourceVpcNo'가 누락되었습니다." }).describe("Source (requester) VPC number"),
|
|
33
|
+
targetVpcNo: z.string({ required_error: "필수 파라미터 'targetVpcNo'가 누락되었습니다." }).describe("Target (accepter) VPC number"),
|
|
34
|
+
targetVpcName: z.string().optional().describe("Target VPC name (required for cross-account peering)"),
|
|
35
|
+
targetVpcLoginId: z.string().optional().describe("Target VPC owner login ID (required for cross-account peering)"),
|
|
36
|
+
vpcPeeringName: z.string().max(30, {
|
|
37
|
+
message: "잘못된 파라미터: 'vpcPeeringName'은 30자 이하여야 합니다.",
|
|
38
|
+
}).optional().describe("VPC Peering name (max 30 characters)"),
|
|
39
|
+
vpcPeeringDescription: z.string().optional().describe("Description for the VPC Peering"),
|
|
40
|
+
dryRun: z.boolean().optional().default(false).describe("If true, returns a preview without actually creating the resource"),
|
|
41
|
+
}, async (params) => {
|
|
42
|
+
try {
|
|
43
|
+
if (params.dryRun) {
|
|
44
|
+
const preview = {
|
|
45
|
+
"🔍 Dry-Run Preview": "VPC Peering 생성 미리보기",
|
|
46
|
+
sourceVpcNo: params.sourceVpcNo,
|
|
47
|
+
targetVpcNo: params.targetVpcNo,
|
|
48
|
+
targetVpcName: params.targetVpcName ?? "(same account)",
|
|
49
|
+
targetVpcLoginId: params.targetVpcLoginId ?? "(same account)",
|
|
50
|
+
vpcPeeringName: params.vpcPeeringName ?? "(auto-generated)",
|
|
51
|
+
vpcPeeringDescription: params.vpcPeeringDescription ?? "(none)",
|
|
52
|
+
note: "dryRun=false로 다시 호출하면 실제로 생성됩니다.",
|
|
53
|
+
};
|
|
54
|
+
return { content: [{ type: "text", text: JSON.stringify(preview, null, 2) }] };
|
|
55
|
+
}
|
|
56
|
+
const { dryRun, ...apiParams } = params;
|
|
57
|
+
const result = await client.request("/vpc/v2/createVpcPeeringInstance", apiParams);
|
|
58
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
// ─── Accept/Reject Tool ────────────────────────────────────────────────────
|
|
65
|
+
server.tool("ncloud_accept_reject_vpc_peering", "Accept or reject a pending VPC Peering request", {
|
|
66
|
+
vpcPeeringInstanceNo: z.string({ required_error: "필수 파라미터 'vpcPeeringInstanceNo'가 누락되었습니다." }).describe("VPC Peering instance number"),
|
|
67
|
+
isAccept: z.boolean({ required_error: "필수 파라미터 'isAccept'가 누락되었습니다." }).describe("true to accept, false to reject the peering request"),
|
|
68
|
+
}, async (params) => {
|
|
69
|
+
try {
|
|
70
|
+
const result = await client.request("/vpc/v2/acceptOrRejectVpcPeering", params);
|
|
71
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
// ─── Description Tool ──────────────────────────────────────────────────────
|
|
78
|
+
server.tool("ncloud_set_vpc_peering_description", "Set or update the description of a VPC Peering instance", {
|
|
79
|
+
vpcPeeringInstanceNo: z.string({ required_error: "필수 파라미터 'vpcPeeringInstanceNo'가 누락되었습니다." }).describe("VPC Peering instance number"),
|
|
80
|
+
vpcPeeringDescription: z.string({ required_error: "필수 파라미터 'vpcPeeringDescription'이 누락되었습니다." }).describe("New description for the VPC Peering"),
|
|
81
|
+
}, async (params) => {
|
|
82
|
+
try {
|
|
83
|
+
const result = await client.request("/vpc/v2/setVpcPeeringDescription", params);
|
|
84
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
// ─── Destructive Tool (with confirm gate) ──────────────────────────────────
|
|
91
|
+
server.tool("ncloud_delete_vpc_peering", "⚠️ Destructive: Permanently delete a VPC Peering connection. Set confirm=true to execute.", {
|
|
92
|
+
vpcPeeringInstanceNo: z.string({ required_error: "필수 파라미터 'vpcPeeringInstanceNo'가 누락되었습니다." }).describe("VPC Peering instance number to delete"),
|
|
93
|
+
confirm: z.boolean().optional().default(false).describe("Must be true to actually execute the destructive operation"),
|
|
94
|
+
}, async (params) => {
|
|
95
|
+
try {
|
|
96
|
+
if (!params.confirm) {
|
|
97
|
+
const message = `⚠️ This will permanently delete VPC Peering [${params.vpcPeeringInstanceNo}]. Do you want to proceed? (yes/no)\n\nTo execute, call this tool again with confirm=true.`;
|
|
98
|
+
return { content: [{ type: "text", text: message }] };
|
|
99
|
+
}
|
|
100
|
+
const { confirm, ...apiParams } = params;
|
|
101
|
+
const result = await client.request("/vpc/v2/deleteVpcPeeringInstance", apiParams);
|
|
102
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=vpc-peering.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vpc-peering.js","sourceRoot":"","sources":["../../src/tools/vpc-peering.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export function registerVpcTools(server, client) {
|
|
3
|
+
// ─── VPC Query Tools ───────────────────────────────────────────────────────
|
|
4
|
+
server.tool("ncloud_list_vpcs", "List all VPCs in the current region", {
|
|
5
|
+
vpcNoList: z.array(z.string()).optional().describe("Filter by VPC numbers"),
|
|
6
|
+
vpcName: z.string().optional().describe("Filter by VPC name"),
|
|
7
|
+
vpcStatusCode: z.string().optional().describe("Filter by VPC status code (INIT, CREATING, RUN, TERMTING)"),
|
|
8
|
+
}, async (params) => {
|
|
9
|
+
try {
|
|
10
|
+
const result = await client.request("/vpc/v2/getVpcList", params);
|
|
11
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
server.tool("ncloud_get_vpc_detail", "Get detailed information about a specific VPC", {
|
|
18
|
+
vpcNo: z.string().describe("VPC number to query"),
|
|
19
|
+
}, async (params) => {
|
|
20
|
+
try {
|
|
21
|
+
const result = await client.request("/vpc/v2/getVpcDetail", params);
|
|
22
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
// ─── VPC Create Tool ───────────────────────────────────────────────────────
|
|
29
|
+
server.tool("ncloud_create_vpc", "Create a new VPC. Use dryRun=true to preview without creating.", {
|
|
30
|
+
ipv4CidrBlock: z.string({
|
|
31
|
+
required_error: "필수 파라미터 'ipv4CidrBlock'이 누락되었습니다.",
|
|
32
|
+
}).regex(/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\/\d{1,2}$/, {
|
|
33
|
+
message: "잘못된 파라미터: 'ipv4CidrBlock'은 CIDR 형식이어야 합니다 (예: 10.0.0.0/16)",
|
|
34
|
+
}).describe("VPC IPv4 CIDR block (e.g., 10.0.0.0/16)"),
|
|
35
|
+
vpcName: z.string().max(30, {
|
|
36
|
+
message: "잘못된 파라미터: 'vpcName'은 30자 이하여야 합니다.",
|
|
37
|
+
}).optional().describe("VPC name (max 30 characters)"),
|
|
38
|
+
dryRun: z.boolean().optional().default(false).describe("If true, returns a preview without actually creating the VPC"),
|
|
39
|
+
}, async (params) => {
|
|
40
|
+
try {
|
|
41
|
+
if (params.dryRun) {
|
|
42
|
+
const preview = {
|
|
43
|
+
label: "🔍 Dry-Run Preview: VPC Creation",
|
|
44
|
+
ipv4CidrBlock: params.ipv4CidrBlock,
|
|
45
|
+
vpcName: params.vpcName ?? "(auto-generated)",
|
|
46
|
+
message: "이 요청은 실제 VPC를 생성하지 않습니다. dryRun=false로 호출하면 VPC가 생성됩니다.",
|
|
47
|
+
};
|
|
48
|
+
return { content: [{ type: "text", text: JSON.stringify(preview, null, 2) }] };
|
|
49
|
+
}
|
|
50
|
+
const { dryRun, ...apiParams } = params;
|
|
51
|
+
const result = await client.request("/vpc/v2/createVpc", apiParams);
|
|
52
|
+
const instance = result.vpcList?.[0];
|
|
53
|
+
const summary = {
|
|
54
|
+
리소스타입: "VPC",
|
|
55
|
+
리소스ID: instance?.vpcNo ?? "unknown",
|
|
56
|
+
리소스명: instance?.vpcName ?? params.vpcName ?? "unknown",
|
|
57
|
+
상태: instance?.vpcStatus?.codeName ?? "creating",
|
|
58
|
+
생성시각: instance?.createDate ?? new Date().toISOString(),
|
|
59
|
+
CIDR블록: params.ipv4CidrBlock,
|
|
60
|
+
};
|
|
61
|
+
return { content: [{ type: "text", text: JSON.stringify(summary, null, 2) }] };
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
// ─── VPC Destructive Tool ──────────────────────────────────────────────────
|
|
68
|
+
server.tool("ncloud_delete_vpc", "⚠️ Destructive: Permanently delete a VPC. Set confirm=true to execute.", {
|
|
69
|
+
vpcNo: z.string({
|
|
70
|
+
required_error: "필수 파라미터 'vpcNo'가 누락되었습니다.",
|
|
71
|
+
}).describe("VPC number to delete"),
|
|
72
|
+
confirm: z.boolean().optional().default(false).describe("Must be true to actually execute the destructive operation"),
|
|
73
|
+
}, async (params) => {
|
|
74
|
+
try {
|
|
75
|
+
if (!params.confirm) {
|
|
76
|
+
const message = `⚠️ This will permanently delete VPC [${params.vpcNo}]. Do you want to proceed? (yes/no)\n\nTo execute, call this tool again with confirm=true.`;
|
|
77
|
+
return { content: [{ type: "text", text: message }] };
|
|
78
|
+
}
|
|
79
|
+
const { confirm, ...apiParams } = params;
|
|
80
|
+
const result = await client.request("/vpc/v2/deleteVpc", apiParams);
|
|
81
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
// ─── Subnet Query Tools ────────────────────────────────────────────────────
|
|
88
|
+
server.tool("ncloud_list_subnets", "List all subnets in the current region", {
|
|
89
|
+
subnetNoList: z.array(z.string()).optional().describe("Filter by subnet numbers"),
|
|
90
|
+
vpcNo: z.string().optional().describe("Filter by VPC number"),
|
|
91
|
+
subnetName: z.string().optional().describe("Filter by subnet name"),
|
|
92
|
+
subnetTypeCode: z.string().optional().describe("Filter by subnet type (PUBLIC, PRIVATE)"),
|
|
93
|
+
usageTypeCode: z.string().optional().describe("Filter by usage type (GEN, LOADB, BM, NATGW)"),
|
|
94
|
+
}, async (params) => {
|
|
95
|
+
try {
|
|
96
|
+
const result = await client.request("/vpc/v2/getSubnetList", params);
|
|
97
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
server.tool("ncloud_get_subnet_detail", "Get detailed information about a specific subnet", {
|
|
104
|
+
subnetNo: z.string().describe("Subnet number to query"),
|
|
105
|
+
}, async (params) => {
|
|
106
|
+
try {
|
|
107
|
+
const result = await client.request("/vpc/v2/getSubnetDetail", params);
|
|
108
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
// ─── Subnet Create Tool ────────────────────────────────────────────────────
|
|
115
|
+
server.tool("ncloud_create_subnet", "Create a new subnet in a VPC. Use dryRun=true to preview without creating.", {
|
|
116
|
+
vpcNo: z.string({
|
|
117
|
+
required_error: "필수 파라미터 'vpcNo'가 누락되었습니다.",
|
|
118
|
+
}).describe("VPC number to create the subnet in"),
|
|
119
|
+
subnet: z.string({
|
|
120
|
+
required_error: "필수 파라미터 'subnet'이 누락되었습니다.",
|
|
121
|
+
}).regex(/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\/\d{1,2}$/, {
|
|
122
|
+
message: "잘못된 파라미터: 'subnet'은 CIDR 형식이어야 합니다 (예: 10.0.1.0/24)",
|
|
123
|
+
}).describe("Subnet CIDR block (e.g., 10.0.1.0/24)"),
|
|
124
|
+
zoneCode: z.string({
|
|
125
|
+
required_error: "필수 파라미터 'zoneCode'가 누락되었습니다.",
|
|
126
|
+
}).describe("Zone code (e.g., KR-1, KR-2)"),
|
|
127
|
+
networkAclNo: z.string({
|
|
128
|
+
required_error: "필수 파라미터 'networkAclNo'가 누락되었습니다.",
|
|
129
|
+
}).describe("Network ACL number to associate"),
|
|
130
|
+
subnetTypeCode: z.string({
|
|
131
|
+
required_error: "필수 파라미터 'subnetTypeCode'가 누락되었습니다.",
|
|
132
|
+
}).describe("Subnet type code (PUBLIC or PRIVATE)"),
|
|
133
|
+
subnetName: z.string().max(30, {
|
|
134
|
+
message: "잘못된 파라미터: 'subnetName'은 30자 이하여야 합니다.",
|
|
135
|
+
}).optional().describe("Subnet name (max 30 characters)"),
|
|
136
|
+
usageTypeCode: z.string().optional().describe("Usage type code (GEN, LOADB, BM, NATGW). Default: GEN"),
|
|
137
|
+
dryRun: z.boolean().optional().default(false).describe("If true, returns a preview without actually creating the subnet"),
|
|
138
|
+
}, async (params) => {
|
|
139
|
+
try {
|
|
140
|
+
if (params.dryRun) {
|
|
141
|
+
const preview = {
|
|
142
|
+
label: "🔍 Dry-Run Preview: Subnet Creation",
|
|
143
|
+
vpcNo: params.vpcNo,
|
|
144
|
+
subnet: params.subnet,
|
|
145
|
+
zoneCode: params.zoneCode,
|
|
146
|
+
networkAclNo: params.networkAclNo,
|
|
147
|
+
subnetTypeCode: params.subnetTypeCode,
|
|
148
|
+
subnetName: params.subnetName ?? "(auto-generated)",
|
|
149
|
+
usageTypeCode: params.usageTypeCode ?? "GEN",
|
|
150
|
+
message: "이 요청은 실제 서브넷을 생성하지 않습니다. dryRun=false로 호출하면 서브넷이 생성됩니다.",
|
|
151
|
+
};
|
|
152
|
+
return { content: [{ type: "text", text: JSON.stringify(preview, null, 2) }] };
|
|
153
|
+
}
|
|
154
|
+
const { dryRun, ...apiParams } = params;
|
|
155
|
+
const result = await client.request("/vpc/v2/createSubnet", apiParams);
|
|
156
|
+
const instance = result.subnetList?.[0];
|
|
157
|
+
const summary = {
|
|
158
|
+
리소스타입: "Subnet",
|
|
159
|
+
리소스ID: instance?.subnetNo ?? "unknown",
|
|
160
|
+
리소스명: instance?.subnetName ?? params.subnetName ?? "unknown",
|
|
161
|
+
상태: instance?.subnetStatus?.codeName ?? "creating",
|
|
162
|
+
생성시각: instance?.createDate ?? new Date().toISOString(),
|
|
163
|
+
CIDR블록: params.subnet,
|
|
164
|
+
존: params.zoneCode,
|
|
165
|
+
VPC: params.vpcNo,
|
|
166
|
+
};
|
|
167
|
+
return { content: [{ type: "text", text: JSON.stringify(summary, null, 2) }] };
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
// ─── Subnet Destructive Tool ───────────────────────────────────────────────
|
|
174
|
+
server.tool("ncloud_delete_subnet", "⚠️ Destructive: Permanently delete a subnet. Set confirm=true to execute.", {
|
|
175
|
+
subnetNo: z.string({
|
|
176
|
+
required_error: "필수 파라미터 'subnetNo'가 누락되었습니다.",
|
|
177
|
+
}).describe("Subnet number to delete"),
|
|
178
|
+
confirm: z.boolean().optional().default(false).describe("Must be true to actually execute the destructive operation"),
|
|
179
|
+
}, async (params) => {
|
|
180
|
+
try {
|
|
181
|
+
if (!params.confirm) {
|
|
182
|
+
const message = `⚠️ This will permanently delete Subnet [${params.subnetNo}]. Do you want to proceed? (yes/no)\n\nTo execute, call this tool again with confirm=true.`;
|
|
183
|
+
return { content: [{ type: "text", text: message }] };
|
|
184
|
+
}
|
|
185
|
+
const { confirm, ...apiParams } = params;
|
|
186
|
+
const result = await client.request("/vpc/v2/deleteSubnet", apiParams);
|
|
187
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=vpc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vpc.js","sourceRoot":"","sources":["../../src/tools/vpc.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ncloud-mcp-server",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "MCP server for managing Naver Cloud Platform (Ncloud) infrastructure",
|
|
6
|
+
"author": "sjk4425",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"homepage": "https://github.com/sjk4425/ncloud-mcp-server#readme",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/sjk4425/ncloud-mcp-server.git"
|
|
12
|
+
},
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/sjk4425/ncloud-mcp-server/issues"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"mcp",
|
|
18
|
+
"ncloud",
|
|
19
|
+
"naver-cloud",
|
|
20
|
+
"model-context-protocol",
|
|
21
|
+
"infrastructure",
|
|
22
|
+
"cloud",
|
|
23
|
+
"ai",
|
|
24
|
+
"navercloudplatform"
|
|
25
|
+
],
|
|
26
|
+
"bin": {
|
|
27
|
+
"ncloud-mcp-server": "dist/index.js"
|
|
28
|
+
},
|
|
29
|
+
"files": [
|
|
30
|
+
"dist",
|
|
31
|
+
"README.md",
|
|
32
|
+
"README_EN.md",
|
|
33
|
+
"LICENSE"
|
|
34
|
+
],
|
|
35
|
+
"scripts": {
|
|
36
|
+
"build": "npx tsc",
|
|
37
|
+
"test": "vitest --run",
|
|
38
|
+
"prepare": "npm run build"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
42
|
+
"zod": "^3.24.4"
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"@types/node": "^22.15.3",
|
|
46
|
+
"fast-check": "^4.1.1",
|
|
47
|
+
"typescript": "^5.8.3",
|
|
48
|
+
"vitest": "^3.1.3"
|
|
49
|
+
},
|
|
50
|
+
"engines": {
|
|
51
|
+
"node": ">=20.0.0"
|
|
52
|
+
}
|
|
53
|
+
}
|