CodeRifts Β· MCP server Β· for agents
Check an API change before you depend on it.
CodeRifts is a hosted MCP server that scores API and tool-schema changes before merge. Ask it whether a change is safe, who breaks, by what pattern, and at what cost β and get a signed authorize envelope back. Branch on execution_action: CONTINUE, CONTINUE_WITH_MONITORING, REQUEST_APPROVAL, or STOP (unrecognised values fail closed). decision (ALLOW / WARN / REQUIRE_APPROVAL / BLOCK) is explanation, not the branch key. MCP tools report; they do not prevent a call by themselves β see what each path does.
Endpoint
- URL
- https://app.coderifts.com/mcp
- Transport
- Streamable HTTP (protocol 2025-06-18)
- Auth
- Bearer API key β
Authorization: Bearer <key>(from coderifts.com) - Manifest
- coderifts.com/mcp.json
- Registry
io.github.coderifts/api-governance
Connect
{
"mcpServers": {
"coderifts": {
"url": "https://app.coderifts.com/mcp",
"headers": {
"Authorization": "Bearer <YOUR_CODERIFTS_API_KEY>"
}
}
}
}
Cursor and VS Code are one-click install URLs (auth is still a Bearer key after connect). Claude Desktop has no official one-click URL β paste the config above into claude_desktop_config.json and restart. Copilot cloud is Settings-paste (mcpServers) or coderifts copilot-setup for the developer surface. Claude Code: claude mcp add --transport http coderifts https://app.coderifts.com/mcp. Per-host table: app docs/mcp-one-click.md.
MCP Tools
| Tool | Call it when⦠|
|---|---|
preflight_change_set | Before modifying contract artifacts in one change set. Requires preflight_mode: analyze (risk only β not permission) or authorize (needs context.operation; may mint a receipt). Mode-less requests return 400. |
verify_receipt | To confirm a CodeRifts chain receipt you hold is authentic and unaltered. Verifies its signature and integrity. Not for deciding whether a change is safe β run preflight_change_set for that. |
get_decision_details | To look up a past decision by decision_id or fingerprint. Returns the stored decision_result envelope and receipt. Read-only β not for making new safety decisions. |
Only the three tools above are exposed through MCP. The REST rows below mirror that calling path (plus readiness) for agents that hit HTTP without MCP β the agent-relevant surface, not the full product API.
Agent-relevant REST endpoints
HTTP equivalents of the governance operations an agent actually calls. Not an exhaustive product API index.
| Endpoint | Description |
|---|---|
POST /api/v1/preflight | Same job as preflight_change_set. Pass preflight_mode (analyze | authorize). Authorize may return a signed receipt; analyze never does. |
POST /api/v1/verify-receipt | Verify a CodeRifts receipt (same job as verify_receipt). |
POST /api/v1/decisions/lookup · GET /api/v1/decisions/:id | Retrieve a previously issued decision (same job as get_decision_details). |
POST /api/v1/agent-readiness-score | Static 0β100 readiness score for one OpenAPI/MCP document (advanced; not a change-set preflight). |
Verify (connectivity)
MCP initialize proves the transport speaks MCP. GET /health is liveness. Neither is enforcement.
curl -sS https://app.coderifts.com/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"1.0"}}}'
Enforcement health-check
There is no MCP tool named health. After one-click + Bearer key, run this sequence (scaffold: app docs/mcp-health-check.json). Hidden alias governance_health is POST /api/v1/diff β not this check.
GET https://app.coderifts.com/healthβ process up.- MCP
initialize(above) β transport up. - MCP
tools/listβ exact set:preflight_change_set,verify_receipt,get_decision_details. - First authorized action:
preflight_change_setwithpreflight_mode: "authorize",context.operation, and at least oneartifacts[](authorize without a change set is 400). Branch onexecution_action:CONTINUE|CONTINUE_WITH_MONITORING|REQUEST_APPROVAL|STOP. Unrecognised values fail closed.
Conformance 7/7 (trusted-executor, not a provider merge)
@coderifts/conformance@0.8.11 reports END_TO_END COVERED (7/7) via TARGET_STATE_TRANSITION_PROVEN: a governed ref moved to the authorized commit under a signed grant, observed afterwards by a separate read-only process. Boundary, exactly as the profile records it: proof_scope TRUSTED_EXECUTOR, provider_witness NOT_APPLICABLE, externally_witnessed false. CodeRifts did not witness or sign the provider state. This is trusted-executor-integrity, not PATH B, and not the GitHub provider-loop. Honesty table: What each proof proves. What is a gate today versus planned / on-request (never available): claim table.
Response contract (Decision Spec v2)
preflight_change_set is a mode-discriminated union on preflight_mode. Analyze is not permission. verify_receipt and get_decision_details return different shapes. Schema: preflight-response.v2.consumer.json.
ANALYZE (informational β branch on may_execute / analysis_outcome; no execution_action / decision / safe_for_agent):
{
"preflight_mode": "analyze",
"decision_spec_version": "2.0",
"analysis_outcome": "BREAKS_DETECTED", // NO_BREAK_DETECTED | BREAKS_DETECTED | ANALYSIS_FAILED
"authorization_effect": "NONE",
"may_execute": false,
"receipt_kind": "NONE",
"risk_score": 57,
"breaking_changes": 1,
"patterns": [ ... ]
}
AUTHORIZE (operation-bound β requires context.operation; branch on execution_action: CONTINUE | CONTINUE_WITH_MONITORING | REQUEST_APPROVAL | STOP; gates verify receipt conjunctively):
{
"preflight_mode": "authorize",
"decision_spec_version": "2.0",
"receipt_kind": "operation_authorization",
"decision": "BLOCK",
"execution_action": "STOP",
"safe_for_agent": false,
"risk_score": 57,
"chain_receipt": "...",
"breaking_changes": 1,
"patterns": [ ... ]
}
Mode-less request β 400. Default is Decision Spec 2.0. A request that pins decision_spec_version: "1.0" still gets the pre-v2 analyze shape (decision / execution_action / safe_for_agent in the body and in x-coderifts-decision / x-coderifts-safe-for-agent). Deprecation headers fire. Announced sunset was 2026-09-07T00:00:00Z; the pin is still answering as of 2026-09-14. Do not pin 1.0. Permission still requires authorize + verified receipt (receipt AND currently_authorized AND operation AND fingerprint AND execution_action) β never analyze alone.