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,545 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Ncloud Billing API Tools
4
+ * Base URL: https://billingapi.apigw.ntruss.com/billing/v1
5
+ *
6
+ * Categories:
7
+ * - List Price: 요금제/서비스/가격 조회
8
+ * - Cost and Usage: 청구 비용/사용량 조회
9
+ * - Discount: 할인/코인/크레딧 조회
10
+ *
11
+ * 모든 API는 조회(GET) 전용이며 파괴적 작업이 없습니다.
12
+ */
13
+ export function registerBillingTools(server, client) {
14
+ // ============================================================
15
+ // List Price APIs — /product/...
16
+ // ============================================================
17
+ // ncloud_get_price_list — 요금제 목록 조회
18
+ server.tool("ncloud_get_price_list", "Get price list by price numbers. Retrieves pricing plan details including charging unit, rating unit, conditions, and promise discounts.", {
19
+ priceNoList: z.array(z.string()).describe("List of price numbers to query (1~99 items, required)"),
20
+ promiseNoList: z.array(z.string()).optional().describe("List of promise numbers to filter"),
21
+ payCurrencyCode: z.enum(["KRW", "USD", "JPY"]).optional().describe("Payment currency code"),
22
+ }, async ({ priceNoList, promiseNoList, payCurrencyCode }) => {
23
+ try {
24
+ const params = { responseFormatType: "json" };
25
+ priceNoList.forEach((no, i) => { params[`priceNoList.${i + 1}`] = no; });
26
+ if (promiseNoList)
27
+ promiseNoList.forEach((no, i) => { params[`promiseNoList.${i + 1}`] = no; });
28
+ if (payCurrencyCode)
29
+ params["payCurrencyCode"] = payCurrencyCode;
30
+ const result = await client.requestRaw("GET", "/billing/v1/product/getPriceList", params);
31
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
32
+ }
33
+ catch (error) {
34
+ return { content: [{ type: "text", text: error.message }], isError: true };
35
+ }
36
+ });
37
+ // ncloud_get_product_category_list — 서비스 카테고리 목록 조회
38
+ server.tool("ncloud_get_product_category_list", "Get product category list for Ncloud billing. Returns available service categories like COMPUTE, DATABASE, NETWORKING, etc.", {
39
+ productCategoryCode: z.string().optional().describe("Product category code to filter (e.g. COMPUTE)"),
40
+ }, async ({ productCategoryCode }) => {
41
+ try {
42
+ const params = { responseFormatType: "json" };
43
+ if (productCategoryCode)
44
+ params["productCategoryCode"] = productCategoryCode;
45
+ const result = await client.requestRaw("GET", "/billing/v1/product/getProductCategoryList", params);
46
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
47
+ }
48
+ catch (error) {
49
+ return { content: [{ type: "text", text: error.message }], isError: true };
50
+ }
51
+ });
52
+ // ncloud_get_product_list — 서비스 목록 조회
53
+ server.tool("ncloud_get_product_list", "Get product (service) list for billing. Returns available products with their codes, names, descriptions, and categories. Use regionCode and optional filters to narrow results.", {
54
+ regionCode: z.string().describe("Region code (e.g. KR, JPN, SGN)"),
55
+ pageNo: z.number().optional().describe("Page number"),
56
+ pageSize: z.number().optional().describe("Page size (max 1000, default 1000)"),
57
+ productItemKindCode: z.string().optional().describe("Product item kind code (e.g. VSVR, SW)"),
58
+ productCategoryCode: z.string().optional().describe("Product category code (e.g. COMPUTE)"),
59
+ productCode: z.string().optional().describe("Product code to filter"),
60
+ productName: z.string().optional().describe("Product name to search"),
61
+ }, async ({ regionCode, pageNo, pageSize, productItemKindCode, productCategoryCode, productCode, productName }) => {
62
+ try {
63
+ const params = { responseFormatType: "json", regionCode };
64
+ if (pageNo !== undefined)
65
+ params["pageNo"] = String(pageNo);
66
+ if (pageSize !== undefined)
67
+ params["pageSize"] = String(pageSize);
68
+ if (productItemKindCode)
69
+ params["productItemKindCode"] = productItemKindCode;
70
+ if (productCategoryCode)
71
+ params["productCategoryCode"] = productCategoryCode;
72
+ if (productCode)
73
+ params["productCode"] = productCode;
74
+ if (productName)
75
+ params["productName"] = productName;
76
+ const result = await client.requestRaw("GET", "/billing/v1/product/getProductList", 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
+ // ncloud_get_product_price_list — 서비스 및 가격 목록 조회
84
+ server.tool("ncloud_get_product_price_list", "Get product and price list. Returns products with their associated pricing information including monthly/hourly rates, conditions, and discount details.", {
85
+ regionCode: z.string().describe("Region code (e.g. KR, JPN, SGN)"),
86
+ pageNo: z.number().optional().describe("Page number"),
87
+ pageSize: z.number().optional().describe("Page size (max 1000, default 1000)"),
88
+ productItemKindCode: z.string().optional().describe("Product item kind code (e.g. VSVR)"),
89
+ productCategoryCode: z.string().optional().describe("Product category code (e.g. COMPUTE)"),
90
+ productCode: z.string().optional().describe("Product code to filter"),
91
+ productName: z.string().optional().describe("Product name to search"),
92
+ payCurrencyCode: z.enum(["KRW", "USD", "JPY"]).optional().describe("Payment currency code"),
93
+ }, async ({ regionCode, pageNo, pageSize, productItemKindCode, productCategoryCode, productCode, productName, payCurrencyCode }) => {
94
+ try {
95
+ const params = { responseFormatType: "json", regionCode };
96
+ if (pageNo !== undefined)
97
+ params["pageNo"] = String(pageNo);
98
+ if (pageSize !== undefined)
99
+ params["pageSize"] = String(pageSize);
100
+ if (productItemKindCode)
101
+ params["productItemKindCode"] = productItemKindCode;
102
+ if (productCategoryCode)
103
+ params["productCategoryCode"] = productCategoryCode;
104
+ if (productCode)
105
+ params["productCode"] = productCode;
106
+ if (productName)
107
+ params["productName"] = productName;
108
+ if (payCurrencyCode)
109
+ params["payCurrencyCode"] = payCurrencyCode;
110
+ const result = await client.requestRaw("GET", "/billing/v1/product/getProductPriceList", params);
111
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
112
+ }
113
+ catch (error) {
114
+ return { content: [{ type: "text", text: error.message }], isError: true };
115
+ }
116
+ });
117
+ // ============================================================
118
+ // Cost and Usage APIs — /cost/...
119
+ // ============================================================
120
+ // ncloud_get_demand_cost_list — 월 청구 비용 목록 조회
121
+ server.tool("ncloud_get_demand_cost_list", "Get monthly billing cost list. Returns total billing amounts including discounts, VAT, and payment status for the specified period (max 3 months).", {
122
+ startMonth: z.string().describe("Start month in yyyyMM format (e.g. 202401)"),
123
+ endMonth: z.string().describe("End month in yyyyMM format (e.g. 202403, max 3 months range)"),
124
+ pageNo: z.number().optional().describe("Page number"),
125
+ pageSize: z.number().optional().describe("Page size (max 1000, default 1000)"),
126
+ isOrganization: z.boolean().optional().describe("Query as Organization master (integrated view)"),
127
+ isPartner: z.boolean().optional().describe("Query as Partner representative"),
128
+ memberNoList: z.array(z.string()).optional().describe("Member number list (master/partner only)"),
129
+ }, async ({ startMonth, endMonth, pageNo, pageSize, isOrganization, isPartner, memberNoList }) => {
130
+ try {
131
+ const params = { responseFormatType: "json", startMonth, endMonth };
132
+ if (pageNo !== undefined)
133
+ params["pageNo"] = String(pageNo);
134
+ if (pageSize !== undefined)
135
+ params["pageSize"] = String(pageSize);
136
+ if (isOrganization !== undefined)
137
+ params["isOrganization"] = String(isOrganization);
138
+ if (isPartner !== undefined)
139
+ params["isPartner"] = String(isPartner);
140
+ if (memberNoList)
141
+ memberNoList.forEach((no, i) => { params[`memberNoList.${i + 1}`] = no; });
142
+ const result = await client.requestRaw("GET", "/billing/v1/cost/getDemandCostList", params);
143
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
144
+ }
145
+ catch (error) {
146
+ return { content: [{ type: "text", text: error.message }], isError: true };
147
+ }
148
+ });
149
+ // ncloud_get_product_demand_cost_list — 서비스별 청구 비용 목록 조회
150
+ server.tool("ncloud_get_product_demand_cost_list", "Get billing cost list grouped by product/service type. Returns per-service billing amounts with discount breakdowns for the specified period (max 3 months).", {
151
+ startMonth: z.string().describe("Start month in yyyyMM format (e.g. 202401)"),
152
+ endMonth: z.string().describe("End month in yyyyMM format (e.g. 202403, max 3 months range)"),
153
+ pageNo: z.number().optional().describe("Page number"),
154
+ pageSize: z.number().optional().describe("Page size (max 1000, default 1000)"),
155
+ isOrganization: z.boolean().optional().describe("Query as Organization master (integrated view)"),
156
+ isPartner: z.boolean().optional().describe("Query as Partner representative"),
157
+ memberNoList: z.array(z.string()).optional().describe("Member number list (master/partner only)"),
158
+ productDemandTypeCode: z.string().optional().describe("Product demand type code to filter"),
159
+ }, async ({ startMonth, endMonth, pageNo, pageSize, isOrganization, isPartner, memberNoList, productDemandTypeCode }) => {
160
+ try {
161
+ const params = { responseFormatType: "json", startMonth, endMonth };
162
+ if (pageNo !== undefined)
163
+ params["pageNo"] = String(pageNo);
164
+ if (pageSize !== undefined)
165
+ params["pageSize"] = String(pageSize);
166
+ if (isOrganization !== undefined)
167
+ params["isOrganization"] = String(isOrganization);
168
+ if (isPartner !== undefined)
169
+ params["isPartner"] = String(isPartner);
170
+ if (memberNoList)
171
+ memberNoList.forEach((no, i) => { params[`memberNoList.${i + 1}`] = no; });
172
+ if (productDemandTypeCode)
173
+ params["productDemandTypeCode"] = productDemandTypeCode;
174
+ const result = await client.requestRaw("GET", "/billing/v1/cost/getProductDemandCostList", params);
175
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
176
+ }
177
+ catch (error) {
178
+ return { content: [{ type: "text", text: error.message }], isError: true };
179
+ }
180
+ });
181
+ // ncloud_get_contract_demand_cost_list — 계약 청구 비용 목록 조회
182
+ server.tool("ncloud_get_contract_demand_cost_list", "Get contract-level billing cost list. Returns detailed billing per contract including usage quantities, pricing, and discount amounts for the specified period (max 3 months).", {
183
+ startMonth: z.string().describe("Start month in yyyyMM format (e.g. 202401)"),
184
+ endMonth: z.string().describe("End month in yyyyMM format (e.g. 202403, max 3 months range)"),
185
+ pageNo: z.number().optional().describe("Page number"),
186
+ pageSize: z.number().optional().describe("Page size (max 1000, default 1000)"),
187
+ isOrganization: z.boolean().optional().describe("Query as Organization master (integrated view)"),
188
+ isPartner: z.boolean().optional().describe("Query as Partner representative"),
189
+ memberNoList: z.array(z.string()).optional().describe("Member number list (master/partner only)"),
190
+ contractNo: z.string().optional().describe("Contract number to filter"),
191
+ demandTypeCode: z.string().optional().describe("Demand type code"),
192
+ demandTypeDetailCode: z.string().optional().describe("Demand type detail code"),
193
+ regionCode: z.string().optional().describe("Region code (e.g. KR)"),
194
+ }, async ({ startMonth, endMonth, pageNo, pageSize, isOrganization, isPartner, memberNoList, contractNo, demandTypeCode, demandTypeDetailCode, regionCode }) => {
195
+ try {
196
+ const params = { responseFormatType: "json", startMonth, endMonth };
197
+ if (pageNo !== undefined)
198
+ params["pageNo"] = String(pageNo);
199
+ if (pageSize !== undefined)
200
+ params["pageSize"] = String(pageSize);
201
+ if (isOrganization !== undefined)
202
+ params["isOrganization"] = String(isOrganization);
203
+ if (isPartner !== undefined)
204
+ params["isPartner"] = String(isPartner);
205
+ if (memberNoList)
206
+ memberNoList.forEach((no, i) => { params[`memberNoList.${i + 1}`] = no; });
207
+ if (contractNo)
208
+ params["contractNo"] = contractNo;
209
+ if (demandTypeCode)
210
+ params["demandTypeCode"] = demandTypeCode;
211
+ if (demandTypeDetailCode)
212
+ params["demandTypeDetailCode"] = demandTypeDetailCode;
213
+ if (regionCode)
214
+ params["regionCode"] = regionCode;
215
+ const result = await client.requestRaw("GET", "/billing/v1/cost/getContractDemandCostList", params);
216
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
217
+ }
218
+ catch (error) {
219
+ return { content: [{ type: "text", text: error.message }], isError: true };
220
+ }
221
+ });
222
+ // ncloud_get_contract_summary_list — 사용자 계약 요약 목록 조회
223
+ server.tool("ncloud_get_contract_summary_list", "Get contract summary list. Returns a summary of contracts grouped by region and contract type with counts for the specified month.", {
224
+ contractMonth: z.string().describe("Contract month in yyyyMM format (e.g. 202404)"),
225
+ pageNo: z.number().optional().describe("Page number"),
226
+ pageSize: z.number().optional().describe("Page size (max 1000, default 1000)"),
227
+ isOrganization: z.boolean().optional().describe("Query as Organization master (integrated view)"),
228
+ isPartner: z.boolean().optional().describe("Query as Partner representative"),
229
+ memberNoList: z.array(z.string()).optional().describe("Member number list (master/partner only)"),
230
+ contractTypeCode: z.string().optional().describe("Contract type code (e.g. VSVR)"),
231
+ contractStatusCode: z.enum(["ALL", "NOML", "NLEND"]).optional().describe("Contract status: ALL (default), NOML (normal), NLEND (terminated)"),
232
+ regionCode: z.string().optional().describe("Region code (e.g. KR)"),
233
+ }, async ({ contractMonth, pageNo, pageSize, isOrganization, isPartner, memberNoList, contractTypeCode, contractStatusCode, regionCode }) => {
234
+ try {
235
+ const params = { responseFormatType: "json", contractMonth };
236
+ if (pageNo !== undefined)
237
+ params["pageNo"] = String(pageNo);
238
+ if (pageSize !== undefined)
239
+ params["pageSize"] = String(pageSize);
240
+ if (isOrganization !== undefined)
241
+ params["isOrganization"] = String(isOrganization);
242
+ if (isPartner !== undefined)
243
+ params["isPartner"] = String(isPartner);
244
+ if (memberNoList)
245
+ memberNoList.forEach((no, i) => { params[`memberNoList.${i + 1}`] = no; });
246
+ if (contractTypeCode)
247
+ params["contractTypeCode"] = contractTypeCode;
248
+ if (contractStatusCode)
249
+ params["contractStatusCode"] = contractStatusCode;
250
+ if (regionCode)
251
+ params["regionCode"] = regionCode;
252
+ const result = await client.requestRaw("GET", "/billing/v1/cost/getContractSummaryList", params);
253
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
254
+ }
255
+ catch (error) {
256
+ return { content: [{ type: "text", text: error.message }], isError: true };
257
+ }
258
+ });
259
+ // ncloud_get_contract_usage_list — 계약 사용량 목록 조회
260
+ server.tool("ncloud_get_contract_usage_list", "Get contract usage list. Returns usage details per contract including metering type, usage quantity, and service period for the specified months (max 3 months).", {
261
+ startMonth: z.string().describe("Start month in yyyyMM format (e.g. 202401)"),
262
+ endMonth: z.string().describe("End month in yyyyMM format (e.g. 202403, max 3 months range)"),
263
+ pageNo: z.number().optional().describe("Page number"),
264
+ pageSize: z.number().optional().describe("Page size (max 1000, default 1000)"),
265
+ isOrganization: z.boolean().optional().describe("Query as Organization master (integrated view)"),
266
+ isPartner: z.boolean().optional().describe("Query as Partner representative"),
267
+ memberNoList: z.array(z.string()).optional().describe("Member number list (master/partner only)"),
268
+ contractNo: z.string().optional().describe("Contract number to filter"),
269
+ contractTypeCode: z.string().optional().describe("Contract type code"),
270
+ contractStatusCode: z.enum(["NOML", "NLEND"]).optional().describe("Contract status: NOML (normal), NLEND (terminated)"),
271
+ regionCode: z.string().optional().describe("Region code (e.g. KR)"),
272
+ }, async ({ startMonth, endMonth, pageNo, pageSize, isOrganization, isPartner, memberNoList, contractNo, contractTypeCode, contractStatusCode, regionCode }) => {
273
+ try {
274
+ const params = { responseFormatType: "json", startMonth, endMonth };
275
+ if (pageNo !== undefined)
276
+ params["pageNo"] = String(pageNo);
277
+ if (pageSize !== undefined)
278
+ params["pageSize"] = String(pageSize);
279
+ if (isOrganization !== undefined)
280
+ params["isOrganization"] = String(isOrganization);
281
+ if (isPartner !== undefined)
282
+ params["isPartner"] = String(isPartner);
283
+ if (memberNoList)
284
+ memberNoList.forEach((no, i) => { params[`memberNoList.${i + 1}`] = no; });
285
+ if (contractNo)
286
+ params["contractNo"] = contractNo;
287
+ if (contractTypeCode)
288
+ params["contractTypeCode"] = contractTypeCode;
289
+ if (contractStatusCode)
290
+ params["contractStatusCode"] = contractStatusCode;
291
+ if (regionCode)
292
+ params["regionCode"] = regionCode;
293
+ const result = await client.requestRaw("GET", "/billing/v1/cost/getContractUsageList", params);
294
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
295
+ }
296
+ catch (error) {
297
+ return { content: [{ type: "text", text: error.message }], isError: true };
298
+ }
299
+ });
300
+ // ncloud_get_contract_usage_list_by_daily — 일별 계약 사용량 목록 조회
301
+ server.tool("ncloud_get_contract_usage_list_by_daily", "Get daily contract usage list. Returns daily usage breakdown per contract for the specified date range (max 3 months).", {
302
+ useStartDay: z.string().describe("Start day in yyyyMMdd format (e.g. 20240101)"),
303
+ useEndDay: z.string().describe("End day in yyyyMMdd format (e.g. 20240131, max 3 months range)"),
304
+ pageNo: z.number().optional().describe("Page number"),
305
+ pageSize: z.number().optional().describe("Page size (max 1000, default 1000)"),
306
+ isOrganization: z.boolean().optional().describe("Query as Organization master (integrated view)"),
307
+ isPartner: z.boolean().optional().describe("Query as Partner representative"),
308
+ memberNoList: z.array(z.string()).optional().describe("Member number list (master/partner only)"),
309
+ contractNo: z.string().optional().describe("Contract number to filter"),
310
+ contractTypeCode: z.string().optional().describe("Contract type code"),
311
+ productItemKindCode: z.string().optional().describe("Product item kind code"),
312
+ regionCode: z.string().optional().describe("Region code (e.g. KR)"),
313
+ }, async ({ useStartDay, useEndDay, pageNo, pageSize, isOrganization, isPartner, memberNoList, contractNo, contractTypeCode, productItemKindCode, regionCode }) => {
314
+ try {
315
+ const params = { responseFormatType: "json", useStartDay, useEndDay };
316
+ if (pageNo !== undefined)
317
+ params["pageNo"] = String(pageNo);
318
+ if (pageSize !== undefined)
319
+ params["pageSize"] = String(pageSize);
320
+ if (isOrganization !== undefined)
321
+ params["isOrganization"] = String(isOrganization);
322
+ if (isPartner !== undefined)
323
+ params["isPartner"] = String(isPartner);
324
+ if (memberNoList)
325
+ memberNoList.forEach((no, i) => { params[`memberNoList.${i + 1}`] = no; });
326
+ if (contractNo)
327
+ params["contractNo"] = contractNo;
328
+ if (contractTypeCode)
329
+ params["contractTypeCode"] = contractTypeCode;
330
+ if (productItemKindCode)
331
+ params["productItemKindCode"] = productItemKindCode;
332
+ if (regionCode)
333
+ params["regionCode"] = regionCode;
334
+ const result = await client.requestRaw("GET", "/billing/v1/cost/getContractUsageListByDaily", params);
335
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
336
+ }
337
+ catch (error) {
338
+ return { content: [{ type: "text", text: error.message }], isError: true };
339
+ }
340
+ });
341
+ // ncloud_get_cost_relation_code_list — 비용 연관 코드 목록 조회
342
+ server.tool("ncloud_get_cost_relation_code_list", "Get cost relation code list. Returns mapping between contract types, product item kinds, rating types, metering types, demand types, and product categories. Useful for understanding billing code relationships.", {
343
+ contractTypeCode: z.string().optional().describe("Contract type code (e.g. VSVR)"),
344
+ productItemKindCode: z.string().optional().describe("Product item kind code"),
345
+ productRatingTypeCode: z.string().optional().describe("Product rating type code"),
346
+ meteringTypeCode: z.string().optional().describe("Metering type code"),
347
+ productCategoryCode: z.string().optional().describe("Product category code (e.g. COMPUTE)"),
348
+ }, async ({ contractTypeCode, productItemKindCode, productRatingTypeCode, meteringTypeCode, productCategoryCode }) => {
349
+ try {
350
+ const params = { responseFormatType: "json" };
351
+ if (contractTypeCode)
352
+ params["contractTypeCode"] = contractTypeCode;
353
+ if (productItemKindCode)
354
+ params["productItemKindCode"] = productItemKindCode;
355
+ if (productRatingTypeCode)
356
+ params["productRatingTypeCode"] = productRatingTypeCode;
357
+ if (meteringTypeCode)
358
+ params["meteringTypeCode"] = meteringTypeCode;
359
+ if (productCategoryCode)
360
+ params["productCategoryCode"] = productCategoryCode;
361
+ const result = await client.requestRaw("GET", "/billing/v1/cost/getCostRelationCodeList", params);
362
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
363
+ }
364
+ catch (error) {
365
+ return { content: [{ type: "text", text: error.message }], isError: true };
366
+ }
367
+ });
368
+ // ============================================================
369
+ // Discount APIs — /discount/...
370
+ // ============================================================
371
+ // ncloud_get_discount_list — 할인 목록 조회
372
+ server.tool("ncloud_get_discount_list", "Get discount list. Returns all discounts (product discounts, credits, coins) assigned to the account with their validity periods and amounts.", {
373
+ pageNo: z.number().optional().describe("Page number"),
374
+ pageSize: z.number().optional().describe("Page size (max 1000, default 1000)"),
375
+ isOrganization: z.boolean().optional().describe("Query as Organization master (integrated view)"),
376
+ isPartner: z.boolean().optional().describe("Query as Partner representative"),
377
+ memberNoList: z.array(z.string()).optional().describe("Member number list (master/partner only)"),
378
+ discountTypeCode: z.enum(["PRODUCT", "CREDIT", "COIN"]).optional().describe("Discount type: PRODUCT (service discount), CREDIT, COIN"),
379
+ startMonth: z.string().optional().describe("Start month in yyyyMM format (max 3 months range)"),
380
+ endMonth: z.string().optional().describe("End month in yyyyMM format"),
381
+ isValidDiscount: z.boolean().optional().describe("Filter only valid (active) discounts"),
382
+ }, async ({ pageNo, pageSize, isOrganization, isPartner, memberNoList, discountTypeCode, startMonth, endMonth, isValidDiscount }) => {
383
+ try {
384
+ const params = { responseFormatType: "json" };
385
+ if (pageNo !== undefined)
386
+ params["pageNo"] = String(pageNo);
387
+ if (pageSize !== undefined)
388
+ params["pageSize"] = String(pageSize);
389
+ if (isOrganization !== undefined)
390
+ params["isOrganization"] = String(isOrganization);
391
+ if (isPartner !== undefined)
392
+ params["isPartner"] = String(isPartner);
393
+ if (memberNoList)
394
+ memberNoList.forEach((no, i) => { params[`memberNoList.${i + 1}`] = no; });
395
+ if (discountTypeCode)
396
+ params["discountTypeCode"] = discountTypeCode;
397
+ if (startMonth)
398
+ params["startMonth"] = startMonth;
399
+ if (endMonth)
400
+ params["endMonth"] = endMonth;
401
+ if (isValidDiscount !== undefined)
402
+ params["isValidDiscount"] = String(isValidDiscount);
403
+ const result = await client.requestRaw("GET", "/billing/v1/discount/getDiscountList", params);
404
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
405
+ }
406
+ catch (error) {
407
+ return { content: [{ type: "text", text: error.message }], isError: true };
408
+ }
409
+ });
410
+ // ncloud_get_coin_history_list — 코인 이력 목록 조회
411
+ server.tool("ncloud_get_coin_history_list", "Get coin history list. Returns coin balance, usage history, and status for all or specific coins assigned to the account.", {
412
+ pageNo: z.number().optional().describe("Page number"),
413
+ pageSize: z.number().optional().describe("Page size (max 1000, default 1000)"),
414
+ discountNoList: z.array(z.string()).optional().describe("Coin discount numbers to query (from getDiscountList)"),
415
+ isOrganization: z.boolean().optional().describe("Query as Organization master (integrated view)"),
416
+ isPartner: z.boolean().optional().describe("Query as Partner representative"),
417
+ memberNoList: z.array(z.string()).optional().describe("Member number list (master/partner only)"),
418
+ }, async ({ pageNo, pageSize, discountNoList, isOrganization, isPartner, memberNoList }) => {
419
+ try {
420
+ const params = { responseFormatType: "json" };
421
+ if (pageNo !== undefined)
422
+ params["pageNo"] = String(pageNo);
423
+ if (pageSize !== undefined)
424
+ params["pageSize"] = String(pageSize);
425
+ if (discountNoList)
426
+ discountNoList.forEach((no, i) => { params[`discountNoList.${i + 1}`] = no; });
427
+ if (isOrganization !== undefined)
428
+ params["isOrganization"] = String(isOrganization);
429
+ if (isPartner !== undefined)
430
+ params["isPartner"] = String(isPartner);
431
+ if (memberNoList)
432
+ memberNoList.forEach((no, i) => { params[`memberNoList.${i + 1}`] = no; });
433
+ const result = await client.requestRaw("GET", "/billing/v1/discount/getCoinHistoryList", params);
434
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
435
+ }
436
+ catch (error) {
437
+ return { content: [{ type: "text", text: error.message }], isError: true };
438
+ }
439
+ });
440
+ // ncloud_get_credit_history_list — 크레딧 이력 목록 조회
441
+ server.tool("ncloud_get_credit_history_list", "Get credit history list. Returns credit balance, usage history per service, and validity periods for all or specific credits.", {
442
+ pageNo: z.number().optional().describe("Page number"),
443
+ pageSize: z.number().optional().describe("Page size (max 1000, default 1000)"),
444
+ discountNoList: z.array(z.string()).optional().describe("Credit discount numbers to query (from getDiscountList)"),
445
+ isOrganization: z.boolean().optional().describe("Query as Organization master (integrated view)"),
446
+ isPartner: z.boolean().optional().describe("Query as Partner representative"),
447
+ memberNoList: z.array(z.string()).optional().describe("Member number list (master/partner only)"),
448
+ startMonth: z.string().optional().describe("Start month in yyyyMM format"),
449
+ endMonth: z.string().optional().describe("End month in yyyyMM format"),
450
+ }, async ({ pageNo, pageSize, discountNoList, isOrganization, isPartner, memberNoList, startMonth, endMonth }) => {
451
+ try {
452
+ const params = { responseFormatType: "json" };
453
+ if (pageNo !== undefined)
454
+ params["pageNo"] = String(pageNo);
455
+ if (pageSize !== undefined)
456
+ params["pageSize"] = String(pageSize);
457
+ if (discountNoList)
458
+ discountNoList.forEach((no, i) => { params[`discountNoList.${i + 1}`] = no; });
459
+ if (isOrganization !== undefined)
460
+ params["isOrganization"] = String(isOrganization);
461
+ if (isPartner !== undefined)
462
+ params["isPartner"] = String(isPartner);
463
+ if (memberNoList)
464
+ memberNoList.forEach((no, i) => { params[`memberNoList.${i + 1}`] = no; });
465
+ if (startMonth)
466
+ params["startMonth"] = startMonth;
467
+ if (endMonth)
468
+ params["endMonth"] = endMonth;
469
+ const result = await client.requestRaw("GET", "/billing/v1/discount/getCreditHistoryList", params);
470
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
471
+ }
472
+ catch (error) {
473
+ return { content: [{ type: "text", text: error.message }], isError: true };
474
+ }
475
+ });
476
+ // ncloud_get_product_demand_cost_by_discount_list — 할인 반영 청구 내역 조회
477
+ server.tool("ncloud_get_product_demand_cost_by_discount_list", "Get billing history with discount details applied. Returns per-service billing amounts showing how each discount (product discount, credit) was applied for the specified period (max 6 months).", {
478
+ startMonth: z.string().describe("Start month in yyyyMM format (e.g. 202401)"),
479
+ endMonth: z.string().describe("End month in yyyyMM format (e.g. 202406, max 6 months range)"),
480
+ pageNo: z.number().optional().describe("Page number"),
481
+ pageSize: z.number().optional().describe("Page size (max 1000, default 1000)"),
482
+ productDemandTypeCodeList: z.array(z.string()).optional().describe("Product demand type codes to filter"),
483
+ isOrganization: z.boolean().optional().describe("Query as Organization master (integrated view)"),
484
+ isPartner: z.boolean().optional().describe("Query as Partner representative"),
485
+ memberNoList: z.array(z.string()).optional().describe("Member number list (master/partner only)"),
486
+ }, async ({ startMonth, endMonth, pageNo, pageSize, productDemandTypeCodeList, isOrganization, isPartner, memberNoList }) => {
487
+ try {
488
+ const params = { responseFormatType: "json", startMonth, endMonth };
489
+ if (pageNo !== undefined)
490
+ params["pageNo"] = String(pageNo);
491
+ if (pageSize !== undefined)
492
+ params["pageSize"] = String(pageSize);
493
+ if (productDemandTypeCodeList)
494
+ productDemandTypeCodeList.forEach((code, i) => { params[`productDemandTypeCodeList.${i + 1}`] = code; });
495
+ if (isOrganization !== undefined)
496
+ params["isOrganization"] = String(isOrganization);
497
+ if (isPartner !== undefined)
498
+ params["isPartner"] = String(isPartner);
499
+ if (memberNoList)
500
+ memberNoList.forEach((no, i) => { params[`memberNoList.${i + 1}`] = no; });
501
+ const result = await client.requestRaw("GET", "/billing/v1/discount/getProductDemandCostByDiscountList", params);
502
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
503
+ }
504
+ catch (error) {
505
+ return { content: [{ type: "text", text: error.message }], isError: true };
506
+ }
507
+ });
508
+ // ncloud_get_product_discount_history_list — 서비스 할인 이력 목록 조회
509
+ server.tool("ncloud_get_product_discount_history_list", "Get product discount history list. Returns service discount details including discount rate, eligible services, and per-service usage/applied amounts.", {
510
+ pageNo: z.number().optional().describe("Page number"),
511
+ pageSize: z.number().optional().describe("Page size (max 1000, default 1000)"),
512
+ discountNoList: z.array(z.string()).optional().describe("Discount numbers to query (from getDiscountList)"),
513
+ isOrganization: z.boolean().optional().describe("Query as Organization master (integrated view)"),
514
+ isPartner: z.boolean().optional().describe("Query as Partner representative"),
515
+ memberNoList: z.array(z.string()).optional().describe("Member number list (master/partner only)"),
516
+ startMonth: z.string().optional().describe("Start month in yyyyMM format"),
517
+ endMonth: z.string().optional().describe("End month in yyyyMM format"),
518
+ }, async ({ pageNo, pageSize, discountNoList, isOrganization, isPartner, memberNoList, startMonth, endMonth }) => {
519
+ try {
520
+ const params = { responseFormatType: "json" };
521
+ if (pageNo !== undefined)
522
+ params["pageNo"] = String(pageNo);
523
+ if (pageSize !== undefined)
524
+ params["pageSize"] = String(pageSize);
525
+ if (discountNoList)
526
+ discountNoList.forEach((no, i) => { params[`discountNoList.${i + 1}`] = no; });
527
+ if (isOrganization !== undefined)
528
+ params["isOrganization"] = String(isOrganization);
529
+ if (isPartner !== undefined)
530
+ params["isPartner"] = String(isPartner);
531
+ if (memberNoList)
532
+ memberNoList.forEach((no, i) => { params[`memberNoList.${i + 1}`] = no; });
533
+ if (startMonth)
534
+ params["startMonth"] = startMonth;
535
+ if (endMonth)
536
+ params["endMonth"] = endMonth;
537
+ const result = await client.requestRaw("GET", "/billing/v1/discount/getProductDiscountHistoryList", params);
538
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
539
+ }
540
+ catch (error) {
541
+ return { content: [{ type: "text", text: error.message }], isError: true };
542
+ }
543
+ });
544
+ } // end of registerBillingTools
545
+ //# sourceMappingURL=billing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.js","sourceRoot":"","sources":["../../src/tools/billing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { NcloudClient } from "../client/ncloud-client.js";
3
+ /**
4
+ * Certificate Manager API 1.0
5
+ * Base URL: https://certificatemanager.apigw.ntruss.com
6
+ *
7
+ * v1 API는 3개 엔드포인트를 제공:
8
+ * - GET /api/v1/certificates — 인증서 목록 조회
9
+ * - POST /api/v1/certificate/withExternal — 외부 인증서 등록
10
+ * - DELETE /api/v1/certificate/{no}?certificateName=... — 인증서 삭제
11
+ *
12
+ * 주의:
13
+ * - Certificate Manager API는 일반 Ncloud API와 달리 responseFormatType, regionCode
14
+ * 쿼리 파라미터를 사용하지 않는다 (글로벌 서비스).
15
+ * - 모든 요청에 Content-Type: application/json, Accept: application/json 헤더 필수.
16
+ * - client.requestRaw()를 사용하여 자동 파라미터 주입을 회피한다.
17
+ */
18
+ export declare function registerCertificateManagerTools(server: McpServer, client: NcloudClient): void;