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,197 @@
1
+ import { z } from "zod";
2
+ export function registerVodStationTools(server, client) {
3
+ // ─── Channel Query Tools ───────────────────────────────────────────────────
4
+ server.tool("ncloud_vodstation_list_channels", "List all VOD Station streaming channels with pagination", {
5
+ pageNo: z.number().optional().describe("Page number (default: 1)"),
6
+ pageSizeNo: z.number().optional().describe("Number of items per page (default: 20)"),
7
+ }, async (params) => {
8
+ try {
9
+ const result = await client.request("/api/v2/channels", params);
10
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
11
+ }
12
+ catch (error) {
13
+ return { content: [{ type: "text", text: error.message }], isError: true };
14
+ }
15
+ });
16
+ server.tool("ncloud_vodstation_get_channel", "Get detailed information about a specific VOD Station channel", {
17
+ channelId: z.string({ required_error: "필수 파라미터 'channelId'가 누락되었습니다." }).describe("Channel ID (e.g., vs-20250821095732-xxxxxxx)"),
18
+ }, async (params) => {
19
+ try {
20
+ const result = await client.request(`/api/v2/channels/${params.channelId}`);
21
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
22
+ }
23
+ catch (error) {
24
+ return { content: [{ type: "text", text: error.message }], isError: true };
25
+ }
26
+ });
27
+ // ─── Channel Create Tool ───────────────────────────────────────────────────
28
+ server.tool("ncloud_vodstation_create_channel", "Create a new VOD Station streaming channel. Use dryRun=true to preview without creating.", {
29
+ channelName: z.string({ required_error: "필수 파라미터 'channelName'이 누락되었습니다." }).describe("Channel name (3-20 chars)"),
30
+ storageBucketName: z.string({ required_error: "필수 파라미터 'storageBucketName'이 누락되었습니다." }).describe("Object Storage bucket name containing video files"),
31
+ protocolList: z.array(z.enum(["HLS", "DASH"])).optional().default(["HLS"]).describe("Streaming protocols (HLS, DASH)"),
32
+ segmentDuration: z.number().optional().default(10).describe("Playback time per segment in seconds (default: 10)"),
33
+ segmentDurationOption: z.enum(["BASIC", "VARIABLE"]).optional().default("BASIC").describe("Segmentation method: BASIC (regular intervals) or VARIABLE (keyframe-based)"),
34
+ accessPrivateFiles: z.boolean().optional().default(false).describe("Whether to allow access to private files in the bucket"),
35
+ createCdn: z.boolean().optional().default(true).describe("Whether to auto-create a Global Edge CDN"),
36
+ cdnProfileId: z.number().optional().describe("Global Edge profile ID (required when createCdn=true)"),
37
+ cdnRegionType: z.enum(["KOREA", "JAPAN", "GLOBAL"]).optional().describe("CDN service region (required when createCdn=true)"),
38
+ dryRun: z.boolean().optional().default(false).describe("If true, returns a preview without actually creating the channel"),
39
+ }, async (params) => {
40
+ try {
41
+ if (params.dryRun) {
42
+ const preview = {
43
+ label: "🔍 Dry-Run Preview: VOD Station Channel Creation",
44
+ channelName: params.channelName,
45
+ storageBucketName: params.storageBucketName,
46
+ protocolList: params.protocolList,
47
+ segmentDuration: params.segmentDuration,
48
+ segmentDurationOption: params.segmentDurationOption,
49
+ accessPrivateFiles: params.accessPrivateFiles,
50
+ createCdn: params.createCdn,
51
+ cdnProfileId: params.cdnProfileId,
52
+ cdnRegionType: params.cdnRegionType,
53
+ message: "이 요청은 실제 채널을 생성하지 않습니다. dryRun=false로 호출하면 채널이 생성됩니다.",
54
+ };
55
+ return { content: [{ type: "text", text: JSON.stringify(preview, null, 2) }] };
56
+ }
57
+ const body = {
58
+ channelName: params.channelName,
59
+ storageBucketName: params.storageBucketName,
60
+ protocolList: params.protocolList,
61
+ segmentDuration: params.segmentDuration,
62
+ segmentDurationOption: params.segmentDurationOption,
63
+ accessPrivateFiles: params.accessPrivateFiles,
64
+ cdn: {
65
+ createCdn: params.createCdn,
66
+ cdnType: "GLOBAL_EDGE",
67
+ profileId: params.cdnProfileId,
68
+ regionType: params.cdnRegionType,
69
+ },
70
+ };
71
+ const result = await client.postRequest("/api/v2/channels", body);
72
+ const channel = result?.content || result;
73
+ const summary = {
74
+ 리소스타입: "VOD Station Channel",
75
+ 채널ID: channel?.id || "creating",
76
+ 채널명: params.channelName,
77
+ 버킷: params.storageBucketName,
78
+ 프로토콜: params.protocolList,
79
+ 상태: channel?.channelStatus || "CREATING",
80
+ };
81
+ return { content: [{ type: "text", text: JSON.stringify(summary, null, 2) }] };
82
+ }
83
+ catch (error) {
84
+ return { content: [{ type: "text", text: error.message }], isError: true };
85
+ }
86
+ });
87
+ // ─── Channel Delete Tool ───────────────────────────────────────────────────
88
+ server.tool("ncloud_vodstation_delete_channel", "⚠️ Destructive: Permanently delete a VOD Station channel. Only channels in STOPPED status can be deleted. Set confirm=true to execute.", {
89
+ channelId: z.string({ required_error: "필수 파라미터 'channelId'가 누락되었습니다." }).describe("Channel ID to delete"),
90
+ confirm: z.boolean().optional().default(false).describe("Must be true to actually execute the destructive operation"),
91
+ }, async (params) => {
92
+ try {
93
+ if (!params.confirm) {
94
+ const message = `⚠️ This will permanently delete VOD Station Channel [${params.channelId}]. Only channels in STOPPED status can be deleted. The integrated CDN will be maintained.\n\nTo execute, call this tool again with confirm=true.`;
95
+ return { content: [{ type: "text", text: message }] };
96
+ }
97
+ const result = await client.deleteRequest(`/api/v2/channels/${params.channelId}`);
98
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
99
+ }
100
+ catch (error) {
101
+ return { content: [{ type: "text", text: error.message }], isError: true };
102
+ }
103
+ });
104
+ // ─── Channel Control Tools ─────────────────────────────────────────────────
105
+ server.tool("ncloud_vodstation_start_channel", "Start (resume) a VOD Station channel that is in STOPPED status", {
106
+ channelId: z.string({ required_error: "필수 파라미터 'channelId'가 누락되었습니다." }).describe("Channel ID to start"),
107
+ }, async (params) => {
108
+ try {
109
+ const result = await client.putRequest(`/api/v2/channels/${params.channelId}/start`, {});
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_vodstation_stop_channel", "Stop a VOD Station channel that is in READY status", {
117
+ channelId: z.string({ required_error: "필수 파라미터 'channelId'가 누락되었습니다." }).describe("Channel ID to stop"),
118
+ }, async (params) => {
119
+ try {
120
+ const result = await client.putRequest(`/api/v2/channels/${params.channelId}/stop`, {});
121
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
122
+ }
123
+ catch (error) {
124
+ return { content: [{ type: "text", text: error.message }], isError: true };
125
+ }
126
+ });
127
+ // ─── Category Tools ────────────────────────────────────────────────────────
128
+ server.tool("ncloud_vodstation_list_categories", "List all VOD Station encoding categories", {
129
+ pageNo: z.number().optional().describe("Page number (default: 1)"),
130
+ pageSizeNo: z.number().optional().describe("Number of items per page (default: 20)"),
131
+ }, async (params) => {
132
+ try {
133
+ const result = await client.request("/api/v2/category", params);
134
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
135
+ }
136
+ catch (error) {
137
+ return { content: [{ type: "text", text: error.message }], isError: true };
138
+ }
139
+ });
140
+ server.tool("ncloud_vodstation_create_category", "Create a new VOD Station encoding category. Use dryRun=true to preview without creating.", {
141
+ name: z.string({ required_error: "필수 파라미터 'name'이 누락되었습니다." }).describe("Category name (folder with this name is auto-created in output bucket)"),
142
+ bucketName: z.string({ required_error: "필수 파라미터 'bucketName'이 누락되었습니다." }).describe("Output bucket name to save encoded files"),
143
+ filePath: z.string({ required_error: "필수 파라미터 'filePath'이 누락되었습니다." }).describe("Detailed path to save output files (e.g., /)"),
144
+ encodingOptions: z.array(z.number()).optional().describe("Encoding option IDs to apply"),
145
+ encodingOptionTemplateId: z.number().optional().describe("Encoding template ID"),
146
+ thumbnail: z.boolean().optional().default(false).describe("Whether to enable thumbnail extraction"),
147
+ notificationUrl: z.string().optional().describe("Callback URL for encoding completion notifications"),
148
+ accessControl: z.enum(["PUBLIC_READ", "PRIVATE"]).optional().default("PRIVATE").describe("Output file disclosure scope"),
149
+ dryRun: z.boolean().optional().default(false).describe("If true, returns a preview without actually creating the category"),
150
+ }, async (params) => {
151
+ try {
152
+ if (params.dryRun) {
153
+ const preview = {
154
+ label: "🔍 Dry-Run Preview: VOD Station Category Creation",
155
+ name: params.name,
156
+ bucketName: params.bucketName,
157
+ filePath: params.filePath,
158
+ encodingOptions: params.encodingOptions,
159
+ encodingOptionTemplateId: params.encodingOptionTemplateId,
160
+ thumbnail: params.thumbnail,
161
+ accessControl: params.accessControl,
162
+ message: "이 요청은 실제 카테고리를 생성하지 않습니다. dryRun=false로 호출하면 카테고리가 생성됩니다.",
163
+ };
164
+ return { content: [{ type: "text", text: JSON.stringify(preview, null, 2) }] };
165
+ }
166
+ const body = {
167
+ name: params.name,
168
+ thumbnail: params.thumbnail,
169
+ output: {
170
+ bucketName: params.bucketName,
171
+ filePath: params.filePath,
172
+ accessControl: params.accessControl,
173
+ },
174
+ };
175
+ if (params.encodingOptions)
176
+ body.encodingOptions = params.encodingOptions;
177
+ if (params.encodingOptionTemplateId)
178
+ body.encodingOptionTemplateId = params.encodingOptionTemplateId;
179
+ if (params.notificationUrl)
180
+ body.notificationUrl = params.notificationUrl;
181
+ const result = await client.postRequest("/api/v2/category", body);
182
+ const summary = {
183
+ 리소스타입: "VOD Station Category",
184
+ 카테고리명: params.name,
185
+ 출력버킷: params.bucketName,
186
+ 출력경로: params.filePath,
187
+ 썸네일: params.thumbnail,
188
+ 상태: "created",
189
+ };
190
+ return { content: [{ type: "text", text: JSON.stringify(summary, null, 2) }] };
191
+ }
192
+ catch (error) {
193
+ return { content: [{ type: "text", text: error.message }], isError: true };
194
+ }
195
+ });
196
+ }
197
+ //# sourceMappingURL=media-vodstation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-vodstation.js","sourceRoot":"","sources":["../../src/tools/media-vodstation.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 registerNatGatewayTools(server: McpServer, client: NcloudClient): void;
@@ -0,0 +1,91 @@
1
+ import { z } from "zod";
2
+ export function registerNatGatewayTools(server, client) {
3
+ // ─── Query Tools ───────────────────────────────────────────────────────────
4
+ server.tool("ncloud_list_nat_gateways", "List all NAT Gateway instances in the current region", {
5
+ natGatewayInstanceNoList: z.array(z.string()).optional().describe("Filter by NAT Gateway instance numbers"),
6
+ natGatewayName: z.string().optional().describe("Filter by NAT Gateway name"),
7
+ vpcName: z.string().optional().describe("Filter by VPC name"),
8
+ publicIp: z.string().optional().describe("Filter by public IP address assigned to the NAT Gateway"),
9
+ zoneCode: z.string().optional().describe("Filter by zone code (e.g., KR-1, KR-2)"),
10
+ natGatewayInstanceStatusCode: z.enum(["INIT", "RUN", "SET", "TERMTING"]).optional().describe("Filter by NAT Gateway instance status code"),
11
+ natGatewayTypeCode: z.enum(["PRVT", "PBLIP"]).optional().describe("Filter by NAT Gateway type (PRVT: Private, PBLIP: Public)"),
12
+ subnetName: z.string().optional().describe("Filter by subnet name"),
13
+ subnetNo: z.string().optional().describe("Filter by subnet number"),
14
+ privateIp: z.string().optional().describe("Filter by private IP address"),
15
+ publicIpInstanceNo: z.string().optional().describe("Filter by public IP instance number"),
16
+ pageNo: z.number().optional().describe("Page number for paged results"),
17
+ pageSize: z.number().optional().describe("Page size for paged results (required when pageNo is specified)"),
18
+ }, async (params) => {
19
+ try {
20
+ const result = await client.request("/vpc/v2/getNatGatewayInstanceList", params);
21
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
22
+ }
23
+ catch (error) {
24
+ return { content: [{ type: "text", text: error.message }], isError: true };
25
+ }
26
+ });
27
+ server.tool("ncloud_get_nat_gateway_detail", "Get detailed information about a specific NAT Gateway", {
28
+ natGatewayInstanceNo: z.string().describe("NAT Gateway instance number to query"),
29
+ }, async (params) => {
30
+ try {
31
+ const result = await client.request("/vpc/v2/getNatGatewayInstanceDetail", params);
32
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
33
+ }
34
+ catch (error) {
35
+ return { content: [{ type: "text", text: error.message }], isError: true };
36
+ }
37
+ });
38
+ // ─── Create Tool ─────────────────────────────────────────────────────────
39
+ server.tool("ncloud_create_nat_gateway", "Create a new NAT Gateway instance in a VPC. Supports both Public (PBLIP) and Private (PRVT) types.", {
40
+ vpcNo: z.string({ required_error: "필수 파라미터 'vpcNo'가 누락되었습니다." }).describe("VPC number to create NAT Gateway in (from getVpcList)"),
41
+ zoneCode: z.string({ required_error: "필수 파라미터 'zoneCode'가 누락되었습니다." }).describe("Zone code (e.g., KR-1, KR-2)"),
42
+ subnetNo: z.string().optional().describe("NATGW-type subnet number. If NULL, creates a PUBLIC-type NATGW subnet automatically. If specified, creates NAT Gateway according to the subnet's subnetTypeCode (PUBLIC or PRIVATE)."),
43
+ natGatewayName: z.string().max(30, {
44
+ message: "잘못된 파라미터: 'natGatewayName'은 30자 이하여야 합니다.",
45
+ }).optional().describe("NAT Gateway name (3-30 chars, English letters/numbers/hyphens, must start with letter and end with letter or number)"),
46
+ natGatewayDescription: z.string().optional().describe("Description for the NAT Gateway (max 1000 bytes)"),
47
+ publicIpInstanceNo: z.string().optional().describe("Public IP instance number. Ignored for PRIVATE subnet type. For PUBLIC subnet: auto-created if NULL, assigned if specified."),
48
+ privateIp: z.string().optional().describe("Private IP address. Ignored for PUBLIC subnet type. For PRIVATE subnet: auto-assigned if NULL, created with specified IP if provided."),
49
+ }, async (params) => {
50
+ try {
51
+ const result = await client.request("/vpc/v2/createNatGatewayInstance", params);
52
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
53
+ }
54
+ catch (error) {
55
+ return { content: [{ type: "text", text: error.message }], isError: true };
56
+ }
57
+ });
58
+ // ─── Description Tool ─────────────────────────────────────────────────────
59
+ server.tool("ncloud_set_nat_gateway_description", "Set or update the description of a NAT Gateway instance", {
60
+ natGatewayInstanceNo: z.string({ required_error: "필수 파라미터 'natGatewayInstanceNo'가 누락되었습니다." }).describe("NAT Gateway instance number"),
61
+ natGatewayDescription: z.string({ required_error: "필수 파라미터 'natGatewayDescription'이 누락되었습니다." }).describe("New description for the NAT Gateway"),
62
+ }, async (params) => {
63
+ try {
64
+ const result = await client.request("/vpc/v2/setNatGatewayDescription", params);
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
+ // ─── Destructive Tool (with confirm gate) ──────────────────────────────────
72
+ server.tool("ncloud_delete_nat_gateway", "⚠️ Destructive: Permanently delete a NAT Gateway instance. Set confirm=true to execute.", {
73
+ natGatewayInstanceNo: z.string({ required_error: "필수 파라미터 'natGatewayInstanceNo'가 누락되었습니다." }).describe("NAT Gateway instance number to delete"),
74
+ returnPublicIpInstance: z.boolean().optional().describe("Also return (release) the public IP instance assigned to the public NAT Gateway. Default: true"),
75
+ confirm: z.boolean().optional().default(false).describe("Must be true to actually execute the destructive operation"),
76
+ }, async (params) => {
77
+ try {
78
+ if (!params.confirm) {
79
+ const message = `⚠️ This will permanently delete NAT Gateway [${params.natGatewayInstanceNo}]. Do you want to proceed? (yes/no)\n\nTo execute, call this tool again with confirm=true.`;
80
+ return { content: [{ type: "text", text: message }] };
81
+ }
82
+ const { confirm, ...apiParams } = params;
83
+ const result = await client.request("/vpc/v2/deleteNatGatewayInstance", apiParams);
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
+ }
91
+ //# sourceMappingURL=nat-gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nat-gateway.js","sourceRoot":"","sources":["../../src/tools/nat-gateway.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 registerNetworkAclTools(server: McpServer, client: NcloudClient): void;