@zivis/mcp 0.1.0-alpha.9 → 0.1.5

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 (328) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +19 -0
  3. package/dist/api-client.d.ts +1 -31
  4. package/dist/api-client.js +26 -66
  5. package/dist/auth/index.d.ts +1 -22
  6. package/dist/auth/index.js +15 -46
  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 +1 -42
  12. package/dist/auth/oauth.js +22 -64
  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 +12 -47
  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 +134 -253
  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 +120 -111
  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/discover-local-infra.d.ts +0 -10
  83. package/dist/tools/discover-local-infra.js +3 -73
  84. package/dist/tools/enterprise/get-org-zat.d.ts +0 -5
  85. package/dist/tools/enterprise/get-org-zat.js +0 -6
  86. package/dist/tools/enterprise/get-threat-model.d.ts +1 -8
  87. package/dist/tools/enterprise/get-threat-model.js +9 -31
  88. package/dist/tools/enterprise/list-attack-scenarios.d.ts +24 -0
  89. package/dist/tools/enterprise/list-attack-scenarios.js +63 -0
  90. package/dist/tools/enterprise/list-threat-models.d.ts +1 -6
  91. package/dist/tools/enterprise/list-threat-models.js +1 -9
  92. package/dist/tools/enterprise/manage-actor.d.ts +2 -7
  93. package/dist/tools/enterprise/manage-actor.js +13 -7
  94. package/dist/tools/enterprise/manage-attack-scenario.d.ts +1 -6
  95. package/dist/tools/enterprise/manage-attack-scenario.js +12 -7
  96. package/dist/tools/enterprise/manage-data-asset.d.ts +2 -7
  97. package/dist/tools/enterprise/manage-data-asset.js +16 -7
  98. package/dist/tools/enterprise/manage-security-control.d.ts +1 -6
  99. package/dist/tools/enterprise/manage-security-control.js +17 -7
  100. package/dist/tools/explain-signal-for-diff.d.ts +34 -0
  101. package/dist/tools/explain-signal-for-diff.js +75 -0
  102. package/dist/tools/generate-diagram.d.ts +0 -6
  103. package/dist/tools/generate-diagram.js +21 -13
  104. package/dist/tools/get-application-overview.d.ts +0 -5
  105. package/dist/tools/get-application-overview.js +0 -6
  106. package/dist/tools/get-application.d.ts +0 -5
  107. package/dist/tools/get-application.js +0 -6
  108. package/dist/tools/get-diagram.d.ts +0 -5
  109. package/dist/tools/get-diagram.js +1 -11
  110. package/dist/tools/get-document.d.ts +0 -5
  111. package/dist/tools/get-document.js +0 -6
  112. package/dist/tools/get-oss-zat.d.ts +0 -5
  113. package/dist/tools/get-oss-zat.js +0 -7
  114. package/dist/tools/get-signal.d.ts +24 -0
  115. package/dist/tools/get-signal.js +75 -0
  116. package/dist/tools/get-started.d.ts +18 -0
  117. package/dist/tools/get-started.js +470 -0
  118. package/dist/tools/get-trust-keys.d.ts +0 -5
  119. package/dist/tools/get-trust-keys.js +0 -6
  120. package/dist/tools/import-openapi-endpoints.d.ts +0 -5
  121. package/dist/tools/import-openapi-endpoints.js +0 -6
  122. package/dist/tools/inspect-zat.d.ts +0 -5
  123. package/dist/tools/inspect-zat.js +0 -19
  124. package/dist/tools/inspect.d.ts +21 -0
  125. package/dist/tools/inspect.js +222 -0
  126. package/dist/tools/list-applications.d.ts +1 -6
  127. package/dist/tools/list-applications.js +0 -6
  128. package/dist/tools/list-diagrams.d.ts +0 -5
  129. package/dist/tools/list-diagrams.js +0 -6
  130. package/dist/tools/list-documents.d.ts +0 -5
  131. package/dist/tools/list-documents.js +0 -6
  132. package/dist/tools/list-endpoints.d.ts +1 -6
  133. package/dist/tools/list-endpoints.js +0 -6
  134. package/dist/tools/list-signals.d.ts +37 -0
  135. package/dist/tools/list-signals.js +83 -0
  136. package/dist/tools/manage-application.d.ts +64 -0
  137. package/dist/tools/manage-application.js +129 -0
  138. package/dist/tools/manage-diagram.d.ts +0 -5
  139. package/dist/tools/manage-diagram.js +0 -16
  140. package/dist/tools/manage-endpoint-lifecycle.d.ts +80 -0
  141. package/dist/tools/manage-endpoint-lifecycle.js +180 -0
  142. package/dist/tools/open-in-ide.d.ts +2 -14
  143. package/dist/tools/open-in-ide.js +0 -13
  144. package/dist/tools/review-change.d.ts +34 -0
  145. package/dist/tools/review-change.js +93 -0
  146. package/dist/tools/security-review.d.ts +0 -16
  147. package/dist/tools/security-review.js +63 -77
  148. package/dist/tools/threat-get-capsule.d.ts +15 -0
  149. package/dist/tools/threat-get-capsule.js +53 -0
  150. package/dist/tools/threat-get-inference-prompt.d.ts +15 -0
  151. package/dist/tools/threat-get-inference-prompt.js +73 -0
  152. package/dist/tools/threat-list-relevant-capsules.d.ts +17 -0
  153. package/dist/tools/threat-list-relevant-capsules.js +158 -0
  154. package/dist/tools/threat-run-matcher.d.ts +17 -0
  155. package/dist/tools/threat-run-matcher.js +145 -0
  156. package/dist/tools/update-document.d.ts +0 -5
  157. package/dist/tools/update-document.js +3 -9
  158. package/dist/tools/update-endpoint.d.ts +1 -6
  159. package/dist/tools/update-endpoint.js +0 -7
  160. package/dist/tools/update-finding.d.ts +61 -0
  161. package/dist/tools/update-finding.js +80 -0
  162. package/dist/tools/update-mermaid-source.d.ts +0 -13
  163. package/dist/tools/update-mermaid-source.js +0 -14
  164. package/dist/tools/verify-trust-mark.d.ts +0 -5
  165. package/dist/tools/verify-trust-mark.js +0 -6
  166. package/dist/types.d.ts +13 -13
  167. package/dist/types.js +22 -28
  168. package/package.json +27 -5
  169. package/dist/api-client.js.map +0 -1
  170. package/dist/auth/index.js.map +0 -1
  171. package/dist/auth/jwt.js.map +0 -1
  172. package/dist/auth/keychain.js.map +0 -1
  173. package/dist/auth/oauth.js.map +0 -1
  174. package/dist/auth/sessions.js.map +0 -1
  175. package/dist/auth/token-refresh.js.map +0 -1
  176. package/dist/cli.js.map +0 -1
  177. package/dist/index.js.map +0 -1
  178. package/dist/project-binding.js.map +0 -1
  179. package/dist/resolve-application-id.js.map +0 -1
  180. package/dist/sanitize.js.map +0 -1
  181. package/dist/server.js.map +0 -1
  182. package/dist/tools/check-project.js.map +0 -1
  183. package/dist/tools/check-repo-trust.js.map +0 -1
  184. package/dist/tools/create-diagram.js.map +0 -1
  185. package/dist/tools/create-document.js.map +0 -1
  186. package/dist/tools/discover-local-infra.js.map +0 -1
  187. package/dist/tools/enterprise/capture-evidence.d.ts +0 -54
  188. package/dist/tools/enterprise/capture-evidence.js +0 -72
  189. package/dist/tools/enterprise/capture-evidence.js.map +0 -1
  190. package/dist/tools/enterprise/create-report-ticket.d.ts +0 -34
  191. package/dist/tools/enterprise/create-report-ticket.js +0 -44
  192. package/dist/tools/enterprise/create-report-ticket.js.map +0 -1
  193. package/dist/tools/enterprise/end-pentest-session.d.ts +0 -33
  194. package/dist/tools/enterprise/end-pentest-session.js +0 -42
  195. package/dist/tools/enterprise/end-pentest-session.js.map +0 -1
  196. package/dist/tools/enterprise/generate-report.d.ts +0 -55
  197. package/dist/tools/enterprise/generate-report.js +0 -111
  198. package/dist/tools/enterprise/generate-report.js.map +0 -1
  199. package/dist/tools/enterprise/get-org-zat.js.map +0 -1
  200. package/dist/tools/enterprise/get-report-status.d.ts +0 -27
  201. package/dist/tools/enterprise/get-report-status.js +0 -38
  202. package/dist/tools/enterprise/get-report-status.js.map +0 -1
  203. package/dist/tools/enterprise/get-threat-model.js.map +0 -1
  204. package/dist/tools/enterprise/list-agents.d.ts +0 -42
  205. package/dist/tools/enterprise/list-agents.js +0 -95
  206. package/dist/tools/enterprise/list-agents.js.map +0 -1
  207. package/dist/tools/enterprise/list-report-issues.d.ts +0 -36
  208. package/dist/tools/enterprise/list-report-issues.js +0 -50
  209. package/dist/tools/enterprise/list-report-issues.js.map +0 -1
  210. package/dist/tools/enterprise/list-threat-models.js.map +0 -1
  211. package/dist/tools/enterprise/manage-actor.js.map +0 -1
  212. package/dist/tools/enterprise/manage-attack-scenario.js.map +0 -1
  213. package/dist/tools/enterprise/manage-component.d.ts +0 -58
  214. package/dist/tools/enterprise/manage-component.js +0 -90
  215. package/dist/tools/enterprise/manage-component.js.map +0 -1
  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.js.map +0 -1
  224. package/dist/tools/enterprise/manage-test-case.d.ts +0 -88
  225. package/dist/tools/enterprise/manage-test-case.js +0 -119
  226. package/dist/tools/enterprise/manage-test-case.js.map +0 -1
  227. package/dist/tools/enterprise/promote-finding-to-issue.d.ts +0 -36
  228. package/dist/tools/enterprise/promote-finding-to-issue.js +0 -65
  229. package/dist/tools/enterprise/promote-finding-to-issue.js.map +0 -1
  230. package/dist/tools/enterprise/publish-report-version.d.ts +0 -34
  231. package/dist/tools/enterprise/publish-report-version.js +0 -75
  232. package/dist/tools/enterprise/publish-report-version.js.map +0 -1
  233. package/dist/tools/enterprise/publish-test-to-library.d.ts +0 -31
  234. package/dist/tools/enterprise/publish-test-to-library.js +0 -40
  235. package/dist/tools/enterprise/publish-test-to-library.js.map +0 -1
  236. package/dist/tools/enterprise/record-test-result.d.ts +0 -67
  237. package/dist/tools/enterprise/record-test-result.js +0 -75
  238. package/dist/tools/enterprise/record-test-result.js.map +0 -1
  239. package/dist/tools/enterprise/start-pentest-session.d.ts +0 -35
  240. package/dist/tools/enterprise/start-pentest-session.js +0 -50
  241. package/dist/tools/enterprise/start-pentest-session.js.map +0 -1
  242. package/dist/tools/enterprise/sync-report-section.d.ts +0 -41
  243. package/dist/tools/enterprise/sync-report-section.js +0 -79
  244. package/dist/tools/enterprise/sync-report-section.js.map +0 -1
  245. package/dist/tools/enterprise/update-report-issue.d.ts +0 -55
  246. package/dist/tools/enterprise/update-report-issue.js +0 -69
  247. package/dist/tools/enterprise/update-report-issue.js.map +0 -1
  248. package/dist/tools/generate-diagram.js.map +0 -1
  249. package/dist/tools/get-agent-test-results.d.ts +0 -41
  250. package/dist/tools/get-agent-test-results.js +0 -86
  251. package/dist/tools/get-agent-test-results.js.map +0 -1
  252. package/dist/tools/get-application-overview.js.map +0 -1
  253. package/dist/tools/get-application.js.map +0 -1
  254. package/dist/tools/get-artifact-content.d.ts +0 -29
  255. package/dist/tools/get-artifact-content.js +0 -86
  256. package/dist/tools/get-artifact-content.js.map +0 -1
  257. package/dist/tools/get-diagram.js.map +0 -1
  258. package/dist/tools/get-document.js.map +0 -1
  259. package/dist/tools/get-finding-details.d.ts +0 -28
  260. package/dist/tools/get-finding-details.js +0 -43
  261. package/dist/tools/get-finding-details.js.map +0 -1
  262. package/dist/tools/get-findings.d.ts +0 -57
  263. package/dist/tools/get-findings.js +0 -103
  264. package/dist/tools/get-findings.js.map +0 -1
  265. package/dist/tools/get-oss-zat.js.map +0 -1
  266. package/dist/tools/get-recon-scan.d.ts +0 -27
  267. package/dist/tools/get-recon-scan.js +0 -46
  268. package/dist/tools/get-recon-scan.js.map +0 -1
  269. package/dist/tools/get-scan-output.d.ts +0 -27
  270. package/dist/tools/get-scan-output.js +0 -64
  271. package/dist/tools/get-scan-output.js.map +0 -1
  272. package/dist/tools/get-scenario-details.d.ts +0 -27
  273. package/dist/tools/get-scenario-details.js +0 -46
  274. package/dist/tools/get-scenario-details.js.map +0 -1
  275. package/dist/tools/get-test-case-results.d.ts +0 -37
  276. package/dist/tools/get-test-case-results.js +0 -66
  277. package/dist/tools/get-test-case-results.js.map +0 -1
  278. package/dist/tools/get-test-details.d.ts +0 -29
  279. package/dist/tools/get-test-details.js +0 -49
  280. package/dist/tools/get-test-details.js.map +0 -1
  281. package/dist/tools/get-trust-keys.js.map +0 -1
  282. package/dist/tools/import-openapi-endpoints.js.map +0 -1
  283. package/dist/tools/inspect-zat.js.map +0 -1
  284. package/dist/tools/list-agent-test-cases.d.ts +0 -41
  285. package/dist/tools/list-agent-test-cases.js +0 -73
  286. package/dist/tools/list-agent-test-cases.js.map +0 -1
  287. package/dist/tools/list-applications.js.map +0 -1
  288. package/dist/tools/list-diagrams.js.map +0 -1
  289. package/dist/tools/list-documents.js.map +0 -1
  290. package/dist/tools/list-endpoints.js.map +0 -1
  291. package/dist/tools/list-recon-scans.d.ts +0 -36
  292. package/dist/tools/list-recon-scans.js +0 -74
  293. package/dist/tools/list-recon-scans.js.map +0 -1
  294. package/dist/tools/list-scan-artifacts.d.ts +0 -41
  295. package/dist/tools/list-scan-artifacts.js +0 -63
  296. package/dist/tools/list-scan-artifacts.js.map +0 -1
  297. package/dist/tools/list-scans.d.ts +0 -44
  298. package/dist/tools/list-scans.js +0 -91
  299. package/dist/tools/list-scans.js.map +0 -1
  300. package/dist/tools/list-test-library.d.ts +0 -44
  301. package/dist/tools/list-test-library.js +0 -83
  302. package/dist/tools/list-test-library.js.map +0 -1
  303. package/dist/tools/list-test-scenarios.d.ts +0 -31
  304. package/dist/tools/list-test-scenarios.js +0 -66
  305. package/dist/tools/list-test-scenarios.js.map +0 -1
  306. package/dist/tools/local-scan.d.ts +0 -40
  307. package/dist/tools/local-scan.js +0 -261
  308. package/dist/tools/local-scan.js.map +0 -1
  309. package/dist/tools/manage-diagram.js.map +0 -1
  310. package/dist/tools/open-in-ide.js.map +0 -1
  311. package/dist/tools/run-test-scenario.d.ts +0 -37
  312. package/dist/tools/run-test-scenario.js +0 -70
  313. package/dist/tools/run-test-scenario.js.map +0 -1
  314. package/dist/tools/scan-pr.d.ts +0 -27
  315. package/dist/tools/scan-pr.js +0 -51
  316. package/dist/tools/scan-pr.js.map +0 -1
  317. package/dist/tools/security-review.js.map +0 -1
  318. package/dist/tools/setup-red-team-target.d.ts +0 -79
  319. package/dist/tools/setup-red-team-target.js +0 -430
  320. package/dist/tools/setup-red-team-target.js.map +0 -1
  321. package/dist/tools/triage-finding.d.ts +0 -47
  322. package/dist/tools/triage-finding.js +0 -116
  323. package/dist/tools/triage-finding.js.map +0 -1
  324. package/dist/tools/update-document.js.map +0 -1
  325. package/dist/tools/update-endpoint.js.map +0 -1
  326. package/dist/tools/update-mermaid-source.js.map +0 -1
  327. package/dist/tools/verify-trust-mark.js.map +0 -1
  328. package/dist/types.js.map +0 -1
