@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
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const GetKubernetesResourceDetailsSchema = z.object({
|
|
3
|
+
cluster_id: z.string().describe("ID of the Kubernetes cluster"),
|
|
4
|
+
resource_uid: z.string().describe("Resource UID to get the details for"),
|
|
5
|
+
});
|
|
6
|
+
export const ListKubernetesResourcesSchema = z.object({
|
|
7
|
+
namespace: z.string().optional().describe("Namespace to filter resources"),
|
|
8
|
+
kinds: z.array(z.string()).optional().describe("List of kinds to filter. Example: ['Deployment', 'ServiceAccount', 'Pod']"),
|
|
9
|
+
cluster_id: z.string().optional().describe("Cluster ID to filter resources"),
|
|
10
|
+
page: z.number().optional().default(1).describe("Page number for pagination"),
|
|
11
|
+
page_size: z.number().optional().default(20).describe("Number of items per page"),
|
|
12
|
+
});
|
|
13
|
+
export async function getKubernetesResourceDetails(client, clusterId, resourceUid) {
|
|
14
|
+
const details = await client.makeRequest(`/clusters/${clusterId}/resources/${resourceUid}/latest`);
|
|
15
|
+
if (!details) {
|
|
16
|
+
throw new Error(`No details found for resource_uid: ${resourceUid} in cluster: ${clusterId}`);
|
|
17
|
+
}
|
|
18
|
+
// Decode the base64 raw manifest
|
|
19
|
+
if (details.raw) {
|
|
20
|
+
details.raw = Buffer.from(details.raw, 'base64').toString('utf-8');
|
|
21
|
+
}
|
|
22
|
+
return details;
|
|
23
|
+
}
|
|
24
|
+
export async function listKubernetesResources(client, kinds, namespace, clusterId, page = 1, pageSize = 20) {
|
|
25
|
+
const params = {
|
|
26
|
+
page,
|
|
27
|
+
page_size: pageSize,
|
|
28
|
+
resource_types: kinds?.join(',')
|
|
29
|
+
};
|
|
30
|
+
if (namespace) {
|
|
31
|
+
params.namespace = namespace;
|
|
32
|
+
}
|
|
33
|
+
if (clusterId) {
|
|
34
|
+
params.cluster_id = clusterId;
|
|
35
|
+
}
|
|
36
|
+
return client.makeRequest(`/accounts/${client.getAccountId()}/resources`, params);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=kubeobject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kubeobject.js","sourceRoot":"","sources":["../../src/operations/kubeobject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,CAAC,MAAM,CAAC;IACzD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IAC/D,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;CACzE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IACpD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAC1E,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2EAA2E,CAAC;IAC3H,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC5E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IAC7E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;CAClF,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,MAAyB,EACzB,SAAiB,EACjB,WAAmB;IAEnB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,WAAW,CACtC,aAAa,SAAS,cAAc,WAAW,SAAS,CACzD,CAAC;IAEF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,sCAAsC,WAAW,gBAAgB,SAAS,EAAE,CAAC,CAAC;IAChG,CAAC;IAED,iCAAiC;IACjC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAAyB,EACzB,KAA2B,EAC3B,SAAkB,EAClB,SAAkB,EAClB,OAAe,CAAC,EAChB,WAAmB,EAAE;IAErB,MAAM,MAAM,GAAwB;QAClC,IAAI;QACJ,SAAS,EAAE,QAAQ;QACnB,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC;KACjC,CAAC;IAEF,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;IAChC,CAAC;IAED,OAAO,MAAM,CAAC,WAAW,CACvB,aAAa,MAAM,CAAC,YAAY,EAAE,YAAY,EAC9C,MAAM,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { RadSecurityClient } from "../client.js";
|
|
3
|
+
export declare const ListKubernetesResourceMisconfigurationsSchema: z.ZodObject<{
|
|
4
|
+
resource_uid: z.ZodString;
|
|
5
|
+
}, "strip", z.ZodTypeAny, {
|
|
6
|
+
resource_uid: string;
|
|
7
|
+
}, {
|
|
8
|
+
resource_uid: string;
|
|
9
|
+
}>;
|
|
10
|
+
export declare const GetKubernetesResourceMisconfigurationDetailsSchema: z.ZodObject<{
|
|
11
|
+
cluster_id: z.ZodString;
|
|
12
|
+
misconfig_id: z.ZodString;
|
|
13
|
+
}, "strip", z.ZodTypeAny, {
|
|
14
|
+
cluster_id: string;
|
|
15
|
+
misconfig_id: string;
|
|
16
|
+
}, {
|
|
17
|
+
cluster_id: string;
|
|
18
|
+
misconfig_id: string;
|
|
19
|
+
}>;
|
|
20
|
+
export declare function listKubernetesResourceMisconfigurations(client: RadSecurityClient, resourceUid: string): Promise<any>;
|
|
21
|
+
export declare function getKubernetesResourceMisconfigurationDetails(client: RadSecurityClient, clusterId: string, misconfigId: string): Promise<any>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const ListKubernetesResourceMisconfigurationsSchema = z.object({
|
|
3
|
+
resource_uid: z.string().describe("Kubernetes resource UID to get misconfigurations for"),
|
|
4
|
+
});
|
|
5
|
+
export const GetKubernetesResourceMisconfigurationDetailsSchema = z.object({
|
|
6
|
+
cluster_id: z.string().describe("ID of the cluster to get misconfiguration for"),
|
|
7
|
+
misconfig_id: z.string().describe("ID of the misconfiguration to get details for"),
|
|
8
|
+
});
|
|
9
|
+
export async function listKubernetesResourceMisconfigurations(client, resourceUid) {
|
|
10
|
+
const misconfigs = await client.makeRequest(`/accounts/${client.getAccountId()}/misconfig`, { kubeobject_uids: resourceUid, page_size: 50 });
|
|
11
|
+
// deduplicate the list based on field "guard_policy.human_id"
|
|
12
|
+
const seenIds = new Set();
|
|
13
|
+
const toReturn = [];
|
|
14
|
+
for (const misconfig of misconfigs.entries) {
|
|
15
|
+
const humanId = misconfig.guard_policy.human_id;
|
|
16
|
+
if (!seenIds.has(humanId)) {
|
|
17
|
+
seenIds.add(humanId);
|
|
18
|
+
toReturn.push({
|
|
19
|
+
id: misconfig.id,
|
|
20
|
+
cluster_id: misconfig.cluster_id,
|
|
21
|
+
title: misconfig.guard_policy.title,
|
|
22
|
+
human_id: misconfig.guard_policy.human_id,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
misconfigs.entries = toReturn;
|
|
27
|
+
return misconfigs;
|
|
28
|
+
}
|
|
29
|
+
export async function getKubernetesResourceMisconfigurationDetails(client, clusterId, misconfigId) {
|
|
30
|
+
const response = await client.makeRequest(`/accounts/${client.getAccountId()}/clusters/${clusterId}/misconfig/${misconfigId}`);
|
|
31
|
+
if (!response) {
|
|
32
|
+
throw new Error(`No misconfiguration found with ID: ${misconfigId}`);
|
|
33
|
+
}
|
|
34
|
+
return response;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=misconfigs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"misconfigs.js","sourceRoot":"","sources":["../../src/operations/misconfigs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,6CAA6C,GAAG,CAAC,CAAC,MAAM,CAAC;IACpE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;CAC1F,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kDAAkD,GAAG,CAAC,CAAC,MAAM,CAAC;IACzE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;IAChF,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;CACnF,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,uCAAuC,CAC3D,MAAyB,EACzB,WAAmB;IAEnB,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,WAAW,CACzC,aAAa,MAAM,CAAC,YAAY,EAAE,YAAY,EAC9C,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,EAAE,CAChD,CAAC;IAEF,8DAA8D;IAC9D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,QAAQ,GAAG,EAAE,CAAC;IAEpB,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC;QAChD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrB,QAAQ,CAAC,IAAI,CAAC;gBACZ,EAAE,EAAE,SAAS,CAAC,EAAE;gBAChB,UAAU,EAAE,SAAS,CAAC,UAAU;gBAChC,KAAK,EAAE,SAAS,CAAC,YAAY,CAAC,KAAK;gBACnC,QAAQ,EAAE,SAAS,CAAC,YAAY,CAAC,QAAQ;aAC1C,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,UAAU,CAAC,OAAO,GAAG,QAAQ,CAAC;IAC9B,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,4CAA4C,CAChE,MAAyB,EACzB,SAAiB,EACjB,WAAmB;IAEnB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,CACvC,aAAa,MAAM,CAAC,YAAY,EAAE,aAAa,SAAS,cAAc,WAAW,EAAE,CACpF,CAAC;IAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,sCAAsC,WAAW,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { RadSecurityClient } from "../client.js";
|
|
3
|
+
export declare const GetContainersProcessTreesSchema: z.ZodObject<{
|
|
4
|
+
container_ids: z.ZodArray<z.ZodString, "many">;
|
|
5
|
+
}, "strip", z.ZodTypeAny, {
|
|
6
|
+
container_ids: string[];
|
|
7
|
+
}, {
|
|
8
|
+
container_ids: string[];
|
|
9
|
+
}>;
|
|
10
|
+
export declare const GetContainersBaselinesSchema: z.ZodObject<{
|
|
11
|
+
container_ids: z.ZodArray<z.ZodString, "many">;
|
|
12
|
+
}, "strip", z.ZodTypeAny, {
|
|
13
|
+
container_ids: string[];
|
|
14
|
+
}, {
|
|
15
|
+
container_ids: string[];
|
|
16
|
+
}>;
|
|
17
|
+
export declare const GetContainerLLMAnalysisSchema: z.ZodObject<{
|
|
18
|
+
container_id: z.ZodString;
|
|
19
|
+
}, "strip", z.ZodTypeAny, {
|
|
20
|
+
container_id: string;
|
|
21
|
+
}, {
|
|
22
|
+
container_id: string;
|
|
23
|
+
}>;
|
|
24
|
+
export declare function getContainersBaselines(client: RadSecurityClient, containerIds: string[]): Promise<any>;
|
|
25
|
+
export declare function getContainersProcessTrees(client: RadSecurityClient, containerIds: string[]): Promise<any>;
|
|
26
|
+
export declare function getContainerLLMAnalysis(client: RadSecurityClient, containerId: string): Promise<any>;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const GetContainersProcessTreesSchema = z.object({
|
|
3
|
+
container_ids: z.array(z.string()).describe("List of container IDs to get process trees for"),
|
|
4
|
+
});
|
|
5
|
+
export const GetContainersBaselinesSchema = z.object({
|
|
6
|
+
container_ids: z.array(z.string()).describe("List of container IDs to get baselines for"),
|
|
7
|
+
});
|
|
8
|
+
export const GetContainerLLMAnalysisSchema = z.object({
|
|
9
|
+
container_id: z.string().describe("Container ID to get LLM analysis for"),
|
|
10
|
+
});
|
|
11
|
+
export async function getContainersBaselines(client, containerIds) {
|
|
12
|
+
if (containerIds.length === 0) {
|
|
13
|
+
throw new Error("No container IDs provided");
|
|
14
|
+
}
|
|
15
|
+
// Convert list to comma-separated string for API request
|
|
16
|
+
const containerIdsParam = containerIds.join(',');
|
|
17
|
+
// Get container runtime insights for all containers
|
|
18
|
+
const cris = await client.makeRequest(`/accounts/${client.getAccountId()}/container_runtime_insights`, { container_ids: containerIdsParam });
|
|
19
|
+
if (!cris.entries) {
|
|
20
|
+
throw new Error(`No process trees found for container_ids: ${containerIds}`);
|
|
21
|
+
}
|
|
22
|
+
// Map to store results
|
|
23
|
+
const baselines = {};
|
|
24
|
+
// Process each container runtime insight
|
|
25
|
+
for (const entry of cris.entries) {
|
|
26
|
+
const criId = entry.id;
|
|
27
|
+
const containerId = entry.summary?.container_meta?.container_id;
|
|
28
|
+
if (!containerId || !containerIds.includes(containerId)) {
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
// Get detailed data for this container
|
|
32
|
+
const data = await client.makeRequest(`/accounts/${client.getAccountId()}/container_runtime_insights/${criId}`);
|
|
33
|
+
if (data.baseline) {
|
|
34
|
+
baselines[containerId] = data.baseline;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
// Just log a warning instead of raising an error to allow partial results
|
|
38
|
+
console.warn(`No baseline found for container_id: ${containerId}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (Object.keys(baselines).length === 0) {
|
|
42
|
+
throw new Error(`No baselines found for any of the container_ids: ${containerIds}`);
|
|
43
|
+
}
|
|
44
|
+
return baselines;
|
|
45
|
+
}
|
|
46
|
+
export async function getContainersProcessTrees(client, containerIds) {
|
|
47
|
+
if (containerIds.length === 0) {
|
|
48
|
+
throw new Error("No container IDs provided");
|
|
49
|
+
}
|
|
50
|
+
const cris = await client.makeRequest(`/accounts/${client.getAccountId()}/container_runtime_insights`, { container_ids: containerIds.join(',') });
|
|
51
|
+
const containersProcessTrees = {};
|
|
52
|
+
for (const cri of cris.entries) {
|
|
53
|
+
const criId = cri.id;
|
|
54
|
+
const data = await client.makeRequest(`/accounts/${client.getAccountId()}/container_runtime_insights/${criId}`);
|
|
55
|
+
if (!data.ongoing || !data.ongoing.containers || data.ongoing.containers.length === 0) {
|
|
56
|
+
containersProcessTrees[criId] = {};
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
containersProcessTrees[criId] = data.ongoing.containers[0];
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return containersProcessTrees;
|
|
63
|
+
}
|
|
64
|
+
export async function getContainerLLMAnalysis(client, containerId) {
|
|
65
|
+
const cris = await client.makeRequest(`/accounts/${client.getAccountId()}/container_runtime_insights`, { container_id: containerId });
|
|
66
|
+
return cris.entries[0].analysis;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/operations/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { RadSecurityClient } from "../client.js";
|
|
3
|
+
export declare const listHttpRequestsSchema: z.ZodObject<{
|
|
4
|
+
filters: z.ZodOptional<z.ZodString>;
|
|
5
|
+
offset: z.ZodOptional<z.ZodNumber>;
|
|
6
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
7
|
+
q: z.ZodOptional<z.ZodString>;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
limit: number;
|
|
10
|
+
filters?: string | undefined;
|
|
11
|
+
offset?: number | undefined;
|
|
12
|
+
q?: string | undefined;
|
|
13
|
+
}, {
|
|
14
|
+
filters?: string | undefined;
|
|
15
|
+
offset?: number | undefined;
|
|
16
|
+
limit?: number | undefined;
|
|
17
|
+
q?: string | undefined;
|
|
18
|
+
}>;
|
|
19
|
+
export declare const listNetworkConnectionsSchema: z.ZodObject<{
|
|
20
|
+
filters: z.ZodOptional<z.ZodString>;
|
|
21
|
+
offset: z.ZodOptional<z.ZodNumber>;
|
|
22
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
23
|
+
q: z.ZodOptional<z.ZodString>;
|
|
24
|
+
}, "strip", z.ZodTypeAny, {
|
|
25
|
+
limit: number;
|
|
26
|
+
filters?: string | undefined;
|
|
27
|
+
offset?: number | undefined;
|
|
28
|
+
q?: string | undefined;
|
|
29
|
+
}, {
|
|
30
|
+
filters?: string | undefined;
|
|
31
|
+
offset?: number | undefined;
|
|
32
|
+
limit?: number | undefined;
|
|
33
|
+
q?: string | undefined;
|
|
34
|
+
}>;
|
|
35
|
+
export declare const listNetworkConnectionSourcesSchema: z.ZodObject<{
|
|
36
|
+
filters: z.ZodOptional<z.ZodString>;
|
|
37
|
+
offset: z.ZodOptional<z.ZodNumber>;
|
|
38
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
39
|
+
q: z.ZodOptional<z.ZodString>;
|
|
40
|
+
}, "strip", z.ZodTypeAny, {
|
|
41
|
+
limit: number;
|
|
42
|
+
filters?: string | undefined;
|
|
43
|
+
offset?: number | undefined;
|
|
44
|
+
q?: string | undefined;
|
|
45
|
+
}, {
|
|
46
|
+
filters?: string | undefined;
|
|
47
|
+
offset?: number | undefined;
|
|
48
|
+
limit?: number | undefined;
|
|
49
|
+
q?: string | undefined;
|
|
50
|
+
}>;
|
|
51
|
+
export declare function listHttpRequests(client: RadSecurityClient, params: z.infer<typeof listHttpRequestsSchema>): Promise<any>;
|
|
52
|
+
export declare function listNetworkConnections(client: RadSecurityClient, params: z.infer<typeof listNetworkConnectionsSchema>): Promise<any>;
|
|
53
|
+
export declare function listNetworkConnectionSources(client: RadSecurityClient, params: z.infer<typeof listNetworkConnectionSourcesSchema>): Promise<any>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
// Input schemas
|
|
3
|
+
export const listHttpRequestsSchema = z.object({
|
|
4
|
+
filters: z.string().optional().describe("Filter string for filtering results. Filter options: method, path," +
|
|
5
|
+
"scheme, source_workload_name, source_workload_namespace, destination_workload_name, destination_workload_namespace," +
|
|
6
|
+
"has_pii. Example: 'method:GET,path:/api/v1/users,scheme:https,source_workload_name:my-workload,source_workload_namespace:my-namespace,destination_workload_name:my-workload,destination_workload_namespace:my-namespace,has_pii:true'"),
|
|
7
|
+
offset: z.number().optional().describe("Offset to start the list from"),
|
|
8
|
+
limit: z.number().optional().default(20).describe("Limit the number of items in the list"),
|
|
9
|
+
q: z.string().optional().describe("Query to filter the list of HTTP requests"),
|
|
10
|
+
});
|
|
11
|
+
export const listNetworkConnectionsSchema = z.object({
|
|
12
|
+
filters: z.string().optional().describe("Filter string for filtering results." +
|
|
13
|
+
"Example: 'resource_type:EC2NetworkInterface,resource_type:SQSQueue,aws_account:123456789012,compliance:not_compliant'"),
|
|
14
|
+
offset: z.number().optional().describe("Offset to start the list from"),
|
|
15
|
+
limit: z.number().optional().default(20).describe("Limit the number of items in the list"),
|
|
16
|
+
q: z.string().optional().describe("Query to filter the list of network connections"),
|
|
17
|
+
});
|
|
18
|
+
export const listNetworkConnectionSourcesSchema = z.object({
|
|
19
|
+
filters: z.string().optional().describe("Filter string for filtering results." +
|
|
20
|
+
"Filter options: source_workload_name, source_workload_namespace, destination_workload_name, destination_workload_namespace" +
|
|
21
|
+
"Example: 'source_workload_name:my-workload,destination_workload_name:my-workload'"),
|
|
22
|
+
offset: z.number().optional().describe("Offset to start the list from"),
|
|
23
|
+
limit: z.number().optional().default(20).describe("Limit the number of items in the list"),
|
|
24
|
+
q: z.string().optional().describe("Query to filter the list of network connection sources"),
|
|
25
|
+
});
|
|
26
|
+
export async function listHttpRequests(client, params) {
|
|
27
|
+
const validatedParams = listHttpRequestsSchema.parse(params);
|
|
28
|
+
const response = await client.makeRequest(`/accounts/${client.getAccountId()}/container_runtime_insights/http_requests`, validatedParams);
|
|
29
|
+
return response;
|
|
30
|
+
}
|
|
31
|
+
export async function listNetworkConnections(client, params) {
|
|
32
|
+
const validatedParams = listNetworkConnectionsSchema.parse(params);
|
|
33
|
+
const response = await client.makeRequest(`/accounts/${client.getAccountId()}/container_runtime_insights/network_connections`, validatedParams);
|
|
34
|
+
return response;
|
|
35
|
+
}
|
|
36
|
+
export async function listNetworkConnectionSources(client, params) {
|
|
37
|
+
const validatedParams = listNetworkConnectionSourcesSchema.parse(params);
|
|
38
|
+
const response = await client.makeRequest(`/accounts/${client.getAccountId()}/container_runtime_insights/network_connection_sources`, validatedParams);
|
|
39
|
+
return response;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=runtime_network.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime_network.js","sourceRoot":"","sources":["../../src/operations/runtime_network.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { RadSecurityClient } from "../client.js";
|
|
3
|
+
export declare const listThreatVectorsSchema: z.ZodObject<{
|
|
4
|
+
clustersIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
5
|
+
namespaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
6
|
+
resource_uid: z.ZodOptional<z.ZodString>;
|
|
7
|
+
page: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
8
|
+
page_size: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
9
|
+
}, "strip", z.ZodTypeAny, {
|
|
10
|
+
page: number;
|
|
11
|
+
page_size: number;
|
|
12
|
+
resource_uid?: string | undefined;
|
|
13
|
+
clustersIds?: string[] | undefined;
|
|
14
|
+
namespaces?: string[] | undefined;
|
|
15
|
+
}, {
|
|
16
|
+
page?: number | undefined;
|
|
17
|
+
page_size?: number | undefined;
|
|
18
|
+
resource_uid?: string | undefined;
|
|
19
|
+
clustersIds?: string[] | undefined;
|
|
20
|
+
namespaces?: string[] | undefined;
|
|
21
|
+
}>;
|
|
22
|
+
export declare function listThreatVectors(client: RadSecurityClient, clustersIds: string[] | undefined, namespaces: string[] | undefined, resourceUid: string | undefined, page?: number, pageSize?: number): Promise<any>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
// Input schemas
|
|
3
|
+
export const listThreatVectorsSchema = z.object({
|
|
4
|
+
clustersIds: z.array(z.string()).optional().describe("Cluster ids to check for threat vectors"),
|
|
5
|
+
namespaces: z.array(z.string()).optional().describe("Namespaces to check for threat vectors"),
|
|
6
|
+
resource_uid: z.string().optional().describe("Threat vector associated with this resource"),
|
|
7
|
+
page: z.number().optional().default(1).describe("Page number to retrieve"),
|
|
8
|
+
page_size: z.number().optional().default(20).describe("Number of items per page"),
|
|
9
|
+
});
|
|
10
|
+
// Main functions
|
|
11
|
+
export async function listThreatVectors(client, clustersIds, namespaces, resourceUid, page = 1, pageSize = 20) {
|
|
12
|
+
const params = {
|
|
13
|
+
associated_with_resource_uid: resourceUid,
|
|
14
|
+
clusters: clustersIds,
|
|
15
|
+
namespaces: namespaces,
|
|
16
|
+
statuses: "Open",
|
|
17
|
+
page_size: pageSize,
|
|
18
|
+
page: page,
|
|
19
|
+
};
|
|
20
|
+
const response = await client.makeRequest(`/accounts/${client.getAccountId()}/threat_vector_instances/v2`, params);
|
|
21
|
+
// Return the transformed response
|
|
22
|
+
return response;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=threats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threats.js","sourceRoot":"","sources":["../../src/operations/threats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,gBAAgB;AAChB,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IAC/F,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IAC7F,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;IAC3F,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IAC1E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;CAClF,CAAC,CAAC;AAEH,iBAAiB;AACjB,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAyB,EACzB,WAAiC,EACjC,UAAgC,EAChC,WAA+B,EAC/B,OAAe,CAAC,EAChB,WAAmB,EAAE;IAErB,MAAM,MAAM,GAAG;QACb,4BAA4B,EAAE,WAAW;QACzC,QAAQ,EAAE,WAAW;QACrB,UAAU,EAAE,UAAU;QACtB,QAAQ,EAAE,MAAM;QAChB,SAAS,EAAE,QAAQ;QACnB,IAAI,EAAE,IAAI;KACX,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,CACvC,aAAa,MAAM,CAAC,YAAY,EAAE,6BAA6B,EAC/D,MAAM,CACP,CAAC;IAEF,kCAAkC;IAClC,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const VERSION = "0.0.2";
|
package/dist/version.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@rad-security/mcp-server",
|
|
3
|
+
"version": "0.0.2",
|
|
4
|
+
"description": "RAD Security MCP Server for AI-powered security insights",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"mcp-server": "dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"README.md"
|
|
14
|
+
],
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "tsc && shx chmod +x dist/*.js",
|
|
17
|
+
"type-check": "tsc --noEmit",
|
|
18
|
+
"lint": "npx eslint src --ext .ts",
|
|
19
|
+
"lint:fix": "npx eslint src --ext .ts --fix",
|
|
20
|
+
"prepare": "npm run build",
|
|
21
|
+
"prepublishOnly": "npm run lint",
|
|
22
|
+
"start": "node dist/index.js",
|
|
23
|
+
"watch": "tsc --watch"
|
|
24
|
+
},
|
|
25
|
+
"repository": {
|
|
26
|
+
"type": "git",
|
|
27
|
+
"url": "git+https://github.com/rad-security/mcp-server.git"
|
|
28
|
+
},
|
|
29
|
+
"keywords": [
|
|
30
|
+
"security",
|
|
31
|
+
"kubernetes",
|
|
32
|
+
"cloud",
|
|
33
|
+
"mcp",
|
|
34
|
+
"rad-security"
|
|
35
|
+
],
|
|
36
|
+
"author": "RAD Security",
|
|
37
|
+
"license": "MIT",
|
|
38
|
+
"bugs": {
|
|
39
|
+
"url": "https://github.com/rad-security/mcp-server/issues"
|
|
40
|
+
},
|
|
41
|
+
"homepage": "https://github.com/rad-security/mcp-server#readme",
|
|
42
|
+
"engines": {
|
|
43
|
+
"node": ">=20.0.0"
|
|
44
|
+
},
|
|
45
|
+
"publishConfig": {
|
|
46
|
+
"access": "public"
|
|
47
|
+
},
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"@modelcontextprotocol/sdk": "1.6.1",
|
|
50
|
+
"express": "^4.18.2",
|
|
51
|
+
"cors": "^2.8.5"
|
|
52
|
+
},
|
|
53
|
+
"devDependencies": {
|
|
54
|
+
"@types/node": "^22",
|
|
55
|
+
"@types/express": "^4.17.21",
|
|
56
|
+
"@types/cors": "^2.8.17",
|
|
57
|
+
"@typescript-eslint/eslint-plugin": "^8.29.0",
|
|
58
|
+
"@typescript-eslint/parser": "^8.29.0",
|
|
59
|
+
"eslint": "^9.15.0",
|
|
60
|
+
"shx": "^0.3.4",
|
|
61
|
+
"typescript": "^5.6.2"
|
|
62
|
+
}
|
|
63
|
+
}
|