@zivis/mcp 0.1.8 → 0.1.10
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/LICENSE +201 -0
- package/README.md +19 -0
- package/dist/api-client.d.ts +2 -24
- package/dist/api-client.js +32 -52
- package/dist/auth/index.d.ts +1 -22
- package/dist/auth/index.js +17 -38
- package/dist/auth/jwt.d.ts +0 -16
- package/dist/auth/jwt.js +0 -13
- package/dist/auth/keychain.d.ts +6 -32
- package/dist/auth/keychain.js +83 -114
- package/dist/auth/oauth.d.ts +3 -32
- package/dist/auth/oauth.js +67 -61
- package/dist/auth/sessions.d.ts +5 -25
- package/dist/auth/sessions.js +20 -39
- package/dist/auth/token-refresh.d.ts +2 -22
- package/dist/auth/token-refresh.js +33 -36
- package/dist/cli.d.ts +1 -18
- package/dist/cli.js +30 -908
- package/dist/index.d.ts +0 -6
- package/dist/index.js +0 -7
- package/dist/lib/inspect-cache.d.ts +10 -0
- package/dist/lib/inspect-cache.js +75 -0
- package/dist/lib/next-steps.d.ts +27 -0
- package/dist/lib/next-steps.js +21 -0
- package/dist/matcher/ast-eval.d.ts +8 -0
- package/dist/matcher/ast-eval.js +95 -0
- package/dist/matcher/finding.d.ts +55 -0
- package/dist/matcher/finding.js +1 -0
- package/dist/matcher/index.d.ts +8 -0
- package/dist/matcher/index.js +202 -0
- package/dist/matcher/inference-candidates.d.ts +26 -0
- package/dist/matcher/inference-candidates.js +81 -0
- package/dist/matcher/walker.d.ts +7 -0
- package/dist/matcher/walker.js +71 -0
- package/dist/pattern-pack/index.d.ts +125 -0
- package/dist/pattern-pack/index.js +189 -0
- package/dist/pattern-packs/zivis-public-0.2.0/capsules/agents/privilege-separation.yaml +224 -0
- package/dist/pattern-packs/zivis-public-0.2.0/capsules/prompting/self-consistency-no-isolation.yaml +237 -0
- package/dist/pattern-packs/zivis-public-0.2.0/capsules/retrieval/context-injection-no-validator.yaml +348 -0
- package/dist/pattern-packs/zivis-public-0.2.0/capsules/security/late-org-filter.yaml +266 -0
- package/dist/pattern-packs/zivis-public-0.2.0/controls/external_validator_on_facts.yaml +37 -0
- package/dist/pattern-packs/zivis-public-0.2.0/controls/fact_validator_present.yaml +68 -0
- package/dist/pattern-packs/zivis-public-0.2.0/controls/human_approval_gate.yaml +44 -0
- package/dist/pattern-packs/zivis-public-0.2.0/controls/langgraph_state_machine_with_per_node_tools.yaml +35 -0
- package/dist/pattern-packs/zivis-public-0.2.0/controls/per_sample_retrieval_diversification.yaml +38 -0
- package/dist/pattern-packs/zivis-public-0.2.0/controls/prisma_extension_or_middleware_attaching_org_filter.yaml +31 -0
- package/dist/pattern-packs/zivis-public-0.2.0/controls/row_level_security_policy.yaml +37 -0
- package/dist/pattern-packs/zivis-public-0.2.0/controls/source_attribution_present.yaml +58 -0
- package/dist/pattern-packs/zivis-public-0.2.0/manifest.json +167 -0
- package/dist/pattern-packs/zivis-public-0.2.0/prompts/agents/privilege-separation/identify.md +54 -0
- package/dist/pattern-packs/zivis-public-0.2.0/prompts/prompting/self-consistency-no-isolation/identify.md +60 -0
- package/dist/pattern-packs/zivis-public-0.2.0/prompts/retrieval/context-injection-no-validator/identify.md +109 -0
- package/dist/pattern-packs/zivis-public-0.2.0/prompts/security/late-org-filter/identify.md +78 -0
- package/dist/project-binding.d.ts +2 -19
- package/dist/project-binding.js +38 -21
- package/dist/prompts/audit-dependencies.d.ts +2 -0
- package/dist/prompts/audit-dependencies.js +47 -0
- package/dist/prompts/getting-started.d.ts +2 -0
- package/dist/prompts/getting-started.js +37 -0
- package/dist/prompts/index.d.ts +2 -0
- package/dist/prompts/index.js +6 -0
- package/dist/resolve-application-id.d.ts +0 -4
- package/dist/resolve-application-id.js +0 -5
- package/dist/sanitize.d.ts +1 -21
- package/dist/sanitize.js +7 -41
- package/dist/server.d.ts +1 -13
- package/dist/server.js +142 -265
- package/dist/tools/artifacts.d.ts +76 -0
- package/dist/tools/artifacts.js +178 -0
- package/dist/tools/check-project.d.ts +5 -18
- package/dist/tools/check-project.js +122 -110
- package/dist/tools/check-repo-trust.d.ts +4 -19
- package/dist/tools/check-repo-trust.js +56 -47
- package/dist/tools/create-diagram.d.ts +0 -5
- package/dist/tools/create-diagram.js +0 -10
- package/dist/tools/create-document.d.ts +0 -5
- package/dist/tools/create-document.js +3 -9
- package/dist/tools/create-finding.d.ts +85 -0
- package/dist/tools/create-finding.js +136 -0
- package/dist/tools/delete-finding.d.ts +19 -0
- package/dist/tools/delete-finding.js +36 -0
- package/dist/tools/devx-run.d.ts +88 -0
- package/dist/tools/devx-run.js +175 -0
- package/dist/tools/discover-local-infra.d.ts +0 -10
- package/dist/tools/discover-local-infra.js +3 -73
- package/dist/tools/enterprise/get-org-zat.d.ts +0 -5
- package/dist/tools/enterprise/get-org-zat.js +0 -6
- package/dist/tools/explain-signal-for-diff.d.ts +34 -0
- package/dist/tools/explain-signal-for-diff.js +75 -0
- package/dist/tools/generate-diagram.d.ts +0 -6
- package/dist/tools/generate-diagram.js +21 -13
- package/dist/tools/get-application-overview.d.ts +0 -5
- package/dist/tools/get-application-overview.js +0 -6
- package/dist/tools/get-application.d.ts +0 -5
- package/dist/tools/get-application.js +0 -6
- package/dist/tools/get-diagram.d.ts +0 -5
- package/dist/tools/get-diagram.js +1 -11
- package/dist/tools/get-document.d.ts +0 -5
- package/dist/tools/get-document.js +0 -6
- package/dist/tools/get-oss-zat.d.ts +0 -5
- package/dist/tools/get-oss-zat.js +0 -7
- package/dist/tools/get-signal.d.ts +24 -0
- package/dist/tools/get-signal.js +75 -0
- package/dist/tools/get-started.d.ts +18 -0
- package/dist/tools/get-started.js +470 -0
- package/dist/tools/get-trust-keys.d.ts +0 -5
- package/dist/tools/get-trust-keys.js +0 -6
- package/dist/tools/import-openapi-endpoints.d.ts +0 -5
- package/dist/tools/import-openapi-endpoints.js +0 -6
- package/dist/tools/inspect-zat.d.ts +0 -5
- package/dist/tools/inspect-zat.js +0 -19
- package/dist/tools/inspect.d.ts +21 -0
- package/dist/tools/inspect.js +222 -0
- package/dist/tools/list-applications.d.ts +1 -6
- package/dist/tools/list-applications.js +0 -6
- package/dist/tools/list-diagrams.d.ts +0 -5
- package/dist/tools/list-diagrams.js +0 -6
- package/dist/tools/list-documents.d.ts +0 -5
- package/dist/tools/list-documents.js +0 -6
- package/dist/tools/list-endpoints.d.ts +1 -6
- package/dist/tools/list-endpoints.js +0 -6
- package/dist/tools/list-signals.d.ts +37 -0
- package/dist/tools/list-signals.js +83 -0
- package/dist/tools/manage-application.d.ts +64 -0
- package/dist/tools/manage-application.js +129 -0
- package/dist/tools/manage-diagram.d.ts +0 -5
- package/dist/tools/manage-diagram.js +0 -16
- package/dist/tools/manage-endpoint-lifecycle.d.ts +80 -0
- package/dist/tools/manage-endpoint-lifecycle.js +180 -0
- package/dist/tools/open-in-ide.d.ts +2 -14
- package/dist/tools/open-in-ide.js +0 -13
- package/dist/tools/review-change.d.ts +34 -0
- package/dist/tools/review-change.js +93 -0
- package/dist/tools/security-memory.d.ts +76 -0
- package/dist/tools/security-memory.js +202 -0
- package/dist/tools/security-review.d.ts +1 -21
- package/dist/tools/security-review.js +8 -108
- package/dist/tools/threat-get-capsule.d.ts +15 -0
- package/dist/tools/threat-get-capsule.js +53 -0
- package/dist/tools/threat-get-inference-prompt.d.ts +15 -0
- package/dist/tools/threat-get-inference-prompt.js +73 -0
- package/dist/tools/threat-list-relevant-capsules.d.ts +17 -0
- package/dist/tools/threat-list-relevant-capsules.js +158 -0
- package/dist/tools/threat-run-matcher.d.ts +17 -0
- package/dist/tools/threat-run-matcher.js +145 -0
- package/dist/tools/update-document.d.ts +0 -5
- package/dist/tools/update-document.js +3 -9
- package/dist/tools/update-endpoint.d.ts +1 -6
- package/dist/tools/update-endpoint.js +0 -7
- package/dist/tools/update-finding.d.ts +61 -0
- package/dist/tools/update-finding.js +80 -0
- package/dist/tools/update-mermaid-source.d.ts +0 -13
- package/dist/tools/update-mermaid-source.js +0 -14
- package/dist/tools/verify-trust-mark.d.ts +0 -5
- package/dist/tools/verify-trust-mark.js +0 -6
- package/dist/types.d.ts +14 -14
- package/dist/types.js +22 -28
- package/package.json +38 -15
- package/dist/api-client.js.map +0 -1
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/jwt.js.map +0 -1
- package/dist/auth/keychain.js.map +0 -1
- package/dist/auth/oauth.js.map +0 -1
- package/dist/auth/sessions.js.map +0 -1
- package/dist/auth/token-refresh.js.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/project-binding.js.map +0 -1
- package/dist/resolve-application-id.js.map +0 -1
- package/dist/sanitize.js.map +0 -1
- package/dist/server.js.map +0 -1
- package/dist/tools/check-project.js.map +0 -1
- package/dist/tools/check-repo-trust.js.map +0 -1
- package/dist/tools/create-diagram.js.map +0 -1
- package/dist/tools/create-document.js.map +0 -1
- package/dist/tools/discover-local-infra.js.map +0 -1
- package/dist/tools/enterprise/capture-evidence.d.ts +0 -54
- package/dist/tools/enterprise/capture-evidence.js +0 -72
- package/dist/tools/enterprise/capture-evidence.js.map +0 -1
- package/dist/tools/enterprise/create-report-ticket.d.ts +0 -34
- package/dist/tools/enterprise/create-report-ticket.js +0 -44
- package/dist/tools/enterprise/create-report-ticket.js.map +0 -1
- package/dist/tools/enterprise/end-pentest-session.d.ts +0 -33
- package/dist/tools/enterprise/end-pentest-session.js +0 -42
- package/dist/tools/enterprise/end-pentest-session.js.map +0 -1
- package/dist/tools/enterprise/generate-report.d.ts +0 -55
- package/dist/tools/enterprise/generate-report.js +0 -111
- package/dist/tools/enterprise/generate-report.js.map +0 -1
- package/dist/tools/enterprise/get-org-zat.js.map +0 -1
- package/dist/tools/enterprise/get-report-status.d.ts +0 -27
- package/dist/tools/enterprise/get-report-status.js +0 -38
- package/dist/tools/enterprise/get-report-status.js.map +0 -1
- package/dist/tools/enterprise/get-threat-model.d.ts +0 -29
- package/dist/tools/enterprise/get-threat-model.js +0 -83
- package/dist/tools/enterprise/get-threat-model.js.map +0 -1
- package/dist/tools/enterprise/list-agents.d.ts +0 -42
- package/dist/tools/enterprise/list-agents.js +0 -95
- package/dist/tools/enterprise/list-agents.js.map +0 -1
- package/dist/tools/enterprise/list-report-issues.d.ts +0 -36
- package/dist/tools/enterprise/list-report-issues.js +0 -50
- package/dist/tools/enterprise/list-report-issues.js.map +0 -1
- package/dist/tools/enterprise/list-threat-models.d.ts +0 -36
- package/dist/tools/enterprise/list-threat-models.js +0 -82
- package/dist/tools/enterprise/list-threat-models.js.map +0 -1
- package/dist/tools/enterprise/manage-actor.d.ts +0 -58
- package/dist/tools/enterprise/manage-actor.js +0 -99
- package/dist/tools/enterprise/manage-actor.js.map +0 -1
- package/dist/tools/enterprise/manage-attack-scenario.d.ts +0 -70
- package/dist/tools/enterprise/manage-attack-scenario.js +0 -89
- package/dist/tools/enterprise/manage-attack-scenario.js.map +0 -1
- package/dist/tools/enterprise/manage-component.d.ts +0 -58
- package/dist/tools/enterprise/manage-component.js +0 -90
- package/dist/tools/enterprise/manage-component.js.map +0 -1
- package/dist/tools/enterprise/manage-data-asset.d.ts +0 -53
- package/dist/tools/enterprise/manage-data-asset.js +0 -90
- package/dist/tools/enterprise/manage-data-asset.js.map +0 -1
- package/dist/tools/enterprise/manage-data-flow.d.ts +0 -57
- package/dist/tools/enterprise/manage-data-flow.js +0 -98
- package/dist/tools/enterprise/manage-data-flow.js.map +0 -1
- package/dist/tools/enterprise/manage-finding.d.ts +0 -69
- package/dist/tools/enterprise/manage-finding.js +0 -106
- package/dist/tools/enterprise/manage-finding.js.map +0 -1
- package/dist/tools/enterprise/manage-security-control.d.ts +0 -59
- package/dist/tools/enterprise/manage-security-control.js +0 -96
- package/dist/tools/enterprise/manage-security-control.js.map +0 -1
- package/dist/tools/enterprise/manage-test-case.d.ts +0 -88
- package/dist/tools/enterprise/manage-test-case.js +0 -119
- package/dist/tools/enterprise/manage-test-case.js.map +0 -1
- package/dist/tools/enterprise/promote-finding-to-issue.d.ts +0 -36
- package/dist/tools/enterprise/promote-finding-to-issue.js +0 -65
- package/dist/tools/enterprise/promote-finding-to-issue.js.map +0 -1
- package/dist/tools/enterprise/publish-report-version.d.ts +0 -34
- package/dist/tools/enterprise/publish-report-version.js +0 -75
- package/dist/tools/enterprise/publish-report-version.js.map +0 -1
- package/dist/tools/enterprise/publish-test-to-library.d.ts +0 -31
- package/dist/tools/enterprise/publish-test-to-library.js +0 -40
- package/dist/tools/enterprise/publish-test-to-library.js.map +0 -1
- package/dist/tools/enterprise/record-test-result.d.ts +0 -67
- package/dist/tools/enterprise/record-test-result.js +0 -75
- package/dist/tools/enterprise/record-test-result.js.map +0 -1
- package/dist/tools/enterprise/start-pentest-session.d.ts +0 -35
- package/dist/tools/enterprise/start-pentest-session.js +0 -50
- package/dist/tools/enterprise/start-pentest-session.js.map +0 -1
- package/dist/tools/enterprise/sync-report-section.d.ts +0 -41
- package/dist/tools/enterprise/sync-report-section.js +0 -79
- package/dist/tools/enterprise/sync-report-section.js.map +0 -1
- package/dist/tools/enterprise/update-report-issue.d.ts +0 -55
- package/dist/tools/enterprise/update-report-issue.js +0 -69
- package/dist/tools/enterprise/update-report-issue.js.map +0 -1
- package/dist/tools/generate-diagram.js.map +0 -1
- package/dist/tools/get-agent-test-results.d.ts +0 -41
- package/dist/tools/get-agent-test-results.js +0 -86
- package/dist/tools/get-agent-test-results.js.map +0 -1
- package/dist/tools/get-application-overview.js.map +0 -1
- package/dist/tools/get-application.js.map +0 -1
- package/dist/tools/get-artifact-content.d.ts +0 -29
- package/dist/tools/get-artifact-content.js +0 -86
- package/dist/tools/get-artifact-content.js.map +0 -1
- package/dist/tools/get-diagram.js.map +0 -1
- package/dist/tools/get-document.js.map +0 -1
- package/dist/tools/get-finding-details.d.ts +0 -28
- package/dist/tools/get-finding-details.js +0 -43
- package/dist/tools/get-finding-details.js.map +0 -1
- package/dist/tools/get-findings.d.ts +0 -57
- package/dist/tools/get-findings.js +0 -103
- package/dist/tools/get-findings.js.map +0 -1
- package/dist/tools/get-oss-zat.js.map +0 -1
- package/dist/tools/get-recon-scan.d.ts +0 -27
- package/dist/tools/get-recon-scan.js +0 -46
- package/dist/tools/get-recon-scan.js.map +0 -1
- package/dist/tools/get-scan-output.d.ts +0 -27
- package/dist/tools/get-scan-output.js +0 -64
- package/dist/tools/get-scan-output.js.map +0 -1
- package/dist/tools/get-scenario-details.d.ts +0 -27
- package/dist/tools/get-scenario-details.js +0 -46
- package/dist/tools/get-scenario-details.js.map +0 -1
- package/dist/tools/get-test-case-results.d.ts +0 -37
- package/dist/tools/get-test-case-results.js +0 -66
- package/dist/tools/get-test-case-results.js.map +0 -1
- package/dist/tools/get-test-details.d.ts +0 -29
- package/dist/tools/get-test-details.js +0 -49
- package/dist/tools/get-test-details.js.map +0 -1
- package/dist/tools/get-trust-keys.js.map +0 -1
- package/dist/tools/import-openapi-endpoints.js.map +0 -1
- package/dist/tools/inspect-zat.js.map +0 -1
- package/dist/tools/list-agent-test-cases.d.ts +0 -41
- package/dist/tools/list-agent-test-cases.js +0 -73
- package/dist/tools/list-agent-test-cases.js.map +0 -1
- package/dist/tools/list-applications.js.map +0 -1
- package/dist/tools/list-diagrams.js.map +0 -1
- package/dist/tools/list-documents.js.map +0 -1
- package/dist/tools/list-endpoints.js.map +0 -1
- package/dist/tools/list-recon-scans.d.ts +0 -36
- package/dist/tools/list-recon-scans.js +0 -74
- package/dist/tools/list-recon-scans.js.map +0 -1
- package/dist/tools/list-scan-artifacts.d.ts +0 -41
- package/dist/tools/list-scan-artifacts.js +0 -63
- package/dist/tools/list-scan-artifacts.js.map +0 -1
- package/dist/tools/list-scans.d.ts +0 -44
- package/dist/tools/list-scans.js +0 -91
- package/dist/tools/list-scans.js.map +0 -1
- package/dist/tools/list-test-library.d.ts +0 -44
- package/dist/tools/list-test-library.js +0 -83
- package/dist/tools/list-test-library.js.map +0 -1
- package/dist/tools/list-test-scenarios.d.ts +0 -31
- package/dist/tools/list-test-scenarios.js +0 -66
- package/dist/tools/list-test-scenarios.js.map +0 -1
- package/dist/tools/local-scan.d.ts +0 -40
- package/dist/tools/local-scan.js +0 -261
- package/dist/tools/local-scan.js.map +0 -1
- package/dist/tools/manage-diagram.js.map +0 -1
- package/dist/tools/open-in-ide.js.map +0 -1
- package/dist/tools/run-test-scenario.d.ts +0 -37
- package/dist/tools/run-test-scenario.js +0 -70
- package/dist/tools/run-test-scenario.js.map +0 -1
- package/dist/tools/scan-pr.d.ts +0 -27
- package/dist/tools/scan-pr.js +0 -51
- package/dist/tools/scan-pr.js.map +0 -1
- package/dist/tools/security-review.js.map +0 -1
- package/dist/tools/setup-red-team-target.d.ts +0 -79
- package/dist/tools/setup-red-team-target.js +0 -430
- package/dist/tools/setup-red-team-target.js.map +0 -1
- package/dist/tools/triage-finding.d.ts +0 -47
- package/dist/tools/triage-finding.js +0 -116
- package/dist/tools/triage-finding.js.map +0 -1
- package/dist/tools/update-document.js.map +0 -1
- package/dist/tools/update-endpoint.js.map +0 -1
- package/dist/tools/update-mermaid-source.js.map +0 -1
- package/dist/tools/verify-trust-mark.js.map +0 -1
- package/dist/types.js.map +0 -1
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* zivis_manage_finding — Create or update findings in a threat model
|
|
3
|
-
*
|
|
4
|
-
* Maps to: POST/PATCH /api/threat-models/:id/findings
|
|
5
|
-
*/
|
|
6
|
-
import { z } from "zod";
|
|
7
|
-
import { sanitizeResponse } from "../../sanitize.js";
|
|
8
|
-
export const MANAGE_FINDING_NAME = "zivis_manage_finding";
|
|
9
|
-
export const MANAGE_FINDING_DESCRIPTION = `Create or update a finding (vulnerability) in a threat model.
|
|
10
|
-
|
|
11
|
-
Findings represent confirmed or suspected vulnerabilities discovered during analysis or pen testing. They link to components, attack scenarios, and can be tracked through remediation.
|
|
12
|
-
|
|
13
|
-
Actions:
|
|
14
|
-
- create: Add a new finding (requires title, severity)
|
|
15
|
-
- update: Modify an existing finding (requires finding_id) — use to update status, add notes, etc.`;
|
|
16
|
-
export const MANAGE_FINDING_SCHEMA = {
|
|
17
|
-
threat_model_id: z.string().describe("Threat model UUID (from zivis_list_threat_models, NOT a scan ID or agent ID)"),
|
|
18
|
-
action: z.enum(["create", "update"]).describe("Action to perform"),
|
|
19
|
-
finding_id: z.string().optional().describe("Finding UUID (required for update)"),
|
|
20
|
-
title: z.string().optional().describe("Finding title (e.g., 'SQL Injection in user search endpoint')"),
|
|
21
|
-
description: z.string().optional().describe("Detailed description of the vulnerability"),
|
|
22
|
-
severity: z.enum(["critical", "high", "medium", "low", "info"]).optional().describe("Severity level"),
|
|
23
|
-
status: z
|
|
24
|
-
.enum(["open", "in_progress", "mitigated", "verified", "accepted_risk", "false_positive"])
|
|
25
|
-
.optional()
|
|
26
|
-
.describe("Finding status"),
|
|
27
|
-
category: z.string().optional().describe("Category (e.g., 'injection', 'authentication', 'authorization')"),
|
|
28
|
-
component_id: z.string().optional().describe("Affected component UUID"),
|
|
29
|
-
attack_scenario_id: z.string().optional().describe("Related attack scenario UUID"),
|
|
30
|
-
cwe_id: z.string().optional().describe("CWE identifier (e.g., 'CWE-89')"),
|
|
31
|
-
cvss_score: z.number().min(0).max(10).optional().describe("CVSS score (0-10)"),
|
|
32
|
-
remediation: z.string().optional().describe("Recommended remediation steps"),
|
|
33
|
-
proof_of_concept: z.string().optional().describe("Proof of concept or reproduction steps"),
|
|
34
|
-
};
|
|
35
|
-
export function createManageFindingHandler(apiClient) {
|
|
36
|
-
return async (params) => {
|
|
37
|
-
try {
|
|
38
|
-
const { threat_model_id, action, finding_id } = params;
|
|
39
|
-
if (action === "update" && !finding_id) {
|
|
40
|
-
return {
|
|
41
|
-
content: [{ type: "text", text: "Error: finding_id is required for update" }],
|
|
42
|
-
isError: true,
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
let data;
|
|
46
|
-
if (action === "create") {
|
|
47
|
-
if (!params.title || !params.severity) {
|
|
48
|
-
return {
|
|
49
|
-
content: [{ type: "text", text: "Error: title and severity are required for create" }],
|
|
50
|
-
isError: true,
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
data = await apiClient.post(`/api/threat-models/${threat_model_id}/findings`, {
|
|
54
|
-
title: params.title,
|
|
55
|
-
description: params.description,
|
|
56
|
-
severity: params.severity,
|
|
57
|
-
status: params.status || "open",
|
|
58
|
-
category: params.category,
|
|
59
|
-
componentId: params.component_id,
|
|
60
|
-
attackScenarioId: params.attack_scenario_id,
|
|
61
|
-
cweId: params.cwe_id,
|
|
62
|
-
cvssScore: params.cvss_score,
|
|
63
|
-
remediation: params.remediation,
|
|
64
|
-
proofOfConcept: params.proof_of_concept,
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
const body = {};
|
|
69
|
-
if (params.title)
|
|
70
|
-
body.title = params.title;
|
|
71
|
-
if (params.description !== undefined)
|
|
72
|
-
body.description = params.description;
|
|
73
|
-
if (params.severity)
|
|
74
|
-
body.severity = params.severity;
|
|
75
|
-
if (params.status)
|
|
76
|
-
body.status = params.status;
|
|
77
|
-
if (params.category)
|
|
78
|
-
body.category = params.category;
|
|
79
|
-
if (params.component_id)
|
|
80
|
-
body.componentId = params.component_id;
|
|
81
|
-
if (params.attack_scenario_id)
|
|
82
|
-
body.attackScenarioId = params.attack_scenario_id;
|
|
83
|
-
if (params.cwe_id)
|
|
84
|
-
body.cweId = params.cwe_id;
|
|
85
|
-
if (params.cvss_score !== undefined)
|
|
86
|
-
body.cvssScore = params.cvss_score;
|
|
87
|
-
if (params.remediation !== undefined)
|
|
88
|
-
body.remediation = params.remediation;
|
|
89
|
-
if (params.proof_of_concept !== undefined)
|
|
90
|
-
body.proofOfConcept = params.proof_of_concept;
|
|
91
|
-
data = await apiClient.patch(`/api/threat-models/${threat_model_id}/findings/${finding_id}`, body);
|
|
92
|
-
}
|
|
93
|
-
return {
|
|
94
|
-
content: [{ type: "text", text: JSON.stringify(sanitizeResponse(data), null, 2) }],
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
catch (err) {
|
|
98
|
-
const message = err instanceof Error ? err.message : "Failed to manage finding";
|
|
99
|
-
return {
|
|
100
|
-
content: [{ type: "text", text: `Error: ${message}` }],
|
|
101
|
-
isError: true,
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
//# sourceMappingURL=manage-finding.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"manage-finding.js","sourceRoot":"","sources":["../../../src/tools/enterprise/manage-finding.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* zivis_manage_security_control — Create, update, or delete security controls
|
|
3
|
-
*
|
|
4
|
-
* Maps to: POST/PATCH/DELETE /api/threat-models/:id/security-controls
|
|
5
|
-
*/
|
|
6
|
-
import { z } from "zod";
|
|
7
|
-
import type { ApiClient } from "../../api-client.js";
|
|
8
|
-
export declare const MANAGE_SECURITY_CONTROL_NAME = "zivis_manage_security_control";
|
|
9
|
-
export declare const MANAGE_SECURITY_CONTROL_DESCRIPTION = "Create, update, or delete a security control in a threat model.\n\nSecurity controls are mitigations that reduce or eliminate threats (e.g., input validation, rate limiting, encryption at rest).\n\nActions:\n- create: Add a new control (requires name, control_type)\n- update: Modify an existing control (requires control_id)\n- delete: Remove a control (requires control_id)";
|
|
10
|
-
export declare const MANAGE_SECURITY_CONTROL_SCHEMA: {
|
|
11
|
-
threat_model_id: z.ZodString;
|
|
12
|
-
action: z.ZodEnum<{
|
|
13
|
-
create: "create";
|
|
14
|
-
update: "update";
|
|
15
|
-
delete: "delete";
|
|
16
|
-
}>;
|
|
17
|
-
control_id: z.ZodOptional<z.ZodString>;
|
|
18
|
-
name: z.ZodOptional<z.ZodString>;
|
|
19
|
-
control_type: z.ZodOptional<z.ZodEnum<{
|
|
20
|
-
preventive: "preventive";
|
|
21
|
-
detective: "detective";
|
|
22
|
-
responsive: "responsive";
|
|
23
|
-
}>>;
|
|
24
|
-
description: z.ZodOptional<z.ZodString>;
|
|
25
|
-
status: z.ZodOptional<z.ZodEnum<{
|
|
26
|
-
not_implemented: "not_implemented";
|
|
27
|
-
partial: "partial";
|
|
28
|
-
implemented: "implemented";
|
|
29
|
-
}>>;
|
|
30
|
-
effectiveness_rating: z.ZodOptional<z.ZodEnum<{
|
|
31
|
-
high: "high";
|
|
32
|
-
medium: "medium";
|
|
33
|
-
low: "low";
|
|
34
|
-
}>>;
|
|
35
|
-
component_id: z.ZodOptional<z.ZodString>;
|
|
36
|
-
};
|
|
37
|
-
export declare function createManageSecurityControlHandler(apiClient: ApiClient): (params: {
|
|
38
|
-
threat_model_id: string;
|
|
39
|
-
action: "create" | "update" | "delete";
|
|
40
|
-
control_id?: string;
|
|
41
|
-
name?: string;
|
|
42
|
-
control_type?: string;
|
|
43
|
-
description?: string;
|
|
44
|
-
status?: string;
|
|
45
|
-
effectiveness_rating?: string;
|
|
46
|
-
component_id?: string;
|
|
47
|
-
}) => Promise<{
|
|
48
|
-
content: {
|
|
49
|
-
type: "text";
|
|
50
|
-
text: string;
|
|
51
|
-
}[];
|
|
52
|
-
isError: boolean;
|
|
53
|
-
} | {
|
|
54
|
-
content: {
|
|
55
|
-
type: "text";
|
|
56
|
-
text: string;
|
|
57
|
-
}[];
|
|
58
|
-
isError?: undefined;
|
|
59
|
-
}>;
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* zivis_manage_security_control — Create, update, or delete security controls
|
|
3
|
-
*
|
|
4
|
-
* Maps to: POST/PATCH/DELETE /api/threat-models/:id/security-controls
|
|
5
|
-
*/
|
|
6
|
-
import { z } from "zod";
|
|
7
|
-
import { sanitizeResponse } from "../../sanitize.js";
|
|
8
|
-
export const MANAGE_SECURITY_CONTROL_NAME = "zivis_manage_security_control";
|
|
9
|
-
export const MANAGE_SECURITY_CONTROL_DESCRIPTION = `Create, update, or delete a security control in a threat model.
|
|
10
|
-
|
|
11
|
-
Security controls are mitigations that reduce or eliminate threats (e.g., input validation, rate limiting, encryption at rest).
|
|
12
|
-
|
|
13
|
-
Actions:
|
|
14
|
-
- create: Add a new control (requires name, control_type)
|
|
15
|
-
- update: Modify an existing control (requires control_id)
|
|
16
|
-
- delete: Remove a control (requires control_id)`;
|
|
17
|
-
export const MANAGE_SECURITY_CONTROL_SCHEMA = {
|
|
18
|
-
threat_model_id: z.string().describe("Threat model UUID (from zivis_list_threat_models, NOT a scan ID or agent ID)"),
|
|
19
|
-
action: z.enum(["create", "update", "delete"]).describe("CRUD action to perform"),
|
|
20
|
-
control_id: z.string().optional().describe("Control UUID (required for update/delete)"),
|
|
21
|
-
name: z.string().optional().describe("Control name (e.g., 'Input Validation', 'Rate Limiting')"),
|
|
22
|
-
control_type: z
|
|
23
|
-
.enum(["preventive", "detective", "responsive"])
|
|
24
|
-
.optional()
|
|
25
|
-
.describe("Type of security control"),
|
|
26
|
-
description: z.string().optional().describe("Description of how the control works"),
|
|
27
|
-
status: z
|
|
28
|
-
.enum(["not_implemented", "partial", "implemented"])
|
|
29
|
-
.optional()
|
|
30
|
-
.describe("Current implementation status"),
|
|
31
|
-
effectiveness_rating: z
|
|
32
|
-
.enum(["high", "medium", "low"])
|
|
33
|
-
.optional()
|
|
34
|
-
.describe("Estimated effectiveness of the control"),
|
|
35
|
-
component_id: z.string().optional().describe("Component UUID this control applies to"),
|
|
36
|
-
};
|
|
37
|
-
export function createManageSecurityControlHandler(apiClient) {
|
|
38
|
-
return async (params) => {
|
|
39
|
-
try {
|
|
40
|
-
const { threat_model_id, action, control_id } = params;
|
|
41
|
-
if ((action === "update" || action === "delete") && !control_id) {
|
|
42
|
-
return {
|
|
43
|
-
content: [{ type: "text", text: "Error: control_id is required for update/delete" }],
|
|
44
|
-
isError: true,
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
let data;
|
|
48
|
-
if (action === "create") {
|
|
49
|
-
if (!params.name || !params.control_type) {
|
|
50
|
-
return {
|
|
51
|
-
content: [{ type: "text", text: "Error: name and control_type are required for create" }],
|
|
52
|
-
isError: true,
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
data = await apiClient.post(`/api/threat-models/${threat_model_id}/security-controls`, {
|
|
56
|
-
name: params.name,
|
|
57
|
-
controlType: params.control_type,
|
|
58
|
-
description: params.description,
|
|
59
|
-
status: params.status,
|
|
60
|
-
effectivenessRating: params.effectiveness_rating,
|
|
61
|
-
componentId: params.component_id,
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
else if (action === "update") {
|
|
65
|
-
const body = {};
|
|
66
|
-
if (params.name)
|
|
67
|
-
body.name = params.name;
|
|
68
|
-
if (params.control_type)
|
|
69
|
-
body.controlType = params.control_type;
|
|
70
|
-
if (params.description !== undefined)
|
|
71
|
-
body.description = params.description;
|
|
72
|
-
if (params.status)
|
|
73
|
-
body.status = params.status;
|
|
74
|
-
if (params.effectiveness_rating)
|
|
75
|
-
body.effectivenessRating = params.effectiveness_rating;
|
|
76
|
-
if (params.component_id)
|
|
77
|
-
body.componentId = params.component_id;
|
|
78
|
-
data = await apiClient.patch(`/api/threat-models/${threat_model_id}/security-controls/${control_id}`, body);
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
data = await apiClient.del(`/api/threat-models/${threat_model_id}/security-controls/${control_id}`);
|
|
82
|
-
}
|
|
83
|
-
return {
|
|
84
|
-
content: [{ type: "text", text: JSON.stringify(sanitizeResponse(data), null, 2) }],
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
catch (err) {
|
|
88
|
-
const message = err instanceof Error ? err.message : "Failed to manage security control";
|
|
89
|
-
return {
|
|
90
|
-
content: [{ type: "text", text: `Error: ${message}` }],
|
|
91
|
-
isError: true,
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
//# sourceMappingURL=manage-security-control.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"manage-security-control.js","sourceRoot":"","sources":["../../../src/tools/enterprise/manage-security-control.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,CAAC,MAAM,4BAA4B,GAAG,+BAA+B,CAAC;AAE5E,MAAM,CAAC,MAAM,mCAAmC,GAAG;;;;;;;iDAOF,CAAC;AAElD,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8EAA8E,CAAC;IACpH,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACjF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IACvF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;IAChG,YAAY,EAAE,CAAC;SACZ,IAAI,CAAC,CAAC,YAAY,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;SAC/C,QAAQ,EAAE;SACV,QAAQ,CAAC,0BAA0B,CAAC;IACvC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IACnF,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,CAAC,iBAAiB,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;SACnD,QAAQ,EAAE;SACV,QAAQ,CAAC,+BAA+B,CAAC;IAC5C,oBAAoB,EAAE,CAAC;SACpB,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;SAC/B,QAAQ,EAAE;SACV,QAAQ,CAAC,wCAAwC,CAAC;IACrD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;CACvF,CAAC;AAEF,MAAM,UAAU,kCAAkC,CAAC,SAAoB;IACrE,OAAO,KAAK,EAAE,MAUb,EAAE,EAAE;QACH,IAAI,CAAC;YACH,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;YAEvD,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChE,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,iDAAiD,EAAE,CAAC;oBAC7F,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,IAAI,IAA6B,CAAC;YAElC,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACxB,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;oBACzC,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,sDAAsD,EAAE,CAAC;wBAClG,OAAO,EAAE,IAAI;qBACd,CAAC;gBACJ,CAAC;gBACD,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,CACzB,sBAAsB,eAAe,oBAAoB,EACzD;oBACE,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,WAAW,EAAE,MAAM,CAAC,YAAY;oBAChC,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,mBAAmB,EAAE,MAAM,CAAC,oBAAoB;oBAChD,WAAW,EAAE,MAAM,CAAC,YAAY;iBACjC,CACF,CAAC;YACJ,CAAC;iBAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,MAAM,IAAI,GAA4B,EAAE,CAAC;gBACzC,IAAI,MAAM,CAAC,IAAI;oBAAE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;gBACzC,IAAI,MAAM,CAAC,YAAY;oBAAE,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC;gBAChE,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS;oBAAE,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;gBAC5E,IAAI,MAAM,CAAC,MAAM;oBAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;gBAC/C,IAAI,MAAM,CAAC,oBAAoB;oBAAE,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,oBAAoB,CAAC;gBACxF,IAAI,MAAM,CAAC,YAAY;oBAAE,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC;gBAEhE,IAAI,GAAG,MAAM,SAAS,CAAC,KAAK,CAC1B,sBAAsB,eAAe,sBAAsB,UAAU,EAAE,EACvE,IAAI,CACL,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CACxB,sBAAsB,eAAe,sBAAsB,UAAU,EAAE,CACxE,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aAC5F,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,mCAAmC,CAAC;YACzF,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC;gBAC/D,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* zivis_manage_test_case — Create, update, or delete test cases in a threat model
|
|
3
|
-
*
|
|
4
|
-
* Maps to: POST/PATCH/DELETE /api/threat-models/:id/test-cases
|
|
5
|
-
*/
|
|
6
|
-
import { z } from "zod";
|
|
7
|
-
import type { ApiClient } from "../../api-client.js";
|
|
8
|
-
export declare const MANAGE_TEST_CASE_NAME = "zivis_manage_test_case";
|
|
9
|
-
export declare const MANAGE_TEST_CASE_DESCRIPTION = "Create, update, or delete a test case in a threat model.\n\nTest cases define specific security tests to validate whether vulnerabilities exist. They link to attack scenarios and can be automated or manual. Test case IDs follow the TC-X.Y format.\n\nActions:\n- create: Add a new test case (requires name, description, success_criteria)\n- update: Modify an existing test case (requires test_case_id) \u2014 use this to record test results\n- delete: Remove a test case (requires test_case_id)";
|
|
10
|
-
export declare const MANAGE_TEST_CASE_SCHEMA: {
|
|
11
|
-
threat_model_id: z.ZodString;
|
|
12
|
-
action: z.ZodEnum<{
|
|
13
|
-
create: "create";
|
|
14
|
-
update: "update";
|
|
15
|
-
delete: "delete";
|
|
16
|
-
}>;
|
|
17
|
-
test_case_id: z.ZodOptional<z.ZodString>;
|
|
18
|
-
name: z.ZodOptional<z.ZodString>;
|
|
19
|
-
description: z.ZodOptional<z.ZodString>;
|
|
20
|
-
attack_scenario_id: z.ZodOptional<z.ZodString>;
|
|
21
|
-
preconditions: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
22
|
-
test_steps: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
23
|
-
step: z.ZodNumber;
|
|
24
|
-
action: z.ZodString;
|
|
25
|
-
expected: z.ZodString;
|
|
26
|
-
actual: z.ZodOptional<z.ZodString>;
|
|
27
|
-
}, z.core.$strip>>>;
|
|
28
|
-
success_criteria: z.ZodOptional<z.ZodString>;
|
|
29
|
-
evidence_type: z.ZodOptional<z.ZodEnum<{
|
|
30
|
-
code_snippet: "code_snippet";
|
|
31
|
-
video: "video";
|
|
32
|
-
screenshot: "screenshot";
|
|
33
|
-
http_request: "http_request";
|
|
34
|
-
log_entry: "log_entry";
|
|
35
|
-
manual_notes: "manual_notes";
|
|
36
|
-
}>>;
|
|
37
|
-
result: z.ZodOptional<z.ZodEnum<{
|
|
38
|
-
partial: "partial";
|
|
39
|
-
not_tested: "not_tested";
|
|
40
|
-
pass: "pass";
|
|
41
|
-
fail: "fail";
|
|
42
|
-
blocked: "blocked";
|
|
43
|
-
}>>;
|
|
44
|
-
severity: z.ZodOptional<z.ZodEnum<{
|
|
45
|
-
critical: "critical";
|
|
46
|
-
high: "high";
|
|
47
|
-
medium: "medium";
|
|
48
|
-
low: "low";
|
|
49
|
-
info: "info";
|
|
50
|
-
}>>;
|
|
51
|
-
findings: z.ZodOptional<z.ZodString>;
|
|
52
|
-
automatable: z.ZodOptional<z.ZodBoolean>;
|
|
53
|
-
automation_tool: z.ZodOptional<z.ZodString>;
|
|
54
|
-
};
|
|
55
|
-
export declare function createManageTestCaseHandler(apiClient: ApiClient): (params: {
|
|
56
|
-
threat_model_id: string;
|
|
57
|
-
action: "create" | "update" | "delete";
|
|
58
|
-
test_case_id?: string;
|
|
59
|
-
name?: string;
|
|
60
|
-
description?: string;
|
|
61
|
-
attack_scenario_id?: string;
|
|
62
|
-
preconditions?: string[];
|
|
63
|
-
test_steps?: Array<{
|
|
64
|
-
step: number;
|
|
65
|
-
action: string;
|
|
66
|
-
expected: string;
|
|
67
|
-
actual?: string;
|
|
68
|
-
}>;
|
|
69
|
-
success_criteria?: string;
|
|
70
|
-
evidence_type?: string;
|
|
71
|
-
result?: string;
|
|
72
|
-
severity?: string;
|
|
73
|
-
findings?: string;
|
|
74
|
-
automatable?: boolean;
|
|
75
|
-
automation_tool?: string;
|
|
76
|
-
}) => Promise<{
|
|
77
|
-
content: {
|
|
78
|
-
type: "text";
|
|
79
|
-
text: string;
|
|
80
|
-
}[];
|
|
81
|
-
isError: boolean;
|
|
82
|
-
} | {
|
|
83
|
-
content: {
|
|
84
|
-
type: "text";
|
|
85
|
-
text: string;
|
|
86
|
-
}[];
|
|
87
|
-
isError?: undefined;
|
|
88
|
-
}>;
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* zivis_manage_test_case — Create, update, or delete test cases in a threat model
|
|
3
|
-
*
|
|
4
|
-
* Maps to: POST/PATCH/DELETE /api/threat-models/:id/test-cases
|
|
5
|
-
*/
|
|
6
|
-
import { z } from "zod";
|
|
7
|
-
import { sanitizeResponse } from "../../sanitize.js";
|
|
8
|
-
export const MANAGE_TEST_CASE_NAME = "zivis_manage_test_case";
|
|
9
|
-
export const MANAGE_TEST_CASE_DESCRIPTION = `Create, update, or delete a test case in a threat model.
|
|
10
|
-
|
|
11
|
-
Test cases define specific security tests to validate whether vulnerabilities exist. They link to attack scenarios and can be automated or manual. Test case IDs follow the TC-X.Y format.
|
|
12
|
-
|
|
13
|
-
Actions:
|
|
14
|
-
- create: Add a new test case (requires name, description, success_criteria)
|
|
15
|
-
- update: Modify an existing test case (requires test_case_id) — use this to record test results
|
|
16
|
-
- delete: Remove a test case (requires test_case_id)`;
|
|
17
|
-
export const MANAGE_TEST_CASE_SCHEMA = {
|
|
18
|
-
threat_model_id: z.string().describe("Threat model UUID (from zivis_list_threat_models, NOT a scan ID or agent ID)"),
|
|
19
|
-
action: z.enum(["create", "update", "delete"]).describe("CRUD action to perform"),
|
|
20
|
-
test_case_id: z.string().optional().describe("Test case UUID (required for update/delete)"),
|
|
21
|
-
name: z.string().optional().describe("Test case name (e.g., 'SQL Injection in Login')"),
|
|
22
|
-
description: z.string().optional().describe("Detailed description of what to test"),
|
|
23
|
-
attack_scenario_id: z.string().optional().describe("Attack scenario UUID this test validates"),
|
|
24
|
-
preconditions: z.array(z.string()).optional().describe("Prerequisites before running the test"),
|
|
25
|
-
test_steps: z.array(z.object({
|
|
26
|
-
step: z.number(),
|
|
27
|
-
action: z.string(),
|
|
28
|
-
expected: z.string(),
|
|
29
|
-
actual: z.string().optional(),
|
|
30
|
-
})).optional().describe("Ordered list of test steps with expected outcomes"),
|
|
31
|
-
success_criteria: z.string().optional().describe("What constitutes a successful test (finding a vulnerability)"),
|
|
32
|
-
evidence_type: z
|
|
33
|
-
.enum(["screenshot", "http_request", "code_snippet", "log_entry", "video", "manual_notes"])
|
|
34
|
-
.optional()
|
|
35
|
-
.describe("Type of evidence to collect"),
|
|
36
|
-
result: z
|
|
37
|
-
.enum(["not_tested", "pass", "fail", "partial", "blocked"])
|
|
38
|
-
.optional()
|
|
39
|
-
.describe("Test result (use update action to set this after testing)"),
|
|
40
|
-
severity: z.enum(["critical", "high", "medium", "low", "info"]).optional().describe("Severity if vulnerability confirmed"),
|
|
41
|
-
findings: z.string().optional().describe("Description of what was found during testing"),
|
|
42
|
-
automatable: z.boolean().optional().describe("Whether this test can be automated"),
|
|
43
|
-
automation_tool: z.string().optional().describe("Tool for automation (nuclei, burp, zap, custom)"),
|
|
44
|
-
};
|
|
45
|
-
export function createManageTestCaseHandler(apiClient) {
|
|
46
|
-
return async (params) => {
|
|
47
|
-
try {
|
|
48
|
-
const { threat_model_id, action, test_case_id } = params;
|
|
49
|
-
if ((action === "update" || action === "delete") && !test_case_id) {
|
|
50
|
-
return {
|
|
51
|
-
content: [{ type: "text", text: "Error: test_case_id is required for update/delete" }],
|
|
52
|
-
isError: true,
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
let data;
|
|
56
|
-
if (action === "create") {
|
|
57
|
-
if (!params.name || !params.description || !params.success_criteria) {
|
|
58
|
-
return {
|
|
59
|
-
content: [{ type: "text", text: "Error: name, description, and success_criteria are required for create" }],
|
|
60
|
-
isError: true,
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
data = await apiClient.post(`/api/threat-models/${threat_model_id}/test-cases`, {
|
|
64
|
-
name: params.name,
|
|
65
|
-
description: params.description,
|
|
66
|
-
attackScenarioId: params.attack_scenario_id,
|
|
67
|
-
preconditions: params.preconditions,
|
|
68
|
-
testSteps: params.test_steps,
|
|
69
|
-
successCriteria: params.success_criteria,
|
|
70
|
-
evidenceType: params.evidence_type || "other",
|
|
71
|
-
automatable: params.automatable,
|
|
72
|
-
automationTool: params.automation_tool,
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
else if (action === "update") {
|
|
76
|
-
const body = {};
|
|
77
|
-
if (params.name)
|
|
78
|
-
body.name = params.name;
|
|
79
|
-
if (params.description !== undefined)
|
|
80
|
-
body.description = params.description;
|
|
81
|
-
if (params.attack_scenario_id)
|
|
82
|
-
body.attackScenarioId = params.attack_scenario_id;
|
|
83
|
-
if (params.preconditions)
|
|
84
|
-
body.preconditions = params.preconditions;
|
|
85
|
-
if (params.test_steps)
|
|
86
|
-
body.testSteps = params.test_steps;
|
|
87
|
-
if (params.success_criteria)
|
|
88
|
-
body.successCriteria = params.success_criteria;
|
|
89
|
-
if (params.evidence_type)
|
|
90
|
-
body.evidenceType = params.evidence_type;
|
|
91
|
-
if (params.result)
|
|
92
|
-
body.result = params.result;
|
|
93
|
-
if (params.severity)
|
|
94
|
-
body.severity = params.severity;
|
|
95
|
-
if (params.findings !== undefined)
|
|
96
|
-
body.findings = params.findings;
|
|
97
|
-
if (params.automatable !== undefined)
|
|
98
|
-
body.automatable = params.automatable;
|
|
99
|
-
if (params.automation_tool !== undefined)
|
|
100
|
-
body.automationTool = params.automation_tool;
|
|
101
|
-
data = await apiClient.patch(`/api/threat-models/${threat_model_id}/test-cases/${test_case_id}`, body);
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
data = await apiClient.del(`/api/threat-models/${threat_model_id}/test-cases/${test_case_id}`);
|
|
105
|
-
}
|
|
106
|
-
return {
|
|
107
|
-
content: [{ type: "text", text: JSON.stringify(sanitizeResponse(data), null, 2) }],
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
catch (err) {
|
|
111
|
-
const message = err instanceof Error ? err.message : "Failed to manage test case";
|
|
112
|
-
return {
|
|
113
|
-
content: [{ type: "text", text: `Error: ${message}` }],
|
|
114
|
-
isError: true,
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
//# sourceMappingURL=manage-test-case.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"manage-test-case.js","sourceRoot":"","sources":["../../../src/tools/enterprise/manage-test-case.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* zivis_promote_finding_to_issue — Promote campaign findings to report issues
|
|
3
|
-
*
|
|
4
|
-
* Maps to: POST /api/reports/:reportId/issues/promote
|
|
5
|
-
* Also uses: POST /api/reports/for-campaign/:campaignId to auto-create report
|
|
6
|
-
*/
|
|
7
|
-
import { z } from "zod";
|
|
8
|
-
import type { ApiClient } from "../../api-client.js";
|
|
9
|
-
export declare const PROMOTE_FINDING_TO_ISSUE_NAME = "zivis_promote_finding_to_issue";
|
|
10
|
-
export declare const PROMOTE_FINDING_TO_ISSUE_DESCRIPTION = "Promote one or more campaign findings to a report issue for the remediation checklist.\n\nCreates a curated report issue from raw scan findings. Multiple findings can be grouped into a single issue (e.g., same root cause across different URLs). The issue gets its own title, description, and recommendation that can differ from the raw finding.\n\nIf no report exists for the campaign yet, one is automatically created.\n\nUse this after reviewing findings to build the official pen test report.";
|
|
11
|
-
export declare const PROMOTE_FINDING_TO_ISSUE_SCHEMA: {
|
|
12
|
-
campaign_id: z.ZodString;
|
|
13
|
-
finding_ids: z.ZodArray<z.ZodString>;
|
|
14
|
-
title: z.ZodOptional<z.ZodString>;
|
|
15
|
-
description: z.ZodOptional<z.ZodString>;
|
|
16
|
-
recommendation: z.ZodOptional<z.ZodString>;
|
|
17
|
-
};
|
|
18
|
-
export declare function createPromoteFindingToIssueHandler(apiClient: ApiClient): (params: {
|
|
19
|
-
campaign_id: string;
|
|
20
|
-
finding_ids: string[];
|
|
21
|
-
title?: string;
|
|
22
|
-
description?: string;
|
|
23
|
-
recommendation?: string;
|
|
24
|
-
}) => Promise<{
|
|
25
|
-
content: {
|
|
26
|
-
type: "text";
|
|
27
|
-
text: string;
|
|
28
|
-
}[];
|
|
29
|
-
isError: boolean;
|
|
30
|
-
} | {
|
|
31
|
-
content: {
|
|
32
|
-
type: "text";
|
|
33
|
-
text: string;
|
|
34
|
-
}[];
|
|
35
|
-
isError?: undefined;
|
|
36
|
-
}>;
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* zivis_promote_finding_to_issue — Promote campaign findings to report issues
|
|
3
|
-
*
|
|
4
|
-
* Maps to: POST /api/reports/:reportId/issues/promote
|
|
5
|
-
* Also uses: POST /api/reports/for-campaign/:campaignId to auto-create report
|
|
6
|
-
*/
|
|
7
|
-
import { z } from "zod";
|
|
8
|
-
import { sanitizeResponse } from "../../sanitize.js";
|
|
9
|
-
export const PROMOTE_FINDING_TO_ISSUE_NAME = "zivis_promote_finding_to_issue";
|
|
10
|
-
export const PROMOTE_FINDING_TO_ISSUE_DESCRIPTION = `Promote one or more campaign findings to a report issue for the remediation checklist.
|
|
11
|
-
|
|
12
|
-
Creates a curated report issue from raw scan findings. Multiple findings can be grouped into a single issue (e.g., same root cause across different URLs). The issue gets its own title, description, and recommendation that can differ from the raw finding.
|
|
13
|
-
|
|
14
|
-
If no report exists for the campaign yet, one is automatically created.
|
|
15
|
-
|
|
16
|
-
Use this after reviewing findings to build the official pen test report.`;
|
|
17
|
-
export const PROMOTE_FINDING_TO_ISSUE_SCHEMA = {
|
|
18
|
-
campaign_id: z.string().describe("Campaign UUID — used to find or create the campaign report"),
|
|
19
|
-
finding_ids: z.array(z.string()).min(1).describe("Array of CampaignFinding UUIDs to promote"),
|
|
20
|
-
title: z.string().optional().describe("Custom issue title (defaults to finding title)"),
|
|
21
|
-
description: z.string().optional().describe("Custom issue description"),
|
|
22
|
-
recommendation: z.string().optional().describe("Custom remediation recommendation"),
|
|
23
|
-
};
|
|
24
|
-
export function createPromoteFindingToIssueHandler(apiClient) {
|
|
25
|
-
return async (params) => {
|
|
26
|
-
try {
|
|
27
|
-
// Step 1: Get or create the report for this campaign
|
|
28
|
-
const reportData = await apiClient.post(`/api/reports/for-campaign/${params.campaign_id}`, {});
|
|
29
|
-
const reportId = reportData.reportId;
|
|
30
|
-
if (!reportId) {
|
|
31
|
-
return {
|
|
32
|
-
content: [{ type: "text", text: "Error: Could not get or create report for campaign" }],
|
|
33
|
-
isError: true,
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
// Step 2: Promote findings to an issue
|
|
37
|
-
const issue = await apiClient.post(`/api/reports/${reportId}/issues/promote`, {
|
|
38
|
-
campaignFindingIds: params.finding_ids,
|
|
39
|
-
title: params.title,
|
|
40
|
-
description: params.description,
|
|
41
|
-
recommendation: params.recommendation,
|
|
42
|
-
});
|
|
43
|
-
const result = sanitizeResponse({
|
|
44
|
-
issue,
|
|
45
|
-
reportId,
|
|
46
|
-
nextSteps: [
|
|
47
|
-
"Issue added to remediation checklist.",
|
|
48
|
-
"Use zivis_list_report_issues to see all issues.",
|
|
49
|
-
"Use zivis_update_report_issue to change status (open → in_progress → done).",
|
|
50
|
-
],
|
|
51
|
-
});
|
|
52
|
-
return {
|
|
53
|
-
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
catch (err) {
|
|
57
|
-
const message = err instanceof Error ? err.message : "Failed to promote finding to issue";
|
|
58
|
-
return {
|
|
59
|
-
content: [{ type: "text", text: `Error: ${message}` }],
|
|
60
|
-
isError: true,
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
//# sourceMappingURL=promote-finding-to-issue.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"promote-finding-to-issue.js","sourceRoot":"","sources":["../../../src/tools/enterprise/promote-finding-to-issue.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,CAAC,MAAM,6BAA6B,GAAG,gCAAgC,CAAC;AAE9E,MAAM,CAAC,MAAM,oCAAoC,GAAG;;;;;;yEAMqB,CAAC;AAE1E,MAAM,CAAC,MAAM,+BAA+B,GAAG;IAC7C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;IAC9F,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IAC7F,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;IACvF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACvE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;CACpF,CAAC;AAEF,MAAM,UAAU,kCAAkC,CAAC,SAAoB;IACrE,OAAO,KAAK,EAAE,MAMb,EAAE,EAAE;QACH,IAAI,CAAC;YACH,qDAAqD;YACrD,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,IAAI,CACrC,6BAA6B,MAAM,CAAC,WAAW,EAAE,EACjD,EAAE,CACH,CAAC;YAEF,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;YACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,oDAAoD,EAAE,CAAC;oBAChG,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,uCAAuC;YACvC,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,IAAI,CAChC,gBAAgB,QAAQ,iBAAiB,EACzC;gBACE,kBAAkB,EAAE,MAAM,CAAC,WAAW;gBACtC,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,cAAc,EAAE,MAAM,CAAC,cAAc;aACtC,CACF,CAAC;YAEF,MAAM,MAAM,GAAG,gBAAgB,CAAC;gBAC9B,KAAK;gBACL,QAAQ;gBACR,SAAS,EAAE;oBACT,uCAAuC;oBACvC,iDAAiD;oBACjD,6EAA6E;iBAC9E;aACF,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aAC5E,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,oCAAoC,CAAC;YAC1F,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC;gBAC/D,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* zivis_publish_report_version — Publish a report version and optionally export PDF
|
|
3
|
-
*
|
|
4
|
-
* Maps to: POST /api/reports/:reportId/publish
|
|
5
|
-
* + POST /api/reports/:reportId/export (optional)
|
|
6
|
-
*/
|
|
7
|
-
import { z } from "zod";
|
|
8
|
-
import type { ApiClient } from "../../api-client.js";
|
|
9
|
-
export declare const PUBLISH_REPORT_VERSION_NAME = "zivis_publish_report_version";
|
|
10
|
-
export declare const PUBLISH_REPORT_VERSION_DESCRIPTION = "Publish a new version of the campaign report and optionally export as PDF.\n\nPublishing creates an immutable snapshot of the current report state (all sections, issues, remediation status). Each version gets a version number and optional changelog.\n\nUse this when the report is ready for delivery or when you want to checkpoint progress.\n\nWorkflow: Write sections \u2192 promote findings \u2192 publish version \u2192 export PDF.";
|
|
11
|
-
export declare const PUBLISH_REPORT_VERSION_SCHEMA: {
|
|
12
|
-
campaign_id: z.ZodOptional<z.ZodString>;
|
|
13
|
-
report_id: z.ZodOptional<z.ZodString>;
|
|
14
|
-
changelog: z.ZodOptional<z.ZodString>;
|
|
15
|
-
export_pdf: z.ZodDefault<z.ZodBoolean>;
|
|
16
|
-
};
|
|
17
|
-
export declare function createPublishReportVersionHandler(apiClient: ApiClient): (params: {
|
|
18
|
-
campaign_id?: string;
|
|
19
|
-
report_id?: string;
|
|
20
|
-
changelog?: string;
|
|
21
|
-
export_pdf?: boolean;
|
|
22
|
-
}) => Promise<{
|
|
23
|
-
content: {
|
|
24
|
-
type: "text";
|
|
25
|
-
text: string;
|
|
26
|
-
}[];
|
|
27
|
-
isError: boolean;
|
|
28
|
-
} | {
|
|
29
|
-
content: {
|
|
30
|
-
type: "text";
|
|
31
|
-
text: string;
|
|
32
|
-
}[];
|
|
33
|
-
isError?: undefined;
|
|
34
|
-
}>;
|