@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.
Files changed (253) hide show
  1. package/dist/api-client.d.ts +42 -0
  2. package/dist/api-client.js +145 -0
  3. package/dist/api-client.js.map +1 -0
  4. package/dist/auth/index.d.ts +29 -0
  5. package/dist/auth/index.js +73 -0
  6. package/dist/auth/index.js.map +1 -0
  7. package/dist/auth/jwt.d.ts +24 -0
  8. package/dist/auth/jwt.js +25 -0
  9. package/dist/auth/jwt.js.map +1 -0
  10. package/dist/auth/keychain.d.ts +34 -0
  11. package/dist/auth/keychain.js +272 -0
  12. package/dist/auth/keychain.js.map +1 -0
  13. package/dist/auth/oauth.d.ts +38 -0
  14. package/dist/auth/oauth.js +241 -0
  15. package/dist/auth/oauth.js.map +1 -0
  16. package/dist/auth/sessions.d.ts +28 -0
  17. package/dist/auth/sessions.js +69 -0
  18. package/dist/auth/sessions.js.map +1 -0
  19. package/dist/auth/token-refresh.d.ts +24 -0
  20. package/dist/auth/token-refresh.js +91 -0
  21. package/dist/auth/token-refresh.js.map +1 -0
  22. package/dist/cli.d.ts +23 -0
  23. package/dist/cli.js +962 -0
  24. package/dist/cli.js.map +1 -0
  25. package/dist/index.d.ts +8 -0
  26. package/dist/index.js +15 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/project-binding.d.ts +25 -0
  29. package/dist/project-binding.js +67 -0
  30. package/dist/project-binding.js.map +1 -0
  31. package/dist/resolve-application-id.d.ts +12 -0
  32. package/dist/resolve-application-id.js +21 -0
  33. package/dist/resolve-application-id.js.map +1 -0
  34. package/dist/sanitize.d.ts +23 -0
  35. package/dist/sanitize.js +125 -0
  36. package/dist/sanitize.js.map +1 -0
  37. package/dist/server.d.ts +14 -0
  38. package/dist/server.js +447 -0
  39. package/dist/server.js.map +1 -0
  40. package/dist/tools/check-project.d.ts +32 -0
  41. package/dist/tools/check-project.js +180 -0
  42. package/dist/tools/check-project.js.map +1 -0
  43. package/dist/tools/check-repo-trust.d.ts +33 -0
  44. package/dist/tools/check-repo-trust.js +212 -0
  45. package/dist/tools/check-repo-trust.js.map +1 -0
  46. package/dist/tools/create-diagram.d.ts +114 -0
  47. package/dist/tools/create-diagram.js +176 -0
  48. package/dist/tools/create-diagram.js.map +1 -0
  49. package/dist/tools/create-document.d.ts +28 -0
  50. package/dist/tools/create-document.js +53 -0
  51. package/dist/tools/create-document.js.map +1 -0
  52. package/dist/tools/discover-local-infra.d.ts +24 -0
  53. package/dist/tools/discover-local-infra.js +763 -0
  54. package/dist/tools/discover-local-infra.js.map +1 -0
  55. package/dist/tools/enterprise/capture-evidence.d.ts +54 -0
  56. package/dist/tools/enterprise/capture-evidence.js +72 -0
  57. package/dist/tools/enterprise/capture-evidence.js.map +1 -0
  58. package/dist/tools/enterprise/create-report-ticket.d.ts +34 -0
  59. package/dist/tools/enterprise/create-report-ticket.js +44 -0
  60. package/dist/tools/enterprise/create-report-ticket.js.map +1 -0
  61. package/dist/tools/enterprise/end-pentest-session.d.ts +33 -0
  62. package/dist/tools/enterprise/end-pentest-session.js +42 -0
  63. package/dist/tools/enterprise/end-pentest-session.js.map +1 -0
  64. package/dist/tools/enterprise/generate-report.d.ts +55 -0
  65. package/dist/tools/enterprise/generate-report.js +111 -0
  66. package/dist/tools/enterprise/generate-report.js.map +1 -0
  67. package/dist/tools/enterprise/get-org-zat.d.ts +27 -0
  68. package/dist/tools/enterprise/get-org-zat.js +62 -0
  69. package/dist/tools/enterprise/get-org-zat.js.map +1 -0
  70. package/dist/tools/enterprise/get-report-status.d.ts +27 -0
  71. package/dist/tools/enterprise/get-report-status.js +38 -0
  72. package/dist/tools/enterprise/get-report-status.js.map +1 -0
  73. package/dist/tools/enterprise/get-threat-model.d.ts +29 -0
  74. package/dist/tools/enterprise/get-threat-model.js +83 -0
  75. package/dist/tools/enterprise/get-threat-model.js.map +1 -0
  76. package/dist/tools/enterprise/list-agents.d.ts +42 -0
  77. package/dist/tools/enterprise/list-agents.js +95 -0
  78. package/dist/tools/enterprise/list-agents.js.map +1 -0
  79. package/dist/tools/enterprise/list-report-issues.d.ts +36 -0
  80. package/dist/tools/enterprise/list-report-issues.js +50 -0
  81. package/dist/tools/enterprise/list-report-issues.js.map +1 -0
  82. package/dist/tools/enterprise/list-threat-models.d.ts +36 -0
  83. package/dist/tools/enterprise/list-threat-models.js +82 -0
  84. package/dist/tools/enterprise/list-threat-models.js.map +1 -0
  85. package/dist/tools/enterprise/manage-actor.d.ts +58 -0
  86. package/dist/tools/enterprise/manage-actor.js +99 -0
  87. package/dist/tools/enterprise/manage-actor.js.map +1 -0
  88. package/dist/tools/enterprise/manage-attack-scenario.d.ts +70 -0
  89. package/dist/tools/enterprise/manage-attack-scenario.js +89 -0
  90. package/dist/tools/enterprise/manage-attack-scenario.js.map +1 -0
  91. package/dist/tools/enterprise/manage-component.d.ts +58 -0
  92. package/dist/tools/enterprise/manage-component.js +90 -0
  93. package/dist/tools/enterprise/manage-component.js.map +1 -0
  94. package/dist/tools/enterprise/manage-data-asset.d.ts +53 -0
  95. package/dist/tools/enterprise/manage-data-asset.js +90 -0
  96. package/dist/tools/enterprise/manage-data-asset.js.map +1 -0
  97. package/dist/tools/enterprise/manage-data-flow.d.ts +57 -0
  98. package/dist/tools/enterprise/manage-data-flow.js +98 -0
  99. package/dist/tools/enterprise/manage-data-flow.js.map +1 -0
  100. package/dist/tools/enterprise/manage-finding.d.ts +69 -0
  101. package/dist/tools/enterprise/manage-finding.js +106 -0
  102. package/dist/tools/enterprise/manage-finding.js.map +1 -0
  103. package/dist/tools/enterprise/manage-security-control.d.ts +59 -0
  104. package/dist/tools/enterprise/manage-security-control.js +96 -0
  105. package/dist/tools/enterprise/manage-security-control.js.map +1 -0
  106. package/dist/tools/enterprise/manage-test-case.d.ts +88 -0
  107. package/dist/tools/enterprise/manage-test-case.js +119 -0
  108. package/dist/tools/enterprise/manage-test-case.js.map +1 -0
  109. package/dist/tools/enterprise/promote-finding-to-issue.d.ts +36 -0
  110. package/dist/tools/enterprise/promote-finding-to-issue.js +65 -0
  111. package/dist/tools/enterprise/promote-finding-to-issue.js.map +1 -0
  112. package/dist/tools/enterprise/publish-report-version.d.ts +34 -0
  113. package/dist/tools/enterprise/publish-report-version.js +75 -0
  114. package/dist/tools/enterprise/publish-report-version.js.map +1 -0
  115. package/dist/tools/enterprise/publish-test-to-library.d.ts +31 -0
  116. package/dist/tools/enterprise/publish-test-to-library.js +40 -0
  117. package/dist/tools/enterprise/publish-test-to-library.js.map +1 -0
  118. package/dist/tools/enterprise/record-test-result.d.ts +67 -0
  119. package/dist/tools/enterprise/record-test-result.js +75 -0
  120. package/dist/tools/enterprise/record-test-result.js.map +1 -0
  121. package/dist/tools/enterprise/start-pentest-session.d.ts +35 -0
  122. package/dist/tools/enterprise/start-pentest-session.js +50 -0
  123. package/dist/tools/enterprise/start-pentest-session.js.map +1 -0
  124. package/dist/tools/enterprise/sync-report-section.d.ts +41 -0
  125. package/dist/tools/enterprise/sync-report-section.js +79 -0
  126. package/dist/tools/enterprise/sync-report-section.js.map +1 -0
  127. package/dist/tools/enterprise/update-report-issue.d.ts +55 -0
  128. package/dist/tools/enterprise/update-report-issue.js +69 -0
  129. package/dist/tools/enterprise/update-report-issue.js.map +1 -0
  130. package/dist/tools/generate-diagram.d.ts +36 -0
  131. package/dist/tools/generate-diagram.js +153 -0
  132. package/dist/tools/generate-diagram.js.map +1 -0
  133. package/dist/tools/get-agent-test-results.d.ts +41 -0
  134. package/dist/tools/get-agent-test-results.js +86 -0
  135. package/dist/tools/get-agent-test-results.js.map +1 -0
  136. package/dist/tools/get-application-overview.d.ts +27 -0
  137. package/dist/tools/get-application-overview.js +143 -0
  138. package/dist/tools/get-application-overview.js.map +1 -0
  139. package/dist/tools/get-application.d.ts +27 -0
  140. package/dist/tools/get-application.js +83 -0
  141. package/dist/tools/get-application.js.map +1 -0
  142. package/dist/tools/get-artifact-content.d.ts +29 -0
  143. package/dist/tools/get-artifact-content.js +86 -0
  144. package/dist/tools/get-artifact-content.js.map +1 -0
  145. package/dist/tools/get-diagram.d.ts +27 -0
  146. package/dist/tools/get-diagram.js +109 -0
  147. package/dist/tools/get-diagram.js.map +1 -0
  148. package/dist/tools/get-document.d.ts +22 -0
  149. package/dist/tools/get-document.js +43 -0
  150. package/dist/tools/get-document.js.map +1 -0
  151. package/dist/tools/get-finding-details.d.ts +28 -0
  152. package/dist/tools/get-finding-details.js +43 -0
  153. package/dist/tools/get-finding-details.js.map +1 -0
  154. package/dist/tools/get-findings.d.ts +57 -0
  155. package/dist/tools/get-findings.js +103 -0
  156. package/dist/tools/get-findings.js.map +1 -0
  157. package/dist/tools/get-oss-zat.d.ts +27 -0
  158. package/dist/tools/get-oss-zat.js +105 -0
  159. package/dist/tools/get-oss-zat.js.map +1 -0
  160. package/dist/tools/get-recon-scan.d.ts +27 -0
  161. package/dist/tools/get-recon-scan.js +46 -0
  162. package/dist/tools/get-recon-scan.js.map +1 -0
  163. package/dist/tools/get-scan-output.d.ts +27 -0
  164. package/dist/tools/get-scan-output.js +64 -0
  165. package/dist/tools/get-scan-output.js.map +1 -0
  166. package/dist/tools/get-scenario-details.d.ts +27 -0
  167. package/dist/tools/get-scenario-details.js +46 -0
  168. package/dist/tools/get-scenario-details.js.map +1 -0
  169. package/dist/tools/get-test-case-results.d.ts +37 -0
  170. package/dist/tools/get-test-case-results.js +66 -0
  171. package/dist/tools/get-test-case-results.js.map +1 -0
  172. package/dist/tools/get-test-details.d.ts +29 -0
  173. package/dist/tools/get-test-details.js +49 -0
  174. package/dist/tools/get-test-details.js.map +1 -0
  175. package/dist/tools/get-trust-keys.d.ts +22 -0
  176. package/dist/tools/get-trust-keys.js +67 -0
  177. package/dist/tools/get-trust-keys.js.map +1 -0
  178. package/dist/tools/import-openapi-endpoints.d.ts +33 -0
  179. package/dist/tools/import-openapi-endpoints.js +93 -0
  180. package/dist/tools/import-openapi-endpoints.js.map +1 -0
  181. package/dist/tools/inspect-zat.d.ts +26 -0
  182. package/dist/tools/inspect-zat.js +247 -0
  183. package/dist/tools/inspect-zat.js.map +1 -0
  184. package/dist/tools/list-agent-test-cases.d.ts +41 -0
  185. package/dist/tools/list-agent-test-cases.js +73 -0
  186. package/dist/tools/list-agent-test-cases.js.map +1 -0
  187. package/dist/tools/list-applications.d.ts +34 -0
  188. package/dist/tools/list-applications.js +74 -0
  189. package/dist/tools/list-applications.js.map +1 -0
  190. package/dist/tools/list-diagrams.d.ts +42 -0
  191. package/dist/tools/list-diagrams.js +81 -0
  192. package/dist/tools/list-diagrams.js.map +1 -0
  193. package/dist/tools/list-documents.d.ts +24 -0
  194. package/dist/tools/list-documents.js +50 -0
  195. package/dist/tools/list-documents.js.map +1 -0
  196. package/dist/tools/list-endpoints.d.ts +47 -0
  197. package/dist/tools/list-endpoints.js +98 -0
  198. package/dist/tools/list-endpoints.js.map +1 -0
  199. package/dist/tools/list-recon-scans.d.ts +36 -0
  200. package/dist/tools/list-recon-scans.js +74 -0
  201. package/dist/tools/list-recon-scans.js.map +1 -0
  202. package/dist/tools/list-scan-artifacts.d.ts +41 -0
  203. package/dist/tools/list-scan-artifacts.js +63 -0
  204. package/dist/tools/list-scan-artifacts.js.map +1 -0
  205. package/dist/tools/list-scans.d.ts +44 -0
  206. package/dist/tools/list-scans.js +91 -0
  207. package/dist/tools/list-scans.js.map +1 -0
  208. package/dist/tools/list-test-library.d.ts +44 -0
  209. package/dist/tools/list-test-library.js +83 -0
  210. package/dist/tools/list-test-library.js.map +1 -0
  211. package/dist/tools/list-test-scenarios.d.ts +31 -0
  212. package/dist/tools/list-test-scenarios.js +66 -0
  213. package/dist/tools/list-test-scenarios.js.map +1 -0
  214. package/dist/tools/local-scan.d.ts +40 -0
  215. package/dist/tools/local-scan.js +261 -0
  216. package/dist/tools/local-scan.js.map +1 -0
  217. package/dist/tools/manage-diagram.d.ts +109 -0
  218. package/dist/tools/manage-diagram.js +316 -0
  219. package/dist/tools/manage-diagram.js.map +1 -0
  220. package/dist/tools/open-in-ide.d.ts +39 -0
  221. package/dist/tools/open-in-ide.js +61 -0
  222. package/dist/tools/open-in-ide.js.map +1 -0
  223. package/dist/tools/run-test-scenario.d.ts +37 -0
  224. package/dist/tools/run-test-scenario.js +70 -0
  225. package/dist/tools/run-test-scenario.js.map +1 -0
  226. package/dist/tools/scan-pr.d.ts +27 -0
  227. package/dist/tools/scan-pr.js +51 -0
  228. package/dist/tools/scan-pr.js.map +1 -0
  229. package/dist/tools/security-review.d.ts +65 -0
  230. package/dist/tools/security-review.js +378 -0
  231. package/dist/tools/security-review.js.map +1 -0
  232. package/dist/tools/setup-red-team-target.d.ts +79 -0
  233. package/dist/tools/setup-red-team-target.js +430 -0
  234. package/dist/tools/setup-red-team-target.js.map +1 -0
  235. package/dist/tools/triage-finding.d.ts +47 -0
  236. package/dist/tools/triage-finding.js +116 -0
  237. package/dist/tools/triage-finding.js.map +1 -0
  238. package/dist/tools/update-document.d.ts +28 -0
  239. package/dist/tools/update-document.js +63 -0
  240. package/dist/tools/update-document.js.map +1 -0
  241. package/dist/tools/update-endpoint.d.ts +65 -0
  242. package/dist/tools/update-endpoint.js +145 -0
  243. package/dist/tools/update-endpoint.js.map +1 -0
  244. package/dist/tools/update-mermaid-source.d.ts +34 -0
  245. package/dist/tools/update-mermaid-source.js +76 -0
  246. package/dist/tools/update-mermaid-source.js.map +1 -0
  247. package/dist/tools/verify-trust-mark.d.ts +29 -0
  248. package/dist/tools/verify-trust-mark.js +108 -0
  249. package/dist/tools/verify-trust-mark.js.map +1 -0
  250. package/dist/types.d.ts +220 -0
  251. package/dist/types.js +33 -0
  252. package/dist/types.js.map +1 -0
  253. package/package.json +50 -0
