/mcp path and append /v1/runs/{runId}/checks. For example, if the copied MCP URL is https://<host>:<port>/mcp, the checker request URL is https://<host>:<port>/v1/runs/{runId}/checks. Do not guess a host or use Kiwi’s website or documentation origin. This route is part of hosted Kiwi; customers do not deploy a separate service. MCP requests continue to use the full URL ending in /mcp.
Assign the checker
The accepted Plan check must name the check ID, allow checker_reported in permittedOrigins, and list the credential’s nonsecret reporterId in authorizedReporterIds. The credential’s allowed_check_ids must also contain that exact check ID. Issue the credential in the project’s Connections area. Its record id is not its reporterId. Store secret once in CI; the response reports secretAvailable as true only at initial issuance. A replay returns secret as null and does not create a replacement.Read current check context
Send the key as a Bearer token and readGET /v1/runs/{runId}/checks before each report. The response shows the current runVersion, acceptedPlanRevision, candidateRef, implementationAttemptId, verificationState, verificationAttemptId, and checks authorized for this key and accepted Plan.
Generate a fresh UUID for command_id for each new report. Read runVersion immediately before POST and use that positive value as expected_run_version.
Do not report if candidateRef or implementationAttemptId is null, or the verification state is not ready for a result. Use the current values from that response; never use a version or candidate cached from an earlier pipeline run.
Submit an observed result
POST /v1/runs/{runId}/checks uses snake_case HTTP fields. Replace placeholders with values from the context response. The numeric values below are examples, not current state. If verificationAttemptId is null while Verify is ready, create one UUID for attempt_id; on subsequent reports, use the attempt ID returned by the next context read.