@zivis/mcp 0.1.0-alpha.21 → 0.1.0-alpha.22

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.
Files changed (175) hide show
  1. package/dist/pattern-pack/index.d.ts +133 -0
  2. package/dist/pattern-pack/index.js +212 -0
  3. package/dist/pattern-pack/index.js.map +1 -0
  4. package/dist/pattern-packs/zivis-public-0.1.0/capsules/agents/privilege-separation.yaml +228 -0
  5. package/dist/pattern-packs/zivis-public-0.1.0/capsules/prompting/self-consistency-no-isolation.yaml +240 -0
  6. package/dist/pattern-packs/zivis-public-0.1.0/capsules/security/late-org-filter.yaml +270 -0
  7. package/dist/pattern-packs/zivis-public-0.1.0/manifest.json +68 -0
  8. package/dist/pattern-packs/zivis-public-0.1.0/prompts/agents/privilege-separation/identify.md +54 -0
  9. package/dist/pattern-packs/zivis-public-0.1.0/prompts/prompting/self-consistency-no-isolation/identify.md +60 -0
  10. package/dist/pattern-packs/zivis-public-0.1.0/prompts/security/late-org-filter/identify.md +78 -0
  11. package/dist/prompts/index.d.ts +1 -1
  12. package/dist/prompts/index.js +1 -7
  13. package/dist/prompts/index.js.map +1 -1
  14. package/dist/server.js +26 -166
  15. package/dist/server.js.map +1 -1
  16. package/dist/tools/enterprise/get-threat-model-artifact.d.ts +30 -0
  17. package/dist/tools/enterprise/get-threat-model-artifact.js +80 -0
  18. package/dist/tools/enterprise/get-threat-model-artifact.js.map +1 -0
  19. package/dist/tools/enterprise/get-threat-model.d.ts +1 -1
  20. package/dist/tools/enterprise/get-threat-model.js +59 -11
  21. package/dist/tools/enterprise/get-threat-model.js.map +1 -1
  22. package/dist/tools/enterprise/list-threat-model-artifacts.d.ts +67 -0
  23. package/dist/tools/enterprise/list-threat-model-artifacts.js +121 -0
  24. package/dist/tools/enterprise/list-threat-model-artifacts.js.map +1 -0
  25. package/dist/tools/enterprise/manage-data-asset.d.ts +1 -1
  26. package/dist/tools/enterprise/manage-data-flow.d.ts +1 -1
  27. package/dist/tools/enterprise/manage-test-case.d.ts +1 -1
  28. package/dist/tools/inspect.d.ts +31 -0
  29. package/dist/tools/inspect.js +100 -0
  30. package/dist/tools/inspect.js.map +1 -0
  31. package/dist/tools/manage-application.d.ts +1 -1
  32. package/dist/tools/security-review.js +67 -50
  33. package/dist/tools/security-review.js.map +1 -1
  34. package/dist/tools/threat-get-capsule.d.ts +25 -0
  35. package/dist/tools/threat-get-capsule.js +64 -0
  36. package/dist/tools/threat-get-capsule.js.map +1 -0
  37. package/dist/tools/threat-get-inference-prompt.d.ts +32 -0
  38. package/dist/tools/threat-get-inference-prompt.js +91 -0
  39. package/dist/tools/threat-get-inference-prompt.js.map +1 -0
  40. package/dist/tools/threat-list-relevant-capsules.d.ts +30 -0
  41. package/dist/tools/threat-list-relevant-capsules.js +176 -0
  42. package/dist/tools/threat-list-relevant-capsules.js.map +1 -0
  43. package/package.json +10 -3
  44. package/dist/prompts/prep-for-launch.d.ts +0 -9
  45. package/dist/prompts/prep-for-launch.js +0 -62
  46. package/dist/prompts/prep-for-launch.js.map +0 -1
  47. package/dist/prompts/secure-my-app.d.ts +0 -9
  48. package/dist/prompts/secure-my-app.js +0 -70
  49. package/dist/prompts/secure-my-app.js.map +0 -1
  50. package/dist/prompts/weekly-check.d.ts +0 -9
  51. package/dist/prompts/weekly-check.js +0 -48
  52. package/dist/prompts/weekly-check.js.map +0 -1
  53. package/dist/tools/enterprise/capture-evidence.d.ts +0 -54
  54. package/dist/tools/enterprise/capture-evidence.js +0 -72
  55. package/dist/tools/enterprise/capture-evidence.js.map +0 -1
  56. package/dist/tools/enterprise/create-report-ticket.d.ts +0 -34
  57. package/dist/tools/enterprise/create-report-ticket.js +0 -44
  58. package/dist/tools/enterprise/create-report-ticket.js.map +0 -1
  59. package/dist/tools/enterprise/end-pentest-session.d.ts +0 -33
  60. package/dist/tools/enterprise/end-pentest-session.js +0 -42
  61. package/dist/tools/enterprise/end-pentest-session.js.map +0 -1
  62. package/dist/tools/enterprise/generate-report.d.ts +0 -55
  63. package/dist/tools/enterprise/generate-report.js +0 -111
  64. package/dist/tools/enterprise/generate-report.js.map +0 -1
  65. package/dist/tools/enterprise/get-campaign.d.ts +0 -27
  66. package/dist/tools/enterprise/get-campaign.js +0 -31
  67. package/dist/tools/enterprise/get-campaign.js.map +0 -1
  68. package/dist/tools/enterprise/get-report-status.d.ts +0 -27
  69. package/dist/tools/enterprise/get-report-status.js +0 -38
  70. package/dist/tools/enterprise/get-report-status.js.map +0 -1
  71. package/dist/tools/enterprise/list-agents.d.ts +0 -42
  72. package/dist/tools/enterprise/list-agents.js +0 -95
  73. package/dist/tools/enterprise/list-agents.js.map +0 -1
  74. package/dist/tools/enterprise/list-campaigns.d.ts +0 -37
  75. package/dist/tools/enterprise/list-campaigns.js +0 -60
  76. package/dist/tools/enterprise/list-campaigns.js.map +0 -1
  77. package/dist/tools/enterprise/list-report-issues.d.ts +0 -36
  78. package/dist/tools/enterprise/list-report-issues.js +0 -50
  79. package/dist/tools/enterprise/list-report-issues.js.map +0 -1
  80. package/dist/tools/enterprise/manage-campaign-agent-instance.d.ts +0 -42
  81. package/dist/tools/enterprise/manage-campaign-agent-instance.js +0 -68
  82. package/dist/tools/enterprise/manage-campaign-agent-instance.js.map +0 -1
  83. package/dist/tools/enterprise/manage-campaign-target.d.ts +0 -44
  84. package/dist/tools/enterprise/manage-campaign-target.js +0 -70
  85. package/dist/tools/enterprise/manage-campaign-target.js.map +0 -1
  86. package/dist/tools/enterprise/manage-campaign.d.ts +0 -62
  87. package/dist/tools/enterprise/manage-campaign.js +0 -114
  88. package/dist/tools/enterprise/manage-campaign.js.map +0 -1
  89. package/dist/tools/enterprise/manage-finding.d.ts +0 -69
  90. package/dist/tools/enterprise/manage-finding.js +0 -106
  91. package/dist/tools/enterprise/manage-finding.js.map +0 -1
  92. package/dist/tools/enterprise/promote-finding-to-issue.d.ts +0 -36
  93. package/dist/tools/enterprise/promote-finding-to-issue.js +0 -65
  94. package/dist/tools/enterprise/promote-finding-to-issue.js.map +0 -1
  95. package/dist/tools/enterprise/publish-report-version.d.ts +0 -34
  96. package/dist/tools/enterprise/publish-report-version.js +0 -75
  97. package/dist/tools/enterprise/publish-report-version.js.map +0 -1
  98. package/dist/tools/enterprise/publish-test-to-library.d.ts +0 -31
  99. package/dist/tools/enterprise/publish-test-to-library.js +0 -40
  100. package/dist/tools/enterprise/publish-test-to-library.js.map +0 -1
  101. package/dist/tools/enterprise/record-test-result.d.ts +0 -67
  102. package/dist/tools/enterprise/record-test-result.js +0 -75
  103. package/dist/tools/enterprise/record-test-result.js.map +0 -1
  104. package/dist/tools/enterprise/start-pentest-session.d.ts +0 -35
  105. package/dist/tools/enterprise/start-pentest-session.js +0 -50
  106. package/dist/tools/enterprise/start-pentest-session.js.map +0 -1
  107. package/dist/tools/enterprise/sync-report-section.d.ts +0 -41
  108. package/dist/tools/enterprise/sync-report-section.js +0 -79
  109. package/dist/tools/enterprise/sync-report-section.js.map +0 -1
  110. package/dist/tools/enterprise/update-report-issue.d.ts +0 -55
  111. package/dist/tools/enterprise/update-report-issue.js +0 -69
  112. package/dist/tools/enterprise/update-report-issue.js.map +0 -1
  113. package/dist/tools/get-agent-test-results.d.ts +0 -41
  114. package/dist/tools/get-agent-test-results.js +0 -86
  115. package/dist/tools/get-agent-test-results.js.map +0 -1
  116. package/dist/tools/get-application-auth-config.d.ts +0 -27
  117. package/dist/tools/get-application-auth-config.js +0 -44
  118. package/dist/tools/get-application-auth-config.js.map +0 -1
  119. package/dist/tools/get-artifact-content.d.ts +0 -29
  120. package/dist/tools/get-artifact-content.js +0 -86
  121. package/dist/tools/get-artifact-content.js.map +0 -1
  122. package/dist/tools/get-finding-details.d.ts +0 -22
  123. package/dist/tools/get-finding-details.js +0 -61
  124. package/dist/tools/get-finding-details.js.map +0 -1
  125. package/dist/tools/get-findings.d.ts +0 -51
  126. package/dist/tools/get-findings.js +0 -124
  127. package/dist/tools/get-findings.js.map +0 -1
  128. package/dist/tools/get-recon-scan.d.ts +0 -27
  129. package/dist/tools/get-recon-scan.js +0 -46
  130. package/dist/tools/get-recon-scan.js.map +0 -1
  131. package/dist/tools/get-scan-output.d.ts +0 -27
  132. package/dist/tools/get-scan-output.js +0 -64
  133. package/dist/tools/get-scan-output.js.map +0 -1
  134. package/dist/tools/get-scenario-details.d.ts +0 -27
  135. package/dist/tools/get-scenario-details.js +0 -46
  136. package/dist/tools/get-scenario-details.js.map +0 -1
  137. package/dist/tools/get-test-case-results.d.ts +0 -37
  138. package/dist/tools/get-test-case-results.js +0 -66
  139. package/dist/tools/get-test-case-results.js.map +0 -1
  140. package/dist/tools/get-test-details.d.ts +0 -29
  141. package/dist/tools/get-test-details.js +0 -49
  142. package/dist/tools/get-test-details.js.map +0 -1
  143. package/dist/tools/list-agent-test-cases.d.ts +0 -41
  144. package/dist/tools/list-agent-test-cases.js +0 -73
  145. package/dist/tools/list-agent-test-cases.js.map +0 -1
  146. package/dist/tools/list-recon-scans.d.ts +0 -36
  147. package/dist/tools/list-recon-scans.js +0 -74
  148. package/dist/tools/list-recon-scans.js.map +0 -1
  149. package/dist/tools/list-scan-artifacts.d.ts +0 -41
  150. package/dist/tools/list-scan-artifacts.js +0 -63
  151. package/dist/tools/list-scan-artifacts.js.map +0 -1
  152. package/dist/tools/list-scans.d.ts +0 -38
  153. package/dist/tools/list-scans.js +0 -125
  154. package/dist/tools/list-scans.js.map +0 -1
  155. package/dist/tools/list-test-library.d.ts +0 -44
  156. package/dist/tools/list-test-library.js +0 -83
  157. package/dist/tools/list-test-library.js.map +0 -1
  158. package/dist/tools/list-test-scenarios.d.ts +0 -25
  159. package/dist/tools/list-test-scenarios.js +0 -94
  160. package/dist/tools/list-test-scenarios.js.map +0 -1
  161. package/dist/tools/local-scan.d.ts +0 -40
  162. package/dist/tools/local-scan.js +0 -261
  163. package/dist/tools/local-scan.js.map +0 -1
  164. package/dist/tools/run-test-scenario.d.ts +0 -37
  165. package/dist/tools/run-test-scenario.js +0 -70
  166. package/dist/tools/run-test-scenario.js.map +0 -1
  167. package/dist/tools/scan-pr.d.ts +0 -27
  168. package/dist/tools/scan-pr.js +0 -51
  169. package/dist/tools/scan-pr.js.map +0 -1
  170. package/dist/tools/setup-red-team-target.d.ts +0 -73
  171. package/dist/tools/setup-red-team-target.js +0 -461
  172. package/dist/tools/setup-red-team-target.js.map +0 -1
  173. package/dist/tools/triage-finding.d.ts +0 -41
  174. package/dist/tools/triage-finding.js +0 -125
  175. package/dist/tools/triage-finding.js.map +0 -1
