@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.
Files changed (330) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +19 -0
  3. package/dist/api-client.d.ts +2 -24
  4. package/dist/api-client.js +32 -52
  5. package/dist/auth/index.d.ts +1 -22
  6. package/dist/auth/index.js +17 -38
  7. package/dist/auth/jwt.d.ts +0 -16
  8. package/dist/auth/jwt.js +0 -13
  9. package/dist/auth/keychain.d.ts +6 -32
  10. package/dist/auth/keychain.js +83 -114
  11. package/dist/auth/oauth.d.ts +3 -32
  12. package/dist/auth/oauth.js +67 -61
  13. package/dist/auth/sessions.d.ts +5 -25
  14. package/dist/auth/sessions.js +20 -39
  15. package/dist/auth/token-refresh.d.ts +2 -22
  16. package/dist/auth/token-refresh.js +33 -36
  17. package/dist/cli.d.ts +1 -18
  18. package/dist/cli.js +30 -908
  19. package/dist/index.d.ts +0 -6
  20. package/dist/index.js +0 -7
  21. package/dist/lib/inspect-cache.d.ts +10 -0
  22. package/dist/lib/inspect-cache.js +75 -0
  23. package/dist/lib/next-steps.d.ts +27 -0
  24. package/dist/lib/next-steps.js +21 -0
  25. package/dist/matcher/ast-eval.d.ts +8 -0
  26. package/dist/matcher/ast-eval.js +95 -0
  27. package/dist/matcher/finding.d.ts +55 -0
  28. package/dist/matcher/finding.js +1 -0
  29. package/dist/matcher/index.d.ts +8 -0
  30. package/dist/matcher/index.js +202 -0
  31. package/dist/matcher/inference-candidates.d.ts +26 -0
  32. package/dist/matcher/inference-candidates.js +81 -0
  33. package/dist/matcher/walker.d.ts +7 -0
  34. package/dist/matcher/walker.js +71 -0
  35. package/dist/pattern-pack/index.d.ts +125 -0
  36. package/dist/pattern-pack/index.js +189 -0
  37. package/dist/pattern-packs/zivis-public-0.2.0/capsules/agents/privilege-separation.yaml +224 -0
  38. package/dist/pattern-packs/zivis-public-0.2.0/capsules/prompting/self-consistency-no-isolation.yaml +237 -0
  39. package/dist/pattern-packs/zivis-public-0.2.0/capsules/retrieval/context-injection-no-validator.yaml +348 -0
  40. package/dist/pattern-packs/zivis-public-0.2.0/capsules/security/late-org-filter.yaml +266 -0
  41. package/dist/pattern-packs/zivis-public-0.2.0/controls/external_validator_on_facts.yaml +37 -0
  42. package/dist/pattern-packs/zivis-public-0.2.0/controls/fact_validator_present.yaml +68 -0
  43. package/dist/pattern-packs/zivis-public-0.2.0/controls/human_approval_gate.yaml +44 -0
  44. package/dist/pattern-packs/zivis-public-0.2.0/controls/langgraph_state_machine_with_per_node_tools.yaml +35 -0
  45. package/dist/pattern-packs/zivis-public-0.2.0/controls/per_sample_retrieval_diversification.yaml +38 -0
  46. package/dist/pattern-packs/zivis-public-0.2.0/controls/prisma_extension_or_middleware_attaching_org_filter.yaml +31 -0
  47. package/dist/pattern-packs/zivis-public-0.2.0/controls/row_level_security_policy.yaml +37 -0
  48. package/dist/pattern-packs/zivis-public-0.2.0/controls/source_attribution_present.yaml +58 -0
  49. package/dist/pattern-packs/zivis-public-0.2.0/manifest.json +167 -0
  50. package/dist/pattern-packs/zivis-public-0.2.0/prompts/agents/privilege-separation/identify.md +54 -0
  51. package/dist/pattern-packs/zivis-public-0.2.0/prompts/prompting/self-consistency-no-isolation/identify.md +60 -0
  52. package/dist/pattern-packs/zivis-public-0.2.0/prompts/retrieval/context-injection-no-validator/identify.md +109 -0
  53. package/dist/pattern-packs/zivis-public-0.2.0/prompts/security/late-org-filter/identify.md +78 -0
  54. package/dist/project-binding.d.ts +2 -19
  55. package/dist/project-binding.js +38 -21
  56. package/dist/prompts/audit-dependencies.d.ts +2 -0
  57. package/dist/prompts/audit-dependencies.js +47 -0
  58. package/dist/prompts/getting-started.d.ts +2 -0
  59. package/dist/prompts/getting-started.js +37 -0
  60. package/dist/prompts/index.d.ts +2 -0
  61. package/dist/prompts/index.js +6 -0
  62. package/dist/resolve-application-id.d.ts +0 -4
  63. package/dist/resolve-application-id.js +0 -5
  64. package/dist/sanitize.d.ts +1 -21
  65. package/dist/sanitize.js +7 -41
  66. package/dist/server.d.ts +1 -13
  67. package/dist/server.js +142 -265
  68. package/dist/tools/artifacts.d.ts +76 -0
  69. package/dist/tools/artifacts.js +178 -0
  70. package/dist/tools/check-project.d.ts +5 -18
  71. package/dist/tools/check-project.js +122 -110
  72. package/dist/tools/check-repo-trust.d.ts +4 -19
  73. package/dist/tools/check-repo-trust.js +56 -47
  74. package/dist/tools/create-diagram.d.ts +0 -5
  75. package/dist/tools/create-diagram.js +0 -10
  76. package/dist/tools/create-document.d.ts +0 -5
  77. package/dist/tools/create-document.js +3 -9
  78. package/dist/tools/create-finding.d.ts +85 -0
  79. package/dist/tools/create-finding.js +136 -0
  80. package/dist/tools/delete-finding.d.ts +19 -0
  81. package/dist/tools/delete-finding.js +36 -0
  82. package/dist/tools/devx-run.d.ts +88 -0
  83. package/dist/tools/devx-run.js +175 -0
  84. package/dist/tools/discover-local-infra.d.ts +0 -10
  85. package/dist/tools/discover-local-infra.js +3 -73
  86. package/dist/tools/enterprise/get-org-zat.d.ts +0 -5
  87. package/dist/tools/enterprise/get-org-zat.js +0 -6
  88. package/dist/tools/explain-signal-for-diff.d.ts +34 -0
  89. package/dist/tools/explain-signal-for-diff.js +75 -0
  90. package/dist/tools/generate-diagram.d.ts +0 -6
  91. package/dist/tools/generate-diagram.js +21 -13
  92. package/dist/tools/get-application-overview.d.ts +0 -5
  93. package/dist/tools/get-application-overview.js +0 -6
  94. package/dist/tools/get-application.d.ts +0 -5
  95. package/dist/tools/get-application.js +0 -6
  96. package/dist/tools/get-diagram.d.ts +0 -5
  97. package/dist/tools/get-diagram.js +1 -11
  98. package/dist/tools/get-document.d.ts +0 -5
  99. package/dist/tools/get-document.js +0 -6
  100. package/dist/tools/get-oss-zat.d.ts +0 -5
  101. package/dist/tools/get-oss-zat.js +0 -7
  102. package/dist/tools/get-signal.d.ts +24 -0
  103. package/dist/tools/get-signal.js +75 -0
  104. package/dist/tools/get-started.d.ts +18 -0
  105. package/dist/tools/get-started.js +470 -0
  106. package/dist/tools/get-trust-keys.d.ts +0 -5
  107. package/dist/tools/get-trust-keys.js +0 -6
  108. package/dist/tools/import-openapi-endpoints.d.ts +0 -5
  109. package/dist/tools/import-openapi-endpoints.js +0 -6
  110. package/dist/tools/inspect-zat.d.ts +0 -5
  111. package/dist/tools/inspect-zat.js +0 -19
  112. package/dist/tools/inspect.d.ts +21 -0
  113. package/dist/tools/inspect.js +222 -0
  114. package/dist/tools/list-applications.d.ts +1 -6
  115. package/dist/tools/list-applications.js +0 -6
  116. package/dist/tools/list-diagrams.d.ts +0 -5
  117. package/dist/tools/list-diagrams.js +0 -6
  118. package/dist/tools/list-documents.d.ts +0 -5
  119. package/dist/tools/list-documents.js +0 -6
  120. package/dist/tools/list-endpoints.d.ts +1 -6
  121. package/dist/tools/list-endpoints.js +0 -6
  122. package/dist/tools/list-signals.d.ts +37 -0
  123. package/dist/tools/list-signals.js +83 -0
  124. package/dist/tools/manage-application.d.ts +64 -0
  125. package/dist/tools/manage-application.js +129 -0
  126. package/dist/tools/manage-diagram.d.ts +0 -5
  127. package/dist/tools/manage-diagram.js +0 -16
  128. package/dist/tools/manage-endpoint-lifecycle.d.ts +80 -0
  129. package/dist/tools/manage-endpoint-lifecycle.js +180 -0
  130. package/dist/tools/open-in-ide.d.ts +2 -14
  131. package/dist/tools/open-in-ide.js +0 -13
  132. package/dist/tools/review-change.d.ts +34 -0
  133. package/dist/tools/review-change.js +93 -0
  134. package/dist/tools/security-memory.d.ts +76 -0
  135. package/dist/tools/security-memory.js +202 -0
  136. package/dist/tools/security-review.d.ts +1 -21
  137. package/dist/tools/security-review.js +8 -108
  138. package/dist/tools/threat-get-capsule.d.ts +15 -0
  139. package/dist/tools/threat-get-capsule.js +53 -0
  140. package/dist/tools/threat-get-inference-prompt.d.ts +15 -0
  141. package/dist/tools/threat-get-inference-prompt.js +73 -0
  142. package/dist/tools/threat-list-relevant-capsules.d.ts +17 -0
  143. package/dist/tools/threat-list-relevant-capsules.js +158 -0
  144. package/dist/tools/threat-run-matcher.d.ts +17 -0
  145. package/dist/tools/threat-run-matcher.js +145 -0
  146. package/dist/tools/update-document.d.ts +0 -5
  147. package/dist/tools/update-document.js +3 -9
  148. package/dist/tools/update-endpoint.d.ts +1 -6
  149. package/dist/tools/update-endpoint.js +0 -7
  150. package/dist/tools/update-finding.d.ts +61 -0
  151. package/dist/tools/update-finding.js +80 -0
  152. package/dist/tools/update-mermaid-source.d.ts +0 -13
  153. package/dist/tools/update-mermaid-source.js +0 -14
  154. package/dist/tools/verify-trust-mark.d.ts +0 -5
  155. package/dist/tools/verify-trust-mark.js +0 -6
  156. package/dist/types.d.ts +14 -14
  157. package/dist/types.js +22 -28
  158. package/package.json +38 -15
  159. package/dist/api-client.js.map +0 -1
  160. package/dist/auth/index.js.map +0 -1
  161. package/dist/auth/jwt.js.map +0 -1
  162. package/dist/auth/keychain.js.map +0 -1
  163. package/dist/auth/oauth.js.map +0 -1
  164. package/dist/auth/sessions.js.map +0 -1
  165. package/dist/auth/token-refresh.js.map +0 -1
  166. package/dist/cli.js.map +0 -1
  167. package/dist/index.js.map +0 -1
  168. package/dist/project-binding.js.map +0 -1
  169. package/dist/resolve-application-id.js.map +0 -1
  170. package/dist/sanitize.js.map +0 -1
  171. package/dist/server.js.map +0 -1
  172. package/dist/tools/check-project.js.map +0 -1
  173. package/dist/tools/check-repo-trust.js.map +0 -1
  174. package/dist/tools/create-diagram.js.map +0 -1
  175. package/dist/tools/create-document.js.map +0 -1
  176. package/dist/tools/discover-local-infra.js.map +0 -1
  177. package/dist/tools/enterprise/capture-evidence.d.ts +0 -54
  178. package/dist/tools/enterprise/capture-evidence.js +0 -72
  179. package/dist/tools/enterprise/capture-evidence.js.map +0 -1
  180. package/dist/tools/enterprise/create-report-ticket.d.ts +0 -34
  181. package/dist/tools/enterprise/create-report-ticket.js +0 -44
  182. package/dist/tools/enterprise/create-report-ticket.js.map +0 -1
  183. package/dist/tools/enterprise/end-pentest-session.d.ts +0 -33
  184. package/dist/tools/enterprise/end-pentest-session.js +0 -42
  185. package/dist/tools/enterprise/end-pentest-session.js.map +0 -1
  186. package/dist/tools/enterprise/generate-report.d.ts +0 -55
  187. package/dist/tools/enterprise/generate-report.js +0 -111
  188. package/dist/tools/enterprise/generate-report.js.map +0 -1
  189. package/dist/tools/enterprise/get-org-zat.js.map +0 -1
  190. package/dist/tools/enterprise/get-report-status.d.ts +0 -27
  191. package/dist/tools/enterprise/get-report-status.js +0 -38
  192. package/dist/tools/enterprise/get-report-status.js.map +0 -1
  193. package/dist/tools/enterprise/get-threat-model.d.ts +0 -29
  194. package/dist/tools/enterprise/get-threat-model.js +0 -83
  195. package/dist/tools/enterprise/get-threat-model.js.map +0 -1
  196. package/dist/tools/enterprise/list-agents.d.ts +0 -42
  197. package/dist/tools/enterprise/list-agents.js +0 -95
  198. package/dist/tools/enterprise/list-agents.js.map +0 -1
  199. package/dist/tools/enterprise/list-report-issues.d.ts +0 -36
  200. package/dist/tools/enterprise/list-report-issues.js +0 -50
  201. package/dist/tools/enterprise/list-report-issues.js.map +0 -1
  202. package/dist/tools/enterprise/list-threat-models.d.ts +0 -36
  203. package/dist/tools/enterprise/list-threat-models.js +0 -82
  204. package/dist/tools/enterprise/list-threat-models.js.map +0 -1
  205. package/dist/tools/enterprise/manage-actor.d.ts +0 -58
  206. package/dist/tools/enterprise/manage-actor.js +0 -99
  207. package/dist/tools/enterprise/manage-actor.js.map +0 -1
  208. package/dist/tools/enterprise/manage-attack-scenario.d.ts +0 -70
  209. package/dist/tools/enterprise/manage-attack-scenario.js +0 -89
  210. package/dist/tools/enterprise/manage-attack-scenario.js.map +0 -1
  211. package/dist/tools/enterprise/manage-component.d.ts +0 -58
  212. package/dist/tools/enterprise/manage-component.js +0 -90
  213. package/dist/tools/enterprise/manage-component.js.map +0 -1
  214. package/dist/tools/enterprise/manage-data-asset.d.ts +0 -53
  215. package/dist/tools/enterprise/manage-data-asset.js +0 -90
  216. package/dist/tools/enterprise/manage-data-asset.js.map +0 -1
  217. package/dist/tools/enterprise/manage-data-flow.d.ts +0 -57
  218. package/dist/tools/enterprise/manage-data-flow.js +0 -98
  219. package/dist/tools/enterprise/manage-data-flow.js.map +0 -1
  220. package/dist/tools/enterprise/manage-finding.d.ts +0 -69
  221. package/dist/tools/enterprise/manage-finding.js +0 -106
  222. package/dist/tools/enterprise/manage-finding.js.map +0 -1
  223. package/dist/tools/enterprise/manage-security-control.d.ts +0 -59
  224. package/dist/tools/enterprise/manage-security-control.js +0 -96
  225. package/dist/tools/enterprise/manage-security-control.js.map +0 -1
  226. package/dist/tools/enterprise/manage-test-case.d.ts +0 -88
  227. package/dist/tools/enterprise/manage-test-case.js +0 -119
  228. package/dist/tools/enterprise/manage-test-case.js.map +0 -1
  229. package/dist/tools/enterprise/promote-finding-to-issue.d.ts +0 -36
  230. package/dist/tools/enterprise/promote-finding-to-issue.js +0 -65
  231. package/dist/tools/enterprise/promote-finding-to-issue.js.map +0 -1
  232. package/dist/tools/enterprise/publish-report-version.d.ts +0 -34
  233. package/dist/tools/enterprise/publish-report-version.js +0 -75
  234. package/dist/tools/enterprise/publish-report-version.js.map +0 -1
  235. package/dist/tools/enterprise/publish-test-to-library.d.ts +0 -31
  236. package/dist/tools/enterprise/publish-test-to-library.js +0 -40
  237. package/dist/tools/enterprise/publish-test-to-library.js.map +0 -1
  238. package/dist/tools/enterprise/record-test-result.d.ts +0 -67
  239. package/dist/tools/enterprise/record-test-result.js +0 -75
  240. package/dist/tools/enterprise/record-test-result.js.map +0 -1
  241. package/dist/tools/enterprise/start-pentest-session.d.ts +0 -35
  242. package/dist/tools/enterprise/start-pentest-session.js +0 -50
  243. package/dist/tools/enterprise/start-pentest-session.js.map +0 -1
  244. package/dist/tools/enterprise/sync-report-section.d.ts +0 -41
  245. package/dist/tools/enterprise/sync-report-section.js +0 -79
  246. package/dist/tools/enterprise/sync-report-section.js.map +0 -1
  247. package/dist/tools/enterprise/update-report-issue.d.ts +0 -55
  248. package/dist/tools/enterprise/update-report-issue.js +0 -69
  249. package/dist/tools/enterprise/update-report-issue.js.map +0 -1
  250. package/dist/tools/generate-diagram.js.map +0 -1
  251. package/dist/tools/get-agent-test-results.d.ts +0 -41
  252. package/dist/tools/get-agent-test-results.js +0 -86
  253. package/dist/tools/get-agent-test-results.js.map +0 -1
  254. package/dist/tools/get-application-overview.js.map +0 -1
  255. package/dist/tools/get-application.js.map +0 -1
  256. package/dist/tools/get-artifact-content.d.ts +0 -29
  257. package/dist/tools/get-artifact-content.js +0 -86
  258. package/dist/tools/get-artifact-content.js.map +0 -1
  259. package/dist/tools/get-diagram.js.map +0 -1
  260. package/dist/tools/get-document.js.map +0 -1
  261. package/dist/tools/get-finding-details.d.ts +0 -28
  262. package/dist/tools/get-finding-details.js +0 -43
  263. package/dist/tools/get-finding-details.js.map +0 -1
  264. package/dist/tools/get-findings.d.ts +0 -57
  265. package/dist/tools/get-findings.js +0 -103
  266. package/dist/tools/get-findings.js.map +0 -1
  267. package/dist/tools/get-oss-zat.js.map +0 -1
  268. package/dist/tools/get-recon-scan.d.ts +0 -27
  269. package/dist/tools/get-recon-scan.js +0 -46
  270. package/dist/tools/get-recon-scan.js.map +0 -1
  271. package/dist/tools/get-scan-output.d.ts +0 -27
  272. package/dist/tools/get-scan-output.js +0 -64
  273. package/dist/tools/get-scan-output.js.map +0 -1
  274. package/dist/tools/get-scenario-details.d.ts +0 -27
  275. package/dist/tools/get-scenario-details.js +0 -46
  276. package/dist/tools/get-scenario-details.js.map +0 -1
  277. package/dist/tools/get-test-case-results.d.ts +0 -37
  278. package/dist/tools/get-test-case-results.js +0 -66
  279. package/dist/tools/get-test-case-results.js.map +0 -1
  280. package/dist/tools/get-test-details.d.ts +0 -29
  281. package/dist/tools/get-test-details.js +0 -49
  282. package/dist/tools/get-test-details.js.map +0 -1
  283. package/dist/tools/get-trust-keys.js.map +0 -1
  284. package/dist/tools/import-openapi-endpoints.js.map +0 -1
  285. package/dist/tools/inspect-zat.js.map +0 -1
  286. package/dist/tools/list-agent-test-cases.d.ts +0 -41
  287. package/dist/tools/list-agent-test-cases.js +0 -73
  288. package/dist/tools/list-agent-test-cases.js.map +0 -1
  289. package/dist/tools/list-applications.js.map +0 -1
  290. package/dist/tools/list-diagrams.js.map +0 -1
  291. package/dist/tools/list-documents.js.map +0 -1
  292. package/dist/tools/list-endpoints.js.map +0 -1
  293. package/dist/tools/list-recon-scans.d.ts +0 -36
  294. package/dist/tools/list-recon-scans.js +0 -74
  295. package/dist/tools/list-recon-scans.js.map +0 -1
  296. package/dist/tools/list-scan-artifacts.d.ts +0 -41
  297. package/dist/tools/list-scan-artifacts.js +0 -63
  298. package/dist/tools/list-scan-artifacts.js.map +0 -1
  299. package/dist/tools/list-scans.d.ts +0 -44
  300. package/dist/tools/list-scans.js +0 -91
  301. package/dist/tools/list-scans.js.map +0 -1
  302. package/dist/tools/list-test-library.d.ts +0 -44
  303. package/dist/tools/list-test-library.js +0 -83
  304. package/dist/tools/list-test-library.js.map +0 -1
  305. package/dist/tools/list-test-scenarios.d.ts +0 -31
  306. package/dist/tools/list-test-scenarios.js +0 -66
  307. package/dist/tools/list-test-scenarios.js.map +0 -1
  308. package/dist/tools/local-scan.d.ts +0 -40
  309. package/dist/tools/local-scan.js +0 -261
  310. package/dist/tools/local-scan.js.map +0 -1
  311. package/dist/tools/manage-diagram.js.map +0 -1
  312. package/dist/tools/open-in-ide.js.map +0 -1
  313. package/dist/tools/run-test-scenario.d.ts +0 -37
  314. package/dist/tools/run-test-scenario.js +0 -70
  315. package/dist/tools/run-test-scenario.js.map +0 -1
  316. package/dist/tools/scan-pr.d.ts +0 -27
  317. package/dist/tools/scan-pr.js +0 -51
  318. package/dist/tools/scan-pr.js.map +0 -1
  319. package/dist/tools/security-review.js.map +0 -1
  320. package/dist/tools/setup-red-team-target.d.ts +0 -79
  321. package/dist/tools/setup-red-team-target.js +0 -430
  322. package/dist/tools/setup-red-team-target.js.map +0 -1
  323. package/dist/tools/triage-finding.d.ts +0 -47
  324. package/dist/tools/triage-finding.js +0 -116
  325. package/dist/tools/triage-finding.js.map +0 -1
  326. package/dist/tools/update-document.js.map +0 -1
  327. package/dist/tools/update-endpoint.js.map +0 -1
  328. package/dist/tools/update-mermaid-source.js.map +0 -1
  329. package/dist/tools/verify-trust-mark.js.map +0 -1
  330. package/dist/types.js.map +0 -1
