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.
Files changed (220) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +159 -0
  3. package/README_EN.md +159 -0
  4. package/dist/auth/signature.d.ts +16 -0
  5. package/dist/auth/signature.js +18 -0
  6. package/dist/auth/signature.js.map +1 -0
  7. package/dist/auth/signature.test.d.ts +1 -0
  8. package/dist/auth/signature.test.js +90 -0
  9. package/dist/auth/signature.test.js.map +1 -0
  10. package/dist/client/ncloud-client.d.ts +27 -0
  11. package/dist/client/ncloud-client.js +270 -0
  12. package/dist/client/ncloud-client.js.map +1 -0
  13. package/dist/client/ncloud-client.test.d.ts +1 -0
  14. package/dist/client/ncloud-client.test.js +477 -0
  15. package/dist/client/ncloud-client.test.js.map +1 -0
  16. package/dist/client/s3-compatible-client.d.ts +49 -0
  17. package/dist/client/s3-compatible-client.js +210 -0
  18. package/dist/client/s3-compatible-client.js.map +1 -0
  19. package/dist/client/swift-compatible-client.d.ts +68 -0
  20. package/dist/client/swift-compatible-client.js +173 -0
  21. package/dist/client/swift-compatible-client.js.map +1 -0
  22. package/dist/index.d.ts +2 -0
  23. package/dist/index.js +362 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/tools/acg.d.ts +3 -0
  26. package/dist/tools/acg.js +220 -0
  27. package/dist/tools/acg.js.map +1 -0
  28. package/dist/tools/activity-tracer.d.ts +3 -0
  29. package/dist/tools/activity-tracer.js +77 -0
  30. package/dist/tools/activity-tracer.js.map +1 -0
  31. package/dist/tools/analytics-cdss.d.ts +3 -0
  32. package/dist/tools/analytics-cdss.js +618 -0
  33. package/dist/tools/analytics-cdss.js.map +1 -0
  34. package/dist/tools/analytics-datacatalog.d.ts +10 -0
  35. package/dist/tools/analytics-datacatalog.js +409 -0
  36. package/dist/tools/analytics-datacatalog.js.map +1 -0
  37. package/dist/tools/analytics-dataflow.d.ts +16 -0
  38. package/dist/tools/analytics-dataflow.js +478 -0
  39. package/dist/tools/analytics-dataflow.js.map +1 -0
  40. package/dist/tools/analytics-dataforest.d.ts +10 -0
  41. package/dist/tools/analytics-dataforest.js +379 -0
  42. package/dist/tools/analytics-dataforest.js.map +1 -0
  43. package/dist/tools/analytics-dataquery.d.ts +16 -0
  44. package/dist/tools/analytics-dataquery.js +143 -0
  45. package/dist/tools/analytics-dataquery.js.map +1 -0
  46. package/dist/tools/analytics-datastream.d.ts +13 -0
  47. package/dist/tools/analytics-datastream.js +359 -0
  48. package/dist/tools/analytics-datastream.js.map +1 -0
  49. package/dist/tools/analytics-hadoop.d.ts +12 -0
  50. package/dist/tools/analytics-hadoop.js +450 -0
  51. package/dist/tools/analytics-hadoop.js.map +1 -0
  52. package/dist/tools/analytics-ses.d.ts +3 -0
  53. package/dist/tools/analytics-ses.js +653 -0
  54. package/dist/tools/analytics-ses.js.map +1 -0
  55. package/dist/tools/api-gateway.d.ts +3 -0
  56. package/dist/tools/api-gateway.js +202 -0
  57. package/dist/tools/api-gateway.js.map +1 -0
  58. package/dist/tools/autoscaling.d.ts +3 -0
  59. package/dist/tools/autoscaling.js +430 -0
  60. package/dist/tools/autoscaling.js.map +1 -0
  61. package/dist/tools/billing.d.ts +14 -0
  62. package/dist/tools/billing.js +545 -0
  63. package/dist/tools/billing.js.map +1 -0
  64. package/dist/tools/certificate-manager.d.ts +18 -0
  65. package/dist/tools/certificate-manager.js +84 -0
  66. package/dist/tools/certificate-manager.js.map +1 -0
  67. package/dist/tools/cloud-advisor.d.ts +3 -0
  68. package/dist/tools/cloud-advisor.js +202 -0
  69. package/dist/tools/cloud-advisor.js.map +1 -0
  70. package/dist/tools/cloud-functions.d.ts +3 -0
  71. package/dist/tools/cloud-functions.js +497 -0
  72. package/dist/tools/cloud-functions.js.map +1 -0
  73. package/dist/tools/cloud-insight-integration.d.ts +3 -0
  74. package/dist/tools/cloud-insight-integration.js +90 -0
  75. package/dist/tools/cloud-insight-integration.js.map +1 -0
  76. package/dist/tools/cloud-insight-plugin.d.ts +3 -0
  77. package/dist/tools/cloud-insight-plugin.js +600 -0
  78. package/dist/tools/cloud-insight-plugin.js.map +1 -0
  79. package/dist/tools/cloud-insight-rule.d.ts +3 -0
  80. package/dist/tools/cloud-insight-rule.js +570 -0
  81. package/dist/tools/cloud-insight-rule.js.map +1 -0
  82. package/dist/tools/cloud-insight.d.ts +3 -0
  83. package/dist/tools/cloud-insight.js +246 -0
  84. package/dist/tools/cloud-insight.js.map +1 -0
  85. package/dist/tools/common.d.ts +3 -0
  86. package/dist/tools/common.js +120 -0
  87. package/dist/tools/common.js.map +1 -0
  88. package/dist/tools/compute-initscript.d.ts +3 -0
  89. package/dist/tools/compute-initscript.js +62 -0
  90. package/dist/tools/compute-initscript.js.map +1 -0
  91. package/dist/tools/compute-loginkey.d.ts +3 -0
  92. package/dist/tools/compute-loginkey.js +59 -0
  93. package/dist/tools/compute-loginkey.js.map +1 -0
  94. package/dist/tools/compute-placement.d.ts +3 -0
  95. package/dist/tools/compute-placement.js +196 -0
  96. package/dist/tools/compute-placement.js.map +1 -0
  97. package/dist/tools/compute-publicip.d.ts +3 -0
  98. package/dist/tools/compute-publicip.js +97 -0
  99. package/dist/tools/compute-publicip.js.map +1 -0
  100. package/dist/tools/compute-server.d.ts +3 -0
  101. package/dist/tools/compute-server.js +445 -0
  102. package/dist/tools/compute-server.js.map +1 -0
  103. package/dist/tools/compute-server.test.d.ts +1 -0
  104. package/dist/tools/compute-server.test.js +224 -0
  105. package/dist/tools/compute-server.test.js.map +1 -0
  106. package/dist/tools/compute-storage.d.ts +3 -0
  107. package/dist/tools/compute-storage.js +240 -0
  108. package/dist/tools/compute-storage.js.map +1 -0
  109. package/dist/tools/containers-nks.d.ts +13 -0
  110. package/dist/tools/containers-nks.js +576 -0
  111. package/dist/tools/containers-nks.js.map +1 -0
  112. package/dist/tools/containers-registry.d.ts +3 -0
  113. package/dist/tools/containers-registry.js +181 -0
  114. package/dist/tools/containers-registry.js.map +1 -0
  115. package/dist/tools/database-cache.d.ts +3 -0
  116. package/dist/tools/database-cache.js +388 -0
  117. package/dist/tools/database-cache.js.map +1 -0
  118. package/dist/tools/database-mongodb.d.ts +3 -0
  119. package/dist/tools/database-mongodb.js +460 -0
  120. package/dist/tools/database-mongodb.js.map +1 -0
  121. package/dist/tools/database-mssql.d.ts +3 -0
  122. package/dist/tools/database-mssql.js +345 -0
  123. package/dist/tools/database-mssql.js.map +1 -0
  124. package/dist/tools/database-mysql.d.ts +3 -0
  125. package/dist/tools/database-mysql.js +500 -0
  126. package/dist/tools/database-mysql.js.map +1 -0
  127. package/dist/tools/database-postgresql.d.ts +3 -0
  128. package/dist/tools/database-postgresql.js +432 -0
  129. package/dist/tools/database-postgresql.js.map +1 -0
  130. package/dist/tools/global-dns.d.ts +3 -0
  131. package/dist/tools/global-dns.js +207 -0
  132. package/dist/tools/global-dns.js.map +1 -0
  133. package/dist/tools/global-edge.d.ts +3 -0
  134. package/dist/tools/global-edge.js +386 -0
  135. package/dist/tools/global-edge.js.map +1 -0
  136. package/dist/tools/global-traffic-manager.d.ts +3 -0
  137. package/dist/tools/global-traffic-manager.js +497 -0
  138. package/dist/tools/global-traffic-manager.js.map +1 -0
  139. package/dist/tools/index.d.ts +63 -0
  140. package/dist/tools/index.js +64 -0
  141. package/dist/tools/index.js.map +1 -0
  142. package/dist/tools/kms.d.ts +8 -0
  143. package/dist/tools/kms.js +529 -0
  144. package/dist/tools/kms.js.map +1 -0
  145. package/dist/tools/loadbalancer.d.ts +3 -0
  146. package/dist/tools/loadbalancer.js +341 -0
  147. package/dist/tools/loadbalancer.js.map +1 -0
  148. package/dist/tools/log-analytics.d.ts +3 -0
  149. package/dist/tools/log-analytics.js +183 -0
  150. package/dist/tools/log-analytics.js.map +1 -0
  151. package/dist/tools/media-imageoptimizer.d.ts +3 -0
  152. package/dist/tools/media-imageoptimizer.js +187 -0
  153. package/dist/tools/media-imageoptimizer.js.map +1 -0
  154. package/dist/tools/media-livestation.d.ts +3 -0
  155. package/dist/tools/media-livestation.js +252 -0
  156. package/dist/tools/media-livestation.js.map +1 -0
  157. package/dist/tools/media-vodstation.d.ts +3 -0
  158. package/dist/tools/media-vodstation.js +197 -0
  159. package/dist/tools/media-vodstation.js.map +1 -0
  160. package/dist/tools/nat-gateway.d.ts +3 -0
  161. package/dist/tools/nat-gateway.js +91 -0
  162. package/dist/tools/nat-gateway.js.map +1 -0
  163. package/dist/tools/network-acl.d.ts +3 -0
  164. package/dist/tools/network-acl.js +322 -0
  165. package/dist/tools/network-acl.js.map +1 -0
  166. package/dist/tools/network-interface.d.ts +3 -0
  167. package/dist/tools/network-interface.js +193 -0
  168. package/dist/tools/network-interface.js.map +1 -0
  169. package/dist/tools/private-ca.d.ts +8 -0
  170. package/dist/tools/private-ca.js +368 -0
  171. package/dist/tools/private-ca.js.map +1 -0
  172. package/dist/tools/resource-manager.d.ts +3 -0
  173. package/dist/tools/resource-manager.js +151 -0
  174. package/dist/tools/resource-manager.js.map +1 -0
  175. package/dist/tools/route-table.d.ts +3 -0
  176. package/dist/tools/route-table.js +205 -0
  177. package/dist/tools/route-table.js.map +1 -0
  178. package/dist/tools/security-monitoring.d.ts +3 -0
  179. package/dist/tools/security-monitoring.js +182 -0
  180. package/dist/tools/security-monitoring.js.map +1 -0
  181. package/dist/tools/sens.d.ts +3 -0
  182. package/dist/tools/sens.js +240 -0
  183. package/dist/tools/sens.js.map +1 -0
  184. package/dist/tools/sourcebuild.d.ts +3 -0
  185. package/dist/tools/sourcebuild.js +481 -0
  186. package/dist/tools/sourcebuild.js.map +1 -0
  187. package/dist/tools/sourcecommit.d.ts +13 -0
  188. package/dist/tools/sourcecommit.js +228 -0
  189. package/dist/tools/sourcecommit.js.map +1 -0
  190. package/dist/tools/sourcedeploy.d.ts +3 -0
  191. package/dist/tools/sourcedeploy.js +448 -0
  192. package/dist/tools/sourcedeploy.js.map +1 -0
  193. package/dist/tools/sourcepipeline.d.ts +12 -0
  194. package/dist/tools/sourcepipeline.js +357 -0
  195. package/dist/tools/sourcepipeline.js.map +1 -0
  196. package/dist/tools/storage-archive.d.ts +3 -0
  197. package/dist/tools/storage-archive.js +337 -0
  198. package/dist/tools/storage-archive.js.map +1 -0
  199. package/dist/tools/storage-nas.d.ts +3 -0
  200. package/dist/tools/storage-nas.js +288 -0
  201. package/dist/tools/storage-nas.js.map +1 -0
  202. package/dist/tools/storage-ncloud.d.ts +3 -0
  203. package/dist/tools/storage-ncloud.js +864 -0
  204. package/dist/tools/storage-ncloud.js.map +1 -0
  205. package/dist/tools/storage-object.d.ts +3 -0
  206. package/dist/tools/storage-object.js +982 -0
  207. package/dist/tools/storage-object.js.map +1 -0
  208. package/dist/tools/sub-account.d.ts +3 -0
  209. package/dist/tools/sub-account.js +311 -0
  210. package/dist/tools/sub-account.js.map +1 -0
  211. package/dist/tools/target-group.d.ts +3 -0
  212. package/dist/tools/target-group.js +207 -0
  213. package/dist/tools/target-group.js.map +1 -0
  214. package/dist/tools/vpc-peering.d.ts +3 -0
  215. package/dist/tools/vpc-peering.js +109 -0
  216. package/dist/tools/vpc-peering.js.map +1 -0
  217. package/dist/tools/vpc.d.ts +3 -0
  218. package/dist/tools/vpc.js +194 -0
  219. package/dist/tools/vpc.js.map +1 -0
  220. package/package.json +53 -0
