ncloud-mcp-server 1.0.3 → 1.1.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 (147) hide show
  1. package/README.md +18 -2
  2. package/README_EN.md +18 -2
  3. package/dist/index.js +12 -331
  4. package/dist/index.js.map +1 -1
  5. package/dist/tools/_response.d.ts +69 -0
  6. package/dist/tools/_response.js +96 -0
  7. package/dist/tools/_response.js.map +1 -0
  8. package/dist/tools/acg.js +10 -9
  9. package/dist/tools/acg.js.map +1 -1
  10. package/dist/tools/activity-tracer.js +4 -3
  11. package/dist/tools/activity-tracer.js.map +1 -1
  12. package/dist/tools/analytics-cdss.js +51 -50
  13. package/dist/tools/analytics-cdss.js.map +1 -1
  14. package/dist/tools/analytics-datacatalog.js +22 -21
  15. package/dist/tools/analytics-datacatalog.js.map +1 -1
  16. package/dist/tools/analytics-dataflow.js +27 -26
  17. package/dist/tools/analytics-dataflow.js.map +1 -1
  18. package/dist/tools/analytics-dataforest.js +25 -24
  19. package/dist/tools/analytics-dataforest.js.map +1 -1
  20. package/dist/tools/analytics-dataquery.js +6 -5
  21. package/dist/tools/analytics-dataquery.js.map +1 -1
  22. package/dist/tools/analytics-datastream.js +22 -21
  23. package/dist/tools/analytics-datastream.js.map +1 -1
  24. package/dist/tools/analytics-hadoop.js +30 -29
  25. package/dist/tools/analytics-hadoop.js.map +1 -1
  26. package/dist/tools/analytics-ses.js +43 -42
  27. package/dist/tools/analytics-ses.js.map +1 -1
  28. package/dist/tools/api-gateway.js +13 -12
  29. package/dist/tools/api-gateway.js.map +1 -1
  30. package/dist/tools/autoscaling.js +25 -24
  31. package/dist/tools/autoscaling.js.map +1 -1
  32. package/dist/tools/billing.d.ts +0 -11
  33. package/dist/tools/billing.js +210 -48
  34. package/dist/tools/billing.js.map +1 -1
  35. package/dist/tools/certificate-manager.js +4 -3
  36. package/dist/tools/certificate-manager.js.map +1 -1
  37. package/dist/tools/cloud-advisor.js +16 -15
  38. package/dist/tools/cloud-advisor.js.map +1 -1
  39. package/dist/tools/cloud-functions.js +22 -21
  40. package/dist/tools/cloud-functions.js.map +1 -1
  41. package/dist/tools/cloud-insight-integration.js +6 -5
  42. package/dist/tools/cloud-insight-integration.js.map +1 -1
  43. package/dist/tools/cloud-insight-plugin.js +34 -33
  44. package/dist/tools/cloud-insight-plugin.js.map +1 -1
  45. package/dist/tools/cloud-insight-rule.js +28 -27
  46. package/dist/tools/cloud-insight-rule.js.map +1 -1
  47. package/dist/tools/cloud-insight.js +12 -11
  48. package/dist/tools/cloud-insight.js.map +1 -1
  49. package/dist/tools/common.js +6 -5
  50. package/dist/tools/common.js.map +1 -1
  51. package/dist/tools/compute-initscript.js +5 -4
  52. package/dist/tools/compute-initscript.js.map +1 -1
  53. package/dist/tools/compute-loginkey.js +5 -4
  54. package/dist/tools/compute-loginkey.js.map +1 -1
  55. package/dist/tools/compute-placement.js +14 -13
  56. package/dist/tools/compute-placement.js.map +1 -1
  57. package/dist/tools/compute-publicip.js +8 -7
  58. package/dist/tools/compute-publicip.js.map +1 -1
  59. package/dist/tools/compute-server.js +29 -28
  60. package/dist/tools/compute-server.js.map +1 -1
  61. package/dist/tools/compute-storage.js +16 -15
  62. package/dist/tools/compute-storage.js.map +1 -1
  63. package/dist/tools/containers-nks.js +104 -47
  64. package/dist/tools/containers-nks.js.map +1 -1
  65. package/dist/tools/containers-registry.js +13 -12
  66. package/dist/tools/containers-registry.js.map +1 -1
  67. package/dist/tools/database-cache.js +25 -24
  68. package/dist/tools/database-cache.js.map +1 -1
  69. package/dist/tools/database-mongodb.js +25 -24
  70. package/dist/tools/database-mongodb.js.map +1 -1
  71. package/dist/tools/database-mssql.js +23 -22
  72. package/dist/tools/database-mssql.js.map +1 -1
  73. package/dist/tools/database-mysql.js +30 -29
  74. package/dist/tools/database-mysql.js.map +1 -1
  75. package/dist/tools/database-postgresql.js +26 -25
  76. package/dist/tools/database-postgresql.js.map +1 -1
  77. package/dist/tools/global-dns.js +13 -12
  78. package/dist/tools/global-dns.js.map +1 -1
  79. package/dist/tools/global-edge.js +21 -20
  80. package/dist/tools/global-edge.js.map +1 -1
  81. package/dist/tools/global-traffic-manager.js +27 -26
  82. package/dist/tools/global-traffic-manager.js.map +1 -1
  83. package/dist/tools/kms.js +52 -39
  84. package/dist/tools/kms.js.map +1 -1
  85. package/dist/tools/loadbalancer.js +17 -16
  86. package/dist/tools/loadbalancer.js.map +1 -1
  87. package/dist/tools/log-analytics.js +11 -10
  88. package/dist/tools/log-analytics.js.map +1 -1
  89. package/dist/tools/media-imageoptimizer.js +10 -9
  90. package/dist/tools/media-imageoptimizer.js.map +1 -1
  91. package/dist/tools/media-livestation.js +13 -12
  92. package/dist/tools/media-livestation.js.map +1 -1
  93. package/dist/tools/media-vodstation.js +11 -10
  94. package/dist/tools/media-vodstation.js.map +1 -1
  95. package/dist/tools/nat-gateway.js +6 -5
  96. package/dist/tools/nat-gateway.js.map +1 -1
  97. package/dist/tools/network-acl.js +18 -17
  98. package/dist/tools/network-acl.js.map +1 -1
  99. package/dist/tools/network-interface.js +15 -14
  100. package/dist/tools/network-interface.js.map +1 -1
  101. package/dist/tools/private-ca.js +32 -23
  102. package/dist/tools/private-ca.js.map +1 -1
  103. package/dist/tools/registry.d.ts +49 -0
  104. package/dist/tools/registry.js +254 -0
  105. package/dist/tools/registry.js.map +1 -0
  106. package/dist/tools/resource-manager.js +7 -6
  107. package/dist/tools/resource-manager.js.map +1 -1
  108. package/dist/tools/route-table.js +12 -11
  109. package/dist/tools/route-table.js.map +1 -1
  110. package/dist/tools/security-monitoring.js +8 -7
  111. package/dist/tools/security-monitoring.js.map +1 -1
  112. package/dist/tools/sens.js +7 -6
  113. package/dist/tools/sens.js.map +1 -1
  114. package/dist/tools/sourcebuild.js +18 -17
  115. package/dist/tools/sourcebuild.js.map +1 -1
  116. package/dist/tools/sourcecommit.js +13 -12
  117. package/dist/tools/sourcecommit.js.map +1 -1
  118. package/dist/tools/sourcedeploy.js +35 -34
  119. package/dist/tools/sourcedeploy.js.map +1 -1
  120. package/dist/tools/sourcepipeline.js +18 -17
  121. package/dist/tools/sourcepipeline.js.map +1 -1
  122. package/dist/tools/storage-archive.js +13 -12
  123. package/dist/tools/storage-archive.js.map +1 -1
  124. package/dist/tools/storage-nas.js +20 -19
  125. package/dist/tools/storage-nas.js.map +1 -1
  126. package/dist/tools/storage-ncloud.js +25 -24
  127. package/dist/tools/storage-ncloud.js.map +1 -1
  128. package/dist/tools/storage-object.js +29 -28
  129. package/dist/tools/storage-object.js.map +1 -1
  130. package/dist/tools/sub-account.js +19 -18
  131. package/dist/tools/sub-account.js.map +1 -1
  132. package/dist/tools/target-group.js +12 -11
  133. package/dist/tools/target-group.js.map +1 -1
  134. package/dist/tools/vpc-peering.js +8 -7
  135. package/dist/tools/vpc-peering.js.map +1 -1
  136. package/dist/tools/vpc.js +11 -10
  137. package/dist/tools/vpc.js.map +1 -1
  138. package/package.json +3 -2
  139. package/dist/auth/signature.test.d.ts +0 -1
  140. package/dist/auth/signature.test.js +0 -90
  141. package/dist/auth/signature.test.js.map +0 -1
  142. package/dist/client/ncloud-client.test.d.ts +0 -1
  143. package/dist/client/ncloud-client.test.js +0 -477
  144. package/dist/client/ncloud-client.test.js.map +0 -1
  145. package/dist/tools/compute-server.test.d.ts +0 -1
  146. package/dist/tools/compute-server.test.js +0 -224
  147. package/dist/tools/compute-server.test.js.map +0 -1