package/dist/server.js CHANGED
@@ -1,226 +1,152 @@
1
- /**
2
- * MCP Server
3
- *
4
- * Sets up the Model Context Protocol server using the official SDK
5
- * with stdio transport. Registers all ZIVIS security tools.
6
- *
7
- * IMPORTANT: This server communicates over stdout (JSON-RPC 2.0).
8
- * Never use console.log() — use console.error() for all logging.
9
- */
10
1
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
11
2
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
12
3
  import { ApiClient } from "./api-client.js";
13
4
  import { resolveAuth } from "./auth/index.js";
14
- import { decodeJwtPayload } from "./auth/jwt.js";
15
- import { loadTokens } from "./auth/token-refresh.js";
16
- import { detectProjectBinding, validateProjectBinding } from "./project-binding.js";
5
+ import { detectProjectBinding, resolveConfigFromBinding, resolveMcpSessionForWorkspace, validateProjectBinding, } from "./project-binding.js";
17
6
  import { DEFAULT_CONFIG } from "./types.js";
18
- /**
19
- * Validate that the stored JWT's org matches the project binding's expected org.
20
- * This prevents cross-org data leaks when a user is a member of multiple orgs.
21
- *
22
- * The JWT org_id is the WorkOS org ID. The project binding stores both the
23
- * Zivis org UUID (orgId) and the WorkOS org ID (workosOrgId).
24
- */
25
- async function validateJwtOrgBinding(binding, config) {
7
+ async function validateApiKeyMatchesBinding(binding, config) {
26
8
  if (!binding.workosOrgId) {
27
- // No WorkOS org ID in bindingcan't validate. Log warning but don't block.
28
- console.error("[zivis] WARNING: Project binding has no workosOrgId — cannot verify JWT org scope.");
9
+ console.error("[zivis] WARNING: Project binding has no workosOrgIdcannot verify API key org scope.");
29
10
  console.error("[zivis] Run: zivis auth init --session <session> --org-id <zivis-uuid> --workos-org-id <workos-org-id>");
30
11
  return;
31
12
  }
32
- const tokens = await loadTokens(config.session);
33
- if (!tokens)
34
- return; // No tokens stored yet will fail at session check
35
- const payload = decodeJwtPayload(tokens.access_token);
36
- if (!payload) {
37
- console.error("[zivis] WARNING: Could not decode JWT — cannot verify org scope");
13
+ const creds = await resolveAuth(config, "apikey");
14
+ if (creds.method !== "apikey" || !creds.apiKey) {
15
+ console.error("[zivis] INTERNAL: org verification skippedno API key (session gate should have prevented this)");
38
16
  return;
39
17
  }
40
- const jwtOrgId = payload.org_id;
41
- if (!jwtOrgId) {
42
- console.error("[zivis] WARNING: JWT has no org_id claim — cannot verify org scope");
18
+ let response;
19
+ try {
20
+ response = await fetch(`${config.apiBaseUrl}/api/mcp/session`, {
21
+ headers: {
22
+ "X-API-Key": creds.apiKey,
23
+ "User-Agent": "@zivis/mcp",
24
+ },
25
+ });
26
+ }
27
+ catch (err) {
28
+ console.error(`[zivis] WARNING: Could not reach API to verify org (${err instanceof Error ? err.message : err})`);
29
+ return;
30
+ }
31
+ if (!response.ok) {
32
+ const body = await response.text().catch(() => "");
33
+ console.error(`[zivis] WARNING: API key org probe failed (${response.status}): ${body.slice(0, 200)}`);
43
34
  return;
44
35
  }
45
- if (jwtOrgId !== binding.workosOrgId) {
36
+ const payload = (await response.json());
37
+ const resolved = payload.org?.workosOrgId;
38
+ if (resolved !== binding.workosOrgId) {
46
39
  const orgLabel = binding.orgName ? ` (${binding.orgName})` : "";
47
- console.error("[zivis] SECURITY ERROR: JWT org does not match project binding!");
48
- console.error(`[zivis] JWT org_id: ${jwtOrgId}`);
49
- console.error(`[zivis] Expected org_id: ${binding.workosOrgId}${orgLabel}`);
40
+ console.error("[zivis] SECURITY ERROR: API key org does not match project binding!");
41
+ console.error(`[zivis] API resolved WorkOS org: ${resolved ?? "missing"}`);
42
+ console.error(`[zivis] Binding expects org: ${binding.workosOrgId}${orgLabel}`);
50
43
  console.error("");
51
44
  console.error("[zivis] This prevents cross-org data leaks.");
52
- console.error(`[zivis] Fix: Re-login for this project's org:`);
53
- console.error(`[zivis] zivis auth login --session ${config.session || "default"}`);
45
+ console.error(`[zivis] Mint a binding token for this repo's org:`);
46
+ console.error(`[zivis] zivis auth bind`);
54
47
  process.exit(1);
55
48
  }
56
- console.error(`[zivis] JWT org verified: ${jwtOrgId}${binding.orgName ? ` (${binding.orgName})` : ""}`);
49
+ console.error(`[zivis] API key org verified: ${resolved}${binding.orgName ? ` (${binding.orgName})` : ""}`);
57
50
  }
58
- // Tools Findings
59
- import { GET_FINDINGS_NAME, GET_FINDINGS_DESCRIPTION, GET_FINDINGS_SCHEMA, createGetFindingsHandler, } from "./tools/get-findings.js";
60
- import { GET_FINDING_DETAILS_NAME, GET_FINDING_DETAILS_DESCRIPTION, GET_FINDING_DETAILS_SCHEMA, createGetFindingDetailsHandler, } from "./tools/get-finding-details.js";
61
- import { TRIAGE_FINDING_NAME, TRIAGE_FINDING_DESCRIPTION, TRIAGE_FINDING_SCHEMA, createTriageFindingHandler, } from "./tools/triage-finding.js";
62
- // Tools Scans & Artifacts
63
- import { LIST_SCANS_NAME, LIST_SCANS_DESCRIPTION, LIST_SCANS_SCHEMA, createListScansHandler, } from "./tools/list-scans.js";
64
- import { LIST_RECON_SCANS_NAME, LIST_RECON_SCANS_DESCRIPTION, LIST_RECON_SCANS_SCHEMA, createListReconScansHandler, } from "./tools/list-recon-scans.js";
65
- import { GET_RECON_SCAN_NAME, GET_RECON_SCAN_DESCRIPTION, GET_RECON_SCAN_SCHEMA, createGetReconScanHandler, } from "./tools/get-recon-scan.js";
66
- import { GET_SCAN_OUTPUT_NAME, GET_SCAN_OUTPUT_DESCRIPTION, GET_SCAN_OUTPUT_SCHEMA, createGetScanOutputHandler, } from "./tools/get-scan-output.js";
67
- import { GET_TEST_CASE_RESULTS_NAME, GET_TEST_CASE_RESULTS_DESCRIPTION, GET_TEST_CASE_RESULTS_SCHEMA, createGetTestCaseResultsHandler, } from "./tools/get-test-case-results.js";
68
- import { GET_AGENT_TEST_RESULTS_NAME, GET_AGENT_TEST_RESULTS_DESCRIPTION, GET_AGENT_TEST_RESULTS_SCHEMA, createGetAgentTestResultsHandler, } from "./tools/get-agent-test-results.js";
69
- import { LIST_SCAN_ARTIFACTS_NAME, LIST_SCAN_ARTIFACTS_DESCRIPTION, LIST_SCAN_ARTIFACTS_SCHEMA, createListScanArtifactsHandler, } from "./tools/list-scan-artifacts.js";
70
- import { GET_ARTIFACT_CONTENT_NAME, GET_ARTIFACT_CONTENT_DESCRIPTION, GET_ARTIFACT_CONTENT_SCHEMA, createGetArtifactContentHandler, } from "./tools/get-artifact-content.js";
71
- // Tools — PR Safety
72
- import { SCAN_PR_NAME, SCAN_PR_DESCRIPTION, SCAN_PR_SCHEMA, createScanPrHandler, } from "./tools/scan-pr.js";
73
- // Tools — OSS Trust
51
+ import { registerAllPrompts } from "./prompts/index.js";
52
+ import { GET_STARTED_NAME, GET_STARTED_DESCRIPTION, GET_STARTED_SCHEMA, createGetStartedHandler, } from "./tools/get-started.js";
53
+ import { INSPECT_NAME, INSPECT_DESCRIPTION, INSPECT_SCHEMA, createInspectHandler, } from "./tools/inspect.js";
54
+ import { THREAT_LIST_RELEVANT_CAPSULES_NAME, THREAT_LIST_RELEVANT_CAPSULES_DESCRIPTION, THREAT_LIST_RELEVANT_CAPSULES_SCHEMA, createThreatListRelevantCapsulesHandler, } from "./tools/threat-list-relevant-capsules.js";
55
+ import { THREAT_GET_CAPSULE_NAME, THREAT_GET_CAPSULE_DESCRIPTION, THREAT_GET_CAPSULE_SCHEMA, createThreatGetCapsuleHandler, } from "./tools/threat-get-capsule.js";
56
+ import { THREAT_GET_INFERENCE_PROMPT_NAME, THREAT_GET_INFERENCE_PROMPT_DESCRIPTION, THREAT_GET_INFERENCE_PROMPT_SCHEMA, createThreatGetInferencePromptHandler, } from "./tools/threat-get-inference-prompt.js";
57
+ import { THREAT_RUN_MATCHER_NAME, THREAT_RUN_MATCHER_DESCRIPTION, THREAT_RUN_MATCHER_SCHEMA, createThreatRunMatcherHandler, } from "./tools/threat-run-matcher.js";
74
58
  import { CHECK_REPO_TRUST_NAME, CHECK_REPO_TRUST_DESCRIPTION, CHECK_REPO_TRUST_SCHEMA, createCheckRepoTrustHandler, } from "./tools/check-repo-trust.js";
75
- // Tools — ZAT & Trust Verification (public)
76
59
  import { GET_OSS_ZAT_NAME, GET_OSS_ZAT_DESCRIPTION, GET_OSS_ZAT_SCHEMA, createGetOssZatHandler, } from "./tools/get-oss-zat.js";
77
60
  import { VERIFY_TRUST_MARK_NAME, VERIFY_TRUST_MARK_DESCRIPTION, VERIFY_TRUST_MARK_SCHEMA, createVerifyTrustMarkHandler, } from "./tools/verify-trust-mark.js";
78
61
  import { GET_TRUST_KEYS_NAME, GET_TRUST_KEYS_DESCRIPTION, GET_TRUST_KEYS_SCHEMA, createGetTrustKeysHandler, } from "./tools/get-trust-keys.js";
79
62
  import { INSPECT_ZAT_NAME, INSPECT_ZAT_DESCRIPTION, INSPECT_ZAT_SCHEMA, createInspectZatHandler, } from "./tools/inspect-zat.js";
80
- // Tools — Red Team Setup
81
- import { SETUP_RED_TEAM_TARGET_NAME, SETUP_RED_TEAM_TARGET_DESCRIPTION, SETUP_RED_TEAM_TARGET_SCHEMA, createSetupRedTeamTargetHandler, } from "./tools/setup-red-team-target.js";
82
- // Tools — Application & Endpoint Management
83
63
  import { LIST_APPLICATIONS_NAME, LIST_APPLICATIONS_DESCRIPTION, LIST_APPLICATIONS_SCHEMA, createListApplicationsHandler, } from "./tools/list-applications.js";
84
64
  import { GET_APPLICATION_NAME, GET_APPLICATION_DESCRIPTION, GET_APPLICATION_SCHEMA, createGetApplicationHandler, } from "./tools/get-application.js";
85
65
  import { GET_APPLICATION_OVERVIEW_NAME, GET_APPLICATION_OVERVIEW_DESCRIPTION, GET_APPLICATION_OVERVIEW_SCHEMA, createGetApplicationOverviewHandler, } from "./tools/get-application-overview.js";
66
+ import { REVIEW_CHANGE_NAME, REVIEW_CHANGE_DESCRIPTION, REVIEW_CHANGE_SCHEMA, createReviewChangeHandler, } from "./tools/review-change.js";
67
+ import { EXPLAIN_SIGNAL_FOR_DIFF_NAME, EXPLAIN_SIGNAL_FOR_DIFF_DESCRIPTION, EXPLAIN_SIGNAL_FOR_DIFF_SCHEMA, createExplainSignalForDiffHandler, } from "./tools/explain-signal-for-diff.js";
68
+ import { LIST_SIGNALS_NAME, LIST_SIGNALS_DESCRIPTION, LIST_SIGNALS_SCHEMA, createListSignalsHandler, } from "./tools/list-signals.js";
69
+ import { GET_SIGNAL_NAME, GET_SIGNAL_DESCRIPTION, GET_SIGNAL_SCHEMA, createGetSignalHandler, } from "./tools/get-signal.js";
86
70
  import { LIST_ENDPOINTS_NAME, LIST_ENDPOINTS_DESCRIPTION, LIST_ENDPOINTS_SCHEMA, createListEndpointsHandler, } from "./tools/list-endpoints.js";
87
71
  import { IMPORT_OPENAPI_ENDPOINTS_NAME, IMPORT_OPENAPI_ENDPOINTS_DESCRIPTION, IMPORT_OPENAPI_ENDPOINTS_SCHEMA, createImportOpenApiEndpointsHandler, } from "./tools/import-openapi-endpoints.js";
88
72
  import { UPDATE_ENDPOINT_NAME, UPDATE_ENDPOINT_DESCRIPTION, UPDATE_ENDPOINT_SCHEMA, createUpdateEndpointHandler, } from "./tools/update-endpoint.js";
89
- // Tools Local Scan
90
- import { LOCAL_SCAN_NAME, LOCAL_SCAN_DESCRIPTION, LOCAL_SCAN_SCHEMA, createLocalScanHandler, } from "./tools/local-scan.js";
91
- // Tools — Local Infrastructure Discovery
73
+ import { MANAGE_APPLICATION_NAME, MANAGE_APPLICATION_DESCRIPTION, MANAGE_APPLICATION_SCHEMA, createManageApplicationHandler, } from "./tools/manage-application.js";
74
+ import { MANAGE_ENDPOINT_LIFECYCLE_NAME, MANAGE_ENDPOINT_LIFECYCLE_DESCRIPTION, MANAGE_ENDPOINT_LIFECYCLE_SCHEMA, createManageEndpointLifecycleHandler, } from "./tools/manage-endpoint-lifecycle.js";
92
75
  import { DISCOVER_LOCAL_INFRA_NAME, DISCOVER_LOCAL_INFRA_DESCRIPTION, DISCOVER_LOCAL_INFRA_SCHEMA, createDiscoverLocalInfraHandler, } from "./tools/discover-local-infra.js";
93
- // Tools — Diagram Generation
94
76
  import { GENERATE_DIAGRAM_NAME, GENERATE_DIAGRAM_DESCRIPTION, GENERATE_DIAGRAM_SCHEMA, createGenerateDiagramHandler, } from "./tools/generate-diagram.js";
95
- // Tools — Diagram CRUD
96
77
  import { LIST_DIAGRAMS_NAME, LIST_DIAGRAMS_DESCRIPTION, LIST_DIAGRAMS_SCHEMA, createListDiagramsHandler, } from "./tools/list-diagrams.js";
97
78
  import { GET_DIAGRAM_NAME, GET_DIAGRAM_DESCRIPTION, GET_DIAGRAM_SCHEMA, createGetDiagramHandler, } from "./tools/get-diagram.js";
98
79
  import { CREATE_DIAGRAM_NAME, CREATE_DIAGRAM_DESCRIPTION, CREATE_DIAGRAM_SCHEMA, createCreateDiagramHandler, } from "./tools/create-diagram.js";
99
80
  import { MANAGE_DIAGRAM_NAME, MANAGE_DIAGRAM_DESCRIPTION, MANAGE_DIAGRAM_SCHEMA, createManageDiagramHandler, } from "./tools/manage-diagram.js";
100
81
  import { UPDATE_MERMAID_SOURCE_NAME, UPDATE_MERMAID_SOURCE_DESCRIPTION, UPDATE_MERMAID_SOURCE_SCHEMA, createUpdateMermaidSourceHandler, } from "./tools/update-mermaid-source.js";
101
82
  import { LIST_DOCUMENTS_NAME, LIST_DOCUMENTS_DESCRIPTION, LIST_DOCUMENTS_SCHEMA, createListDocumentsHandler, } from "./tools/list-documents.js";
83
+ import { CREATE_ARTIFACT_NAME, CREATE_ARTIFACT_DESCRIPTION, CREATE_ARTIFACT_SCHEMA, createCreateArtifactHandler, GET_ARTIFACT_NAME, GET_ARTIFACT_DESCRIPTION, GET_ARTIFACT_SCHEMA, createGetArtifactHandler, UPDATE_ARTIFACT_CONTENT_NAME, UPDATE_ARTIFACT_CONTENT_DESCRIPTION, UPDATE_ARTIFACT_CONTENT_SCHEMA, createUpdateArtifactContentHandler, LIST_ARTIFACT_VERSIONS_NAME, LIST_ARTIFACT_VERSIONS_DESCRIPTION, LIST_ARTIFACT_VERSIONS_SCHEMA, createListArtifactVersionsHandler, } from "./tools/artifacts.js";
84
+ import { MEMORY_PRIOR_FINDINGS_NAME, MEMORY_PRIOR_FINDINGS_DESCRIPTION, MEMORY_PRIOR_FINDINGS_SCHEMA, createMemoryPriorFindingsHandler, MEMORY_RETEST_CANDIDATES_NAME, MEMORY_RETEST_CANDIDATES_DESCRIPTION, MEMORY_RETEST_CANDIDATES_SCHEMA, createMemoryRetestCandidatesHandler, MEMORY_THREAT_MODEL_SECTION_NAME, MEMORY_THREAT_MODEL_SECTION_DESCRIPTION, MEMORY_THREAT_MODEL_SECTION_SCHEMA, createMemoryThreatModelSectionHandler, MEMORY_COVERAGE_NAME, MEMORY_COVERAGE_DESCRIPTION, MEMORY_COVERAGE_SCHEMA, createMemoryCoverageHandler, } from "./tools/security-memory.js";
85
+ import { RUN_START_NAME, RUN_START_DESCRIPTION, RUN_START_SCHEMA, createRunStartHandler, RUN_REPORT_NAME, RUN_REPORT_DESCRIPTION, RUN_REPORT_SCHEMA, createRunReportHandler, RUN_COMPLETE_NAME, RUN_COMPLETE_DESCRIPTION, RUN_COMPLETE_SCHEMA, createRunCompleteHandler, RUN_CANCEL_NAME, RUN_CANCEL_DESCRIPTION, RUN_CANCEL_SCHEMA, createRunCancelHandler, } from "./tools/devx-run.js";
102
86
  import { GET_DOCUMENT_NAME, GET_DOCUMENT_DESCRIPTION, GET_DOCUMENT_SCHEMA, createGetDocumentHandler, } from "./tools/get-document.js";
103
87
  import { CREATE_DOCUMENT_NAME, CREATE_DOCUMENT_DESCRIPTION, CREATE_DOCUMENT_SCHEMA, createCreateDocumentHandler, } from "./tools/create-document.js";
88
+ import { CREATE_FINDING_NAME, CREATE_FINDING_DESCRIPTION, CREATE_FINDING_SCHEMA, createCreateFindingHandler, } from "./tools/create-finding.js";
89
+ import { UPDATE_FINDING_NAME, UPDATE_FINDING_DESCRIPTION, UPDATE_FINDING_SCHEMA, createUpdateFindingHandler, } from "./tools/update-finding.js";
90
+ import { DELETE_FINDING_NAME, DELETE_FINDING_DESCRIPTION, DELETE_FINDING_SCHEMA, createDeleteFindingHandler, } from "./tools/delete-finding.js";
104
91
  import { UPDATE_DOCUMENT_NAME, UPDATE_DOCUMENT_DESCRIPTION, UPDATE_DOCUMENT_SCHEMA, createUpdateDocumentHandler, } from "./tools/update-document.js";
105
- // Tools — Security Review (composite intelligence)
106
92
  import { SECURITY_REVIEW_NAME, SECURITY_REVIEW_DESCRIPTION, SECURITY_REVIEW_SCHEMA, createSecurityReviewHandler, } from "./tools/security-review.js";
107
- // Tools — Project Binding
108
93
  import { CHECK_PROJECT_NAME, CHECK_PROJECT_DESCRIPTION, CHECK_PROJECT_SCHEMA, createCheckProjectHandler, } from "./tools/check-project.js";
109
- // Tools — Test Library (IP-protected: metadata only, no prompts/patterns)
110
- import { LIST_TEST_LIBRARY_NAME, LIST_TEST_LIBRARY_DESCRIPTION, LIST_TEST_LIBRARY_SCHEMA, createListTestLibraryHandler, } from "./tools/list-test-library.js";
111
- import { GET_TEST_DETAILS_NAME, GET_TEST_DETAILS_DESCRIPTION, GET_TEST_DETAILS_SCHEMA, createGetTestDetailsHandler, } from "./tools/get-test-details.js";
112
- import { LIST_TEST_SCENARIOS_NAME, LIST_TEST_SCENARIOS_DESCRIPTION, LIST_TEST_SCENARIOS_SCHEMA, createListTestScenariosHandler, } from "./tools/list-test-scenarios.js";
113
- import { GET_SCENARIO_DETAILS_NAME, GET_SCENARIO_DETAILS_DESCRIPTION, GET_SCENARIO_DETAILS_SCHEMA, createGetScenarioDetailsHandler, } from "./tools/get-scenario-details.js";
114
- import { LIST_AGENT_TEST_CASES_NAME, LIST_AGENT_TEST_CASES_DESCRIPTION, LIST_AGENT_TEST_CASES_SCHEMA, createListAgentTestCasesHandler, } from "./tools/list-agent-test-cases.js";
115
- import { RUN_TEST_SCENARIO_NAME, RUN_TEST_SCENARIO_DESCRIPTION, RUN_TEST_SCENARIO_SCHEMA, createRunTestScenarioHandler, } from "./tools/run-test-scenario.js";
116
- // ── Enterprise Tools — Threat Model Management ──
117
- import { GET_THREAT_MODEL_NAME, GET_THREAT_MODEL_DESCRIPTION, GET_THREAT_MODEL_SCHEMA, createGetThreatModelHandler } from "./tools/enterprise/get-threat-model.js";
118
- import { LIST_THREAT_MODELS_NAME, LIST_THREAT_MODELS_DESCRIPTION, LIST_THREAT_MODELS_SCHEMA, createListThreatModelsHandler } from "./tools/enterprise/list-threat-models.js";
119
- import { MANAGE_ACTOR_NAME, MANAGE_ACTOR_DESCRIPTION, MANAGE_ACTOR_SCHEMA, createManageActorHandler } from "./tools/enterprise/manage-actor.js";
120
- import { MANAGE_COMPONENT_NAME, MANAGE_COMPONENT_DESCRIPTION, MANAGE_COMPONENT_SCHEMA, createManageComponentHandler } from "./tools/enterprise/manage-component.js";
121
- import { MANAGE_DATA_FLOW_NAME, MANAGE_DATA_FLOW_DESCRIPTION, MANAGE_DATA_FLOW_SCHEMA, createManageDataFlowHandler } from "./tools/enterprise/manage-data-flow.js";
122
- import { MANAGE_ATTACK_SCENARIO_NAME, MANAGE_ATTACK_SCENARIO_DESCRIPTION, MANAGE_ATTACK_SCENARIO_SCHEMA, createManageAttackScenarioHandler } from "./tools/enterprise/manage-attack-scenario.js";
123
- import { MANAGE_SECURITY_CONTROL_NAME, MANAGE_SECURITY_CONTROL_DESCRIPTION, MANAGE_SECURITY_CONTROL_SCHEMA, createManageSecurityControlHandler } from "./tools/enterprise/manage-security-control.js";
124
- import { MANAGE_DATA_ASSET_NAME, MANAGE_DATA_ASSET_DESCRIPTION, MANAGE_DATA_ASSET_SCHEMA, createManageDataAssetHandler } from "./tools/enterprise/manage-data-asset.js";
125
- import { MANAGE_TEST_CASE_NAME, MANAGE_TEST_CASE_DESCRIPTION, MANAGE_TEST_CASE_SCHEMA, createManageTestCaseHandler } from "./tools/enterprise/manage-test-case.js";
126
- import { MANAGE_FINDING_NAME, MANAGE_FINDING_DESCRIPTION, MANAGE_FINDING_SCHEMA, createManageFindingHandler } from "./tools/enterprise/manage-finding.js";
127
- // ── Enterprise Tools — Pen Test Sessions ──
128
- import { START_PENTEST_SESSION_NAME, START_PENTEST_SESSION_DESCRIPTION, START_PENTEST_SESSION_SCHEMA, createStartPentestSessionHandler } from "./tools/enterprise/start-pentest-session.js";
129
- import { RECORD_TEST_RESULT_NAME, RECORD_TEST_RESULT_DESCRIPTION, RECORD_TEST_RESULT_SCHEMA, createRecordTestResultHandler } from "./tools/enterprise/record-test-result.js";
130
- import { END_PENTEST_SESSION_NAME, END_PENTEST_SESSION_DESCRIPTION, END_PENTEST_SESSION_SCHEMA, createEndPentestSessionHandler } from "./tools/enterprise/end-pentest-session.js";
131
- import { PUBLISH_TEST_TO_LIBRARY_NAME, PUBLISH_TEST_TO_LIBRARY_DESCRIPTION, PUBLISH_TEST_TO_LIBRARY_SCHEMA, createPublishTestToLibraryHandler } from "./tools/enterprise/publish-test-to-library.js";
132
- // ── Enterprise Tools — Evidence & Reports ──
133
- import { CAPTURE_EVIDENCE_NAME, CAPTURE_EVIDENCE_DESCRIPTION, CAPTURE_EVIDENCE_SCHEMA, createCaptureEvidenceHandler } from "./tools/enterprise/capture-evidence.js";
134
- import { GENERATE_REPORT_NAME, GENERATE_REPORT_DESCRIPTION, GENERATE_REPORT_SCHEMA, createGenerateReportHandler } from "./tools/enterprise/generate-report.js";
135
- import { GET_REPORT_STATUS_NAME, GET_REPORT_STATUS_DESCRIPTION, GET_REPORT_STATUS_SCHEMA, createGetReportStatusHandler } from "./tools/enterprise/get-report-status.js";
136
- // ── Enterprise Tools — Report Issues & Remediation ──
137
- import { PROMOTE_FINDING_TO_ISSUE_NAME, PROMOTE_FINDING_TO_ISSUE_DESCRIPTION, PROMOTE_FINDING_TO_ISSUE_SCHEMA, createPromoteFindingToIssueHandler } from "./tools/enterprise/promote-finding-to-issue.js";
138
- import { LIST_REPORT_ISSUES_NAME, LIST_REPORT_ISSUES_DESCRIPTION, LIST_REPORT_ISSUES_SCHEMA, createListReportIssuesHandler } from "./tools/enterprise/list-report-issues.js";
139
- import { UPDATE_REPORT_ISSUE_NAME, UPDATE_REPORT_ISSUE_DESCRIPTION, UPDATE_REPORT_ISSUE_SCHEMA, createUpdateReportIssueHandler } from "./tools/enterprise/update-report-issue.js";
140
- import { SYNC_REPORT_SECTION_NAME, SYNC_REPORT_SECTION_DESCRIPTION, SYNC_REPORT_SECTION_SCHEMA, createSyncReportSectionHandler } from "./tools/enterprise/sync-report-section.js";
141
- import { PUBLISH_REPORT_VERSION_NAME, PUBLISH_REPORT_VERSION_DESCRIPTION, PUBLISH_REPORT_VERSION_SCHEMA, createPublishReportVersionHandler } from "./tools/enterprise/publish-report-version.js";
142
- import { CREATE_REPORT_TICKET_NAME, CREATE_REPORT_TICKET_DESCRIPTION, CREATE_REPORT_TICKET_SCHEMA, createCreateReportTicketHandler } from "./tools/enterprise/create-report-ticket.js";
143
- // ── Enterprise Tools — ZAT ──
144
94
  import { GET_ORG_ZAT_NAME, GET_ORG_ZAT_DESCRIPTION, GET_ORG_ZAT_SCHEMA, createGetOrgZatHandler } from "./tools/enterprise/get-org-zat.js";
145
- // ── Enterprise Tools — Agent Instances ──
146
- import { LIST_AGENTS_NAME, LIST_AGENTS_DESCRIPTION, LIST_AGENTS_SCHEMA, createListAgentsHandler } from "./tools/enterprise/list-agents.js";
147
- // ── IDE Bridge ──
148
95
  import { OPEN_IN_IDE_NAME, OPEN_IN_IDE_DESCRIPTION, OPEN_IN_IDE_SCHEMA, createOpenInIdeHandler, } from "./tools/open-in-ide.js";
149
- /**
150
- * Create and start the MCP server with all tools registered
151
- */
152
- export async function startServer(config = DEFAULT_CONFIG) {
153
- // Detect the project binding FIRST so we can auto-adopt its session
154
- // when no explicit ZIVIS_SESSION was passed. This makes .zivis/project.json
155
- // the single source of truth — cd into a project and the correct tokens
156
- // are used without any IDE config to go stale.
157
- const detected = detectProjectBinding(process.cwd());
158
- if (detected && !config.session) {
159
- config = { ...config, session: detected.binding.session };
160
- console.error(`[zivis] Auto-adopted session "${config.session}" from ${detected.filePath}`);
96
+ export async function startServer(incoming = DEFAULT_CONFIG) {
97
+ const workspacePath = incoming.workspacePath ?? process.cwd();
98
+ const detected = detectProjectBinding(workspacePath);
99
+ const fromBinding = resolveConfigFromBinding(workspacePath);
100
+ const overlay = {
101
+ ...incoming,
102
+ ...fromBinding,
103
+ workspacePath: incoming.workspacePath,
104
+ };
105
+ const config = {
106
+ ...overlay,
107
+ session: resolveMcpSessionForWorkspace(incoming, workspacePath, detected, fromBinding),
108
+ };
109
+ if (detected) {
110
+ console.error(`[zivis] Project binding: ${detected.filePath} (session "${detected.binding.session}")`);
161
111
  }
162
112
  const server = new McpServer({
163
113
  name: "zivis-security",
164
114
  version: "0.2.0",
115
+ }, {
116
+ capabilities: {
117
+ tools: {},
118
+ prompts: {},
119
+ },
165
120
  });
166
121
  const apiClient = new ApiClient(config);
167
- // ── Register Tools: Findings ──
168
- server.registerTool(GET_FINDINGS_NAME, {
169
- description: GET_FINDINGS_DESCRIPTION,
170
- inputSchema: GET_FINDINGS_SCHEMA,
171
- }, createGetFindingsHandler(apiClient));
172
- server.registerTool(GET_FINDING_DETAILS_NAME, {
173
- description: GET_FINDING_DETAILS_DESCRIPTION,
174
- inputSchema: GET_FINDING_DETAILS_SCHEMA,
175
- }, createGetFindingDetailsHandler(apiClient));
176
- server.registerTool(TRIAGE_FINDING_NAME, {
177
- description: TRIAGE_FINDING_DESCRIPTION,
178
- inputSchema: TRIAGE_FINDING_SCHEMA,
179
- }, createTriageFindingHandler(apiClient));
180
- // ── Register Tools: Scans & Artifacts ──
181
- server.registerTool(LIST_SCANS_NAME, {
182
- description: LIST_SCANS_DESCRIPTION,
183
- inputSchema: LIST_SCANS_SCHEMA,
184
- }, createListScansHandler(apiClient));
185
- server.registerTool(LIST_RECON_SCANS_NAME, {
186
- description: LIST_RECON_SCANS_DESCRIPTION,
187
- inputSchema: LIST_RECON_SCANS_SCHEMA,
188
- }, createListReconScansHandler(apiClient));
189
- server.registerTool(GET_RECON_SCAN_NAME, {
190
- description: GET_RECON_SCAN_DESCRIPTION,
191
- inputSchema: GET_RECON_SCAN_SCHEMA,
192
- }, createGetReconScanHandler(apiClient));
193
- server.registerTool(GET_SCAN_OUTPUT_NAME, {
194
- description: GET_SCAN_OUTPUT_DESCRIPTION,
195
- inputSchema: GET_SCAN_OUTPUT_SCHEMA,
196
- }, createGetScanOutputHandler(apiClient));
197
- server.registerTool(GET_TEST_CASE_RESULTS_NAME, {
198
- description: GET_TEST_CASE_RESULTS_DESCRIPTION,
199
- inputSchema: GET_TEST_CASE_RESULTS_SCHEMA,
200
- }, createGetTestCaseResultsHandler(apiClient));
201
- server.registerTool(GET_AGENT_TEST_RESULTS_NAME, {
202
- description: GET_AGENT_TEST_RESULTS_DESCRIPTION,
203
- inputSchema: GET_AGENT_TEST_RESULTS_SCHEMA,
204
- }, createGetAgentTestResultsHandler(apiClient));
205
- server.registerTool(LIST_SCAN_ARTIFACTS_NAME, {
206
- description: LIST_SCAN_ARTIFACTS_DESCRIPTION,
207
- inputSchema: LIST_SCAN_ARTIFACTS_SCHEMA,
208
- }, createListScanArtifactsHandler(apiClient));
209
- server.registerTool(GET_ARTIFACT_CONTENT_NAME, {
210
- description: GET_ARTIFACT_CONTENT_DESCRIPTION,
211
- inputSchema: GET_ARTIFACT_CONTENT_SCHEMA,
212
- }, createGetArtifactContentHandler(apiClient));
213
- // ── Register Tools: PR Safety ──
214
- server.registerTool(SCAN_PR_NAME, {
215
- description: SCAN_PR_DESCRIPTION,
216
- inputSchema: SCAN_PR_SCHEMA,
217
- }, createScanPrHandler(apiClient));
218
- // ── Register Tools: OSS Trust ──
122
+ server.registerTool(GET_STARTED_NAME, {
123
+ description: GET_STARTED_DESCRIPTION,
124
+ inputSchema: GET_STARTED_SCHEMA,
125
+ }, createGetStartedHandler(apiClient, config));
126
+ server.registerTool(INSPECT_NAME, {
127
+ description: INSPECT_DESCRIPTION,
128
+ inputSchema: INSPECT_SCHEMA,
129
+ }, createInspectHandler(apiClient, config));
130
+ server.registerTool(THREAT_LIST_RELEVANT_CAPSULES_NAME, {
131
+ description: THREAT_LIST_RELEVANT_CAPSULES_DESCRIPTION,
132
+ inputSchema: THREAT_LIST_RELEVANT_CAPSULES_SCHEMA,
133
+ }, createThreatListRelevantCapsulesHandler());
134
+ server.registerTool(THREAT_GET_CAPSULE_NAME, {
135
+ description: THREAT_GET_CAPSULE_DESCRIPTION,
136
+ inputSchema: THREAT_GET_CAPSULE_SCHEMA,
137
+ }, createThreatGetCapsuleHandler());
138
+ server.registerTool(THREAT_GET_INFERENCE_PROMPT_NAME, {
139
+ description: THREAT_GET_INFERENCE_PROMPT_DESCRIPTION,
140
+ inputSchema: THREAT_GET_INFERENCE_PROMPT_SCHEMA,
141
+ }, createThreatGetInferencePromptHandler());
142
+ server.registerTool(THREAT_RUN_MATCHER_NAME, {
143
+ description: THREAT_RUN_MATCHER_DESCRIPTION,
144
+ inputSchema: THREAT_RUN_MATCHER_SCHEMA,
145
+ }, createThreatRunMatcherHandler());
219
146
  server.registerTool(CHECK_REPO_TRUST_NAME, {
220
147
  description: CHECK_REPO_TRUST_DESCRIPTION,
221
148
  inputSchema: CHECK_REPO_TRUST_SCHEMA,
222
149
  }, createCheckRepoTrustHandler(config));
223
- // ── Register Tools: ZAT & Trust Verification ──
224
150
  server.registerTool(GET_OSS_ZAT_NAME, {
225
151
  description: GET_OSS_ZAT_DESCRIPTION,
226
152
  inputSchema: GET_OSS_ZAT_SCHEMA,
@@ -237,12 +163,6 @@ export async function startServer(config = DEFAULT_CONFIG) {
237
163
  description: INSPECT_ZAT_DESCRIPTION,
238
164
  inputSchema: INSPECT_ZAT_SCHEMA,
239
165
  }, createInspectZatHandler());
240
- // ── Register Tools: Red Team Setup ──
241
- server.registerTool(SETUP_RED_TEAM_TARGET_NAME, {
242
- description: SETUP_RED_TEAM_TARGET_DESCRIPTION,
243
- inputSchema: SETUP_RED_TEAM_TARGET_SCHEMA,
244
- }, createSetupRedTeamTargetHandler(apiClient));
245
- // ── Register Tools: Application & Endpoint Management ──
246
166
  server.registerTool(LIST_APPLICATIONS_NAME, {
247
167
  description: LIST_APPLICATIONS_DESCRIPTION,
248
168
  inputSchema: LIST_APPLICATIONS_SCHEMA,
@@ -255,6 +175,22 @@ export async function startServer(config = DEFAULT_CONFIG) {
255
175
  description: GET_APPLICATION_OVERVIEW_DESCRIPTION,
256
176
  inputSchema: GET_APPLICATION_OVERVIEW_SCHEMA,
257
177
  }, createGetApplicationOverviewHandler(apiClient));
178
+ server.registerTool(REVIEW_CHANGE_NAME, {
179
+ description: REVIEW_CHANGE_DESCRIPTION,
180
+ inputSchema: REVIEW_CHANGE_SCHEMA,
181
+ }, createReviewChangeHandler(apiClient));
182
+ server.registerTool(EXPLAIN_SIGNAL_FOR_DIFF_NAME, {
183
+ description: EXPLAIN_SIGNAL_FOR_DIFF_DESCRIPTION,
184
+ inputSchema: EXPLAIN_SIGNAL_FOR_DIFF_SCHEMA,
185
+ }, createExplainSignalForDiffHandler(apiClient));
186
+ server.registerTool(LIST_SIGNALS_NAME, {
187
+ description: LIST_SIGNALS_DESCRIPTION,
188
+ inputSchema: LIST_SIGNALS_SCHEMA,
189
+ }, createListSignalsHandler(apiClient));
190
+ server.registerTool(GET_SIGNAL_NAME, {
191
+ description: GET_SIGNAL_DESCRIPTION,
192
+ inputSchema: GET_SIGNAL_SCHEMA,
193
+ }, createGetSignalHandler(apiClient));
258
194
  server.registerTool(LIST_ENDPOINTS_NAME, {
259
195
  description: LIST_ENDPOINTS_DESCRIPTION,
260
196
  inputSchema: LIST_ENDPOINTS_SCHEMA,
@@ -267,22 +203,22 @@ export async function startServer(config = DEFAULT_CONFIG) {
267
203
  description: UPDATE_ENDPOINT_DESCRIPTION,
268
204
  inputSchema: UPDATE_ENDPOINT_SCHEMA,
269
205
  }, createUpdateEndpointHandler(apiClient));
270
- // ── Register Tools: Local Scan ──
271
- server.registerTool(LOCAL_SCAN_NAME, {
272
- description: LOCAL_SCAN_DESCRIPTION,
273
- inputSchema: LOCAL_SCAN_SCHEMA,
274
- }, createLocalScanHandler(apiClient));
275
- // ── Register Tools: Local Infrastructure Discovery ──
206
+ server.registerTool(MANAGE_APPLICATION_NAME, {
207
+ description: MANAGE_APPLICATION_DESCRIPTION,
208
+ inputSchema: MANAGE_APPLICATION_SCHEMA,
209
+ }, createManageApplicationHandler(apiClient));
210
+ server.registerTool(MANAGE_ENDPOINT_LIFECYCLE_NAME, {
211
+ description: MANAGE_ENDPOINT_LIFECYCLE_DESCRIPTION,
212
+ inputSchema: MANAGE_ENDPOINT_LIFECYCLE_SCHEMA,
213
+ }, createManageEndpointLifecycleHandler(apiClient));
276
214
  server.registerTool(DISCOVER_LOCAL_INFRA_NAME, {
277
215
  description: DISCOVER_LOCAL_INFRA_DESCRIPTION,
278
216
  inputSchema: DISCOVER_LOCAL_INFRA_SCHEMA,
279
217
  }, createDiscoverLocalInfraHandler());
280
- // ── Register Tools: Diagram Generation ──
281
218
  server.registerTool(GENERATE_DIAGRAM_NAME, {
282
219
  description: GENERATE_DIAGRAM_DESCRIPTION,
283
220
  inputSchema: GENERATE_DIAGRAM_SCHEMA,
284
221
  }, createGenerateDiagramHandler(apiClient));
285
- // ── Register Tools: Diagram CRUD ──
286
222
  server.registerTool(LIST_DIAGRAMS_NAME, {
287
223
  description: LIST_DIAGRAMS_DESCRIPTION,
288
224
  inputSchema: LIST_DIAGRAMS_SCHEMA,
@@ -304,64 +240,42 @@ export async function startServer(config = DEFAULT_CONFIG) {
304
240
  inputSchema: UPDATE_MERMAID_SOURCE_SCHEMA,
305
241
  }, createUpdateMermaidSourceHandler(apiClient));
306
242
  server.registerTool(LIST_DOCUMENTS_NAME, { description: LIST_DOCUMENTS_DESCRIPTION, inputSchema: LIST_DOCUMENTS_SCHEMA }, createListDocumentsHandler(apiClient));
243
+ server.registerTool(CREATE_ARTIFACT_NAME, { description: CREATE_ARTIFACT_DESCRIPTION, inputSchema: CREATE_ARTIFACT_SCHEMA }, createCreateArtifactHandler(apiClient));
244
+ server.registerTool(GET_ARTIFACT_NAME, { description: GET_ARTIFACT_DESCRIPTION, inputSchema: GET_ARTIFACT_SCHEMA }, createGetArtifactHandler(apiClient));
245
+ server.registerTool(UPDATE_ARTIFACT_CONTENT_NAME, { description: UPDATE_ARTIFACT_CONTENT_DESCRIPTION, inputSchema: UPDATE_ARTIFACT_CONTENT_SCHEMA }, createUpdateArtifactContentHandler(apiClient));
246
+ server.registerTool(LIST_ARTIFACT_VERSIONS_NAME, { description: LIST_ARTIFACT_VERSIONS_DESCRIPTION, inputSchema: LIST_ARTIFACT_VERSIONS_SCHEMA }, createListArtifactVersionsHandler(apiClient));
307
247
  server.registerTool(GET_DOCUMENT_NAME, { description: GET_DOCUMENT_DESCRIPTION, inputSchema: GET_DOCUMENT_SCHEMA }, createGetDocumentHandler(apiClient));
308
248
  server.registerTool(CREATE_DOCUMENT_NAME, { description: CREATE_DOCUMENT_DESCRIPTION, inputSchema: CREATE_DOCUMENT_SCHEMA }, createCreateDocumentHandler(apiClient));
249
+ server.registerTool(CREATE_FINDING_NAME, { description: CREATE_FINDING_DESCRIPTION, inputSchema: CREATE_FINDING_SCHEMA }, createCreateFindingHandler(apiClient));
250
+ server.registerTool(UPDATE_FINDING_NAME, { description: UPDATE_FINDING_DESCRIPTION, inputSchema: UPDATE_FINDING_SCHEMA }, createUpdateFindingHandler(apiClient));
251
+ server.registerTool(DELETE_FINDING_NAME, { description: DELETE_FINDING_DESCRIPTION, inputSchema: DELETE_FINDING_SCHEMA }, createDeleteFindingHandler(apiClient));
309
252
  server.registerTool(UPDATE_DOCUMENT_NAME, { description: UPDATE_DOCUMENT_DESCRIPTION, inputSchema: UPDATE_DOCUMENT_SCHEMA }, createUpdateDocumentHandler(apiClient));
310
- // ── Register Tools: IDE Bridge ──
253
+ server.registerTool(MEMORY_PRIOR_FINDINGS_NAME, { description: MEMORY_PRIOR_FINDINGS_DESCRIPTION, inputSchema: MEMORY_PRIOR_FINDINGS_SCHEMA }, createMemoryPriorFindingsHandler(apiClient));
254
+ server.registerTool(MEMORY_RETEST_CANDIDATES_NAME, { description: MEMORY_RETEST_CANDIDATES_DESCRIPTION, inputSchema: MEMORY_RETEST_CANDIDATES_SCHEMA }, createMemoryRetestCandidatesHandler(apiClient));
255
+ server.registerTool(MEMORY_THREAT_MODEL_SECTION_NAME, { description: MEMORY_THREAT_MODEL_SECTION_DESCRIPTION, inputSchema: MEMORY_THREAT_MODEL_SECTION_SCHEMA }, createMemoryThreatModelSectionHandler(apiClient));
256
+ server.registerTool(MEMORY_COVERAGE_NAME, { description: MEMORY_COVERAGE_DESCRIPTION, inputSchema: MEMORY_COVERAGE_SCHEMA }, createMemoryCoverageHandler(apiClient));
257
+ server.registerTool(RUN_START_NAME, { description: RUN_START_DESCRIPTION, inputSchema: RUN_START_SCHEMA }, createRunStartHandler(apiClient));
258
+ server.registerTool(RUN_REPORT_NAME, { description: RUN_REPORT_DESCRIPTION, inputSchema: RUN_REPORT_SCHEMA }, createRunReportHandler(apiClient));
259
+ server.registerTool(RUN_COMPLETE_NAME, { description: RUN_COMPLETE_DESCRIPTION, inputSchema: RUN_COMPLETE_SCHEMA }, createRunCompleteHandler(apiClient));
260
+ server.registerTool(RUN_CANCEL_NAME, { description: RUN_CANCEL_DESCRIPTION, inputSchema: RUN_CANCEL_SCHEMA }, createRunCancelHandler(apiClient));
311
261
  server.registerTool(OPEN_IN_IDE_NAME, { description: OPEN_IN_IDE_DESCRIPTION, inputSchema: OPEN_IN_IDE_SCHEMA }, createOpenInIdeHandler());
312
- // ── Register Tools: Security Review ──
313
262
  server.registerTool(SECURITY_REVIEW_NAME, {
314
263
  description: SECURITY_REVIEW_DESCRIPTION,
315
264
  inputSchema: SECURITY_REVIEW_SCHEMA,
316
265
  }, createSecurityReviewHandler(apiClient, config));
317
- // ── Register Tools: Project Binding ──
318
266
  server.registerTool(CHECK_PROJECT_NAME, {
319
267
  description: CHECK_PROJECT_DESCRIPTION,
320
268
  inputSchema: CHECK_PROJECT_SCHEMA,
321
269
  }, createCheckProjectHandler(apiClient, config));
322
- // ── Register Tools: Test Library (IP-protected) ──
323
- server.registerTool(LIST_TEST_LIBRARY_NAME, {
324
- description: LIST_TEST_LIBRARY_DESCRIPTION,
325
- inputSchema: LIST_TEST_LIBRARY_SCHEMA,
326
- }, createListTestLibraryHandler(apiClient));
327
- server.registerTool(GET_TEST_DETAILS_NAME, {
328
- description: GET_TEST_DETAILS_DESCRIPTION,
329
- inputSchema: GET_TEST_DETAILS_SCHEMA,
330
- }, createGetTestDetailsHandler(apiClient));
331
- server.registerTool(LIST_TEST_SCENARIOS_NAME, {
332
- description: LIST_TEST_SCENARIOS_DESCRIPTION,
333
- inputSchema: LIST_TEST_SCENARIOS_SCHEMA,
334
- }, createListTestScenariosHandler(apiClient));
335
- server.registerTool(GET_SCENARIO_DETAILS_NAME, {
336
- description: GET_SCENARIO_DETAILS_DESCRIPTION,
337
- inputSchema: GET_SCENARIO_DETAILS_SCHEMA,
338
- }, createGetScenarioDetailsHandler(apiClient));
339
- server.registerTool(LIST_AGENT_TEST_CASES_NAME, {
340
- description: LIST_AGENT_TEST_CASES_DESCRIPTION,
341
- inputSchema: LIST_AGENT_TEST_CASES_SCHEMA,
342
- }, createListAgentTestCasesHandler(apiClient));
343
- server.registerTool(RUN_TEST_SCENARIO_NAME, {
344
- description: RUN_TEST_SCENARIO_DESCRIPTION,
345
- inputSchema: RUN_TEST_SCENARIO_SCHEMA,
346
- }, createRunTestScenarioHandler(apiClient));
347
- // ── Register Enterprise Tools ──
348
- // These tools are visible to all orgs but return upgrade prompts for non-enterprise.
349
- // The handler wrapper checks features at call time via /api/mcp/features.
350
270
  let enterpriseFeatures = null;
351
- /**
352
- * Wraps an enterprise tool handler to check feature access at call time.
353
- * Non-enterprise orgs see the tools but get an upgrade message.
354
- */
355
271
  function wrapEnterpriseHandler(handler, featureKey = "mcpEnterpriseTools") {
356
272
  return async (params) => {
357
- // Lazy-load features on first enterprise tool call
358
273
  if (enterpriseFeatures === null) {
359
274
  try {
360
275
  const resp = await apiClient.get("/api/mcp/features");
361
276
  enterpriseFeatures = resp.features;
362
277
  }
363
278
  catch {
364
- // If feature check fails, allow the call (API will enforce access)
365
279
  enterpriseFeatures = {};
366
280
  }
367
281
  }
@@ -370,7 +284,7 @@ export async function startServer(config = DEFAULT_CONFIG) {
370
284
  content: [
371
285
  {
372
286
  type: "text",
373
- text: `This tool requires a Pro+, Enterprise, or Demo plan.\n\nUpgrade at https://app.zivis.ai/settings/billing to access enterprise MCP tools including:\n- Threat model management\n- Pen test session tracking\n- Evidence capture\n- Report generation\n\nContact sales@zivis.ai for enterprise pricing.`,
287
+ text: `This tool requires a Pro+, Enterprise, or Demo plan.\n\nUpgrade at https://app.zivis.ai/settings/billing to access enterprise MCP tools including:\n- Threat model management\n- Actor / component / data-flow / data-asset CRUD\n- Attack scenario and security control curation\n- Test case curation\n- Organizational attestation tokens (ZAT)\n\nContact sales@zivis.ai for enterprise pricing.`,
374
288
  },
375
289
  ],
376
290
  };
@@ -378,70 +292,33 @@ export async function startServer(config = DEFAULT_CONFIG) {
378
292
  return handler(params);
379
293
  };
380
294
  }
381
- // Agent Instances
382
295
  const enterpriseTools = [
383
- [LIST_AGENTS_NAME, LIST_AGENTS_DESCRIPTION, LIST_AGENTS_SCHEMA, createListAgentsHandler(apiClient)],
384
- // Threat Model Management
385
- [GET_THREAT_MODEL_NAME, GET_THREAT_MODEL_DESCRIPTION, GET_THREAT_MODEL_SCHEMA, createGetThreatModelHandler(apiClient)],
386
- [LIST_THREAT_MODELS_NAME, LIST_THREAT_MODELS_DESCRIPTION, LIST_THREAT_MODELS_SCHEMA, createListThreatModelsHandler(apiClient)],
387
- [MANAGE_ACTOR_NAME, MANAGE_ACTOR_DESCRIPTION, MANAGE_ACTOR_SCHEMA, createManageActorHandler(apiClient)],
388
- [MANAGE_COMPONENT_NAME, MANAGE_COMPONENT_DESCRIPTION, MANAGE_COMPONENT_SCHEMA, createManageComponentHandler(apiClient)],
389
- [MANAGE_DATA_FLOW_NAME, MANAGE_DATA_FLOW_DESCRIPTION, MANAGE_DATA_FLOW_SCHEMA, createManageDataFlowHandler(apiClient)],
390
- [MANAGE_ATTACK_SCENARIO_NAME, MANAGE_ATTACK_SCENARIO_DESCRIPTION, MANAGE_ATTACK_SCENARIO_SCHEMA, createManageAttackScenarioHandler(apiClient)],
391
- [MANAGE_SECURITY_CONTROL_NAME, MANAGE_SECURITY_CONTROL_DESCRIPTION, MANAGE_SECURITY_CONTROL_SCHEMA, createManageSecurityControlHandler(apiClient)],
392
- [MANAGE_DATA_ASSET_NAME, MANAGE_DATA_ASSET_DESCRIPTION, MANAGE_DATA_ASSET_SCHEMA, createManageDataAssetHandler(apiClient)],
393
- [MANAGE_TEST_CASE_NAME, MANAGE_TEST_CASE_DESCRIPTION, MANAGE_TEST_CASE_SCHEMA, createManageTestCaseHandler(apiClient)],
394
- [MANAGE_FINDING_NAME, MANAGE_FINDING_DESCRIPTION, MANAGE_FINDING_SCHEMA, createManageFindingHandler(apiClient)],
395
- // Pen Test Sessions
396
- [START_PENTEST_SESSION_NAME, START_PENTEST_SESSION_DESCRIPTION, START_PENTEST_SESSION_SCHEMA, createStartPentestSessionHandler(apiClient)],
397
- [RECORD_TEST_RESULT_NAME, RECORD_TEST_RESULT_DESCRIPTION, RECORD_TEST_RESULT_SCHEMA, createRecordTestResultHandler(apiClient)],
398
- [END_PENTEST_SESSION_NAME, END_PENTEST_SESSION_DESCRIPTION, END_PENTEST_SESSION_SCHEMA, createEndPentestSessionHandler(apiClient)],
399
- [PUBLISH_TEST_TO_LIBRARY_NAME, PUBLISH_TEST_TO_LIBRARY_DESCRIPTION, PUBLISH_TEST_TO_LIBRARY_SCHEMA, createPublishTestToLibraryHandler(apiClient)],
400
- // Evidence & Reports
401
- [CAPTURE_EVIDENCE_NAME, CAPTURE_EVIDENCE_DESCRIPTION, CAPTURE_EVIDENCE_SCHEMA, createCaptureEvidenceHandler(apiClient)],
402
- [GENERATE_REPORT_NAME, GENERATE_REPORT_DESCRIPTION, GENERATE_REPORT_SCHEMA, createGenerateReportHandler(apiClient)],
403
- [GET_REPORT_STATUS_NAME, GET_REPORT_STATUS_DESCRIPTION, GET_REPORT_STATUS_SCHEMA, createGetReportStatusHandler(apiClient)],
404
- // Report Issues & Remediation
405
- [PROMOTE_FINDING_TO_ISSUE_NAME, PROMOTE_FINDING_TO_ISSUE_DESCRIPTION, PROMOTE_FINDING_TO_ISSUE_SCHEMA, createPromoteFindingToIssueHandler(apiClient)],
406
- [LIST_REPORT_ISSUES_NAME, LIST_REPORT_ISSUES_DESCRIPTION, LIST_REPORT_ISSUES_SCHEMA, createListReportIssuesHandler(apiClient)],
407
- [UPDATE_REPORT_ISSUE_NAME, UPDATE_REPORT_ISSUE_DESCRIPTION, UPDATE_REPORT_ISSUE_SCHEMA, createUpdateReportIssueHandler(apiClient)],
408
- [SYNC_REPORT_SECTION_NAME, SYNC_REPORT_SECTION_DESCRIPTION, SYNC_REPORT_SECTION_SCHEMA, createSyncReportSectionHandler(apiClient)],
409
- [PUBLISH_REPORT_VERSION_NAME, PUBLISH_REPORT_VERSION_DESCRIPTION, PUBLISH_REPORT_VERSION_SCHEMA, createPublishReportVersionHandler(apiClient)],
410
- [CREATE_REPORT_TICKET_NAME, CREATE_REPORT_TICKET_DESCRIPTION, CREATE_REPORT_TICKET_SCHEMA, createCreateReportTicketHandler(apiClient)],
411
- // ZAT
412
296
  [GET_ORG_ZAT_NAME, GET_ORG_ZAT_DESCRIPTION, GET_ORG_ZAT_SCHEMA, createGetOrgZatHandler(apiClient)],
413
297
  ];
414
298
  for (const [name, description, schema, handler] of enterpriseTools) {
415
299
  server.registerTool(name, { description: description, inputSchema: schema }, wrapEnterpriseHandler(handler));
416
300
  }
417
- // ── Project binding check ──
418
- // `detected` was resolved at the top of this function so its session could
419
- // be auto-adopted into config when no explicit ZIVIS_SESSION was set.
420
301
  if (detected) {
421
302
  validateProjectBinding(detected.binding, detected.filePath, config);
422
303
  }
423
- // ── Session safety check ──
424
304
  if (config.session) {
425
305
  console.error(`[zivis] Session: ${config.session}`);
426
- // Verify the session has credentials before starting
427
- const creds = await resolveAuth(config);
306
+ const creds = await resolveAuth(config, "apikey");
428
307
  if (creds.method === "none") {
429
- console.error(`[zivis] ERROR: Session "${config.session}" has no credentials.`);
430
- console.error(`[zivis] Run: zivis auth login --session ${config.session}`);
308
+ console.error(`[zivis] ERROR: Session "${config.session}" has no API key for MCP.`);
309
+ console.error("[zivis] OAuth is used only to mint an org-scoped API key:");
310
+ console.error("[zivis] zivis auth bind");
311
+ console.error(`[zivis] Or paste a platform token: zivis auth token sk_<...> --session ${config.session}`);
431
312
  process.exit(1);
432
313
  }
433
314
  }
434
- // ── JWT org isolation check ──
435
- // Must run AFTER session check (needs valid tokens) but BEFORE connecting.
436
- // Prevents cross-org data leaks by verifying the JWT's org matches the project binding.
437
315
  if (detected?.binding.workosOrgId) {
438
- await validateJwtOrgBinding(detected.binding, config);
316
+ await validateApiKeyMatchesBinding(detected.binding, config);
439
317
  }
440
- // ── Connect via stdio ──
318
+ registerAllPrompts(server);
441
319
  const transport = new StdioServerTransport();
442
320
  await server.connect(transport);
443
321
  console.error("[zivis] MCP server running on stdio");
444
322
  console.error(`[zivis] API: ${config.apiBaseUrl}`);
445
- console.error(`[zivis] Tools: 31 public + ${enterpriseTools.length} enterprise`);
323
+ console.error(`[zivis] Tools: public + ${enterpriseTools.length} enterprise registered`);
446
324
  }
447
- //# sourceMappingURL=server.js.map