package/dist/server.js CHANGED
@@ -1,226 +1,157 @@
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 binding — can'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 workosOrgId — cannot 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 skipped — no 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";
102
84
  import { GET_DOCUMENT_NAME, GET_DOCUMENT_DESCRIPTION, GET_DOCUMENT_SCHEMA, createGetDocumentHandler, } from "./tools/get-document.js";
103
85
  import { CREATE_DOCUMENT_NAME, CREATE_DOCUMENT_DESCRIPTION, CREATE_DOCUMENT_SCHEMA, createCreateDocumentHandler, } from "./tools/create-document.js";
86
+ import { CREATE_FINDING_NAME, CREATE_FINDING_DESCRIPTION, CREATE_FINDING_SCHEMA, createCreateFindingHandler, } from "./tools/create-finding.js";
87
+ import { UPDATE_FINDING_NAME, UPDATE_FINDING_DESCRIPTION, UPDATE_FINDING_SCHEMA, createUpdateFindingHandler, } from "./tools/update-finding.js";
88
+ import { DELETE_FINDING_NAME, DELETE_FINDING_DESCRIPTION, DELETE_FINDING_SCHEMA, createDeleteFindingHandler, } from "./tools/delete-finding.js";
104
89
  import { UPDATE_DOCUMENT_NAME, UPDATE_DOCUMENT_DESCRIPTION, UPDATE_DOCUMENT_SCHEMA, createUpdateDocumentHandler, } from "./tools/update-document.js";