@@ -0,0 +1,322 @@
1
+ import { z } from "zod";
2
+ export function registerNetworkAclTools(server, client) {
3
+ // ─── Query Tools ───────────────────────────────────────────────────────────
4
+ server.tool("ncloud_list_network_acls", "List all Network ACLs in the current region", {
5
+ networkAclNoList: z.array(z.string()).optional().describe("Filter by Network ACL numbers"),
6
+ networkAclName: z.string().optional().describe("Filter by Network ACL name"),
7
+ vpcNo: z.string().optional().describe("Filter by VPC number"),
8
+ }, async (params) => {
9
+ try {
10
+ const result = await client.request("/vpc/v2/getNetworkAclList", 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_network_acl_detail", "Get detailed information about a specific Network ACL", {
18
+ networkAclNo: z.string().describe("Network ACL number to query"),
19
+ }, async (params) => {
20
+ try {
21
+ const result = await client.request("/vpc/v2/getNetworkAclDetail", 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
+ server.tool("ncloud_get_network_acl_rules", "List all inbound and outbound rules for a specific Network ACL", {
29
+ networkAclNo: z.string().describe("Network ACL number"),
30
+ networkAclRuleTypeCode: z.string().optional().describe("Filter by rule type (INBND, OTBND)"),
31
+ }, async (params) => {
32
+ try {
33
+ const result = await client.request("/vpc/v2/getNetworkAclRuleList", params);
34
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
35
+ }
36
+ catch (error) {
37
+ return { content: [{ type: "text", text: error.message }], isError: true };
38
+ }
39
+ });
40
+ // ─── Create Tool ─────────────────────────────────────────────────────────
41
+ server.tool("ncloud_create_network_acl", "Create a new Network ACL in a VPC", {
42
+ vpcNo: z.string({ required_error: "필수 파라미터 'vpcNo'가 누락되었습니다." }).describe("VPC number to create Network ACL in"),
43
+ networkAclName: z.string().max(30, {
44
+ message: "잘못된 파라미터: 'networkAclName'은 30자 이하여야 합니다.",
45
+ }).optional().describe("Network ACL name (max 30 characters)"),
46
+ networkAclDescription: z.string().optional().describe("Description for the Network ACL"),
47
+ }, async (params) => {
48
+ try {
49
+ const result = await client.request("/vpc/v2/createNetworkAcl", params);
50
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
51
+ }
52
+ catch (error) {
53
+ return { content: [{ type: "text", text: error.message }], isError: true };
54
+ }
55
+ });
56
+ // ─── Rule Management Tools ─────────────────────────────────────────────────
57
+ server.tool("ncloud_add_network_acl_inbound", "Add an inbound rule to a Network ACL", {
58
+ networkAclNo: z.string({ required_error: "필수 파라미터 'networkAclNo'가 누락되었습니다." }).describe("Network ACL number"),
59
+ priority: z.number({ required_error: "필수 파라미터 'priority'가 누락되었습니다." }).describe("Rule priority (1-199)"),
60
+ protocolTypeCode: z.string({ required_error: "필수 파라미터 'protocolTypeCode'가 누락되었습니다." }).describe("Protocol type code (TCP, UDP, ICMP)"),
61
+ ruleActionCode: z.string({ required_error: "필수 파라미터 'ruleActionCode'가 누락되었습니다." }).describe("Rule action (ALLOW or DROP)"),
62
+ ipBlock: z.string().optional().describe("IP block in CIDR format (e.g., 0.0.0.0/0)"),
63
+ denyAllowGroupNo: z.string().optional().describe("Deny-Allow Group number (alternative to ipBlock)"),
64
+ portRange: z.string().optional().describe("Port range (e.g., 80, 1-65535)"),
65
+ ruleDescription: z.string().optional().describe("Description for the rule"),
66
+ }, async (params) => {
67
+ try {
68
+ const { networkAclNo, priority, protocolTypeCode, ruleActionCode, ipBlock, denyAllowGroupNo, portRange, ruleDescription } = params;
69
+ const requestParams = {
70
+ networkAclNo,
71
+ "networkAclRuleList.1.priority": priority,
72
+ "networkAclRuleList.1.protocolTypeCode": protocolTypeCode,
73
+ "networkAclRuleList.1.ruleActionCode": ruleActionCode,
74
+ };
75
+ if (ipBlock)
76
+ requestParams["networkAclRuleList.1.ipBlock"] = ipBlock;
77
+ if (denyAllowGroupNo)
78
+ requestParams["networkAclRuleList.1.denyAllowGroupNo"] = denyAllowGroupNo;
79
+ if (portRange)
80
+ requestParams["networkAclRuleList.1.portRange"] = portRange;
81
+ if (ruleDescription)
82
+ requestParams["networkAclRuleList.1.ruleDescription"] = ruleDescription;
83
+ const result = await client.request("/vpc/v2/addNetworkAclInboundRule", requestParams);
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
+ server.tool("ncloud_add_network_acl_outbound", "Add an outbound rule to a Network ACL", {
91
+ networkAclNo: z.string({ required_error: "필수 파라미터 'networkAclNo'가 누락되었습니다." }).describe("Network ACL number"),
92
+ priority: z.number({ required_error: "필수 파라미터 'priority'가 누락되었습니다." }).describe("Rule priority (1-199)"),
93
+ protocolTypeCode: z.string({ required_error: "필수 파라미터 'protocolTypeCode'가 누락되었습니다." }).describe("Protocol type code (TCP, UDP, ICMP)"),
94
+ ruleActionCode: z.string({ required_error: "필수 파라미터 'ruleActionCode'가 누락되었습니다." }).describe("Rule action (ALLOW or DROP)"),
95
+ ipBlock: z.string().optional().describe("IP block in CIDR format (e.g., 0.0.0.0/0)"),
96
+ denyAllowGroupNo: z.string().optional().describe("Deny-Allow Group number (alternative to ipBlock)"),
97
+ portRange: z.string().optional().describe("Port range (e.g., 80, 1-65535)"),
98
+ ruleDescription: z.string().optional().describe("Description for the rule"),
99
+ }, async (params) => {
100
+ try {
101
+ const { networkAclNo, priority, protocolTypeCode, ruleActionCode, ipBlock, denyAllowGroupNo, portRange, ruleDescription } = params;
102
+ const requestParams = {
103
+ networkAclNo,
104
+ "networkAclRuleList.1.priority": priority,
105
+ "networkAclRuleList.1.protocolTypeCode": protocolTypeCode,
106
+ "networkAclRuleList.1.ruleActionCode": ruleActionCode,
107
+ };
108
+ if (ipBlock)
109
+ requestParams["networkAclRuleList.1.ipBlock"] = ipBlock;
110
+ if (denyAllowGroupNo)
111
+ requestParams["networkAclRuleList.1.denyAllowGroupNo"] = denyAllowGroupNo;
112
+ if (portRange)
113
+ requestParams["networkAclRuleList.1.portRange"] = portRange;
114
+ if (ruleDescription)
115
+ requestParams["networkAclRuleList.1.ruleDescription"] = ruleDescription;
116
+ const result = await client.request("/vpc/v2/addNetworkAclOutboundRule", requestParams);
117
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
118
+ }
119
+ catch (error) {
120
+ return { content: [{ type: "text", text: error.message }], isError: true };
121
+ }
122
+ });
123
+ // ─── Subnet Network ACL Assignment ─────────────────────────────────────────
124
+ server.tool("ncloud_set_subnet_network_acl", "Set the Network ACL for a subnet", {
125
+ networkAclNo: z.string({ required_error: "필수 파라미터 'networkAclNo'가 누락되었습니다." }).describe("Network ACL number to assign"),
126
+ subnetNo: z.string({ required_error: "필수 파라미터 'subnetNo'가 누락되었습니다." }).describe("Subnet number to assign the Network ACL to"),
127
+ }, async (params) => {
128
+ try {
129
+ const result = await client.request("/vpc/v2/setSubnetNetworkAcl", params);
130
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
131
+ }
132
+ catch (error) {
133
+ return { content: [{ type: "text", text: error.message }], isError: true };
134
+ }
135
+ });
136
+ // ─── Destructive Tools (with confirm gate) ─────────────────────────────────
137
+ server.tool("ncloud_delete_network_acl", "⚠️ Destructive: Permanently delete a Network ACL. Set confirm=true to execute.", {
138
+ networkAclNo: z.string({ required_error: "필수 파라미터 'networkAclNo'가 누락되었습니다." }).describe("Network ACL number to delete"),
139
+ confirm: z.boolean().optional().default(false).describe("Must be true to actually execute the destructive operation"),
140
+ }, async (params) => {
141
+ try {
142
+ if (!params.confirm) {
143
+ const message = `⚠️ This will permanently delete Network ACL [${params.networkAclNo}]. Do you want to proceed? (yes/no)\n\nTo execute, call this tool again with confirm=true.`;
144
+ return { content: [{ type: "text", text: message }] };
145
+ }
146
+ const { confirm, ...apiParams } = params;
147
+ const result = await client.request("/vpc/v2/deleteNetworkAcl", apiParams);
148
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
149
+ }
150
+ catch (error) {
151
+ return { content: [{ type: "text", text: error.message }], isError: true };
152
+ }
153
+ });
154
+ server.tool("ncloud_remove_network_acl_inbound", "⚠️ Destructive: Remove an inbound rule from a Network ACL. Set confirm=true to execute.", {
155
+ networkAclNo: z.string({ required_error: "필수 파라미터 'networkAclNo'가 누락되었습니다." }).describe("Network ACL number"),
156
+ priority: z.number({ required_error: "필수 파라미터 'priority'가 누락되었습니다." }).describe("Rule priority to remove"),
157
+ protocolTypeCode: z.string({ required_error: "필수 파라미터 'protocolTypeCode'가 누락되었습니다." }).describe("Protocol type code (TCP, UDP, ICMP)"),
158
+ ruleActionCode: z.string({ required_error: "필수 파라미터 'ruleActionCode'가 누락되었습니다." }).describe("Rule action (ALLOW or DROP)"),
159
+ ipBlock: z.string().optional().describe("IP block in CIDR format"),
160
+ denyAllowGroupNo: z.string().optional().describe("Deny-Allow Group number"),
161
+ portRange: z.string().optional().describe("Port range (e.g., 80, 1-65535)"),
162
+ confirm: z.boolean().optional().default(false).describe("Must be true to actually execute the destructive operation"),
163
+ }, async (params) => {
164
+ try {
165
+ if (!params.confirm) {
166
+ const message = `⚠️ This will permanently remove inbound rule (priority: ${params.priority}) from Network ACL [${params.networkAclNo}]. Do you want to proceed? (yes/no)\n\nTo execute, call this tool again with confirm=true.`;
167
+ return { content: [{ type: "text", text: message }] };
168
+ }
169
+ const { confirm, networkAclNo, priority, protocolTypeCode, ruleActionCode, ipBlock, denyAllowGroupNo, portRange } = params;
170
+ const requestParams = {
171
+ networkAclNo,
172
+ "networkAclRuleList.1.priority": priority,
173
+ "networkAclRuleList.1.protocolTypeCode": protocolTypeCode,
174
+ "networkAclRuleList.1.ruleActionCode": ruleActionCode,
175
+ };
176
+ if (ipBlock)
177
+ requestParams["networkAclRuleList.1.ipBlock"] = ipBlock;
178
+ if (denyAllowGroupNo)
179
+ requestParams["networkAclRuleList.1.denyAllowGroupNo"] = denyAllowGroupNo;
180
+ if (portRange)
181
+ requestParams["networkAclRuleList.1.portRange"] = portRange;
182
+ const result = await client.request("/vpc/v2/removeNetworkAclInboundRule", requestParams);
183
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
184
+ }
185
+ catch (error) {
186
+ return { content: [{ type: "text", text: error.message }], isError: true };
187
+ }
188
+ });
189
+ server.tool("ncloud_remove_network_acl_outbound", "⚠️ Destructive: Remove an outbound rule from a Network ACL. Set confirm=true to execute.", {
190
+ networkAclNo: z.string({ required_error: "필수 파라미터 'networkAclNo'가 누락되었습니다." }).describe("Network ACL number"),
191
+ priority: z.number({ required_error: "필수 파라미터 'priority'가 누락되었습니다." }).describe("Rule priority to remove"),
192
+ protocolTypeCode: z.string({ required_error: "필수 파라미터 'protocolTypeCode'가 누락되었습니다." }).describe("Protocol type code (TCP, UDP, ICMP)"),
193
+ ruleActionCode: z.string({ required_error: "필수 파라미터 'ruleActionCode'가 누락되었습니다." }).describe("Rule action (ALLOW or DROP)"),
194
+ ipBlock: z.string().optional().describe("IP block in CIDR format"),
195
+ denyAllowGroupNo: z.string().optional().describe("Deny-Allow Group number"),
196
+ portRange: z.string().optional().describe("Port range (e.g., 80, 1-65535)"),
197
+ confirm: z.boolean().optional().default(false).describe("Must be true to actually execute the destructive operation"),
198
+ }, async (params) => {
199
+ try {
200
+ if (!params.confirm) {
201
+ const message = `⚠️ This will permanently remove outbound rule (priority: ${params.priority}) from Network ACL [${params.networkAclNo}]. Do you want to proceed? (yes/no)\n\nTo execute, call this tool again with confirm=true.`;
202
+ return { content: [{ type: "text", text: message }] };
203
+ }
204
+ const { confirm, networkAclNo, priority, protocolTypeCode, ruleActionCode, ipBlock, denyAllowGroupNo, portRange } = params;
205
+ const requestParams = {
206
+ networkAclNo,
207
+ "networkAclRuleList.1.priority": priority,
208
+ "networkAclRuleList.1.protocolTypeCode": protocolTypeCode,
209
+ "networkAclRuleList.1.ruleActionCode": ruleActionCode,
210
+ };
211
+ if (ipBlock)
212
+ requestParams["networkAclRuleList.1.ipBlock"] = ipBlock;
213
+ if (denyAllowGroupNo)
214
+ requestParams["networkAclRuleList.1.denyAllowGroupNo"] = denyAllowGroupNo;
215
+ if (portRange)
216
+ requestParams["networkAclRuleList.1.portRange"] = portRange;
217
+ const result = await client.request("/vpc/v2/removeNetworkAclOutboundRule", requestParams);
218
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
219
+ }
220
+ catch (error) {
221
+ return { content: [{ type: "text", text: error.message }], isError: true };
222
+ }
223
+ });
224
+ // ─── Network ACL Description ─────────────────────────────────────────────
225
+ server.tool("ncloud_set_network_acl_description", "Set or update the description of a Network ACL", {
226
+ networkAclNo: z.string({ required_error: "필수 파라미터 'networkAclNo'가 누락되었습니다." }).describe("Network ACL number"),
227
+ networkAclDescription: z.string({ required_error: "필수 파라미터 'networkAclDescription'이 누락되었습니다." }).describe("New description for the Network ACL"),
228
+ }, async (params) => {
229
+ try {
230
+ const result = await client.request("/vpc/v2/setNetworkAclDescription", params);
231
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
232
+ }
233
+ catch (error) {
234
+ return { content: [{ type: "text", text: error.message }], isError: true };
235
+ }
236
+ });
237
+ // ─── Deny-Allow Group Tools ────────────────────────────────────────────────
238
+ server.tool("ncloud_list_deny_allow_groups", "List Network ACL Deny-Allow Groups", {
239
+ networkAclDenyAllowGroupNoList: z.array(z.string()).optional().describe("Filter by Deny-Allow Group numbers"),
240
+ networkAclDenyAllowGroupName: z.string().optional().describe("Filter by Deny-Allow Group name"),
241
+ vpcNo: z.string().optional().describe("Filter by VPC number"),
242
+ }, async (params) => {
243
+ try {
244
+ const result = await client.request("/vpc/v2/getNetworkAclDenyAllowGroupList", params);
245
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
246
+ }
247
+ catch (error) {
248
+ return { content: [{ type: "text", text: error.message }], isError: true };
249
+ }
250
+ });
251
+ server.tool("ncloud_get_deny_allow_group_detail", "Get detailed information about a specific Deny-Allow Group", {
252
+ networkAclDenyAllowGroupNo: z.string({ required_error: "필수 파라미터 'networkAclDenyAllowGroupNo'가 누락되었습니다." }).describe("Deny-Allow Group number to query"),
253
+ }, async (params) => {
254
+ try {
255
+ const result = await client.request("/vpc/v2/getNetworkAclDenyAllowGroupDetail", params);
256
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
257
+ }
258
+ catch (error) {
259
+ return { content: [{ type: "text", text: error.message }], isError: true };
260
+ }
261
+ });
262
+ server.tool("ncloud_create_deny_allow_group", "Create a new Network ACL Deny-Allow Group in a VPC", {
263
+ vpcNo: z.string({ required_error: "필수 파라미터 'vpcNo'가 누락되었습니다." }).describe("VPC number to create the Deny-Allow Group in"),
264
+ networkAclDenyAllowGroupName: z.string().optional().describe("Name for the Deny-Allow Group"),
265
+ networkAclDenyAllowGroupDescription: z.string().optional().describe("Description for the Deny-Allow Group"),
266
+ }, async (params) => {
267
+ try {
268
+ const result = await client.request("/vpc/v2/createNetworkAclDenyAllowGroup", params);
269
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
270
+ }
271
+ catch (error) {
272
+ return { content: [{ type: "text", text: error.message }], isError: true };
273
+ }
274
+ });
275
+ server.tool("ncloud_delete_deny_allow_group", "⚠️ Destructive: Permanently delete a Network ACL Deny-Allow Group. Set confirm=true to execute.", {
276
+ networkAclDenyAllowGroupNo: z.string({ required_error: "필수 파라미터 'networkAclDenyAllowGroupNo'가 누락되었습니다." }).describe("Deny-Allow Group number to delete"),
277
+ confirm: z.boolean().optional().default(false).describe("Must be true to actually execute the destructive operation"),
278
+ }, async (params) => {
279
+ try {
280
+ if (!params.confirm) {
281
+ const message = `⚠️ This will permanently delete Deny-Allow Group [${params.networkAclDenyAllowGroupNo}]. Do you want to proceed? (yes/no)\n\nTo execute, call this tool again with confirm=true.`;
282
+ return { content: [{ type: "text", text: message }] };
283
+ }
284
+ const { confirm, ...apiParams } = params;
285
+ const result = await client.request("/vpc/v2/deleteNetworkAclDenyAllowGroup", apiParams);
286
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
287
+ }
288
+ catch (error) {
289
+ return { content: [{ type: "text", text: error.message }], isError: true };
290
+ }
291
+ });
292
+ server.tool("ncloud_set_deny_allow_group_ips", "Set the IP list for a Network ACL Deny-Allow Group", {
293
+ networkAclDenyAllowGroupNo: z.string({ required_error: "필수 파라미터 'networkAclDenyAllowGroupNo'가 누락되었습니다." }).describe("Deny-Allow Group number"),
294
+ ipList: z.array(z.string()).describe("List of IP addresses to set for the Deny-Allow Group"),
295
+ }, async (params) => {
296
+ try {
297
+ const { networkAclDenyAllowGroupNo, ipList } = params;
298
+ const requestParams = { networkAclDenyAllowGroupNo };
299
+ for (let i = 0; i < ipList.length; i++) {
300
+ requestParams[`ipList.${i + 1}`] = ipList[i];
301
+ }
302
+ const result = await client.request("/vpc/v2/setNetworkAclDenyAllowGroupIpList", requestParams);
303
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
304
+ }
305
+ catch (error) {
306
+ return { content: [{ type: "text", text: error.message }], isError: true };
307
+ }
308
+ });
309
+ server.tool("ncloud_set_deny_allow_group_desc", "Set or update the description of a Network ACL Deny-Allow Group", {
310
+ networkAclDenyAllowGroupNo: z.string({ required_error: "필수 파라미터 'networkAclDenyAllowGroupNo'가 누락되었습니다." }).describe("Deny-Allow Group number"),
311
+ networkAclDenyAllowGroupDescription: z.string({ required_error: "필수 파라미터 'networkAclDenyAllowGroupDescription'이 누락되었습니다." }).describe("New description for the Deny-Allow Group"),
312
+ }, async (params) => {
313
+ try {
314
+ const result = await client.request("/vpc/v2/setNetworkAclDenyAllowGroupDescription", params);
315
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
316
+ }
317
+ catch (error) {
318
+ return { content: [{ type: "text", text: error.message }], isError: true };
319
+ }
320
+ });
321
+ }
322
+ //# sourceMappingURL=network-acl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-acl.js","sourceRoot":"","sources":["../../src/tools/network-acl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { NcloudClient } from "../client/ncloud-client.js";
3
+ export declare function registerNetworkInterfaceTools(server: McpServer, client: NcloudClient): void;
@@ -0,0 +1,193 @@
1
+ import { z } from "zod";
2
+ export function registerNetworkInterfaceTools(server, client) {
3
+ // ─── Query Tools ───────────────────────────────────────────────────────────
4
+ server.tool("ncloud_list_network_interfaces", "List all network interfaces in the current region", {
5
+ networkInterfaceNoList: z.array(z.string()).optional().describe("Filter by network interface numbers"),
6
+ subnetNo: z.string().optional().describe("Filter by subnet number"),
7
+ serverInstanceNo: z.string().optional().describe("Filter by attached server instance 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("/vserver/v2/getNetworkInterfaceList", 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_network_interface_detail", "Get detailed information about a specific network interface", {
20
+ networkInterfaceNo: z.string().describe("Network interface number to query"),
21
+ }, async (params) => {
22
+ try {
23
+ const result = await client.request("/vserver/v2/getNetworkInterfaceDetail", 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
+ server.tool("ncloud_get_flow_log_config", "Get FlowLog configuration list. Returns all FlowLog configurations or filters by network interface number.", {
31
+ networkInterfaceNo: z.string().optional().describe("Network interface number to filter FlowLog configurations"),
32
+ }, async (params) => {
33
+ try {
34
+ const result = await client.request("/vserver/v2/getFlowLogConfigurationList", params);
35
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
36
+ }
37
+ catch (error) {
38
+ return { content: [{ type: "text", text: error.message }], isError: true };
39
+ }
40
+ });
41
+ // ─── Create Tools ──────────────────────────────────────────────────────────
42
+ server.tool("ncloud_create_network_interface", "Create a new network interface. Use dryRun=true to preview.", {
43
+ subnetNo: z.string().describe("Subnet number to create the network interface in"),
44
+ accessControlGroupNoList: z.array(z.string()).min(1).describe("List of ACG numbers to apply"),
45
+ networkInterfaceName: z.string().optional().describe("Network interface name"),
46
+ networkInterfaceDescription: z.string().optional().describe("Network interface description"),
47
+ privateIp: z.string().optional().describe("Private IP address to assign"),
48
+ dryRun: z.boolean().optional().default(false).describe("If true, returns a preview without actually creating"),
49
+ }, async (params) => {
50
+ try {
51
+ if (params.dryRun) {
52
+ const preview = {
53
+ label: "🔍 Dry-Run Preview: Network Interface Creation",
54
+ subnetNo: params.subnetNo,
55
+ accessControlGroupNoList: params.accessControlGroupNoList,
56
+ networkInterfaceName: params.networkInterfaceName ?? "(auto-generated)",
57
+ privateIp: params.privateIp ?? "(auto-assigned)",
58
+ message: "이 요청은 실제 네트워크 인터페이스를 생성하지 않습니다. dryRun=false로 호출하면 생성됩니다.",
59
+ };
60
+ return { content: [{ type: "text", text: JSON.stringify(preview, null, 2) }] };
61
+ }
62
+ const { dryRun, ...apiParams } = params;
63
+ const result = await client.request("/vserver/v2/createNetworkInterface", apiParams);
64
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
65
+ }
66
+ catch (error) {
67
+ return { content: [{ type: "text", text: error.message }], isError: true };
68
+ }
69
+ });
70
+ // ─── Operation Tools ───────────────────────────────────────────────────────
71
+ server.tool("ncloud_attach_network_interface", "Attach a network interface to a server instance", {
72
+ networkInterfaceNo: z.string().describe("Network interface number to attach"),
73
+ serverInstanceNo: z.string().describe("Server instance number to attach to"),
74
+ }, async (params) => {
75
+ try {
76
+ const result = await client.request("/vserver/v2/attachNetworkInterface", params);
77
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
78
+ }
79
+ catch (error) {
80
+ return { content: [{ type: "text", text: error.message }], isError: true };
81
+ }
82
+ });
83
+ server.tool("ncloud_detach_network_interface", "Detach a network interface from a server instance", {
84
+ networkInterfaceNo: z.string().describe("Network interface number to detach"),
85
+ serverInstanceNo: z.string().describe("Server instance number to detach from"),
86
+ }, async (params) => {
87
+ try {
88
+ const result = await client.request("/vserver/v2/detachNetworkInterface", params);
89
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
90
+ }
91
+ catch (error) {
92
+ return { content: [{ type: "text", text: error.message }], isError: true };
93
+ }
94
+ });
95
+ server.tool("ncloud_add_nic_acg", "Add access control groups (ACGs) to a network interface", {
96
+ networkInterfaceNo: z.string().describe("Network interface number to add ACGs to"),
97
+ accessControlGroupNoList: z.array(z.string()).min(1).describe("List of ACG numbers to add"),
98
+ }, async (params) => {
99
+ try {
100
+ const result = await client.request("/vserver/v2/addNetworkInterfaceAccessControlGroup", params);
101
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
102
+ }
103
+ catch (error) {
104
+ return { content: [{ type: "text", text: error.message }], isError: true };
105
+ }
106
+ });
107
+ server.tool("ncloud_assign_secondary_ips", "Assign secondary IPs to a network interface. Provide either secondaryIpList (specific IPs) or secondaryIpCount (auto-assign count).", {
108
+ networkInterfaceNo: z.string().describe("Network interface number to assign secondary IPs to"),
109
+ secondaryIpList: z.array(z.string()).optional().describe("List of specific secondary IP addresses to assign"),
110
+ secondaryIpCount: z.number().optional().describe("Number of secondary IPs to auto-assign"),
111
+ }, async (params) => {
112
+ try {
113
+ const result = await client.request("/vserver/v2/assignSecondaryIps", params);
114
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
115
+ }
116
+ catch (error) {
117
+ return { content: [{ type: "text", text: error.message }], isError: true };
118
+ }
119
+ });
120
+ server.tool("ncloud_unassign_secondary_ips", "Unassign (release) secondary IPs from a network interface", {
121
+ networkInterfaceNo: z.string().describe("Network interface number to unassign secondary IPs from"),
122
+ secondaryIpList: z.array(z.string()).min(1).describe("List of secondary IP addresses to unassign"),
123
+ }, async (params) => {
124
+ try {
125
+ const result = await client.request("/vserver/v2/unassignSecondaryIps", 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
+ server.tool("ncloud_enable_flow_log", "Enable FlowLog on a network interface. Captures network traffic logs and stores them in the specified bucket.", {
133
+ networkInterfaceNo: z.string().describe("Network interface number to enable FlowLog on"),
134
+ flowLogBucketName: z.string().describe("Object Storage bucket name to store FlowLog data"),
135
+ flowLogStatusTypeCode: z.string().optional().describe("FlowLog status type code (ACCEPT, REJECT, ALL)"),
136
+ }, async (params) => {
137
+ try {
138
+ const result = await client.request("/vserver/v2/enableFlowLog", params);
139
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
140
+ }
141
+ catch (error) {
142
+ return { content: [{ type: "text", text: error.message }], isError: true };
143
+ }
144
+ });
145
+ server.tool("ncloud_disable_flow_log", "Disable FlowLog on a network interface. Stops capturing network traffic logs.", {
146
+ networkInterfaceNo: z.string().describe("Network interface number to disable FlowLog on"),
147
+ }, async (params) => {
148
+ try {
149
+ const result = await client.request("/vserver/v2/disableFlowLog", params);
150
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
151
+ }
152
+ catch (error) {
153
+ return { content: [{ type: "text", text: error.message }], isError: true };
154
+ }
155
+ });
156
+ // ─── Destructive Tools ─────────────────────────────────────────────────────
157
+ server.tool("ncloud_remove_nic_acg", "⚠️ DESTRUCTIVE: Remove access control groups (ACGs) from a network interface. Set confirm=true to execute.", {
158
+ networkInterfaceNo: z.string().describe("Network interface number to remove ACGs from"),
159
+ accessControlGroupNoList: z.array(z.string()).min(1).describe("List of ACG numbers to remove"),
160
+ confirm: z.boolean().optional().default(false).describe("Must be true to actually execute the destructive operation"),
161
+ }, async (params) => {
162
+ try {
163
+ if (!params.confirm) {
164
+ const message = `⚠️ This will remove ACG(s) [${params.accessControlGroupNoList.join(", ")}] from NetworkInterface [${params.networkInterfaceNo}]. Do you want to proceed? (yes/no)\n\nTo execute, call this tool again with confirm=true.`;
165
+ return { content: [{ type: "text", text: message }] };
166
+ }
167
+ const { confirm, ...apiParams } = params;
168
+ const result = await client.request("/vserver/v2/removeNetworkInterfaceAccessControlGroup", apiParams);
169
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
170
+ }
171
+ catch (error) {
172
+ return { content: [{ type: "text", text: error.message }], isError: true };
173
+ }
174
+ });
175
+ server.tool("ncloud_delete_network_interface", "⚠️ Destructive: Permanently delete a network interface. Set confirm=true to execute.", {
176
+ networkInterfaceNo: z.string().describe("Network interface number to delete"),
177
+ confirm: z.boolean().optional().default(false).describe("Must be true to actually execute the destructive operation"),
178
+ }, async (params) => {
179
+ try {
180
+ if (!params.confirm) {
181
+ const message = `⚠️ This will permanently delete NetworkInterface [${params.networkInterfaceNo}]. Do you want to proceed? (yes/no)\n\nTo execute, call this tool again with confirm=true.`;
182
+ return { content: [{ type: "text", text: message }] };
183
+ }
184
+ const { confirm, ...apiParams } = params;
185
+ const result = await client.request("/vserver/v2/deleteNetworkInterface", apiParams);
186
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
187
+ }
188
+ catch (error) {
189
+ return { content: [{ type: "text", text: error.message }], isError: true };
190
+ }
191
+ });
192
+ }
193
+ //# sourceMappingURL=network-interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-interface.js","sourceRoot":"","sources":["../../src/tools/network-interface.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { NcloudClient } from "../client/ncloud-client.js";
3
+ /**
4
+ * Private CA (사설 인증 기관) 도구 등록
5
+ * Base URL: https://pca.apigw.ntruss.com
6
+ * RESTful API — GET/POST/PUT/DELETE with JSON body
7
+ */
8
+ export declare function registerPrivateCaTools(server: McpServer, client: NcloudClient): void;