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,288 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export function registerStorageNasTools(server, client) {
|
|
3
|
+
// ─── NAS Volume Query Tools ────────────────────────────────────────────────
|
|
4
|
+
server.tool("ncloud_list_nas_volumes", "List all NAS volume instances in the current region", {
|
|
5
|
+
nasVolumeInstanceNoList: z.array(z.string()).optional().describe("Filter by NAS volume instance numbers"),
|
|
6
|
+
regionCode: z.string().optional().describe("Region code (e.g. KR, SGN, JPN)"),
|
|
7
|
+
zoneCode: z.string().optional().describe("Zone code (e.g. KR-1, KR-2)"),
|
|
8
|
+
volumeAllotmentProtocolTypeCode: z.string().optional().describe("Volume protocol type code (NFS or CIFS)"),
|
|
9
|
+
pageNo: z.number().optional().describe("Page number for pagination"),
|
|
10
|
+
pageSize: z.number().optional().describe("Page size for pagination"),
|
|
11
|
+
}, async (params) => {
|
|
12
|
+
try {
|
|
13
|
+
const result = await client.request("/vnas/v2/getNasVolumeInstanceList", params);
|
|
14
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
server.tool("ncloud_get_nas_volume_detail", "Get detailed information about a specific NAS volume instance", {
|
|
21
|
+
nasVolumeInstanceNo: z.string().describe("NAS volume instance number to query"),
|
|
22
|
+
}, async (params) => {
|
|
23
|
+
try {
|
|
24
|
+
const result = await client.request("/vnas/v2/getNasVolumeInstanceDetail", params);
|
|
25
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
// ─── NAS Volume Create Tools ───────────────────────────────────────────────
|
|
32
|
+
server.tool("ncloud_create_nas_volume", "Create a new NAS volume instance. Use dryRun=true to preview.", {
|
|
33
|
+
volumeName: z.string().describe("NAS volume name (3~20 characters, alphanumeric)"),
|
|
34
|
+
volumeSize: z.number().describe("Volume size in GB (500~10000, in 100GB increments)"),
|
|
35
|
+
volumeAllotmentProtocolTypeCode: z.string().describe("Volume protocol type code (NFS or CIFS)"),
|
|
36
|
+
vpcNo: z.string().describe("VPC number where the NAS volume will be created"),
|
|
37
|
+
zoneCode: z.string().describe("Zone code (e.g. KR-1, KR-2)"),
|
|
38
|
+
cifsUserName: z.string().optional().describe("CIFS user name (required when protocol is CIFS)"),
|
|
39
|
+
cifsUserPassword: z.string().optional().describe("CIFS user password (required when protocol is CIFS)"),
|
|
40
|
+
nasVolumeDescription: z.string().optional().describe("NAS volume description"),
|
|
41
|
+
isEncryptedVolume: z.boolean().optional().describe("Whether to encrypt the volume"),
|
|
42
|
+
isReturnProtection: z.boolean().optional().describe("Whether to enable return protection"),
|
|
43
|
+
serverInstanceNoList: z.array(z.string()).optional().describe("List of server instance numbers for access control"),
|
|
44
|
+
dryRun: z.boolean().optional().default(false).describe("If true, returns a preview without actually creating"),
|
|
45
|
+
}, async (params) => {
|
|
46
|
+
try {
|
|
47
|
+
if (params.dryRun) {
|
|
48
|
+
const preview = {
|
|
49
|
+
label: "🔍 Dry-Run Preview: NAS Volume Creation",
|
|
50
|
+
volumeName: params.volumeName,
|
|
51
|
+
volumeSize: `${params.volumeSize} GB`,
|
|
52
|
+
volumeAllotmentProtocolTypeCode: params.volumeAllotmentProtocolTypeCode,
|
|
53
|
+
vpcNo: params.vpcNo,
|
|
54
|
+
zoneCode: params.zoneCode,
|
|
55
|
+
cifsUserName: params.cifsUserName ?? "(N/A)",
|
|
56
|
+
isEncryptedVolume: params.isEncryptedVolume ?? false,
|
|
57
|
+
isReturnProtection: params.isReturnProtection ?? false,
|
|
58
|
+
serverInstanceNoList: params.serverInstanceNoList ?? [],
|
|
59
|
+
message: "이 요청은 실제 NAS 볼륨을 생성하지 않습니다. dryRun=false로 호출하면 생성됩니다.",
|
|
60
|
+
};
|
|
61
|
+
return { content: [{ type: "text", text: JSON.stringify(preview, null, 2) }] };
|
|
62
|
+
}
|
|
63
|
+
const { dryRun, ...apiParams } = params;
|
|
64
|
+
const result = await client.request("/vnas/v2/createNasVolumeInstance", apiParams);
|
|
65
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
// ─── NAS Volume Destructive Tools ──────────────────────────────────────────
|
|
72
|
+
server.tool("ncloud_delete_nas_volumes", "⚠️ Destructive: Permanently delete one or more NAS volume instances. Set confirm=true to execute.", {
|
|
73
|
+
nasVolumeInstanceNoList: z.array(z.string()).min(1).describe("List of NAS volume instance numbers to delete"),
|
|
74
|
+
confirm: z.boolean().optional().default(false).describe("Must be true to actually execute the destructive operation"),
|
|
75
|
+
}, async (params) => {
|
|
76
|
+
try {
|
|
77
|
+
if (!params.confirm) {
|
|
78
|
+
const message = `⚠️ This will permanently delete NAS Volume [${params.nasVolumeInstanceNoList.join(", ")}]. Do you want to proceed? (yes/no)\n\nTo execute, call this tool again with confirm=true.`;
|
|
79
|
+
return { content: [{ type: "text", text: message }] };
|
|
80
|
+
}
|
|
81
|
+
const { confirm, ...apiParams } = params;
|
|
82
|
+
const result = await client.request("/vnas/v2/deleteNasVolumeInstances", apiParams);
|
|
83
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
// ─── NAS Volume Size Change ────────────────────────────────────────────────
|
|
90
|
+
server.tool("ncloud_change_nas_volume_size", "Change the size of a NAS volume instance", {
|
|
91
|
+
nasVolumeInstanceNo: z.string().describe("NAS volume instance number"),
|
|
92
|
+
volumeSize: z.number().describe("New volume size in GB (500~10000, in 100GB increments)"),
|
|
93
|
+
}, async (params) => {
|
|
94
|
+
try {
|
|
95
|
+
const result = await client.request("/vnas/v2/changeNasVolumeSize", params);
|
|
96
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
// ─── NAS Volume Access Control ─────────────────────────────────────────────
|
|
103
|
+
server.tool("ncloud_set_nas_volume_access_control", "Set access control for a NAS volume instance (server-based or custom IP-based)", {
|
|
104
|
+
nasVolumeInstanceNo: z.string().describe("NAS volume instance number"),
|
|
105
|
+
serverInstanceNoList: z.array(z.string()).optional().describe("List of server instance numbers to allow access"),
|
|
106
|
+
customIpList: z.array(z.string()).optional().describe("List of custom IPs to allow access"),
|
|
107
|
+
}, async (params) => {
|
|
108
|
+
try {
|
|
109
|
+
const result = await client.request("/vnas/v2/setNasVolumeAccessControl", 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
|
+
// ─── NAS Volume Access Control — Add/Remove ─────────────────────────────────
|
|
117
|
+
server.tool("ncloud_add_nas_volume_access_control", "Add server instance access control to a NAS volume (NFS protocol)", {
|
|
118
|
+
nasVolumeInstanceNo: z.string().describe("NAS volume instance number"),
|
|
119
|
+
serverInstanceNoList: z.array(z.string()).min(1).describe("List of server instance numbers to grant access"),
|
|
120
|
+
}, async (params) => {
|
|
121
|
+
try {
|
|
122
|
+
const result = await client.request("/vnas/v2/addNasVolumeAccessControl", params);
|
|
123
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
server.tool("ncloud_remove_nas_volume_access_control", "⚠️ Destructive: Remove server instance access control from a NAS volume (NFS protocol). Set confirm=true to execute.", {
|
|
130
|
+
nasVolumeInstanceNo: z.string().describe("NAS volume instance number"),
|
|
131
|
+
serverInstanceNoList: z.array(z.string()).min(1).describe("List of server instance numbers to revoke access"),
|
|
132
|
+
confirm: z.boolean().optional().default(false).describe("Must be true to actually execute the destructive operation"),
|
|
133
|
+
}, async (params) => {
|
|
134
|
+
try {
|
|
135
|
+
if (!params.confirm) {
|
|
136
|
+
const message = `⚠️ This will remove access control for server instances [${params.serverInstanceNoList.join(", ")}] from NAS Volume [${params.nasVolumeInstanceNo}]. Do you want to proceed? (yes/no)\n\nTo execute, call this tool again with confirm=true.`;
|
|
137
|
+
return { content: [{ type: "text", text: message }] };
|
|
138
|
+
}
|
|
139
|
+
const { confirm, ...apiParams } = params;
|
|
140
|
+
const result = await client.request("/vnas/v2/removeNasVolumeAccessControl", apiParams);
|
|
141
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
server.tool("ncloud_get_nas_volume_access_control_rules", "Get the list of access control rules configured for a NAS volume", {
|
|
148
|
+
nasVolumeInstanceNo: z.string().describe("NAS volume instance number"),
|
|
149
|
+
}, async (params) => {
|
|
150
|
+
try {
|
|
151
|
+
const result = await client.request("/vnas/v2/getNasVolumeAccessControlRuleList", params);
|
|
152
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
// ─── NAS Volume Return Protection ─────────────────────────────────────────
|
|
159
|
+
server.tool("ncloud_set_nas_volume_return_protection", "Set return protection for a NAS volume instance", {
|
|
160
|
+
nasVolumeInstanceNo: z.string().describe("NAS volume instance number"),
|
|
161
|
+
isReturnProtection: z.boolean().describe("Whether to enable return protection (true=protected, false=unprotected)"),
|
|
162
|
+
}, async (params) => {
|
|
163
|
+
try {
|
|
164
|
+
const result = await client.request("/vnas/v2/setNasVolumeReturnProtection", params);
|
|
165
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
// ─── NAS Volume Rating (Size Measurement) ─────────────────────────────────
|
|
172
|
+
server.tool("ncloud_get_nas_volume_rating_list", "Get NAS volume size measurement list for a specific time period", {
|
|
173
|
+
nasVolumeInstanceNo: z.string().describe("NAS volume instance number"),
|
|
174
|
+
startTime: z.string().describe("Start time for the measurement period (format: yyyy-MM-dd'T'HH:mm:ssZ)"),
|
|
175
|
+
endTime: z.string().describe("End time for the measurement period (format: yyyy-MM-dd'T'HH:mm:ssZ)"),
|
|
176
|
+
interval: z.string().optional().describe("Measurement interval (e.g. 5m, 1h, 1d)"),
|
|
177
|
+
}, async (params) => {
|
|
178
|
+
try {
|
|
179
|
+
const result = await client.request("/vnas/v2/getNasVolumeInstanceRatingList", params);
|
|
180
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
// ─── NAS Volume Snapshot Query Tools ───────────────────────────────────────
|
|
187
|
+
server.tool("ncloud_list_nas_snapshots", "List snapshots for a NAS volume instance", {
|
|
188
|
+
nasVolumeInstanceNo: z.string().describe("NAS volume instance number"),
|
|
189
|
+
pageNo: z.number().optional().describe("Page number for pagination"),
|
|
190
|
+
pageSize: z.number().optional().describe("Page size for pagination"),
|
|
191
|
+
}, async (params) => {
|
|
192
|
+
try {
|
|
193
|
+
const result = await client.request("/vnas/v2/getNasVolumeSnapshotList", params);
|
|
194
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
// ─── NAS Volume Snapshot Create Tools ──────────────────────────────────────
|
|
201
|
+
server.tool("ncloud_create_nas_snapshot", "Create a snapshot for a NAS volume instance. Use dryRun=true to preview.", {
|
|
202
|
+
nasVolumeInstanceNo: z.string().describe("NAS volume instance number to create snapshot from"),
|
|
203
|
+
nasVolumeSnapshotName: z.string().optional().describe("Name for the snapshot"),
|
|
204
|
+
nasVolumeSnapshotDescription: z.string().optional().describe("Description for the snapshot"),
|
|
205
|
+
dryRun: z.boolean().optional().default(false).describe("If true, returns a preview without actually creating"),
|
|
206
|
+
}, async (params) => {
|
|
207
|
+
try {
|
|
208
|
+
if (params.dryRun) {
|
|
209
|
+
const preview = {
|
|
210
|
+
label: "🔍 Dry-Run Preview: NAS Snapshot Creation",
|
|
211
|
+
nasVolumeInstanceNo: params.nasVolumeInstanceNo,
|
|
212
|
+
nasVolumeSnapshotName: params.nasVolumeSnapshotName ?? "(auto-generated)",
|
|
213
|
+
message: "이 요청은 실제 NAS 스냅샷을 생성하지 않습니다. dryRun=false로 호출하면 생성됩니다.",
|
|
214
|
+
};
|
|
215
|
+
return { content: [{ type: "text", text: JSON.stringify(preview, null, 2) }] };
|
|
216
|
+
}
|
|
217
|
+
const { dryRun, ...apiParams } = params;
|
|
218
|
+
const result = await client.request("/vnas/v2/createNasVolumeSnapshot", apiParams);
|
|
219
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
// ─── NAS Volume Snapshot Destructive Tools ─────────────────────────────────
|
|
226
|
+
server.tool("ncloud_delete_nas_snapshot", "⚠️ Destructive: Permanently delete a NAS volume snapshot. Set confirm=true to execute.", {
|
|
227
|
+
nasVolumeSnapshotInstanceNo: z.string().describe("NAS volume snapshot instance number to delete"),
|
|
228
|
+
confirm: z.boolean().optional().default(false).describe("Must be true to actually execute the destructive operation"),
|
|
229
|
+
}, async (params) => {
|
|
230
|
+
try {
|
|
231
|
+
if (!params.confirm) {
|
|
232
|
+
const message = `⚠️ This will permanently delete NAS Snapshot [${params.nasVolumeSnapshotInstanceNo}]. Do you want to proceed? (yes/no)\n\nTo execute, call this tool again with confirm=true.`;
|
|
233
|
+
return { content: [{ type: "text", text: message }] };
|
|
234
|
+
}
|
|
235
|
+
const { confirm, ...apiParams } = params;
|
|
236
|
+
const result = await client.request("/vnas/v2/deleteNasVolumeSnapshot", apiParams);
|
|
237
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
// ─── NAS Volume Snapshot Configuration Tools ───────────────────────────────
|
|
244
|
+
server.tool("ncloud_get_nas_snapshot_config_history", "Get the snapshot configuration history for a NAS volume instance", {
|
|
245
|
+
nasVolumeInstanceNo: z.string().describe("NAS volume instance number"),
|
|
246
|
+
}, async (params) => {
|
|
247
|
+
try {
|
|
248
|
+
const result = await client.request("/vnas/v2/getNasVolumeSnapshotConfigurationHistoryList", params);
|
|
249
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
250
|
+
}
|
|
251
|
+
catch (error) {
|
|
252
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
server.tool("ncloud_change_nas_snapshot_config", "Change the snapshot configuration for a NAS volume (enable/disable auto snapshot, set schedule)", {
|
|
256
|
+
nasVolumeInstanceNo: z.string().describe("NAS volume instance number"),
|
|
257
|
+
isSnapshotConfiguration: z.boolean().describe("Whether to enable (true) or disable (false) automatic snapshots"),
|
|
258
|
+
snapshotTime: z.string().optional().describe("Snapshot time in HH format (00~23, KST). Required when enabling snapshots."),
|
|
259
|
+
snapshotFrequencyTypeCode: z.string().optional().describe("Snapshot frequency type code (e.g. DAILY, WEEKLY). Required when enabling snapshots."),
|
|
260
|
+
}, async (params) => {
|
|
261
|
+
try {
|
|
262
|
+
const result = await client.request("/vnas/v2/changeNasVolumeSnapshotConfiguration", params);
|
|
263
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
264
|
+
}
|
|
265
|
+
catch (error) {
|
|
266
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
server.tool("ncloud_restore_nas_volume_with_snapshot", "⚠️ Destructive: Restore a NAS volume to a previous snapshot state. Current data will be overwritten with the snapshot data. Set confirm=true to execute.", {
|
|
270
|
+
nasVolumeInstanceNo: z.string().describe("NAS volume instance number to restore"),
|
|
271
|
+
nasVolumeSnapshotNo: z.string().describe("NAS volume snapshot number to restore from"),
|
|
272
|
+
confirm: z.boolean().optional().default(false).describe("Must be true to actually execute the destructive operation"),
|
|
273
|
+
}, async (params) => {
|
|
274
|
+
try {
|
|
275
|
+
if (!params.confirm) {
|
|
276
|
+
const message = `⚠️ This will restore NAS Volume [${params.nasVolumeInstanceNo}] to Snapshot [${params.nasVolumeSnapshotNo}]. Current data will be overwritten with the snapshot data. Do you want to proceed? (yes/no)\n\nTo execute, call this tool again with confirm=true.`;
|
|
277
|
+
return { content: [{ type: "text", text: message }] };
|
|
278
|
+
}
|
|
279
|
+
const { confirm, ...apiParams } = params;
|
|
280
|
+
const result = await client.request("/vnas/v2/restoreNasVolumeWithSnapshot", apiParams);
|
|
281
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
282
|
+
}
|
|
283
|
+
catch (error) {
|
|
284
|
+
return { content: [{ type: "text", text: error.message }], isError: true };
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=storage-nas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-nas.js","sourceRoot":"","sources":["../../src/tools/storage-nas.ts"],"names":[],"mappings":"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"}
|