105
- // Tools — Security Review (composite intelligence)
106
90
  import { SECURITY_REVIEW_NAME, SECURITY_REVIEW_DESCRIPTION, SECURITY_REVIEW_SCHEMA, createSecurityReviewHandler, } from "./tools/security-review.js";
107
- // Tools — Project Binding
108
91
  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
92
  import { GET_THREAT_MODEL_NAME, GET_THREAT_MODEL_DESCRIPTION, GET_THREAT_MODEL_SCHEMA, createGetThreatModelHandler } from "./tools/enterprise/get-threat-model.js";
118
93
  import { LIST_THREAT_MODELS_NAME, LIST_THREAT_MODELS_DESCRIPTION, LIST_THREAT_MODELS_SCHEMA, createListThreatModelsHandler } from "./tools/enterprise/list-threat-models.js";
94
+ import { LIST_ATTACK_SCENARIOS_NAME, LIST_ATTACK_SCENARIOS_DESCRIPTION, LIST_ATTACK_SCENARIOS_SCHEMA, createListAttackScenariosHandler } from "./tools/enterprise/list-attack-scenarios.js";
119
95
  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
96
  import { MANAGE_ATTACK_SCENARIO_NAME, MANAGE_ATTACK_SCENARIO_DESCRIPTION, MANAGE_ATTACK_SCENARIO_SCHEMA, createManageAttackScenarioHandler } from "./tools/enterprise/manage-attack-scenario.js";
