@rad-security/mcp-server 0.0.2
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/README.md +151 -0
- package/dist/client.d.ts +21 -0
- package/dist/client.js +102 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +480 -0
- package/dist/index.js.map +1 -0
- package/dist/operations/audit.d.ts +31 -0
- package/dist/operations/audit.js +55 -0
- package/dist/operations/audit.js.map +1 -0
- package/dist/operations/cloud-inventory.d.ts +70 -0
- package/dist/operations/cloud-inventory.js +61 -0
- package/dist/operations/cloud-inventory.js.map +1 -0
- package/dist/operations/clusters.d.ts +21 -0
- package/dist/operations/clusters.js +20 -0
- package/dist/operations/clusters.js.map +1 -0
- package/dist/operations/containers.d.ts +27 -0
- package/dist/operations/containers.js +33 -0
- package/dist/operations/containers.js.map +1 -0
- package/dist/operations/findings.d.ts +52 -0
- package/dist/operations/findings.js +76 -0
- package/dist/operations/findings.js.map +1 -0
- package/dist/operations/identities.d.ts +33 -0
- package/dist/operations/identities.js +30 -0
- package/dist/operations/identities.js.map +1 -0
- package/dist/operations/images.d.ts +46 -0
- package/dist/operations/images.js +58 -0
- package/dist/operations/images.js.map +1 -0
- package/dist/operations/kubeobject.d.ts +33 -0
- package/dist/operations/kubeobject.js +38 -0
- package/dist/operations/kubeobject.js.map +1 -0
- package/dist/operations/misconfigs.d.ts +21 -0
- package/dist/operations/misconfigs.js +36 -0
- package/dist/operations/misconfigs.js.map +1 -0
- package/dist/operations/runtime.d.ts +26 -0
- package/dist/operations/runtime.js +68 -0
- package/dist/operations/runtime.js.map +1 -0
- package/dist/operations/runtime_network.d.ts +53 -0
- package/dist/operations/runtime_network.js +41 -0
- package/dist/operations/runtime_network.js.map +1 -0
- package/dist/operations/threats.d.ts +22 -0
- package/dist/operations/threats.js +24 -0
- package/dist/operations/threats.js.map +1 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/package.json +63 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,480 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
3
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
|
+
import cors from 'cors';
|
|
5
|
+
import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
|
|
6
|
+
import { zodToJsonSchema } from 'zod-to-json-schema';
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
9
|
+
import express from "express";
|
|
10
|
+
import { RadSecurityClient } from "./client.js";
|
|
11
|
+
import * as containers from "./operations/containers.js";
|
|
12
|
+
import * as audit from "./operations/audit.js";
|
|
13
|
+
import * as cloudInventory from "./operations/cloud-inventory.js";
|
|
14
|
+
import * as clusters from "./operations/clusters.js";
|
|
15
|
+
import * as identities from "./operations/identities.js";
|
|
16
|
+
import * as images from "./operations/images.js";
|
|
17
|
+
import * as kubeobject from "./operations/kubeobject.js";
|
|
18
|
+
import * as misconfigs from "./operations/misconfigs.js";
|
|
19
|
+
import * as runtime from "./operations/runtime.js";
|
|
20
|
+
import * as runtimeNetwork from "./operations/runtime_network.js";
|
|
21
|
+
import * as threats from "./operations/threats.js";
|
|
22
|
+
import * as findings from "./operations/findings.js";
|
|
23
|
+
import { VERSION } from "./version.js";
|
|
24
|
+
async function newServer() {
|
|
25
|
+
// Initialize authentication
|
|
26
|
+
const client = RadSecurityClient.fromEnv();
|
|
27
|
+
// Initialize MCP server
|
|
28
|
+
const server = new Server({
|
|
29
|
+
name: "RAD Security MCP Server",
|
|
30
|
+
version: VERSION,
|
|
31
|
+
}, {
|
|
32
|
+
capabilities: {
|
|
33
|
+
prompts: {},
|
|
34
|
+
resources: {},
|
|
35
|
+
tools: {},
|
|
36
|
+
logging: {},
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
40
|
+
return {
|
|
41
|
+
tools: [
|
|
42
|
+
// Container tools
|
|
43
|
+
{
|
|
44
|
+
name: "list_containers",
|
|
45
|
+
description: "List containers secured by RAD Security with optional filtering by image name, image digest, namespace, cluster_id, or free text search",
|
|
46
|
+
inputSchema: zodToJsonSchema(containers.ListContainersSchema),
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: "get_container_details",
|
|
50
|
+
description: "Get detailed information about a container secured by RAD Security",
|
|
51
|
+
inputSchema: zodToJsonSchema(containers.GetContainerDetailsSchema),
|
|
52
|
+
},
|
|
53
|
+
// Cluster tools
|
|
54
|
+
{
|
|
55
|
+
name: "list_clusters",
|
|
56
|
+
description: "List Kubernetes clusters managed by RAD Security",
|
|
57
|
+
inputSchema: zodToJsonSchema(clusters.ListClustersSchema),
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: "get_cluster_details",
|
|
61
|
+
description: "Get detailed information about a specific Kubernetes cluster managed by RAD Security",
|
|
62
|
+
inputSchema: zodToJsonSchema(clusters.GetClusterDetailsSchema),
|
|
63
|
+
},
|
|
64
|
+
// Identity tools
|
|
65
|
+
{
|
|
66
|
+
name: "list_identities",
|
|
67
|
+
description: "Get list of identities for a specific Kubernetes cluster",
|
|
68
|
+
inputSchema: zodToJsonSchema(identities.ListIdentitiesSchema),
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: "get_identity_details",
|
|
72
|
+
description: "Get detailed information about a specific identity in a Kubernetes cluster",
|
|
73
|
+
inputSchema: zodToJsonSchema(identities.GetIdentityDetailsSchema),
|
|
74
|
+
},
|
|
75
|
+
// Audit tools
|
|
76
|
+
{
|
|
77
|
+
name: "who_shelled_into_pod",
|
|
78
|
+
description: "Get users who shelled into a pod with the given name and namespace around the given time",
|
|
79
|
+
inputSchema: zodToJsonSchema(audit.WhoShelledIntoPodSchema),
|
|
80
|
+
},
|
|
81
|
+
// Cloud Inventory tools
|
|
82
|
+
{
|
|
83
|
+
name: "list_cloud_resources",
|
|
84
|
+
description: "List cloud resources for a specific provider with optional filtering",
|
|
85
|
+
inputSchema: zodToJsonSchema(cloudInventory.ListCloudResourcesSchema),
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: "get_cloud_resource_details",
|
|
89
|
+
description: "Get detailed information about a specific cloud resource",
|
|
90
|
+
inputSchema: zodToJsonSchema(cloudInventory.GetCloudResourceDetailsSchema),
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
name: "get_cloud_resource_facets",
|
|
94
|
+
description: "Get available facets for filtering cloud resources from a provider",
|
|
95
|
+
inputSchema: zodToJsonSchema(cloudInventory.GetCloudResourceFacetsSchema),
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
name: "get_cloud_resource_facet_values",
|
|
99
|
+
description: "Get values for a specific facet from a cloud provider",
|
|
100
|
+
inputSchema: zodToJsonSchema(cloudInventory.GetCloudResourceFacetValuesSchema),
|
|
101
|
+
},
|
|
102
|
+
// Image tools
|
|
103
|
+
{
|
|
104
|
+
name: "list_images",
|
|
105
|
+
description: "List container images with optional filtering by page, page size, sort, and search query",
|
|
106
|
+
inputSchema: zodToJsonSchema(images.ListImagesSchema),
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
name: "list_image_vulnerabilities",
|
|
110
|
+
description: "List vulnerabilities in a container image with optional filtering by severity",
|
|
111
|
+
inputSchema: zodToJsonSchema(images.ListImageVulnerabilitiesSchema),
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
name: "get_top_vulnerable_images",
|
|
115
|
+
description: "Get the most vulnerable images from your account",
|
|
116
|
+
inputSchema: zodToJsonSchema(z.object({})),
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
name: "get_image_sbom",
|
|
120
|
+
description: "Get the SBOM of a container image",
|
|
121
|
+
inputSchema: zodToJsonSchema(images.GetImageSBOMSchema),
|
|
122
|
+
},
|
|
123
|
+
// Kubernetes Object tools
|
|
124
|
+
{
|
|
125
|
+
name: "get_kubernetes_resource_details",
|
|
126
|
+
description: "Get the latest manifest of a Kubernetes resource",
|
|
127
|
+
inputSchema: zodToJsonSchema(kubeobject.GetKubernetesResourceDetailsSchema),
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
name: "list_kubernetes_resources",
|
|
131
|
+
description: "List Kubernetes resources with optional filtering by namespace, resource types, and cluster",
|
|
132
|
+
inputSchema: zodToJsonSchema(kubeobject.ListKubernetesResourcesSchema),
|
|
133
|
+
},
|
|
134
|
+
// Manifest Misconfigurations tools
|
|
135
|
+
{
|
|
136
|
+
name: "list_kubernetes_resource_misconfigurations",
|
|
137
|
+
description: "Get manifest misconfigurations for a Kubernetes resource",
|
|
138
|
+
inputSchema: zodToJsonSchema(misconfigs.ListKubernetesResourceMisconfigurationsSchema),
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
name: "get_kubernetes_resource_misconfiguration_details",
|
|
142
|
+
description: "Get detailed information about a specific Kubernetes resource misconfiguration",
|
|
143
|
+
inputSchema: zodToJsonSchema(misconfigs.GetKubernetesResourceMisconfigurationDetailsSchema),
|
|
144
|
+
},
|
|
145
|
+
// Runtime tools
|
|
146
|
+
{
|
|
147
|
+
name: "get_containers_process_trees",
|
|
148
|
+
description: "Get process trees for multiple containers",
|
|
149
|
+
inputSchema: zodToJsonSchema(runtime.GetContainersProcessTreesSchema),
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
name: "get_containers_baselines",
|
|
153
|
+
description: "Get runtime baselines for multiple containers",
|
|
154
|
+
inputSchema: zodToJsonSchema(runtime.GetContainersBaselinesSchema),
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
name: "get_container_llm_analysis",
|
|
158
|
+
description: "Get LLM analysis of a container's process tree",
|
|
159
|
+
inputSchema: zodToJsonSchema(runtime.GetContainerLLMAnalysisSchema),
|
|
160
|
+
},
|
|
161
|
+
// Runtime Network tools
|
|
162
|
+
{
|
|
163
|
+
name: "list_http_requests",
|
|
164
|
+
description: "List HTTP requests insights with optional filtering by method, path, source and destination workloads, and PII detection",
|
|
165
|
+
inputSchema: zodToJsonSchema(runtimeNetwork.listHttpRequestsSchema),
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
name: "list_network_connections",
|
|
169
|
+
description: "List network connections with optional filtering",
|
|
170
|
+
inputSchema: zodToJsonSchema(runtimeNetwork.listNetworkConnectionsSchema),
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
name: "list_network_connection_sources",
|
|
174
|
+
description: "List network connection sources with optional filtering by source and destination workloads",
|
|
175
|
+
inputSchema: zodToJsonSchema(runtimeNetwork.listNetworkConnectionSourcesSchema),
|
|
176
|
+
},
|
|
177
|
+
// Threat Vectors tools
|
|
178
|
+
{
|
|
179
|
+
name: "list_threat_vectors",
|
|
180
|
+
description: "List threat vectors",
|
|
181
|
+
inputSchema: zodToJsonSchema(threats.listThreatVectorsSchema),
|
|
182
|
+
},
|
|
183
|
+
// Findings tools
|
|
184
|
+
{
|
|
185
|
+
name: "list_security_findings",
|
|
186
|
+
description: "List security findings with optional filtering by types, severities, sources, and status",
|
|
187
|
+
inputSchema: zodToJsonSchema(findings.listFindingsSchema),
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
name: "update_security_finding_status",
|
|
191
|
+
description: "Update the status of a security finding",
|
|
192
|
+
inputSchema: zodToJsonSchema(findings.updateFindingStatusSchema),
|
|
193
|
+
},
|
|
194
|
+
],
|
|
195
|
+
};
|
|
196
|
+
});
|
|
197
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
198
|
+
try {
|
|
199
|
+
if (!request.params.arguments) {
|
|
200
|
+
throw new Error("Arguments are required");
|
|
201
|
+
}
|
|
202
|
+
const toolName = request.params.name;
|
|
203
|
+
switch (toolName) {
|
|
204
|
+
// Container tools
|
|
205
|
+
case "list_containers": {
|
|
206
|
+
const args = containers.ListContainersSchema.parse(request.params.arguments);
|
|
207
|
+
const response = await containers.listContainers(client, args.offset, args.limit, args.filters, args.q);
|
|
208
|
+
return {
|
|
209
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
case "get_container_details": {
|
|
213
|
+
const args = containers.GetContainerDetailsSchema.parse(request.params.arguments);
|
|
214
|
+
const response = await containers.getContainerDetails(client, args.container_id);
|
|
215
|
+
return {
|
|
216
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
// Cluster tools
|
|
220
|
+
case "list_clusters": {
|
|
221
|
+
const args = clusters.ListClustersSchema.parse(request.params.arguments);
|
|
222
|
+
const response = await clusters.listClusters(client, args.page_size, args.page);
|
|
223
|
+
return {
|
|
224
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
case "get_cluster_details": {
|
|
228
|
+
const args = clusters.GetClusterDetailsSchema.parse(request.params.arguments);
|
|
229
|
+
const response = await clusters.getClusterDetails(client, args.cluster_id);
|
|
230
|
+
return {
|
|
231
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
// Identity tools
|
|
235
|
+
case "list_identities": {
|
|
236
|
+
const args = identities.ListIdentitiesSchema.parse(request.params.arguments);
|
|
237
|
+
const response = await identities.listIdentities(client, args.identity_types, args.cluster_ids, args.page, args.page_size, args.q);
|
|
238
|
+
return {
|
|
239
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
case "get_identity_details": {
|
|
243
|
+
const args = identities.GetIdentityDetailsSchema.parse(request.params.arguments);
|
|
244
|
+
const response = await identities.getIdentityDetails(client, args.identity_id);
|
|
245
|
+
return {
|
|
246
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
// Audit tools
|
|
250
|
+
case "who_shelled_into_pod": {
|
|
251
|
+
const args = audit.WhoShelledIntoPodSchema.parse(request.params.arguments);
|
|
252
|
+
const response = await audit.whoShelledIntoPod(client, args.name, args.namespace, args.cluster_id, args.from_time, args.to_time, args.limit, args.page);
|
|
253
|
+
return {
|
|
254
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
// Cloud Inventory tools
|
|
258
|
+
case "list_cloud_resources": {
|
|
259
|
+
const args = cloudInventory.ListCloudResourcesSchema.parse(request.params.arguments);
|
|
260
|
+
const response = await cloudInventory.listCloudResources(client, args.provider, args.filters, args.offset, args.limit, args.q);
|
|
261
|
+
return {
|
|
262
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
case "get_cloud_resource_details": {
|
|
266
|
+
const args = cloudInventory.GetCloudResourceDetailsSchema.parse(request.params.arguments);
|
|
267
|
+
const response = await cloudInventory.getCloudResourceDetails(client, args.provider, args.resource_type, args.resource_id);
|
|
268
|
+
return {
|
|
269
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
case "get_cloud_resource_facets": {
|
|
273
|
+
const args = cloudInventory.GetCloudResourceFacetsSchema.parse(request.params.arguments);
|
|
274
|
+
const response = await cloudInventory.getCloudResourceFacets(client, args.provider);
|
|
275
|
+
return {
|
|
276
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
case "get_cloud_resource_facet_values": {
|
|
280
|
+
const args = cloudInventory.GetCloudResourceFacetValuesSchema.parse(request.params.arguments);
|
|
281
|
+
const response = await cloudInventory.getCloudResourceFacetValues(client, args.provider, args.facet_id);
|
|
282
|
+
return {
|
|
283
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
// Image tools
|
|
287
|
+
case "list_images": {
|
|
288
|
+
const args = images.ListImagesSchema.parse(request.params.arguments);
|
|
289
|
+
const response = await images.listImages(client, args.page, args.page_size, args.sort, args.search);
|
|
290
|
+
return {
|
|
291
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
case "list_image_vulnerabilities": {
|
|
295
|
+
const args = images.ListImageVulnerabilitiesSchema.parse(request.params.arguments);
|
|
296
|
+
const response = await images.listImageVulnerabilities(client, args.digest, args.severities, args.page, args.page_size);
|
|
297
|
+
return {
|
|
298
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
case "get_top_vulnerable_images": {
|
|
302
|
+
const response = await images.getTopVulnerableImages(client);
|
|
303
|
+
return {
|
|
304
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
case "get_image_sbom": {
|
|
308
|
+
const args = images.GetImageSBOMSchema.parse(request.params.arguments);
|
|
309
|
+
const response = await images.getImageSBOM(client, args.digest);
|
|
310
|
+
return {
|
|
311
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
// Kubernetes Objects tools
|
|
315
|
+
case "get_kubernetes_resource_details": {
|
|
316
|
+
const args = kubeobject.GetKubernetesResourceDetailsSchema.parse(request.params.arguments);
|
|
317
|
+
const response = await kubeobject.getKubernetesResourceDetails(client, args.cluster_id, args.resource_uid);
|
|
318
|
+
return {
|
|
319
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
case "list_kubernetes_resources": {
|
|
323
|
+
const args = kubeobject.ListKubernetesResourcesSchema.parse(request.params.arguments);
|
|
324
|
+
const response = await kubeobject.listKubernetesResources(client, args.kinds, args.namespace, args.cluster_id, args.page, args.page_size);
|
|
325
|
+
return {
|
|
326
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
// Kubernetes Resource Misconfigurations tools
|
|
330
|
+
case "list_kubernetes_resource_misconfigurations": {
|
|
331
|
+
const args = misconfigs.ListKubernetesResourceMisconfigurationsSchema.parse(request.params.arguments);
|
|
332
|
+
const response = await misconfigs.listKubernetesResourceMisconfigurations(client, args.resource_uid);
|
|
333
|
+
return {
|
|
334
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
case "get_kubernetes_resource_misconfiguration_details": {
|
|
338
|
+
const args = misconfigs.GetKubernetesResourceMisconfigurationDetailsSchema.parse(request.params.arguments);
|
|
339
|
+
const response = await misconfigs.getKubernetesResourceMisconfigurationDetails(client, args.cluster_id, args.misconfig_id);
|
|
340
|
+
return {
|
|
341
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
// Runtime tools
|
|
345
|
+
case "get_containers_process_trees": {
|
|
346
|
+
const args = runtime.GetContainersProcessTreesSchema.parse(request.params.arguments);
|
|
347
|
+
const response = await runtime.getContainersProcessTrees(client, args.container_ids);
|
|
348
|
+
return {
|
|
349
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
case "get_containers_baselines": {
|
|
353
|
+
const args = runtime.GetContainersBaselinesSchema.parse(request.params.arguments);
|
|
354
|
+
const response = await runtime.getContainersBaselines(client, args.container_ids);
|
|
355
|
+
return {
|
|
356
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
case "get_container_llm_analysis": {
|
|
360
|
+
const args = runtime.GetContainerLLMAnalysisSchema.parse(request.params.arguments);
|
|
361
|
+
const response = await runtime.getContainerLLMAnalysis(client, args.container_id);
|
|
362
|
+
return {
|
|
363
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
// Runtime Network tools
|
|
367
|
+
case "list_http_requests": {
|
|
368
|
+
const args = runtimeNetwork.listHttpRequestsSchema.parse(request.params.arguments);
|
|
369
|
+
const response = await runtimeNetwork.listHttpRequests(client, args);
|
|
370
|
+
return {
|
|
371
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
case "list_network_connections": {
|
|
375
|
+
const args = runtimeNetwork.listNetworkConnectionsSchema.parse(request.params.arguments);
|
|
376
|
+
const response = await runtimeNetwork.listNetworkConnections(client, args);
|
|
377
|
+
return {
|
|
378
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
case "list_network_connection_sources": {
|
|
382
|
+
const args = runtimeNetwork.listNetworkConnectionSourcesSchema.parse(request.params.arguments);
|
|
383
|
+
const response = await runtimeNetwork.listNetworkConnectionSources(client, args);
|
|
384
|
+
return {
|
|
385
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
|
|
386
|
+
};
|
|
387
|
+
}
|
|
388
|
+
// Threat Vectors tools
|
|
389
|
+
case "list_threat_vectors": {
|
|
390
|
+
const args = threats.listThreatVectorsSchema.parse(request.params.arguments);
|
|
391
|
+
const response = await threats.listThreatVectors(client, args.clustersIds, args.namespaces, args.resource_uid, args.page, args.page_size);
|
|
392
|
+
return {
|
|
393
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
// Findings tools
|
|
397
|
+
case "list_security_findings": {
|
|
398
|
+
const args = findings.listFindingsSchema.parse(request.params.arguments);
|
|
399
|
+
const response = await findings.listFindings(client, args.limit, args.types, args.severities, args.source_types, args.source_kinds, args.source_names, args.source_namespaces, args.status, args.from_time, args.to_time);
|
|
400
|
+
return {
|
|
401
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
case "update_security_finding_status": {
|
|
405
|
+
const args = findings.updateFindingStatusSchema.parse(request.params.arguments);
|
|
406
|
+
await findings.updateFindingGroupStatus(client, args.id, args.status);
|
|
407
|
+
return {
|
|
408
|
+
content: [{ type: "text", text: JSON.stringify({ success: true, message: `Finding ${args.id} status updated to ${args.status}` }, null, 2) }],
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
default:
|
|
412
|
+
throw new Error(`Unknown tool: ${toolName}`);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
catch (error) {
|
|
416
|
+
console.error("Error calling tool:", error);
|
|
417
|
+
return {
|
|
418
|
+
content: [
|
|
419
|
+
{
|
|
420
|
+
type: "text",
|
|
421
|
+
text: JSON.stringify({
|
|
422
|
+
error: error instanceof Error ? error.message : String(error),
|
|
423
|
+
}),
|
|
424
|
+
},
|
|
425
|
+
],
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
});
|
|
429
|
+
return server;
|
|
430
|
+
}
|
|
431
|
+
async function main() {
|
|
432
|
+
try {
|
|
433
|
+
const transportType = process.env.TRANSPORT_TYPE || 'stdio';
|
|
434
|
+
if (!['stdio', 'sse'].includes(transportType)) {
|
|
435
|
+
throw new Error("Transport type must be either 'stdio' or 'sse'");
|
|
436
|
+
}
|
|
437
|
+
if (transportType === 'stdio') {
|
|
438
|
+
const transport = new StdioServerTransport();
|
|
439
|
+
const server = await newServer();
|
|
440
|
+
await server.connect(transport);
|
|
441
|
+
console.info("RAD Security MCP server started with stdio transport");
|
|
442
|
+
}
|
|
443
|
+
else {
|
|
444
|
+
const app = express();
|
|
445
|
+
app.use(cors({
|
|
446
|
+
origin: '*',
|
|
447
|
+
methods: ['GET', 'POST', 'OPTIONS', 'HEAD'],
|
|
448
|
+
allowedHeaders: ['Content-Type'],
|
|
449
|
+
}));
|
|
450
|
+
const server = await newServer();
|
|
451
|
+
let transport;
|
|
452
|
+
app.head("/sse", async (req, res) => {
|
|
453
|
+
res.sendStatus(200);
|
|
454
|
+
});
|
|
455
|
+
app.head("/messages", async (req, res) => {
|
|
456
|
+
res.sendStatus(200);
|
|
457
|
+
});
|
|
458
|
+
app.get("/sse", async (req, res) => {
|
|
459
|
+
transport = new SSEServerTransport("/messages", res);
|
|
460
|
+
await server.connect(transport);
|
|
461
|
+
});
|
|
462
|
+
app.post("/messages", async (req, res) => {
|
|
463
|
+
await transport.handlePostMessage(req, res);
|
|
464
|
+
});
|
|
465
|
+
const port = process.env.PORT || 3000;
|
|
466
|
+
app.listen(port, () => {
|
|
467
|
+
console.info(`Server running on http://localhost:${port}/sse`);
|
|
468
|
+
});
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
catch (error) {
|
|
472
|
+
console.error("Error starting server:", error);
|
|
473
|
+
process.exit(1);
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
main().catch((error) => {
|
|
477
|
+
console.error("Unhandled error:", error);
|
|
478
|
+
process.exit(1);
|
|
479
|
+
});
|
|
480
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { RadSecurityClient } from "../client.js";
|
|
3
|
+
export declare const WhoShelledIntoPodSchema: z.ZodObject<{
|
|
4
|
+
name: z.ZodOptional<z.ZodString>;
|
|
5
|
+
namespace: z.ZodOptional<z.ZodString>;
|
|
6
|
+
cluster_id: z.ZodOptional<z.ZodString>;
|
|
7
|
+
from_time: z.ZodOptional<z.ZodString>;
|
|
8
|
+
to_time: z.ZodOptional<z.ZodString>;
|
|
9
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
10
|
+
page: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
11
|
+
}, "strip", z.ZodTypeAny, {
|
|
12
|
+
limit: number;
|
|
13
|
+
page: number;
|
|
14
|
+
name?: string | undefined;
|
|
15
|
+
namespace?: string | undefined;
|
|
16
|
+
cluster_id?: string | undefined;
|
|
17
|
+
from_time?: string | undefined;
|
|
18
|
+
to_time?: string | undefined;
|
|
19
|
+
}, {
|
|
20
|
+
limit?: number | undefined;
|
|
21
|
+
name?: string | undefined;
|
|
22
|
+
namespace?: string | undefined;
|
|
23
|
+
cluster_id?: string | undefined;
|
|
24
|
+
from_time?: string | undefined;
|
|
25
|
+
to_time?: string | undefined;
|
|
26
|
+
page?: number | undefined;
|
|
27
|
+
}>;
|
|
28
|
+
/**
|
|
29
|
+
* Get users who shelled into a pod with the given name and namespace around the given time.
|
|
30
|
+
*/
|
|
31
|
+
export declare function whoShelledIntoPod(client: RadSecurityClient, name?: string, namespace?: string, cluster_id?: string, from_time?: string, to_time?: string, limit?: number, page?: number): Promise<any>;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const WhoShelledIntoPodSchema = z.object({
|
|
3
|
+
name: z.string().optional().describe("Optional Pod name"),
|
|
4
|
+
namespace: z.string().optional().describe("Optional Pod namespace"),
|
|
5
|
+
cluster_id: z.string().optional().describe("Optional Cluster ID"),
|
|
6
|
+
from_time: z.string().optional().describe("Start time of the time range to search for audit events. Example: 2024-01-01T00:00:00Z. Default: 7 days ago"),
|
|
7
|
+
to_time: z.string().optional().describe("End time of the time range to search for audit events. Example: 2024-01-03T00:00:00Z"),
|
|
8
|
+
limit: z.number().optional().default(20).describe("Maximum number of results to return"),
|
|
9
|
+
page: z.number().optional().default(1).describe("Page number to return"),
|
|
10
|
+
});
|
|
11
|
+
/**
|
|
12
|
+
* Get users who shelled into a pod with the given name and namespace around the given time.
|
|
13
|
+
*/
|
|
14
|
+
export async function whoShelledIntoPod(client, name, namespace, cluster_id, from_time = "now-7d", to_time = "", limit = 20, page = 1) {
|
|
15
|
+
const params = {
|
|
16
|
+
types: "k8s_audit_logs_anomaly",
|
|
17
|
+
rule_ids: "A001",
|
|
18
|
+
from: from_time,
|
|
19
|
+
to: to_time,
|
|
20
|
+
page: page,
|
|
21
|
+
page_size: limit,
|
|
22
|
+
};
|
|
23
|
+
if (cluster_id) {
|
|
24
|
+
params.cluster_ids = cluster_id;
|
|
25
|
+
}
|
|
26
|
+
const violations = await client.makeRequest(`/accounts/${client.getAccountId()}/findings`, params);
|
|
27
|
+
const toReturn = [];
|
|
28
|
+
for (const violation of violations.entries) {
|
|
29
|
+
const auditLog = violation.source;
|
|
30
|
+
if (!auditLog) {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
let match = true;
|
|
34
|
+
if (name) {
|
|
35
|
+
if (auditLog.objectRef && auditLog.objectRef.name !== name) {
|
|
36
|
+
match = false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (namespace) {
|
|
40
|
+
if (auditLog.objectRef && auditLog.objectRef.namespace !== namespace) {
|
|
41
|
+
match = false;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (match) {
|
|
45
|
+
toReturn.push({
|
|
46
|
+
who: auditLog.user,
|
|
47
|
+
time: auditLog.stageTimestamp,
|
|
48
|
+
where: auditLog.objectRef,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
violations.entries = toReturn;
|
|
53
|
+
return violations;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/operations/audit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IACzD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACnE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACjE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6GAA6G,CAAC;IACxJ,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sFAAsF,CAAC;IAC/H,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IACxF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;CACzE,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAyB,EACzB,IAAa,EACb,SAAkB,EAClB,UAAmB,EACnB,YAAoB,QAAQ,EAC5B,UAAkB,EAAE,EACpB,QAAgB,EAAE,EAClB,OAAe,CAAC;IAEhB,MAAM,MAAM,GAAwB;QAClC,KAAK,EAAE,wBAAwB;QAC/B,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,SAAS;QACf,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,IAAI;QACV,SAAS,EAAE,KAAK;KACjB,CAAC;IAEF,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC;IAClC,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,WAAW,CACzC,aAAa,MAAM,CAAC,YAAY,EAAE,WAAW,EAC7C,MAAM,CACP,CAAC;IAEF,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,SAAS;QACX,CAAC;QAED,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBAC3D,KAAK,GAAG,KAAK,CAAC;YAChB,CAAC;QACH,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBACrE,KAAK,GAAG,KAAK,CAAC;YAChB,CAAC;QACH,CAAC;QACD,IAAI,KAAK,EAAE,CAAC;YACV,QAAQ,CAAC,IAAI,CAAC;gBACZ,GAAG,EAAE,QAAQ,CAAC,IAAI;gBAClB,IAAI,EAAE,QAAQ,CAAC,cAAc;gBAC7B,KAAK,EAAE,QAAQ,CAAC,SAAS;aAC1B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,UAAU,CAAC,OAAO,GAAG,QAAQ,CAAC;IAC9B,OAAO,UAAU,CAAC;AACpB,CAAC"}
|