ncloud-mcp-server 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -18,7 +18,7 @@ const creds = { accessKey, secretKey };
18
18
  // Create MCP Server
19
19
  const server = new McpServer({
20
20
  name: "ncloud-mcp-server",
21
- version: "1.1.0",
21
+ version: "1.1.1",
22
22
  });
23
23
  // 그룹 단위 도구 등록 (NCLOUD_TOOL_GROUPS 미설정 시 전체 ON = 기존 동작 동일)
24
24
  const ctx = {
@@ -1,43 +1,58 @@
1
1
  import { z } from "zod";
2
2
  import { toolText } from "./_response.js";
3
+ // Cloud Insight Integration API (base: https://cw.apigw.ntruss.com)
4
+ // 공식 docs 기준 경로/메서드/필드 (management-cloudinsight-*integration*)
5
+ const BASE = "/cw_fea/real/cw/api/integration";
3
6
  export function registerCloudInsightIntegrationTools(server, client) {
4
- // ncloud_list_integrations — Get integration list
5
- server.tool("ncloud_list_integrations", "Get the list of Cloud Insight integrations.", {}, async () => {
7
+ // ncloud_list_integrations — Get integration list (paged)
8
+ server.tool("ncloud_list_integrations", "Get the list of Cloud Insight integrations (paged).", {
9
+ query: z.string().optional().default("").describe("Filter keyword (empty string = all)"),
10
+ pageNum: z.number().optional().default(1).describe("Page number (>= 1)"),
11
+ pageSize: z.number().optional().default(100).describe("Page size (>= 1)"),
12
+ }, async (params) => {
6
13
  try {
7
- const result = await client.postRequest("/cw_fea/real/cw/api/integration/list", {});
14
+ const body = {
15
+ query: params.query ?? "",
16
+ pageNum: params.pageNum ?? 1,
17
+ pageSize: params.pageSize ?? 100,
18
+ };
19
+ const result = await client.postRequest(`${BASE}/page`, body);
8
20
  return toolText(result);
9
21
  }
10
22
  catch (error) {
11
23
  return { content: [{ type: "text", text: error.message }], isError: true };
12
24
  }
13
25
  });
14
- // ncloud_get_integration — Get integration details
26
+ // ncloud_get_integration — Get integration details (GET, id in path)
15
27
  server.tool("ncloud_get_integration", "Get detailed information about a specific Cloud Insight integration.", {
16
28
  integrationId: z.string().describe("Integration ID to retrieve details for"),
17
29
  }, async (params) => {
18
30
  try {
19
- const body = { integrationId: params.integrationId };
20
- const result = await client.postRequest("/cw_fea/real/cw/api/integration/detail", body);
31
+ const result = await client.requestRaw("GET", `${BASE}/${params.integrationId}/detail`);
21
32
  return toolText(result);
22
33
  }
23
34
  catch (error) {
24
35
  return { content: [{ type: "text", text: error.message }], isError: true };
25
36
  }
26
37
  });
27
- // ncloud_create_integration — Create an integration
28
- server.tool("ncloud_create_integration", "Create a new Cloud Insight integration.", {
29
- integrationName: z.string().describe("Name of the integration"),
30
- integrationType: z.string().describe("Type of integration"),
31
- config: z.record(z.unknown()).optional().describe("Integration configuration as key-value pairs"),
38
+ // ncloud_create_integration — Create an integration (OUT_GOING webhook)
39
+ server.tool("ncloud_create_integration", "Create a new Cloud Insight integration (outgoing webhook).", {
40
+ name: z.string().describe("Name of the integration"),
41
+ url: z.string().describe("Outgoing webhook URL"),
42
+ payload: z.string().describe("Request payload template (JSON string, 0-15000 bytes)"),
43
+ type: z.string().optional().default("OUT_GOING").describe("Integration type (currently 'OUT_GOING')"),
44
+ headers: z.record(z.string()).optional().describe("HTTP headers to send (max 10 entries)"),
32
45
  }, async (params) => {
33
46
  try {
34
47
  const body = {
35
- integrationName: params.integrationName,
36
- integrationType: params.integrationType,
48
+ name: params.name,
49
+ type: params.type ?? "OUT_GOING",
50
+ url: params.url,
51
+ payload: params.payload,
37
52
  };
38
- if (params.config !== undefined)
39
- body.config = params.config;
40
- const result = await client.postRequest("/cw_fea/real/cw/api/integration/create", body);
53
+ if (params.headers !== undefined)
54
+ body.headers = params.headers;
55
+ const result = await client.postRequest(`${BASE}/create`, body);
41
56
  return toolText(result);
42
57
  }
43
58
  catch (error) {
@@ -47,40 +62,45 @@ export function registerCloudInsightIntegrationTools(server, client) {
47
62
  // ncloud_update_integration — Update an integration
48
63
  server.tool("ncloud_update_integration", "Update an existing Cloud Insight integration.", {
49
64
  integrationId: z.string().describe("Integration ID to update"),
50
- integrationName: z.string().optional().describe("New name for the integration"),
51
- config: z.record(z.unknown()).optional().describe("Updated integration configuration"),
65
+ name: z.string().describe("Name of the integration"),
66
+ url: z.string().describe("Outgoing webhook URL"),
67
+ payload: z.string().describe("Request payload template (JSON string, 0-15000 bytes)"),
68
+ type: z.string().optional().default("OUT_GOING").describe("Integration type (currently 'OUT_GOING')"),
69
+ headers: z.record(z.string()).optional().describe("HTTP headers to send (max 10 entries)"),
52
70
  }, async (params) => {
53
71
  try {
54
72
  const body = {
55
- integrationId: params.integrationId,
73
+ id: params.integrationId,
74
+ name: params.name,
75
+ type: params.type ?? "OUT_GOING",
76
+ url: params.url,
77
+ payload: params.payload,
56
78
  };
57
- if (params.integrationName !== undefined)
58
- body.integrationName = params.integrationName;
59
- if (params.config !== undefined)
60
- body.config = params.config;
61
- const result = await client.postRequest("/cw_fea/real/cw/api/integration/update", body);
79
+ if (params.headers !== undefined)
80
+ body.headers = params.headers;
81
+ const result = await client.postRequest(`${BASE}/update`, body);
62
82
  return toolText(result);
63
83
  }
64
84
  catch (error) {
65
85
  return { content: [{ type: "text", text: error.message }], isError: true };
66
86
  }
67
87
  });
68
- // ncloud_delete_integration — Delete an integration
69
- server.tool("ncloud_delete_integration", "⚠️ Destructive: Delete a Cloud Insight integration.", {
88
+ // ncloud_delete_integration — Delete integration(s) (body = JSON array of ids)
89
+ server.tool("ncloud_delete_integration", "⚠️ Destructive: Delete a Cloud Insight integration. Set confirm=true to execute.", {
70
90
  integrationId: z.string().describe("Integration ID to delete"),
71
- confirm: z.boolean().optional().describe("Must be true to execute deletion."),
91
+ confirm: z.boolean().optional().default(false).describe("Must be true to actually execute the destructive operation"),
72
92
  }, async (params) => {
73
93
  try {
74
94
  if (!params.confirm) {
75
95
  return {
76
96
  content: [{
77
97
  type: "text",
78
- text: `⚠️ This will permanently delete integration [${params.integrationId}]. To confirm, call this tool again with confirm=true.`,
98
+ text: `⚠️ This will permanently delete integration [${params.integrationId}]. To execute, call this tool again with confirm=true.`,
79
99
  }],
80
100
  };
81
101
  }
82
- const body = { integrationId: params.integrationId };
83
- const result = await client.postRequest("/cw_fea/real/cw/api/integration/delete", body);
102
+ // 삭제 API는 id 문자열의 JSON 배열을 body로 받는다
103
+ const result = await client.postRequest(`${BASE}/delete`, [params.integrationId]);
84
104
  return toolText(result);
85
105
  }
86
106
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"cloud-insight-integration.js","sourceRoot":"","sources":["../../src/tools/cloud-insight-integration.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cloud-insight-integration.js","sourceRoot":"","sources":["../../src/tools/cloud-insight-integration.ts"],"names":[],"mappings":"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"}