123
97
  import { MANAGE_SECURITY_CONTROL_NAME, MANAGE_SECURITY_CONTROL_DESCRIPTION, MANAGE_SECURITY_CONTROL_SCHEMA, createManageSecurityControlHandler } from "./tools/enterprise/manage-security-control.js";
124
98
  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
99
  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
100
  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}`);
101
+ export async function startServer(incoming = DEFAULT_CONFIG) {
102
+ const workspacePath = incoming.workspacePath ?? process.cwd();
103
+ const detected = detectProjectBinding(workspacePath);
104
+ const fromBinding = resolveConfigFromBinding(workspacePath);
105
+ const overlay = {
106
+ ...incoming,
107
+ ...fromBinding,
108
+ workspacePath: incoming.workspacePath,
109
+ };
110
+ const config = {
111
+ ...overlay,
112
+ session: resolveMcpSessionForWorkspace(incoming, workspacePath, detected, fromBinding),
113
+ };
114
+ if (detected) {
115
+ console.error(`[zivis] Project binding: ${detected.filePath} (session "${detected.binding.session}")`);
161
116
  }
162
117
  const server = new McpServer({
163
118
  name: "zivis-security",
164
119
  version: "0.2.0",
120
+ }, {
121
+ capabilities: {
122
+ tools: {},
123
+ prompts: {},
124
+ },
165
125
  });
166
126
  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 ──
127
+ server.registerTool(GET_STARTED_NAME, {
128
+ description: GET_STARTED_DESCRIPTION,
129
+ inputSchema: GET_STARTED_SCHEMA,
130
+ }, createGetStartedHandler(apiClient, config));
131
+ server.registerTool(INSPECT_NAME, {
132
+ description: INSPECT_DESCRIPTION,
133
+ inputSchema: INSPECT_SCHEMA,
134
+ }, createInspectHandler(apiClient, config));
135
+ server.registerTool(THREAT_LIST_RELEVANT_CAPSULES_NAME, {
136
+ description: THREAT_LIST_RELEVANT_CAPSULES_DESCRIPTION,
137
+ inputSchema: THREAT_LIST_RELEVANT_CAPSULES_SCHEMA,
138
+ }, createThreatListRelevantCapsulesHandler());
139
+ server.registerTool(THREAT_GET_CAPSULE_NAME, {
140
+ description: THREAT_GET_CAPSULE_DESCRIPTION,
141
+ inputSchema: THREAT_GET_CAPSULE_SCHEMA,
142
+ }, createThreatGetCapsuleHandler());
143
+ server.registerTool(THREAT_GET_INFERENCE_PROMPT_NAME, {
144
+ description: THREAT_GET_INFERENCE_PROMPT_DESCRIPTION,
145
+ inputSchema: THREAT_GET_INFERENCE_PROMPT_SCHEMA,
146
+ }, createThreatGetInferencePromptHandler());
147
+ server.registerTool(THREAT_RUN_MATCHER_NAME, {
148
+ description: THREAT_RUN_MATCHER_DESCRIPTION,
149
+ inputSchema: THREAT_RUN_MATCHER_SCHEMA,
150
+ }, createThreatRunMatcherHandler());
219
151
  server.registerTool(CHECK_REPO_TRUST_NAME, {
220
152
  description: CHECK_REPO_TRUST_DESCRIPTION,
221
153
  inputSchema: CHECK_REPO_TRUST_SCHEMA,
222
154
  }, createCheckRepoTrustHandler(config));
223
- // ── Register Tools: ZAT & Trust Verification ──
224
155
  server.registerTool(GET_OSS_ZAT_NAME, {
225
156
  description: GET_OSS_ZAT_DESCRIPTION,
226
157
  inputSchema: GET_OSS_ZAT_SCHEMA,
@@ -237,12 +168,6 @@ export async function startServer(config = DEFAULT_CONFIG) {
237
168
  description: INSPECT_ZAT_DESCRIPTION,
238
169
  inputSchema: INSPECT_ZAT_SCHEMA,
239
170
  }, 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
171
  server.registerTool(LIST_APPLICATIONS_NAME, {
247
172
  description: LIST_APPLICATIONS_DESCRIPTION,
248
173
  inputSchema: LIST_APPLICATIONS_SCHEMA,
@@ -255,6 +180,22 @@ export async function startServer(config = DEFAULT_CONFIG) {
255
180
  description: GET_APPLICATION_OVERVIEW_DESCRIPTION,
256
181
  inputSchema: GET_APPLICATION_OVERVIEW_SCHEMA,
257
182
  }, createGetApplicationOverviewHandler(apiClient));
183
+ server.registerTool(REVIEW_CHANGE_NAME, {
184
+ description: REVIEW_CHANGE_DESCRIPTION,
185
+ inputSchema: REVIEW_CHANGE_SCHEMA,
186
+ }, createReviewChangeHandler(apiClient));
187
+ server.registerTool(EXPLAIN_SIGNAL_FOR_DIFF_NAME, {
188
+ description: EXPLAIN_SIGNAL_FOR_DIFF_DESCRIPTION,
189
+ inputSchema: EXPLAIN_SIGNAL_FOR_DIFF_SCHEMA,
190
+ }, createExplainSignalForDiffHandler(apiClient));
191
+ server.registerTool(LIST_SIGNALS_NAME, {
192
+ description: LIST_SIGNALS_DESCRIPTION,
193
+ inputSchema: LIST_SIGNALS_SCHEMA,
194
+ }, createListSignalsHandler(apiClient));
195
+ server.registerTool(GET_SIGNAL_NAME, {
196
+ description: GET_SIGNAL_DESCRIPTION,
197
+ inputSchema: GET_SIGNAL_SCHEMA,
198
+ }, createGetSignalHandler(apiClient));
258
199
  server.registerTool(LIST_ENDPOINTS_NAME, {
259
200
  description: LIST_ENDPOINTS_DESCRIPTION,
260
201
  inputSchema: LIST_ENDPOINTS_SCHEMA,
@@ -267,22 +208,22 @@ export async function startServer(config = DEFAULT_CONFIG) {
267
208
  description: UPDATE_ENDPOINT_DESCRIPTION,
268
209
  inputSchema: UPDATE_ENDPOINT_SCHEMA,
269
210
  }, 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 ──
211
+ server.registerTool(MANAGE_APPLICATION_NAME, {
212
+ description: MANAGE_APPLICATION_DESCRIPTION,
213
+ inputSchema: MANAGE_APPLICATION_SCHEMA,
214
+ }, createManageApplicationHandler(apiClient));
215
+ server.registerTool(MANAGE_ENDPOINT_LIFECYCLE_NAME, {
216
+ description: MANAGE_ENDPOINT_LIFECYCLE_DESCRIPTION,
217
+ inputSchema: MANAGE_ENDPOINT_LIFECYCLE_SCHEMA,
218
+ }, createManageEndpointLifecycleHandler(apiClient));
276
219
  server.registerTool(DISCOVER_LOCAL_INFRA_NAME, {
277
220
  description: DISCOVER_LOCAL_INFRA_DESCRIPTION,
278
221
  inputSchema: DISCOVER_LOCAL_INFRA_SCHEMA,
279
222
  }, createDiscoverLocalInfraHandler());
280
- // ── Register Tools: Diagram Generation ──
281
223
  server.registerTool(GENERATE_DIAGRAM_NAME, {
282
224
  description: GENERATE_DIAGRAM_DESCRIPTION,
283
225
  inputSchema: GENERATE_DIAGRAM_SCHEMA,
284
226
  }, createGenerateDiagramHandler(apiClient));
285
- // ── Register Tools: Diagram CRUD ──
286
227
  server.registerTool(LIST_DIAGRAMS_NAME, {
287
228
  description: LIST_DIAGRAMS_DESCRIPTION,
288
229
  inputSchema: LIST_DIAGRAMS_SCHEMA,
@@ -304,64 +245,34 @@ export async function startServer(config = DEFAULT_CONFIG) {
304
245
  inputSchema: UPDATE_MERMAID_SOURCE_SCHEMA,
305
246
  }, createUpdateMermaidSourceHandler(apiClient));
306
247
  server.registerTool(LIST_DOCUMENTS_NAME, { description: LIST_DOCUMENTS_DESCRIPTION, inputSchema: LIST_DOCUMENTS_SCHEMA }, createListDocumentsHandler(apiClient));
248
+ server.registerTool(CREATE_ARTIFACT_NAME, { description: CREATE_ARTIFACT_DESCRIPTION, inputSchema: CREATE_ARTIFACT_SCHEMA }, createCreateArtifactHandler(apiClient));
249
+ server.registerTool(GET_ARTIFACT_NAME, { description: GET_ARTIFACT_DESCRIPTION, inputSchema: GET_ARTIFACT_SCHEMA }, createGetArtifactHandler(apiClient));
250
+ server.registerTool(UPDATE_ARTIFACT_CONTENT_NAME, { description: UPDATE_ARTIFACT_CONTENT_DESCRIPTION, inputSchema: UPDATE_ARTIFACT_CONTENT_SCHEMA }, createUpdateArtifactContentHandler(apiClient));
251
+ server.registerTool(LIST_ARTIFACT_VERSIONS_NAME, { description: LIST_ARTIFACT_VERSIONS_DESCRIPTION, inputSchema: LIST_ARTIFACT_VERSIONS_SCHEMA }, createListArtifactVersionsHandler(apiClient));
307
252
  server.registerTool(GET_DOCUMENT_NAME, { description: GET_DOCUMENT_DESCRIPTION, inputSchema: GET_DOCUMENT_SCHEMA }, createGetDocumentHandler(apiClient));
308
253
  server.registerTool(CREATE_DOCUMENT_NAME, { description: CREATE_DOCUMENT_DESCRIPTION, inputSchema: CREATE_DOCUMENT_SCHEMA }, createCreateDocumentHandler(apiClient));
254
+ server.registerTool(CREATE_FINDING_NAME, { description: CREATE_FINDING_DESCRIPTION, inputSchema: CREATE_FINDING_SCHEMA }, createCreateFindingHandler(apiClient));
255
+ server.registerTool(UPDATE_FINDING_NAME, { description: UPDATE_FINDING_DESCRIPTION, inputSchema: UPDATE_FINDING_SCHEMA }, createUpdateFindingHandler(apiClient));
256
+ server.registerTool(DELETE_FINDING_NAME, { description: DELETE_FINDING_DESCRIPTION, inputSchema: DELETE_FINDING_SCHEMA }, createDeleteFindingHandler(apiClient));
309
257
  server.registerTool(UPDATE_DOCUMENT_NAME, { description: UPDATE_DOCUMENT_DESCRIPTION, inputSchema: UPDATE_DOCUMENT_SCHEMA }, createUpdateDocumentHandler(apiClient));
310
- // ── Register Tools: IDE Bridge ──
311
258
  server.registerTool(OPEN_IN_IDE_NAME, { description: OPEN_IN_IDE_DESCRIPTION, inputSchema: OPEN_IN_IDE_SCHEMA }, createOpenInIdeHandler());
312
- // ── Register Tools: Security Review ──
313
259
  server.registerTool(SECURITY_REVIEW_NAME, {
314
260
  description: SECURITY_REVIEW_DESCRIPTION,
315
261
  inputSchema: SECURITY_REVIEW_SCHEMA,
316
262
  }, createSecurityReviewHandler(apiClient, config));
317
- // ── Register Tools: Project Binding ──
318
263
  server.registerTool(CHECK_PROJECT_NAME, {
319
264
  description: CHECK_PROJECT_DESCRIPTION,
320
265
  inputSchema: CHECK_PROJECT_SCHEMA,
321
266
  }, 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
267
  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
268
  function wrapEnterpriseHandler(handler, featureKey = "mcpEnterpriseTools") {
356
269
  return async (params) => {
357
- // Lazy-load features on first enterprise tool call
358
270
  if (enterpriseFeatures === null) {
359
271
  try {
360
272
  const resp = await apiClient.get("/api/mcp/features");
361
273
  enterpriseFeatures = resp.features;
362
274
  }
363
275
  catch {
364
- // If feature check fails, allow the call (API will enforce access)
365
276
  enterpriseFeatures = {};
366
277
  }
367
278
  }
@@ -370,7 +281,7 @@ export async function startServer(config = DEFAULT_CONFIG) {
370
281
  content: [
371
282
  {
372
283
  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.`,