@@ -0,0 +1,98 @@
1
+ /**
2
+ * zivis_manage_data_flow — Create, update, or delete data flows in a threat model
3
+ *
4
+ * Maps to: POST/PATCH/DELETE /api/threat-models/:id/data-flows
5
+ */
6
+ import { z } from "zod";
7
+ import { sanitizeResponse } from "../../sanitize.js";
8
+ export const MANAGE_DATA_FLOW_NAME = "zivis_manage_data_flow";
9
+ export const MANAGE_DATA_FLOW_DESCRIPTION = `Create, update, or delete a data flow between components in a threat model.
10
+
11
+ Data flows represent the movement of data between components. They are critical for identifying where data crosses trust boundaries and where threats may exist.
12
+
13
+ Actions:
14
+ - create: Add a new data flow (requires name, source_component_id, target_component_id)
15
+ - update: Modify an existing data flow (requires flow_id)
16
+ - delete: Remove a data flow (requires flow_id)`;
17
+ export const MANAGE_DATA_FLOW_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
+ flow_id: z.string().optional().describe("Data flow UUID (required for update/delete)"),
21
+ name: z.string().optional().describe("Flow name (e.g., 'User Auth Request', 'API Response')"),
22
+ source_component_id: z.string().optional().describe("Source component UUID"),
23
+ target_component_id: z.string().optional().describe("Target component UUID"),
24
+ description: z.string().optional().describe("Description of what data flows and why"),
25
+ protocol: z.string().optional().describe("Protocol used (e.g., 'HTTPS', 'gRPC', 'WebSocket')"),
26
+ data_classification: z
27
+ .enum(["public", "internal", "confidential", "restricted", "critical"])
28
+ .optional()
29
+ .describe("Classification of data in this flow"),
30
+ is_encrypted: z.boolean().optional().describe("Whether the data flow is encrypted in transit"),
31
+ crosses_trust_boundary: z.boolean().optional().describe("Whether this flow crosses a trust boundary"),
32
+ };
33
+ export function createManageDataFlowHandler(apiClient) {
34
+ return async (params) => {
35
+ try {
36
+ const { threat_model_id, action, flow_id } = params;
37
+ if ((action === "update" || action === "delete") && !flow_id) {
38
+ return {
39
+ content: [{ type: "text", text: "Error: flow_id is required for update/delete" }],
40
+ isError: true,
41
+ };
42
+ }
43
+ let data;
44
+ if (action === "create") {
45
+ if (!params.name || !params.source_component_id || !params.target_component_id) {
46
+ return {
47
+ content: [{ type: "text", text: "Error: name, source_component_id, and target_component_id are required for create" }],
48
+ isError: true,
49
+ };
50
+ }
51
+ data = await apiClient.post(`/api/threat-models/${threat_model_id}/data-flows`, {
52
+ name: params.name,
53
+ sourceComponentId: params.source_component_id,
54
+ targetComponentId: params.target_component_id,
55
+ description: params.description,
56
+ protocol: params.protocol,
57
+ dataClassification: params.data_classification,
58
+ isEncrypted: params.is_encrypted,
59
+ crossesTrustBoundary: params.crosses_trust_boundary,
60
+ });
61
+ }
62
+ else if (action === "update") {
63
+ const body = {};
64
+ if (params.name)
65
+ body.name = params.name;
66
+ if (params.source_component_id)
67
+ body.sourceComponentId = params.source_component_id;
68
+ if (params.target_component_id)
69
+ body.targetComponentId = params.target_component_id;
70
+ if (params.description !== undefined)
71
+ body.description = params.description;
72
+ if (params.protocol !== undefined)
73
+ body.protocol = params.protocol;
74
+ if (params.data_classification)
75
+ body.dataClassification = params.data_classification;
76
+ if (params.is_encrypted !== undefined)
77
+ body.isEncrypted = params.is_encrypted;
78
+ if (params.crosses_trust_boundary !== undefined)
79
+ body.crossesTrustBoundary = params.crosses_trust_boundary;
80
+ data = await apiClient.patch(`/api/threat-models/${threat_model_id}/data-flows/${flow_id}`, body);
81
+ }
82
+ else {
83
+ data = await apiClient.del(`/api/threat-models/${threat_model_id}/data-flows/${flow_id}`);
84
+ }
85
+ return {
86
+ content: [{ type: "text", text: JSON.stringify(sanitizeResponse(data), null, 2) }],
87
+ };
88
+ }
89
+ catch (err) {
90
+ const message = err instanceof Error ? err.message : "Failed to manage data flow";
91
+ return {
92
+ content: [{ type: "text", text: `Error: ${message}` }],
93
+ isError: true,
94
+ };
95
+ }
96
+ };
97
+ }
98
+ //# sourceMappingURL=manage-data-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manage-data-flow.js","sourceRoot":"","sources":["../../../src/tools/enterprise/manage-data-flow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
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 type { ApiClient } from "../../api-client.js";
8
+ export declare const MANAGE_FINDING_NAME = "zivis_manage_finding";
9
+ export declare const MANAGE_FINDING_DESCRIPTION = "Create or update a finding (vulnerability) in a threat model.\n\nFindings represent confirmed or suspected vulnerabilities discovered during analysis or pen testing. They link to components, attack scenarios, and can be tracked through remediation.\n\nActions:\n- create: Add a new finding (requires title, severity)\n- update: Modify an existing finding (requires finding_id) \u2014 use to update status, add notes, etc.";
10
+ export declare const MANAGE_FINDING_SCHEMA: {
11
+ threat_model_id: z.ZodString;
12
+ action: z.ZodEnum<{
13
+ create: "create";
14
+ update: "update";
15
+ }>;
16
+ finding_id: z.ZodOptional<z.ZodString>;
17
+ title: z.ZodOptional<z.ZodString>;
18
+ description: z.ZodOptional<z.ZodString>;
19
+ severity: z.ZodOptional<z.ZodEnum<{
20
+ critical: "critical";
21
+ high: "high";
22
+ medium: "medium";
23
+ low: "low";
24
+ info: "info";
25
+ }>>;
26
+ status: z.ZodOptional<z.ZodEnum<{
27
+ false_positive: "false_positive";
28
+ open: "open";
29
+ in_progress: "in_progress";
30
+ mitigated: "mitigated";
31
+ verified: "verified";
32
+ accepted_risk: "accepted_risk";
33
+ }>>;
34
+ category: z.ZodOptional<z.ZodString>;
35
+ component_id: z.ZodOptional<z.ZodString>;
36
+ attack_scenario_id: z.ZodOptional<z.ZodString>;
37
+ cwe_id: z.ZodOptional<z.ZodString>;
38
+ cvss_score: z.ZodOptional<z.ZodNumber>;
39
+ remediation: z.ZodOptional<z.ZodString>;
40
+ proof_of_concept: z.ZodOptional<z.ZodString>;
41
+ };
42
+ export declare function createManageFindingHandler(apiClient: ApiClient): (params: {
43
+ threat_model_id: string;
44
+ action: "create" | "update";
45
+ finding_id?: string;
46
+ title?: string;
47
+ description?: string;
48
+ severity?: string;
49
+ status?: string;
50
+ category?: string;
51
+ component_id?: string;
52
+ attack_scenario_id?: string;
53
+ cwe_id?: string;
54
+ cvss_score?: number;
55
+ remediation?: string;
56
+ proof_of_concept?: string;
57
+ }) => Promise<{
58
+ content: {
59
+ type: "text";
60
+ text: string;
61
+ }[];
62
+ isError: boolean;
63
+ } | {
64
+ content: {
65
+ type: "text";
66
+ text: string;
67
+ }[];
68
+ isError?: undefined;
69
+ }>;
@@ -0,0 +1,106 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manage-finding.js","sourceRoot":"","sources":["../../../src/tools/enterprise/manage-finding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
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
+ }>;
@@ -0,0 +1,96 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manage-security-control.js","sourceRoot":"","sources":["../../../src/tools/enterprise/manage-security-control.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
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
+ }>;