@@ -1,125 +0,0 @@
1
- /**
2
- * zivis_triage_finding — Send triage decision and reasoning back to ZIVIS
3
- *
4
- * Maps to: PATCH /api/findings/unified/:id
5
- *
6
- * This is the "write-back" that makes the platform smarter. The AI's
7
- * triage decisions and reasoning are recorded as audit notes (via the
8
- * `note` field), tagged as AI-generated so humans can distinguish them
9
- * in the dashboard.
10
- */
11
- import { z } from "zod";
12
- import { withNextSteps } from "../lib/next-steps.js";
13
- export const TRIAGE_FINDING_NAME = "zivis_triage_finding";
14
- export const TRIAGE_FINDING_DESCRIPTION = `Mark a security issue as fixed, dismissed, or accepted. Use this after the user reviews a finding and decides what to do with it.
15
-
16
- Three outcomes:
17
- - "resolve" — the bug is fixed. ZIVIS logs the fix and generates remediation documentation.
18
- - "dismiss" — the finding is wrong (false positive) or doesn't apply to this project.
19
- - "accept_risk" — the team knows about the issue and has decided to live with it.
20
-
21
- A reasoning field is REQUIRED — this creates an audit trail. Explain briefly why the action is appropriate (e.g. "Fixed by adding input validation in auth.ts" or "Not applicable — we don't accept user HTML input").
22
-
23
- After resolving a finding, ZIVIS will provide markdown to append to .zivis/remediations.md as an audit trail.
24
-
25
- Triage one finding at a time. Use finding_id from zivis_get_findings or zivis_get_finding_details.`;
26
- export const TRIAGE_FINDING_SCHEMA = {
27
- finding_id: z.string().describe("The finding ID to triage"),
28
- action: z
29
- .enum(["resolve", "dismiss", "accept_risk"])
30
- .describe("Triage action: resolve (fixed), dismiss (FP/NA), or accept_risk"),
31
- reasoning: z
32
- .string()
33
- .min(10)
34
- .describe("Explanation of why this action is appropriate. Must be at least 10 characters. This is logged as an audit note."),
35
- dismiss_reason: z
36
- .enum(["false_positive", "not_applicable", "wont_fix", "duplicate"])
37
- .optional()
38
- .describe("Required when action is 'dismiss'. Reason for dismissal."),
39
- };
40
- export function createTriageFindingHandler(apiClient) {
41
- return async (params) => {
42
- // Validate dismiss_reason is provided when dismissing
43
- if (params.action === "dismiss" && !params.dismiss_reason) {
44
- return {
45
- content: [
46
- {
47
- type: "text",
48
- text: "Error: dismiss_reason is required when action is 'dismiss'",
49
- },
50
- ],
51
- isError: true,
52
- };
53
- }
54
- try {
55
- // Map action to finding status
56
- const statusMap = {
57
- resolve: "resolved",
58
- dismiss: "dismissed",
59
- accept_risk: "accepted",
60
- };
61
- // Update finding status with note for audit trail
62
- // The unified findings API logs history entries automatically when note is provided
63
- const patchBody = {
64
- status: statusMap[params.action],
65
- note: `[MCP AI Triage] ${params.reasoning}`,
66
- };
67
- if (params.dismiss_reason) {
68
- patchBody.dismissReason = params.dismiss_reason;
69
- }
70
- await apiClient.patch(`/api/findings/unified/${params.finding_id}`, patchBody);
71
- const response = {
72
- success: true,
73
- findingId: params.finding_id,
74
- newStatus: statusMap[params.action],
75
- message: `Finding ${params.finding_id} marked as ${statusMap[params.action]}. Reasoning logged as audit note.`,
76
- };
77
- // Generate documentation markdown for resolved findings
78
- const today = new Date().toISOString().split("T")[0];
79
- const documentation = params.action === "resolve"
80
- ? {
81
- shouldDocument: true,
82
- filePath: ".zivis/remediations.md",
83
- markdownToAppend: `
84
- ## ${today} — ${params.finding_id}
85
-
86
- **Status:** Resolved
87
- **Reasoning:** ${params.reasoning}
88
-
89
- ---
90
- `,
91
- instructions: "Append the markdownToAppend to .zivis/remediations.md (create directory and file if needed). Add finding title, severity, vulnerable code description, and files changed above the reasoning.",
92
- }
93
- : { shouldDocument: false };
94
- return withNextSteps({ ...response, documentation }, [
95
- {
96
- id: "view_remaining_findings",
97
- label: "Review the remaining open findings",
98
- tool: "zivis_get_findings",
99
- args_hint: { status: "open" },
100
- why: "See what's left to triage — keep working through the queue to clear the backlog.",
101
- requires_tier: "free",
102
- },
103
- ...(params.action === "resolve"
104
- ? [
105
- {
106
- id: "run_new_scan",
107
- label: "Run a new scan to verify the fix held",
108
- tool: "zivis_list_test_scenarios",
109
- why: "Confirm the vulnerability is gone by re-testing after your code change.",
110
- requires_tier: "free",
111
- },
112
- ]
113
- : []),
114
- ], `Finding ${params.finding_id} marked as ${statusMap[params.action]}.`);
115
- }
116
- catch (err) {
117
- const message = err instanceof Error ? err.message : "Failed to triage finding";
118
- return {
119
- content: [{ type: "text", text: `Error: ${message}` }],
120
- isError: true,
121
- };
122
- }
123
- };
124
- }
125
- //# sourceMappingURL=triage-finding.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"triage-finding.js","sourceRoot":"","sources":["../../src/tools/triage-finding.ts"],"names":[],"mappings":"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"}