284
+ 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
285
  },
375
286
  ],
376
287
  };
@@ -378,70 +289,40 @@ export async function startServer(config = DEFAULT_CONFIG) {
378
289
  return handler(params);
379
290
  };
380
291
  }
381
- // Agent Instances
382
292
  const enterpriseTools = [
383
- [LIST_AGENTS_NAME, LIST_AGENTS_DESCRIPTION, LIST_AGENTS_SCHEMA, createListAgentsHandler(apiClient)],
384
- // Threat Model Management
385
293
  [GET_THREAT_MODEL_NAME, GET_THREAT_MODEL_DESCRIPTION, GET_THREAT_MODEL_SCHEMA, createGetThreatModelHandler(apiClient)],
386
294
  [LIST_THREAT_MODELS_NAME, LIST_THREAT_MODELS_DESCRIPTION, LIST_THREAT_MODELS_SCHEMA, createListThreatModelsHandler(apiClient)],
295
+ [LIST_ATTACK_SCENARIOS_NAME, LIST_ATTACK_SCENARIOS_DESCRIPTION, LIST_ATTACK_SCENARIOS_SCHEMA, createListAttackScenariosHandler(apiClient)],
387
296
  [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
297
  [MANAGE_ATTACK_SCENARIO_NAME, MANAGE_ATTACK_SCENARIO_DESCRIPTION, MANAGE_ATTACK_SCENARIO_SCHEMA, createManageAttackScenarioHandler(apiClient)],
391
298
  [MANAGE_SECURITY_CONTROL_NAME, MANAGE_SECURITY_CONTROL_DESCRIPTION, MANAGE_SECURITY_CONTROL_SCHEMA, createManageSecurityControlHandler(apiClient)],
392
299
  [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
300
  [GET_ORG_ZAT_NAME, GET_ORG_ZAT_DESCRIPTION, GET_ORG_ZAT_SCHEMA, createGetOrgZatHandler(apiClient)],
413
301
  ];
414
302
  for (const [name, description, schema, handler] of enterpriseTools) {
415
303
  server.registerTool(name, { description: description, inputSchema: schema }, wrapEnterpriseHandler(handler));
416
304
  }
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
305
  if (detected) {
421
306
  validateProjectBinding(detected.binding, detected.filePath, config);
422
307
  }
423
- // ── Session safety check ──
424
308
  if (config.session) {
425
309
  console.error(`[zivis] Session: ${config.session}`);
426
- // Verify the session has credentials before starting
427
- const creds = await resolveAuth(config);
310
+ const creds = await resolveAuth(config, "apikey");
428
311
  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}`);
312
+ console.error(`[zivis] ERROR: Session "${config.session}" has no API key for MCP.`);
313
+ console.error("[zivis] OAuth is used only to mint an org-scoped API key:");
314
+ console.error("[zivis] zivis auth bind");
315
+ console.error(`[zivis] Or paste a platform token: zivis auth token sk_<...> --session ${config.session}`);
431
316
  process.exit(1);
432
317
  }
433
318
  }
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
319
  if (detected?.binding.workosOrgId) {
438
- await validateJwtOrgBinding(detected.binding, config);
320
+ await validateApiKeyMatchesBinding(detected.binding, config);
439
321
  }
440
- // ── Connect via stdio ──
322
+ registerAllPrompts(server);
441
323
  const transport = new StdioServerTransport();
442
324
  await server.connect(transport);
443
325
  console.error("[zivis] MCP server running on stdio");
444
326
  console.error(`[zivis] API: ${config.apiBaseUrl}`);
445
- console.error(`[zivis] Tools: 31 public + ${enterpriseTools.length} enterprise`);
327
+ console.error(`[zivis] Tools: public + ${enterpriseTools.length} enterprise registered`);
446
328
  }
447
- //# sourceMappingURL=server.js.map