@@ -1,224 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from "vitest";
2
- import fc from "fast-check";
3
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
4
- import { NcloudClient } from "../client/ncloud-client.js";
5
- import { registerComputeServerTools } from "./compute-server.js";
6
- // Helper to create a mock client
7
- function createMockClient() {
8
- const client = new NcloudClient({
9
- accessKey: "testAccessKey",
10
- secretKey: "testSecretKey",
11
- baseUrl: "https://ncloud.apigw.ntruss.com",
12
- regionCode: "KR",
13
- });
14
- return client;
15
- }
16
- // Helper to extract tool handler from McpServer
17
- function getToolHandler(server, toolName) {
18
- // Access internal tool registry
19
- const tools = server._registeredTools;
20
- if (!tools) {
21
- throw new Error("No registered tools found on server");
22
- }
23
- // _registeredTools may be a Map or plain object
24
- const entry = tools instanceof Map ? tools.get(toolName) : tools[toolName];
25
- if (!entry) {
26
- throw new Error(`Tool ${toolName} not found`);
27
- }
28
- return entry.handler;
29
- }
30
- describe("Feature: ncloud-mcp-server, Property 9: 파괴적 작업 확인 게이트", () => {
31
- let server;
32
- let client;
33
- beforeEach(() => {
34
- server = new McpServer({ name: "test", version: "1.0.0" });
35
- client = createMockClient();
36
- registerComputeServerTools(server, client);
37
- });
38
- it("ncloud_terminate_server with confirm=false should NOT call API and should return confirmation prompt", async () => {
39
- await fc.assert(fc.asyncProperty(fc.array(fc.stringMatching(/^[0-9]{4,10}$/), { minLength: 1, maxLength: 5 }), async (serverInstanceNoList) => {
40
- const requestSpy = vi.spyOn(client, "request");
41
- const handler = getToolHandler(server, "ncloud_terminate_server");
42
- const result = await handler({ serverInstanceNoList, confirm: false }, {});
43
- // Should NOT call the API
44
- expect(requestSpy).not.toHaveBeenCalled();
45
- // Should return a confirmation prompt containing resource IDs
46
- const text = result.content[0].text;
47
- expect(text).toContain("⚠️");
48
- for (const id of serverInstanceNoList) {
49
- expect(text).toContain(id);
50
- }
51
- // Should NOT have isError
52
- expect(result.isError).toBeUndefined();
53
- requestSpy.mockRestore();
54
- }), { numRuns: 100 });
55
- });
56
- it("ncloud_delete_server_images with confirm=false should NOT call API and should return confirmation prompt", async () => {
57
- await fc.assert(fc.asyncProperty(fc.array(fc.stringMatching(/^[0-9]{4,10}$/), { minLength: 1, maxLength: 5 }), async (serverImageInstanceNoList) => {
58
- const requestSpy = vi.spyOn(client, "request");
59
- const handler = getToolHandler(server, "ncloud_delete_server_images");
60
- const result = await handler({ serverImageInstanceNoList, confirm: false }, {});
61
- expect(requestSpy).not.toHaveBeenCalled();
62
- const text = result.content[0].text;
63
- expect(text).toContain("⚠️");
64
- for (const id of serverImageInstanceNoList) {
65
- expect(text).toContain(id);
66
- }
67
- expect(result.isError).toBeUndefined();
68
- requestSpy.mockRestore();
69
- }), { numRuns: 100 });
70
- });
71
- it("ncloud_delete_member_server_images with confirm=false should NOT call API and should return confirmation prompt", async () => {
72
- await fc.assert(fc.asyncProperty(fc.array(fc.stringMatching(/^[0-9]{4,10}$/), { minLength: 1, maxLength: 5 }), async (memberServerImageInstanceNoList) => {
73
- const requestSpy = vi.spyOn(client, "request");
74
- const handler = getToolHandler(server, "ncloud_delete_member_server_images");
75
- const result = await handler({ memberServerImageInstanceNoList, confirm: false }, {});
76
- expect(requestSpy).not.toHaveBeenCalled();
77
- const text = result.content[0].text;
78
- expect(text).toContain("⚠️");
79
- for (const id of memberServerImageInstanceNoList) {
80
- expect(text).toContain(id);
81
- }
82
- expect(result.isError).toBeUndefined();
83
- requestSpy.mockRestore();
84
- }), { numRuns: 100 });
85
- });
86
- });
87
- describe("Feature: ncloud-mcp-server, Property 10: Dry-Run API 호출 차단", () => {
88
- let server;
89
- let client;
90
- beforeEach(() => {
91
- server = new McpServer({ name: "test", version: "1.0.0" });
92
- client = createMockClient();
93
- registerComputeServerTools(server, client);
94
- });
95
- it("ncloud_create_server with dryRun=true should NOT call API and should return preview", async () => {
96
- await fc.assert(fc.asyncProperty(fc.record({
97
- serverImageProductCode: fc.stringMatching(/^[A-Z0-9_-]{5,30}$/),
98
- serverProductCode: fc.stringMatching(/^[A-Z0-9_-]{5,30}$/),
99
- vpcNo: fc.stringMatching(/^[0-9]{4,10}$/),
100
- subnetNo: fc.stringMatching(/^[0-9]{4,10}$/),
101
- }), async ({ serverImageProductCode, serverProductCode, vpcNo, subnetNo }) => {
102
- const requestSpy = vi.spyOn(client, "request");
103
- const handler = getToolHandler(server, "ncloud_create_server");
104
- const result = await handler({
105
- serverImageProductCode,
106
- serverProductCode,
107
- vpcNo,
108
- subnetNo,
109
- dryRun: true,
110
- }, {});
111
- // Should NOT call the API
112
- expect(requestSpy).not.toHaveBeenCalled();
113
- // Should return a preview response
114
- const text = result.content[0].text;
115
- const parsed = JSON.parse(text);
116
- expect(parsed.label).toContain("Dry-Run");
117
- expect(parsed.serverImageProductCode).toBe(serverImageProductCode);
118
- expect(parsed.serverProductCode).toBe(serverProductCode);
119
- expect(parsed.vpcNo).toBe(vpcNo);
120
- expect(parsed.subnetNo).toBe(subnetNo);
121
- // Should NOT have isError
122
- expect(result.isError).toBeUndefined();
123
- requestSpy.mockRestore();
124
- }), { numRuns: 100 });
125
- });
126
- });
127
- describe("Unit: confirm=true triggers API call", () => {
128
- let server;
129
- let client;
130
- beforeEach(() => {
131
- server = new McpServer({ name: "test", version: "1.0.0" });
132
- client = createMockClient();
133
- registerComputeServerTools(server, client);
134
- });
135
- it("ncloud_terminate_server with confirm=true should call terminateServerInstances API", async () => {
136
- const mockResponse = {
137
- serverInstanceList: [
138
- { serverInstanceNo: "12345", serverInstanceStatus: { code: "NSTOP" } },
139
- ],
140
- };
141
- const requestSpy = vi.spyOn(client, "request").mockResolvedValue(mockResponse);
142
- const handler = getToolHandler(server, "ncloud_terminate_server");
143
- const result = await handler({ serverInstanceNoList: ["12345"], confirm: true }, {});
144
- expect(requestSpy).toHaveBeenCalledWith("/vserver/v2/terminateServerInstances", {
145
- serverInstanceNoList: ["12345"],
146
- });
147
- expect(result.isError).toBeUndefined();
148
- const parsed = JSON.parse(result.content[0].text);
149
- expect(parsed.serverInstanceList).toBeDefined();
150
- requestSpy.mockRestore();
151
- });
152
- it("ncloud_delete_server_images with confirm=true should call deleteServerImageInstances API", async () => {
153
- const mockResponse = { serverImageInstanceList: [] };
154
- const requestSpy = vi.spyOn(client, "request").mockResolvedValue(mockResponse);
155
- const handler = getToolHandler(server, "ncloud_delete_server_images");
156
- const result = await handler({ serverImageInstanceNoList: ["99999"], confirm: true }, {});
157
- expect(requestSpy).toHaveBeenCalledWith("/vserver/v2/deleteServerImageInstances", {
158
- serverImageInstanceNoList: ["99999"],
159
- });
160
- expect(result.isError).toBeUndefined();
161
- requestSpy.mockRestore();
162
- });
163
- });
164
- describe("Unit: Server creation summary format", () => {
165
- let server;
166
- let client;
167
- beforeEach(() => {
168
- server = new McpServer({ name: "test", version: "1.0.0" });
169
- client = createMockClient();
170
- registerComputeServerTools(server, client);
171
- });
172
- it("ncloud_create_server with dryRun=false should return structured summary", async () => {
173
- const mockResponse = {
174
- serverInstanceList: [
175
- {
176
- serverInstanceNo: "12345",
177
- serverName: "my-server",
178
- serverInstanceStatus: { codeName: "init" },
179
- createDate: "2025-01-01T00:00:00+0900",
180
- privateIp: "10.0.0.5",
181
- },
182
- ],
183
- };
184
- const requestSpy = vi.spyOn(client, "request").mockResolvedValue(mockResponse);
185
- const handler = getToolHandler(server, "ncloud_create_server");
186
- const result = await handler({
187
- serverImageProductCode: "SW.VSVR.OS.LNX64.UBNTU.SVR2004.B050",
188
- serverProductCode: "SVR.VSVR.HICPU.C002.M004.NET.SSD.B050.G002",
189
- vpcNo: "1111",
190
- subnetNo: "2222",
191
- serverName: "my-server",
192
- dryRun: false,
193
- }, {});
194
- expect(requestSpy).toHaveBeenCalled();
195
- expect(result.isError).toBeUndefined();
196
- const parsed = JSON.parse(result.content[0].text);
197
- expect(parsed.리소스타입).toBe("Server");
198
- expect(parsed.리소스ID).toBe("12345");
199
- expect(parsed.리소스명).toBe("my-server");
200
- expect(parsed.상태).toBe("init");
201
- expect(parsed.서버스펙).toBe("SVR.VSVR.HICPU.C002.M004.NET.SSD.B050.G002");
202
- expect(parsed.이미지).toBe("SW.VSVR.OS.LNX64.UBNTU.SVR2004.B050");
203
- expect(parsed.VPC).toBe("1111");
204
- expect(parsed.서브넷).toBe("2222");
205
- expect(parsed.사설IP).toBe("10.0.0.5");
206
- requestSpy.mockRestore();
207
- });
208
- it("ncloud_create_server dryRun preview should contain Dry-Run label", async () => {
209
- const handler = getToolHandler(server, "ncloud_create_server");
210
- const result = await handler({
211
- serverImageProductCode: "IMG001",
212
- serverProductCode: "SPEC001",
213
- vpcNo: "1111",
214
- subnetNo: "2222",
215
- dryRun: true,
216
- }, {});
217
- expect(result.isError).toBeUndefined();
218
- const parsed = JSON.parse(result.content[0].text);
219
- expect(parsed.label).toContain("Dry-Run");
220
- expect(parsed.serverImageProductCode).toBe("IMG001");
221
- expect(parsed.serverProductCode).toBe("SPEC001");
222
- });
223
- });
224
- //# sourceMappingURL=compute-server.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compute-server.test.js","sourceRoot":"","sources":["../../src/tools/compute-server.test.ts"],"names":[],"mappings":"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"}