@zivis/mcp 0.1.0-alpha.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/api-client.d.ts +42 -0
- package/dist/api-client.js +145 -0
- package/dist/api-client.js.map +1 -0
- package/dist/auth/index.d.ts +29 -0
- package/dist/auth/index.js +73 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/jwt.d.ts +24 -0
- package/dist/auth/jwt.js +25 -0
- package/dist/auth/jwt.js.map +1 -0
- package/dist/auth/keychain.d.ts +34 -0
- package/dist/auth/keychain.js +272 -0
- package/dist/auth/keychain.js.map +1 -0
- package/dist/auth/oauth.d.ts +38 -0
- package/dist/auth/oauth.js +241 -0
- package/dist/auth/oauth.js.map +1 -0
- package/dist/auth/sessions.d.ts +28 -0
- package/dist/auth/sessions.js +69 -0
- package/dist/auth/sessions.js.map +1 -0
- package/dist/auth/token-refresh.d.ts +24 -0
- package/dist/auth/token-refresh.js +91 -0
- package/dist/auth/token-refresh.js.map +1 -0
- package/dist/cli.d.ts +23 -0
- package/dist/cli.js +962 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/project-binding.d.ts +25 -0
- package/dist/project-binding.js +67 -0
- package/dist/project-binding.js.map +1 -0
- package/dist/resolve-application-id.d.ts +12 -0
- package/dist/resolve-application-id.js +21 -0
- package/dist/resolve-application-id.js.map +1 -0
- package/dist/sanitize.d.ts +23 -0
- package/dist/sanitize.js +125 -0
- package/dist/sanitize.js.map +1 -0
- package/dist/server.d.ts +14 -0
- package/dist/server.js +447 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/check-project.d.ts +32 -0
- package/dist/tools/check-project.js +180 -0
- package/dist/tools/check-project.js.map +1 -0
- package/dist/tools/check-repo-trust.d.ts +33 -0
- package/dist/tools/check-repo-trust.js +212 -0
- package/dist/tools/check-repo-trust.js.map +1 -0
- package/dist/tools/create-diagram.d.ts +114 -0
- package/dist/tools/create-diagram.js +176 -0
- package/dist/tools/create-diagram.js.map +1 -0
- package/dist/tools/create-document.d.ts +28 -0
- package/dist/tools/create-document.js +53 -0
- package/dist/tools/create-document.js.map +1 -0
- package/dist/tools/discover-local-infra.d.ts +24 -0
- package/dist/tools/discover-local-infra.js +763 -0
- package/dist/tools/discover-local-infra.js.map +1 -0
- package/dist/tools/enterprise/capture-evidence.d.ts +54 -0
- package/dist/tools/enterprise/capture-evidence.js +72 -0
- package/dist/tools/enterprise/capture-evidence.js.map +1 -0
- package/dist/tools/enterprise/create-report-ticket.d.ts +34 -0
- package/dist/tools/enterprise/create-report-ticket.js +44 -0
- package/dist/tools/enterprise/create-report-ticket.js.map +1 -0
- package/dist/tools/enterprise/end-pentest-session.d.ts +33 -0
- package/dist/tools/enterprise/end-pentest-session.js +42 -0
- package/dist/tools/enterprise/end-pentest-session.js.map +1 -0
- package/dist/tools/enterprise/generate-report.d.ts +55 -0
- package/dist/tools/enterprise/generate-report.js +111 -0
- package/dist/tools/enterprise/generate-report.js.map +1 -0
- package/dist/tools/enterprise/get-org-zat.d.ts +27 -0
- package/dist/tools/enterprise/get-org-zat.js +62 -0
- package/dist/tools/enterprise/get-org-zat.js.map +1 -0
- package/dist/tools/enterprise/get-report-status.d.ts +27 -0
- package/dist/tools/enterprise/get-report-status.js +38 -0
- package/dist/tools/enterprise/get-report-status.js.map +1 -0
- package/dist/tools/enterprise/get-threat-model.d.ts +29 -0
- package/dist/tools/enterprise/get-threat-model.js +83 -0
- package/dist/tools/enterprise/get-threat-model.js.map +1 -0
- package/dist/tools/enterprise/list-agents.d.ts +42 -0
- package/dist/tools/enterprise/list-agents.js +95 -0
- package/dist/tools/enterprise/list-agents.js.map +1 -0
- package/dist/tools/enterprise/list-report-issues.d.ts +36 -0
- package/dist/tools/enterprise/list-report-issues.js +50 -0
- package/dist/tools/enterprise/list-report-issues.js.map +1 -0
- package/dist/tools/enterprise/list-threat-models.d.ts +36 -0
- package/dist/tools/enterprise/list-threat-models.js +82 -0
- package/dist/tools/enterprise/list-threat-models.js.map +1 -0
- package/dist/tools/enterprise/manage-actor.d.ts +58 -0
- package/dist/tools/enterprise/manage-actor.js +99 -0
- package/dist/tools/enterprise/manage-actor.js.map +1 -0
- package/dist/tools/enterprise/manage-attack-scenario.d.ts +70 -0
- package/dist/tools/enterprise/manage-attack-scenario.js +89 -0
- package/dist/tools/enterprise/manage-attack-scenario.js.map +1 -0
- package/dist/tools/enterprise/manage-component.d.ts +58 -0
- package/dist/tools/enterprise/manage-component.js +90 -0
- package/dist/tools/enterprise/manage-component.js.map +1 -0
- package/dist/tools/enterprise/manage-data-asset.d.ts +53 -0
- package/dist/tools/enterprise/manage-data-asset.js +90 -0
- package/dist/tools/enterprise/manage-data-asset.js.map +1 -0
- package/dist/tools/enterprise/manage-data-flow.d.ts +57 -0
- package/dist/tools/enterprise/manage-data-flow.js +98 -0
- package/dist/tools/enterprise/manage-data-flow.js.map +1 -0
- package/dist/tools/enterprise/manage-finding.d.ts +69 -0
- package/dist/tools/enterprise/manage-finding.js +106 -0
- package/dist/tools/enterprise/manage-finding.js.map +1 -0
- package/dist/tools/enterprise/manage-security-control.d.ts +59 -0
- package/dist/tools/enterprise/manage-security-control.js +96 -0
- package/dist/tools/enterprise/manage-security-control.js.map +1 -0
- package/dist/tools/enterprise/manage-test-case.d.ts +88 -0
- package/dist/tools/enterprise/manage-test-case.js +119 -0
- package/dist/tools/enterprise/manage-test-case.js.map +1 -0
- package/dist/tools/enterprise/promote-finding-to-issue.d.ts +36 -0
- package/dist/tools/enterprise/promote-finding-to-issue.js +65 -0
- package/dist/tools/enterprise/promote-finding-to-issue.js.map +1 -0
- package/dist/tools/enterprise/publish-report-version.d.ts +34 -0
- package/dist/tools/enterprise/publish-report-version.js +75 -0
- package/dist/tools/enterprise/publish-report-version.js.map +1 -0
- package/dist/tools/enterprise/publish-test-to-library.d.ts +31 -0
- package/dist/tools/enterprise/publish-test-to-library.js +40 -0
- package/dist/tools/enterprise/publish-test-to-library.js.map +1 -0
- package/dist/tools/enterprise/record-test-result.d.ts +67 -0
- package/dist/tools/enterprise/record-test-result.js +75 -0
- package/dist/tools/enterprise/record-test-result.js.map +1 -0
- package/dist/tools/enterprise/start-pentest-session.d.ts +35 -0
- package/dist/tools/enterprise/start-pentest-session.js +50 -0
- package/dist/tools/enterprise/start-pentest-session.js.map +1 -0
- package/dist/tools/enterprise/sync-report-section.d.ts +41 -0
- package/dist/tools/enterprise/sync-report-section.js +79 -0
- package/dist/tools/enterprise/sync-report-section.js.map +1 -0
- package/dist/tools/enterprise/update-report-issue.d.ts +55 -0
- package/dist/tools/enterprise/update-report-issue.js +69 -0
- package/dist/tools/enterprise/update-report-issue.js.map +1 -0
- package/dist/tools/generate-diagram.d.ts +36 -0
- package/dist/tools/generate-diagram.js +153 -0
- package/dist/tools/generate-diagram.js.map +1 -0
- package/dist/tools/get-agent-test-results.d.ts +41 -0
- package/dist/tools/get-agent-test-results.js +86 -0
- package/dist/tools/get-agent-test-results.js.map +1 -0
- package/dist/tools/get-application-overview.d.ts +27 -0
- package/dist/tools/get-application-overview.js +143 -0
- package/dist/tools/get-application-overview.js.map +1 -0
- package/dist/tools/get-application.d.ts +27 -0
- package/dist/tools/get-application.js +83 -0
- package/dist/tools/get-application.js.map +1 -0
- package/dist/tools/get-artifact-content.d.ts +29 -0
- package/dist/tools/get-artifact-content.js +86 -0
- package/dist/tools/get-artifact-content.js.map +1 -0
- package/dist/tools/get-diagram.d.ts +27 -0
- package/dist/tools/get-diagram.js +109 -0
- package/dist/tools/get-diagram.js.map +1 -0
- package/dist/tools/get-document.d.ts +22 -0
- package/dist/tools/get-document.js +43 -0
- package/dist/tools/get-document.js.map +1 -0
- package/dist/tools/get-finding-details.d.ts +28 -0
- package/dist/tools/get-finding-details.js +43 -0
- package/dist/tools/get-finding-details.js.map +1 -0
- package/dist/tools/get-findings.d.ts +57 -0
- package/dist/tools/get-findings.js +103 -0
- package/dist/tools/get-findings.js.map +1 -0
- package/dist/tools/get-oss-zat.d.ts +27 -0
- package/dist/tools/get-oss-zat.js +105 -0
- package/dist/tools/get-oss-zat.js.map +1 -0
- package/dist/tools/get-recon-scan.d.ts +27 -0
- package/dist/tools/get-recon-scan.js +46 -0
- package/dist/tools/get-recon-scan.js.map +1 -0
- package/dist/tools/get-scan-output.d.ts +27 -0
- package/dist/tools/get-scan-output.js +64 -0
- package/dist/tools/get-scan-output.js.map +1 -0
- package/dist/tools/get-scenario-details.d.ts +27 -0
- package/dist/tools/get-scenario-details.js +46 -0
- package/dist/tools/get-scenario-details.js.map +1 -0
- package/dist/tools/get-test-case-results.d.ts +37 -0
- package/dist/tools/get-test-case-results.js +66 -0
- package/dist/tools/get-test-case-results.js.map +1 -0
- package/dist/tools/get-test-details.d.ts +29 -0
- package/dist/tools/get-test-details.js +49 -0
- package/dist/tools/get-test-details.js.map +1 -0
- package/dist/tools/get-trust-keys.d.ts +22 -0
- package/dist/tools/get-trust-keys.js +67 -0
- package/dist/tools/get-trust-keys.js.map +1 -0
- package/dist/tools/import-openapi-endpoints.d.ts +33 -0
- package/dist/tools/import-openapi-endpoints.js +93 -0
- package/dist/tools/import-openapi-endpoints.js.map +1 -0
- package/dist/tools/inspect-zat.d.ts +26 -0
- package/dist/tools/inspect-zat.js +247 -0
- package/dist/tools/inspect-zat.js.map +1 -0
- package/dist/tools/list-agent-test-cases.d.ts +41 -0
- package/dist/tools/list-agent-test-cases.js +73 -0
- package/dist/tools/list-agent-test-cases.js.map +1 -0
- package/dist/tools/list-applications.d.ts +34 -0
- package/dist/tools/list-applications.js +74 -0
- package/dist/tools/list-applications.js.map +1 -0
- package/dist/tools/list-diagrams.d.ts +42 -0
- package/dist/tools/list-diagrams.js +81 -0
- package/dist/tools/list-diagrams.js.map +1 -0
- package/dist/tools/list-documents.d.ts +24 -0
- package/dist/tools/list-documents.js +50 -0
- package/dist/tools/list-documents.js.map +1 -0
- package/dist/tools/list-endpoints.d.ts +47 -0
- package/dist/tools/list-endpoints.js +98 -0
- package/dist/tools/list-endpoints.js.map +1 -0
- package/dist/tools/list-recon-scans.d.ts +36 -0
- package/dist/tools/list-recon-scans.js +74 -0
- package/dist/tools/list-recon-scans.js.map +1 -0
- package/dist/tools/list-scan-artifacts.d.ts +41 -0
- package/dist/tools/list-scan-artifacts.js +63 -0
- package/dist/tools/list-scan-artifacts.js.map +1 -0
- package/dist/tools/list-scans.d.ts +44 -0
- package/dist/tools/list-scans.js +91 -0
- package/dist/tools/list-scans.js.map +1 -0
- package/dist/tools/list-test-library.d.ts +44 -0
- package/dist/tools/list-test-library.js +83 -0
- package/dist/tools/list-test-library.js.map +1 -0
- package/dist/tools/list-test-scenarios.d.ts +31 -0
- package/dist/tools/list-test-scenarios.js +66 -0
- package/dist/tools/list-test-scenarios.js.map +1 -0
- package/dist/tools/local-scan.d.ts +40 -0
- package/dist/tools/local-scan.js +261 -0
- package/dist/tools/local-scan.js.map +1 -0
- package/dist/tools/manage-diagram.d.ts +109 -0
- package/dist/tools/manage-diagram.js +316 -0
- package/dist/tools/manage-diagram.js.map +1 -0
- package/dist/tools/open-in-ide.d.ts +39 -0
- package/dist/tools/open-in-ide.js +61 -0
- package/dist/tools/open-in-ide.js.map +1 -0
- package/dist/tools/run-test-scenario.d.ts +37 -0
- package/dist/tools/run-test-scenario.js +70 -0
- package/dist/tools/run-test-scenario.js.map +1 -0
- package/dist/tools/scan-pr.d.ts +27 -0
- package/dist/tools/scan-pr.js +51 -0
- package/dist/tools/scan-pr.js.map +1 -0
- package/dist/tools/security-review.d.ts +65 -0
- package/dist/tools/security-review.js +378 -0
- package/dist/tools/security-review.js.map +1 -0
- package/dist/tools/setup-red-team-target.d.ts +79 -0
- package/dist/tools/setup-red-team-target.js +430 -0
- package/dist/tools/setup-red-team-target.js.map +1 -0
- package/dist/tools/triage-finding.d.ts +47 -0
- package/dist/tools/triage-finding.js +116 -0
- package/dist/tools/triage-finding.js.map +1 -0
- package/dist/tools/update-document.d.ts +28 -0
- package/dist/tools/update-document.js +63 -0
- package/dist/tools/update-document.js.map +1 -0
- package/dist/tools/update-endpoint.d.ts +65 -0
- package/dist/tools/update-endpoint.js +145 -0
- package/dist/tools/update-endpoint.js.map +1 -0
- package/dist/tools/update-mermaid-source.d.ts +34 -0
- package/dist/tools/update-mermaid-source.js +76 -0
- package/dist/tools/update-mermaid-source.js.map +1 -0
- package/dist/tools/verify-trust-mark.d.ts +29 -0
- package/dist/tools/verify-trust-mark.js +108 -0
- package/dist/tools/verify-trust-mark.js.map +1 -0
- package/dist/types.d.ts +220 -0
- package/dist/types.js +33 -0
- package/dist/types.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* zivis_security_review — AI-powered security code review with ZIVIS intelligence
|
|
3
|
+
*
|
|
4
|
+
* Composite tool that gathers security context from multiple ZIVIS sources
|
|
5
|
+
* and returns it as structured input for Claude to use during code review.
|
|
6
|
+
*
|
|
7
|
+
* Sources:
|
|
8
|
+
* 1. Historical findings (resolved) — regression check patterns
|
|
9
|
+
* 2. Open findings — known vulnerabilities to verify aren't reintroduced
|
|
10
|
+
* 3. Threat model security controls — what's expected to be in place
|
|
11
|
+
* 4. Threat model attack scenarios — known attack vectors
|
|
12
|
+
* 5. OSS trust data — dependency risk signals
|
|
13
|
+
*
|
|
14
|
+
* This tool does NOT run scans itself. It assembles intelligence from ZIVIS
|
|
15
|
+
* so Claude can perform an informed, context-aware code review.
|
|
16
|
+
*/
|
|
17
|
+
import { z } from "zod";
|
|
18
|
+
import type { ApiClient } from "../api-client.js";
|
|
19
|
+
import type { ZivisConfig } from "../types.js";
|
|
20
|
+
export declare const SECURITY_REVIEW_NAME = "zivis_security_review";
|
|
21
|
+
export declare const SECURITY_REVIEW_DESCRIPTION = "Gather ZIVIS security intelligence for an AI-powered code review.\n\nPulls historical findings, open vulnerabilities, threat model controls, and attack scenarios to give you comprehensive security context. Use this BEFORE reviewing code to understand:\n\n1. **Regression risks** \u2014 Previously fixed vulnerabilities that could be reintroduced\n2. **Known vulnerabilities** \u2014 Open findings that may be relevant to the code being reviewed\n3. **Security controls** \u2014 What controls are expected (input validation, auth, rate limiting, etc.)\n4. **Attack scenarios** \u2014 Known attack vectors for this application (STRIDE-categorized)\n5. **Dependency risks** \u2014 OSS trust scores for dependencies in the code\n\nReturns structured security context that you should reference during code review. Focus on:\n- Code that touches areas where historical findings were fixed (regression check)\n- Missing or weak implementations of expected security controls\n- Code patterns that match known attack scenarios\n- Use of low-trust dependencies\n\nProvide at least one of: repo, application_id, threat_model_id, or campaign_id.";
|
|
22
|
+
export declare const SECURITY_REVIEW_SCHEMA: {
|
|
23
|
+
repo: z.ZodOptional<z.ZodString>;
|
|
24
|
+
application_id: z.ZodOptional<z.ZodString>;
|
|
25
|
+
threat_model_id: z.ZodOptional<z.ZodString>;
|
|
26
|
+
campaign_id: z.ZodOptional<z.ZodString>;
|
|
27
|
+
focus_areas: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
28
|
+
regression: "regression";
|
|
29
|
+
controls: "controls";
|
|
30
|
+
attack_scenarios: "attack_scenarios";
|
|
31
|
+
dependencies: "dependencies";
|
|
32
|
+
all: "all";
|
|
33
|
+
}>>>;
|
|
34
|
+
severity_threshold: z.ZodOptional<z.ZodEnum<{
|
|
35
|
+
critical: "critical";
|
|
36
|
+
high: "high";
|
|
37
|
+
medium: "medium";
|
|
38
|
+
low: "low";
|
|
39
|
+
info: "info";
|
|
40
|
+
}>>;
|
|
41
|
+
include_resolved: z.ZodDefault<z.ZodBoolean>;
|
|
42
|
+
dependency_list: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
43
|
+
};
|
|
44
|
+
export declare function createSecurityReviewHandler(apiClient: ApiClient, config: ZivisConfig): (params: {
|
|
45
|
+
repo?: string;
|
|
46
|
+
application_id?: string;
|
|
47
|
+
threat_model_id?: string;
|
|
48
|
+
campaign_id?: string;
|
|
49
|
+
focus_areas?: string[];
|
|
50
|
+
severity_threshold?: string;
|
|
51
|
+
include_resolved?: boolean;
|
|
52
|
+
dependency_list?: string[];
|
|
53
|
+
}) => Promise<{
|
|
54
|
+
content: {
|
|
55
|
+
type: "text";
|
|
56
|
+
text: string;
|
|
57
|
+
}[];
|
|
58
|
+
isError: boolean;
|
|
59
|
+
} | {
|
|
60
|
+
content: {
|
|
61
|
+
type: "text";
|
|
62
|
+
text: string;
|
|
63
|
+
}[];
|
|
64
|
+
isError?: undefined;
|
|
65
|
+
}>;
|
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* zivis_security_review — AI-powered security code review with ZIVIS intelligence
|
|
3
|
+
*
|
|
4
|
+
* Composite tool that gathers security context from multiple ZIVIS sources
|
|
5
|
+
* and returns it as structured input for Claude to use during code review.
|
|
6
|
+
*
|
|
7
|
+
* Sources:
|
|
8
|
+
* 1. Historical findings (resolved) — regression check patterns
|
|
9
|
+
* 2. Open findings — known vulnerabilities to verify aren't reintroduced
|
|
10
|
+
* 3. Threat model security controls — what's expected to be in place
|
|
11
|
+
* 4. Threat model attack scenarios — known attack vectors
|
|
12
|
+
* 5. OSS trust data — dependency risk signals
|
|
13
|
+
*
|
|
14
|
+
* This tool does NOT run scans itself. It assembles intelligence from ZIVIS
|
|
15
|
+
* so Claude can perform an informed, context-aware code review.
|
|
16
|
+
*/
|
|
17
|
+
import { z } from "zod";
|
|
18
|
+
import { resolveApplicationId } from "../resolve-application-id.js";
|
|
19
|
+
import { sanitizeResponse } from "../sanitize.js";
|
|
20
|
+
export const SECURITY_REVIEW_NAME = "zivis_security_review";
|
|
21
|
+
export const SECURITY_REVIEW_DESCRIPTION = `Gather ZIVIS security intelligence for an AI-powered code review.
|
|
22
|
+
|
|
23
|
+
Pulls historical findings, open vulnerabilities, threat model controls, and attack scenarios to give you comprehensive security context. Use this BEFORE reviewing code to understand:
|
|
24
|
+
|
|
25
|
+
1. **Regression risks** — Previously fixed vulnerabilities that could be reintroduced
|
|
26
|
+
2. **Known vulnerabilities** — Open findings that may be relevant to the code being reviewed
|
|
27
|
+
3. **Security controls** — What controls are expected (input validation, auth, rate limiting, etc.)
|
|
28
|
+
4. **Attack scenarios** — Known attack vectors for this application (STRIDE-categorized)
|
|
29
|
+
5. **Dependency risks** — OSS trust scores for dependencies in the code
|
|
30
|
+
|
|
31
|
+
Returns structured security context that you should reference during code review. Focus on:
|
|
32
|
+
- Code that touches areas where historical findings were fixed (regression check)
|
|
33
|
+
- Missing or weak implementations of expected security controls
|
|
34
|
+
- Code patterns that match known attack scenarios
|
|
35
|
+
- Use of low-trust dependencies
|
|
36
|
+
|
|
37
|
+
Provide at least one of: repo, application_id, threat_model_id, or campaign_id.`;
|
|
38
|
+
export const SECURITY_REVIEW_SCHEMA = {
|
|
39
|
+
repo: z.string().optional().describe("Repository name (owner/repo) — pulls findings and OSS trust data"),
|
|
40
|
+
application_id: z
|
|
41
|
+
.string()
|
|
42
|
+
.optional()
|
|
43
|
+
.describe("Application UUID — pulls findings scoped to this app. If omitted, uses applicationId from .zivis/project.json when set."),
|
|
44
|
+
threat_model_id: z.string().optional().describe("Threat model UUID — pulls controls, attack scenarios, and findings"),
|
|
45
|
+
campaign_id: z.string().optional().describe("Campaign UUID — pulls campaign-specific findings"),
|
|
46
|
+
focus_areas: z
|
|
47
|
+
.array(z.enum(["regression", "controls", "attack_scenarios", "dependencies", "all"]))
|
|
48
|
+
.optional()
|
|
49
|
+
.describe("Which intelligence to gather (default: all)"),
|
|
50
|
+
severity_threshold: z
|
|
51
|
+
.enum(["critical", "high", "medium", "low", "info"])
|
|
52
|
+
.optional()
|
|
53
|
+
.describe("Minimum severity to include (default: low)"),
|
|
54
|
+
include_resolved: z
|
|
55
|
+
.boolean()
|
|
56
|
+
.default(true)
|
|
57
|
+
.describe("Include resolved findings for regression checking (default: true)"),
|
|
58
|
+
dependency_list: z
|
|
59
|
+
.array(z.string())
|
|
60
|
+
.optional()
|
|
61
|
+
.describe("Specific dependencies to check trust scores for (owner/repo format)"),
|
|
62
|
+
};
|
|
63
|
+
// Severity ordering for threshold filtering
|
|
64
|
+
const SEVERITY_ORDER = {
|
|
65
|
+
critical: 5,
|
|
66
|
+
high: 4,
|
|
67
|
+
medium: 3,
|
|
68
|
+
low: 2,
|
|
69
|
+
info: 1,
|
|
70
|
+
};
|
|
71
|
+
export function createSecurityReviewHandler(apiClient, config) {
|
|
72
|
+
return async (params) => {
|
|
73
|
+
const { repo, application_id: application_idParam, threat_model_id, campaign_id, focus_areas = ["all"], severity_threshold = "low", include_resolved = true, dependency_list, } = params;
|
|
74
|
+
const application_id = resolveApplicationId(application_idParam);
|
|
75
|
+
if (!repo && !application_id && !threat_model_id && !campaign_id) {
|
|
76
|
+
return {
|
|
77
|
+
content: [{
|
|
78
|
+
type: "text",
|
|
79
|
+
text: "Error: Provide at least one of: repo, application_id, threat_model_id, or campaign_id " +
|
|
80
|
+
"(or set applicationId in .zivis/project.json for default app scope)",
|
|
81
|
+
}],
|
|
82
|
+
isError: true,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
const shouldInclude = (area) => focus_areas.includes("all") || focus_areas.includes(area);
|
|
86
|
+
const context = {
|
|
87
|
+
_description: "ZIVIS Security Review Context — use this intelligence during code review",
|
|
88
|
+
generatedAt: new Date().toISOString(),
|
|
89
|
+
parameters: { repo, application_id, threat_model_id, campaign_id },
|
|
90
|
+
};
|
|
91
|
+
const errors = [];
|
|
92
|
+
// ── 1. Historical findings (regression check) ──
|
|
93
|
+
if (shouldInclude("regression") && (repo || application_id)) {
|
|
94
|
+
try {
|
|
95
|
+
const resolvedFindings = await fetchFindings(apiClient, {
|
|
96
|
+
repo,
|
|
97
|
+
status: "resolved",
|
|
98
|
+
limit: 50,
|
|
99
|
+
});
|
|
100
|
+
const dismissedFindings = await fetchFindings(apiClient, {
|
|
101
|
+
repo,
|
|
102
|
+
status: "false_positive",
|
|
103
|
+
limit: 20,
|
|
104
|
+
});
|
|
105
|
+
// Build regression patterns: group by category/CWE
|
|
106
|
+
const regressionPatterns = buildRegressionPatterns(resolvedFindings);
|
|
107
|
+
context.regressionCheck = {
|
|
108
|
+
_instruction: "Check code changes against these previously fixed vulnerabilities. Flag if similar patterns appear.",
|
|
109
|
+
resolvedCount: resolvedFindings.length,
|
|
110
|
+
patterns: regressionPatterns,
|
|
111
|
+
recentlyFixed: resolvedFindings.slice(0, 10).map(summarizeFinding),
|
|
112
|
+
falsePositives: dismissedFindings.slice(0, 5).map(summarizeFinding),
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
errors.push(`Regression data: ${err instanceof Error ? err.message : "failed"}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// ── 2. Open findings (known vulnerabilities) ──
|
|
120
|
+
if (shouldInclude("regression") && (repo || application_id)) {
|
|
121
|
+
try {
|
|
122
|
+
const minSeverity = SEVERITY_ORDER[severity_threshold] || 2;
|
|
123
|
+
const openFindings = await fetchFindings(apiClient, {
|
|
124
|
+
repo,
|
|
125
|
+
status: "open",
|
|
126
|
+
limit: 50,
|
|
127
|
+
});
|
|
128
|
+
// Filter by severity threshold
|
|
129
|
+
const filtered = openFindings.filter((f) => (SEVERITY_ORDER[f.severity] || 1) >= minSeverity);
|
|
130
|
+
context.openVulnerabilities = {
|
|
131
|
+
_instruction: "These are KNOWN open vulnerabilities. Check if code changes interact with or worsen these issues.",
|
|
132
|
+
count: filtered.length,
|
|
133
|
+
bySeverity: countBySeverity(filtered),
|
|
134
|
+
findings: filtered.slice(0, 20).map(summarizeFinding),
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
catch (err) {
|
|
138
|
+
errors.push(`Open findings: ${err instanceof Error ? err.message : "failed"}`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// ── 3. Threat model: security controls ──
|
|
142
|
+
if (shouldInclude("controls") && threat_model_id) {
|
|
143
|
+
try {
|
|
144
|
+
const tm = await apiClient.get(`/api/threat-models/${threat_model_id}?include=all`);
|
|
145
|
+
const controls = tm.securityControls || [];
|
|
146
|
+
const notImplemented = controls.filter((c) => c.status === "not_implemented");
|
|
147
|
+
const partial = controls.filter((c) => c.status === "partial");
|
|
148
|
+
const implemented = controls.filter((c) => c.status === "implemented");
|
|
149
|
+
context.securityControls = {
|
|
150
|
+
_instruction: "Verify that code implements these expected security controls. Flag missing or weak implementations.",
|
|
151
|
+
summary: {
|
|
152
|
+
implemented: implemented.length,
|
|
153
|
+
partial: partial.length,
|
|
154
|
+
notImplemented: notImplemented.length,
|
|
155
|
+
},
|
|
156
|
+
gapControls: [...notImplemented, ...partial].map((c) => ({
|
|
157
|
+
name: c.name,
|
|
158
|
+
type: c.controlType,
|
|
159
|
+
status: c.status,
|
|
160
|
+
description: c.description,
|
|
161
|
+
effectiveness: c.effectivenessRating,
|
|
162
|
+
})),
|
|
163
|
+
implementedControls: implemented.map((c) => ({
|
|
164
|
+
name: c.name,
|
|
165
|
+
type: c.controlType,
|
|
166
|
+
description: c.description,
|
|
167
|
+
})),
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
errors.push(`Security controls: ${err instanceof Error ? err.message : "failed"}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// ── 4. Threat model: attack scenarios ──
|
|
175
|
+
if (shouldInclude("attack_scenarios") && threat_model_id) {
|
|
176
|
+
try {
|
|
177
|
+
const tm = await apiClient.get(`/api/threat-models/${threat_model_id}?include=all`);
|
|
178
|
+
const scenarios = tm.attackScenarios || [];
|
|
179
|
+
const minSeverity = SEVERITY_ORDER[severity_threshold] || 2;
|
|
180
|
+
const filtered = scenarios.filter((s) => (SEVERITY_ORDER[s.severity] || 1) >= minSeverity);
|
|
181
|
+
context.attackScenarios = {
|
|
182
|
+
_instruction: "Review code for susceptibility to these known attack vectors. Check that mitigations are in place.",
|
|
183
|
+
count: filtered.length,
|
|
184
|
+
scenarios: filtered.map((s) => ({
|
|
185
|
+
name: s.name,
|
|
186
|
+
strideCategory: s.strideCategory,
|
|
187
|
+
severity: s.severity,
|
|
188
|
+
likelihood: s.likelihood,
|
|
189
|
+
attackVector: s.attackVector,
|
|
190
|
+
description: s.description,
|
|
191
|
+
})),
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
catch (err) {
|
|
195
|
+
errors.push(`Attack scenarios: ${err instanceof Error ? err.message : "failed"}`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// ── 5. Dependency trust scores ──
|
|
199
|
+
if (shouldInclude("dependencies") && dependency_list && dependency_list.length > 0) {
|
|
200
|
+
const depResults = [];
|
|
201
|
+
const baseUrl = config.apiBaseUrl;
|
|
202
|
+
for (const dep of dependency_list.slice(0, 10)) {
|
|
203
|
+
try {
|
|
204
|
+
const parsed = parseRepo(dep);
|
|
205
|
+
if (!parsed) {
|
|
206
|
+
depResults.push({ repo: dep, error: "Invalid format" });
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
const res = await fetch(`${baseUrl}/api/oss-trust/repos/${parsed.owner}/${parsed.repo}`);
|
|
210
|
+
if (res.ok) {
|
|
211
|
+
const entry = await res.json();
|
|
212
|
+
depResults.push({
|
|
213
|
+
repo: dep,
|
|
214
|
+
trustGrade: entry.trustGrade,
|
|
215
|
+
trustScore: entry.trustScore,
|
|
216
|
+
findings: {
|
|
217
|
+
critical: entry.findingsCritical ?? 0,
|
|
218
|
+
high: entry.findingsHigh ?? 0,
|
|
219
|
+
medium: entry.findingsMedium ?? 0,
|
|
220
|
+
low: entry.findingsLow ?? 0,
|
|
221
|
+
},
|
|
222
|
+
lastScanned: entry.lastScannedAt,
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
depResults.push({ repo: dep, trustGrade: "unscanned", trustScore: null });
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
depResults.push({ repo: dep, error: "Failed to fetch" });
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
const risky = depResults.filter((d) => d.trustScore != null && d.trustScore < 70);
|
|
234
|
+
context.dependencyRisks = {
|
|
235
|
+
_instruction: "Flag usage of low-trust dependencies. Consider alternatives for dependencies with grade C or below.",
|
|
236
|
+
checked: depResults.length,
|
|
237
|
+
riskyCount: risky.length,
|
|
238
|
+
dependencies: depResults,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
// ── 6. Campaign findings (if campaign_id provided) ──
|
|
242
|
+
if (campaign_id) {
|
|
243
|
+
try {
|
|
244
|
+
const campaignFindings = await apiClient.get(`/api/campaigns/${campaign_id}/findings?limit=50`);
|
|
245
|
+
const findings = campaignFindings.findings || [];
|
|
246
|
+
const minSeverity = SEVERITY_ORDER[severity_threshold] || 2;
|
|
247
|
+
const filtered = findings.filter((f) => (SEVERITY_ORDER[f.severity] || 1) >= minSeverity);
|
|
248
|
+
context.campaignFindings = {
|
|
249
|
+
_instruction: "These findings are from active security testing campaigns. Check if code changes address or affect these.",
|
|
250
|
+
count: filtered.length,
|
|
251
|
+
bySeverity: countBySeverity(filtered),
|
|
252
|
+
findings: filtered.slice(0, 20).map(summarizeFinding),
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
catch (err) {
|
|
256
|
+
errors.push(`Campaign findings: ${err instanceof Error ? err.message : "failed"}`);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
// ── Build review guidance ──
|
|
260
|
+
context.reviewGuidance = buildReviewGuidance(context);
|
|
261
|
+
if (errors.length > 0) {
|
|
262
|
+
context.warnings = errors;
|
|
263
|
+
}
|
|
264
|
+
return {
|
|
265
|
+
content: [{
|
|
266
|
+
type: "text",
|
|
267
|
+
text: JSON.stringify(sanitizeResponse(context), null, 2),
|
|
268
|
+
}],
|
|
269
|
+
};
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
// ── Helpers ──
|
|
273
|
+
async function fetchFindings(apiClient, params) {
|
|
274
|
+
const query = new URLSearchParams();
|
|
275
|
+
if (params.repo)
|
|
276
|
+
query.set("resourceName", params.repo);
|
|
277
|
+
if (params.status)
|
|
278
|
+
query.set("status", params.status);
|
|
279
|
+
if (params.limit)
|
|
280
|
+
query.set("limit", String(params.limit));
|
|
281
|
+
const path = `/api/findings/unified?${query.toString()}`;
|
|
282
|
+
const data = await apiClient.get(path);
|
|
283
|
+
return data.findings || [];
|
|
284
|
+
}
|
|
285
|
+
function summarizeFinding(f) {
|
|
286
|
+
return {
|
|
287
|
+
title: f.title,
|
|
288
|
+
severity: f.severity,
|
|
289
|
+
category: f.category,
|
|
290
|
+
cweId: f.cweId,
|
|
291
|
+
status: f.status,
|
|
292
|
+
targetUrl: f.targetUrl,
|
|
293
|
+
description: f.description?.substring(0, 300),
|
|
294
|
+
remediation: f.recommendation?.substring(0, 300) || f.remediation?.substring(0, 300),
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
function countBySeverity(findings) {
|
|
298
|
+
const counts = { critical: 0, high: 0, medium: 0, low: 0, info: 0 };
|
|
299
|
+
for (const f of findings) {
|
|
300
|
+
const sev = f.severity || "info";
|
|
301
|
+
counts[sev] = (counts[sev] || 0) + 1;
|
|
302
|
+
}
|
|
303
|
+
return counts;
|
|
304
|
+
}
|
|
305
|
+
function buildRegressionPatterns(resolvedFindings) {
|
|
306
|
+
// Group by category + CWE to find recurring vulnerability patterns
|
|
307
|
+
const patternMap = new Map();
|
|
308
|
+
for (const f of resolvedFindings) {
|
|
309
|
+
const key = `${f.category || "uncategorized"}::${f.cweId || "no-cwe"}`;
|
|
310
|
+
const existing = patternMap.get(key);
|
|
311
|
+
if (existing) {
|
|
312
|
+
existing.count++;
|
|
313
|
+
if (existing.titles.length < 3)
|
|
314
|
+
existing.titles.push(f.title);
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
patternMap.set(key, {
|
|
318
|
+
count: 1,
|
|
319
|
+
titles: [f.title],
|
|
320
|
+
cweId: f.cweId,
|
|
321
|
+
category: f.category,
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
return Array.from(patternMap.values())
|
|
326
|
+
.sort((a, b) => b.count - a.count)
|
|
327
|
+
.slice(0, 15)
|
|
328
|
+
.map((p) => ({
|
|
329
|
+
category: p.category,
|
|
330
|
+
cweId: p.cweId,
|
|
331
|
+
occurrences: p.count,
|
|
332
|
+
examples: p.titles,
|
|
333
|
+
_check: `Previously fixed ${p.count}x — verify this pattern is not reintroduced`,
|
|
334
|
+
}));
|
|
335
|
+
}
|
|
336
|
+
function buildReviewGuidance(context) {
|
|
337
|
+
const guidance = [];
|
|
338
|
+
const regression = context.regressionCheck;
|
|
339
|
+
if (regression?.resolvedCount > 0) {
|
|
340
|
+
guidance.push(`REGRESSION: ${regression.resolvedCount} previously fixed vulnerabilities. Check ${regression.patterns?.length || 0} recurring patterns.`);
|
|
341
|
+
}
|
|
342
|
+
const open = context.openVulnerabilities;
|
|
343
|
+
if (open?.count > 0) {
|
|
344
|
+
guidance.push(`OPEN VULNS: ${open.count} known vulnerabilities (${open.bySeverity?.critical || 0} critical, ${open.bySeverity?.high || 0} high). Verify changes don't worsen these.`);
|
|
345
|
+
}
|
|
346
|
+
const controls = context.securityControls;
|
|
347
|
+
if (controls) {
|
|
348
|
+
const gaps = controls.summary?.notImplemented + controls.summary?.partial;
|
|
349
|
+
if (gaps > 0) {
|
|
350
|
+
guidance.push(`CONTROL GAPS: ${gaps} security controls are missing or partial. Check if code should implement them.`);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
const attacks = context.attackScenarios;
|
|
354
|
+
if (attacks?.count > 0) {
|
|
355
|
+
guidance.push(`ATTACK VECTORS: ${attacks.count} known attack scenarios. Verify code is resilient to these.`);
|
|
356
|
+
}
|
|
357
|
+
const deps = context.dependencyRisks;
|
|
358
|
+
if (deps?.riskyCount > 0) {
|
|
359
|
+
guidance.push(`RISKY DEPS: ${deps.riskyCount} dependencies with low trust scores. Consider alternatives.`);
|
|
360
|
+
}
|
|
361
|
+
if (guidance.length === 0) {
|
|
362
|
+
guidance.push("No significant security context found. Perform standard code review best practices.");
|
|
363
|
+
}
|
|
364
|
+
return guidance;
|
|
365
|
+
}
|
|
366
|
+
function parseRepo(input) {
|
|
367
|
+
const trimmed = input.trim();
|
|
368
|
+
const urlMatch = trimmed.match(/^https?:\/\/(?:www\.)?github\.com\/([a-zA-Z0-9._-]+)\/([a-zA-Z0-9._-]+)/);
|
|
369
|
+
if (urlMatch) {
|
|
370
|
+
return { owner: urlMatch[1], repo: urlMatch[2].replace(/\.git$/, "") };
|
|
371
|
+
}
|
|
372
|
+
const slashMatch = trimmed.match(/^([a-zA-Z0-9._-]+)\/([a-zA-Z0-9._-]+)$/);
|
|
373
|
+
if (slashMatch) {
|
|
374
|
+
return { owner: slashMatch[1], repo: slashMatch[2] };
|
|
375
|
+
}
|
|
376
|
+
return null;
|
|
377
|
+
}
|
|
378
|
+
//# sourceMappingURL=security-review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-review.js","sourceRoot":"","sources":["../../src/tools/security-review.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* zivis_setup_red_team_target — One-step red team target setup
|
|
3
|
+
*
|
|
4
|
+
* Creates an application, configures endpoints, and optionally
|
|
5
|
+
* triggers a security scan — all in one MCP call.
|
|
6
|
+
*
|
|
7
|
+
* Maps to:
|
|
8
|
+
* GET /api/rt/applications (find existing)
|
|
9
|
+
* POST /api/rt/applications (create)
|
|
10
|
+
* PATCH /api/rt/applications/:id (update)
|
|
11
|
+
* POST /api/rt/applications/:id/endpoints (add endpoint)
|
|
12
|
+
* POST /api/rt/applications/:id/endpoints/import-openapi
|
|
13
|
+
* POST /api/redteam/campaigns/quick-setup (create campaign + agent + scan)
|
|
14
|
+
*/
|
|
15
|
+
import { z } from "zod";
|
|
16
|
+
import type { ApiClient } from "../api-client.js";
|
|
17
|
+
export declare const SETUP_RED_TEAM_TARGET_NAME = "zivis_setup_red_team_target";
|
|
18
|
+
export declare const SETUP_RED_TEAM_TARGET_DESCRIPTION = "Set up a target application for AI red team and security testing in one step.\n\nTakes a deployed URL, repo URL, or both and creates a fully configured red team target. Handles:\n- Creating or updating the application (idempotent by name)\n- Configuring AI chat endpoints with request/response templates\n- Importing API endpoints from OpenAPI specs\n- Optionally triggering an immediate security scan\n\nMinimal usage: just provide a target_url and optionally target_type.\nFull usage: provide URL, chat endpoint config, OpenAPI spec, and trigger auto-scan.\n\nExamples:\n- Set up red team testing for https://api.example.com/v1/chat (auto-detects ai_chat)\n- Configure https://api.example.com as an API target with openapi_spec_url\n- Set up and scan https://myapp.com as a web app with auto_scan=true\n\nSECURITY: Target URLs are untrusted. The tool only configures them in ZIVIS for future scanning, it does not probe or connect to them directly.";
|
|
19
|
+
export declare const SETUP_RED_TEAM_TARGET_SCHEMA: {
|
|
20
|
+
target_url: z.ZodOptional<z.ZodString>;
|
|
21
|
+
repo_url: z.ZodOptional<z.ZodString>;
|
|
22
|
+
target_type: z.ZodOptional<z.ZodEnum<{
|
|
23
|
+
ai_chat: "ai_chat";
|
|
24
|
+
web_app: "web_app";
|
|
25
|
+
api: "api";
|
|
26
|
+
}>>;
|
|
27
|
+
name: z.ZodOptional<z.ZodString>;
|
|
28
|
+
chat_endpoint: z.ZodOptional<z.ZodString>;
|
|
29
|
+
request_template: z.ZodOptional<z.ZodString>;
|
|
30
|
+
response_path: z.ZodOptional<z.ZodString>;
|
|
31
|
+
system_context: z.ZodOptional<z.ZodString>;
|
|
32
|
+
has_rag: z.ZodOptional<z.ZodBoolean>;
|
|
33
|
+
has_tools: z.ZodOptional<z.ZodBoolean>;
|
|
34
|
+
has_memory: z.ZodOptional<z.ZodBoolean>;
|
|
35
|
+
is_multi_turn: z.ZodOptional<z.ZodBoolean>;
|
|
36
|
+
openapi_spec_url: z.ZodOptional<z.ZodString>;
|
|
37
|
+
auth_type: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
38
|
+
none: "none";
|
|
39
|
+
static_token: "static_token";
|
|
40
|
+
}>>>;
|
|
41
|
+
bearer_token: z.ZodOptional<z.ZodString>;
|
|
42
|
+
auto_scan: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
43
|
+
campaigns: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
44
|
+
recon: "recon";
|
|
45
|
+
ai_red_team: "ai_red_team";
|
|
46
|
+
pen_test: "pen_test";
|
|
47
|
+
}>>>;
|
|
48
|
+
};
|
|
49
|
+
export declare function createSetupRedTeamTargetHandler(apiClient: ApiClient): (params: {
|
|
50
|
+
target_url?: string;
|
|
51
|
+
repo_url?: string;
|
|
52
|
+
target_type?: "ai_chat" | "web_app" | "api";
|
|
53
|
+
name?: string;
|
|
54
|
+
chat_endpoint?: string;
|
|
55
|
+
request_template?: string;
|
|
56
|
+
response_path?: string;
|
|
57
|
+
system_context?: string;
|
|
58
|
+
has_rag?: boolean;
|
|
59
|
+
has_tools?: boolean;
|
|
60
|
+
has_memory?: boolean;
|
|
61
|
+
is_multi_turn?: boolean;
|
|
62
|
+
openapi_spec_url?: string;
|
|
63
|
+
auth_type?: "none" | "static_token";
|
|
64
|
+
bearer_token?: string;
|
|
65
|
+
auto_scan?: boolean;
|
|
66
|
+
campaigns?: ("ai_red_team" | "pen_test" | "recon")[];
|
|
67
|
+
}) => Promise<{
|
|
68
|
+
content: {
|
|
69
|
+
type: "text";
|
|
70
|
+
text: string;
|
|
71
|
+
}[];
|
|
72
|
+
isError: boolean;
|
|
73
|
+
} | {
|
|
74
|
+
content: {
|
|
75
|
+
type: "text";
|
|
76
|
+
text: string;
|
|
77
|
+
}[];
|
|
78
|
+
isError?: undefined;
|
|
79
|
+
}>;
|