Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.coderifts/api-governance

REMOTE · APP.CODERIFTS.COM · SCANNED SEP 20

Signed, offline-verifiable contract-change authorization. Only a granted change can proceed.

0 this week 76 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security63
Transport & Reachability100
Schema Quality & AI Usability60
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 2740 tokens (~913/item across 3 items; 3 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 3 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 3 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities60
  • Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28. See how to fix → Fail
Install

How do I install the io.github.coderifts/api-governance MCP server?

io.github.coderifts/api-governance is a hosted endpoint at https://app.coderifts.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · app.coderifts.com

# add to Claude Code
claude mcp add --transport http coderifts-api-governance 'https://app.coderifts.com/mcp'
// .cursor/mcp.json
{
  "mcpServers": {
    "coderifts-api-governance": {
      "url": "https://app.coderifts.com/mcp"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "coderifts-api-governance": {
      "type": "http",
      "url": "https://app.coderifts.com/mcp"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.coderifts-api-governance]
url = "https://app.coderifts.com/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "coderifts-api-governance": {
      "type": "remote",
      "url": "https://app.coderifts.com/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add coderifts-api-governance --url 'https://app.coderifts.com/mcp' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  coderifts-api-governance:
    url: "https://app.coderifts.com/mcp"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "coderifts-api-governance": {
      "Transport": "http",
      "Url": "https://app.coderifts.com/mcp"
    }
  }
}
# add to Vellum
assistant mcp add coderifts-api-governance -t streamable-http -u 'https://app.coderifts.com/mcp'
// mcp.json
{
  "mcpServers": {
    "coderifts-api-governance": {
      "type": "http",
      "url": "https://app.coderifts.com/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 20 Sept 26 0
    • Tool “preflight_change_set” rewrote its description, which is the text the model reads security
  • 19 Sept 26 0
    • “preflight_change_set” reworded the description of “decision_spec_version” cosmetic
    • “preflight_change_set” reworded the description of “preflight_mode” cosmetic

    2 cosmetic changes on this day. Switch on “Show cosmetic changes” to see them.

  • 13 Sept 26 0
    • Tool “preflight_change_set” rewrote its description, which is the text the model reads security
    • Schema quality: 772 → 910 functional
    • “preflight_change_set” reworded the description of “adapter_id” cosmetic
    • “preflight_change_set” reworded the description of “artifacts” cosmetic
    • “preflight_change_set” reworded the description of “context” cosmetic
    • “preflight_change_set” reworded the description of “derivation” cosmetic
    • “preflight_change_set” reworded the description of “executor_id” cosmetic
    • “preflight_change_set” reworded the description of “expected_state_token” cosmetic
    • “preflight_change_set” reworded the description of “include_execution_grant” cosmetic
    • “preflight_change_set” reworded the description of “policy_hash” cosmetic
    • “preflight_change_set” reworded the description of “previous_receipt” cosmetic
    • “preflight_change_set” reworded the description of “state_nonce” cosmetic
    • “preflight_change_set” reworded the description of “target_uri” cosmetic
    • “preflight_change_set” reworded the description of “tenant_id” cosmetic
  • 8 Sept 26 +2
    • Stability: fail → pass security
  • 5 Sept 26 0
    • “preflight_change_set” reworded the description of “grant_version” cosmetic

    1 cosmetic change on this day. Switch on “Show cosmetic changes” to see it.

  • 3 Sept 26 0
    • Tool “verify_receipt” rewrote its description, which is the text the model reads security
    • Schema quality: 662 → 748 functional
    • “preflight_change_set” added an optional parameter “adapter_id” cosmetic
    • “preflight_change_set” added an optional parameter “audience” cosmetic
    • “preflight_change_set” added an optional parameter “executor_id” cosmetic
    • “preflight_change_set” added an optional parameter “expected_state_token” cosmetic
    • “preflight_change_set” added an optional parameter “grant_version” cosmetic
    • “preflight_change_set” added an optional parameter “policy_hash” cosmetic
    • “preflight_change_set” added an optional parameter “target_uri” cosmetic
    • “preflight_change_set” added an optional parameter “tenant_id” cosmetic
  • 2 Sept 26 0
    • Tool “preflight_change_set” rewrote its description, which is the text the model reads security
  • 1 Sept 26 0
    • Tool “preflight_change_set” rewrote its description, which is the text the model reads security
    • Schema quality: 1013 → 654 functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Probed https://app.coderifts.com/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=coderifts.com CN=WE1,O=Google Trust Services,C=US 10 Aug 2026 8 Nov 2026 ECDSA 256 ECDSA-SHA256 1bf5598f48b213d90e4812756dad2f6e
SANs: coderifts.com, *.coderifts.com
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of app.coderifts.com. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
coderifts.com. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=31536000; includeSubDomains; preload
content-security-policy default-src 'self';script-src 'self';style-src 'self' 'unsafe-inline' https://coderifts.com https://fonts.googleapis.com;font-src 'self' https://fonts.gstatic.com data:;img-src 'self' data: https:;connect-src 'self' https://app.coderifts.com;base-uri 'self';form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none';upgrade-insecure-requests
x-content-type-options nosniff
x-frame-options DENY
referrer-policy strict-origin-when-cross-origin
permissions-policy camera=(), microphone=(), geolocation=()

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://app.coderifts.com/mcp Verified 200
http (plaintext) http://app.coderifts.com/mcp HTTPS enforced 301 https://app.coderifts.com/mcp
MCP tools · 3 exposed · ~2,740 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
get_decision_details ~588

Retrieve a PAST CodeRifts decision by decision_id (or fingerprint): full report payload, breaking changes list, scores, and linked receipt metadata if stored. Use this when: - You have a decision_id (or fingerprint) from a previous preflight, PR comment, or CI log and need to inspect or explain that past decision. - You are auditing why a prior ALLOW/WARN/BLOCK was issued. - You are NOT requesting a new analysis of current before/after specs. Do not use when: - You need a decision for the CURRENT uncommitted or PR head change set — call coderifts.preflight_change_set with the current artifacts. - You hold a receipt token and only need cryptographic/lifecycle verification — use coderifts.verify_receipt. - You have no decision_id/fingerprint — run preflight first to create one. Inputs: at least one of decision_id (preferred) or fingerprint is required (empty {} is rejected by the server as INVALID_INPUT). Returns the stored decision document or not_found. Scoping — fingerprint lookup returns only YOUR OWN decisions. A fingerprint is derived from content, not from an account, so two callers who preflight byte-identical specs derive the same one; the lookup is therefore constrained to the decisions your credential can prove it owns. A decision that exists but is not yours returns the SAME not_found as one that was never issued. This is deliberate: a distinguishable "exists but forbidden" would confirm to any caller that a given content hash had been decided on by someone, which is the fact the scoping exists to withhold. Do not read not_found as proof that no such decision exists anywhere. Decisions persisted without context.repository cannot currently be attributed to an account, and are not retrievable by fingerprint at all — not by their owner either. Retrieve those by decision_id, which is unchanged and unscoped. This is a limitation of what older stored rows carry, not a property of the lookup: rows written from now on record the account directly, so t…

NameTypeReqDescription
decision_idstringThe decision_id from a prior decision_result envelope. Provide this and/or fingerprint (at least one non-empty string required).
fingerprintstringA verdict fingerprint (sha256:...); returns the latest matching decision. Provide this and/or decision_id (at least one non-empty string required).
NameTypeReqDescription
breaking_changesinteger
chain_receiptstring
coderifts_versionstring
control_envelopeobjectControl envelope (control/1.0) derived from the stored decision_result. Includes next_agent_step (structured remediation SUGGESTION for non-CONTINUE execution_action; null on CONTINUE*; not permissio…
decisionstring
decision_resultobjectyesdecision-result.v1 envelope (control enums closed). Additive fields may appear and are not permission. Full schema: https://coderifts.com/schemas/decision-result.v1.consumer.json (producer: https://c…
decision_semantic_hashstring
decision_spec_versionstring
evidenceobject|array|null
evidence_qualitystring
execution_actionstring
metaobjectyes
operationstring
pattern_sourcesarray
patternsarray
preflight_modestring
receipt_kindstring
required_action_coreobjectBranchable required-action core { type, reason_code, recheck_required } when present on the envelope.
requires_migrationboolean
risk_scoreinteger
safe_for_agentboolean
timestampstring
verdict_fingerprintstring

No examples provided.

preflight_change_set ~1,314

Use this when: a contract artifact (OpenAPI, GraphQL, protobuf, AsyncAPI, MCP manifests, or agent tool schemas) changes before merge, deploy, publish, or tool registration; AND any agent-executed operation with no supported contract type — send type agent_operation. Do not call for documentation-only changes, static readiness scoring, or receipt verification. Use analyze for risk only; authorize requires context.operation. Skipping this call is not permission. Absence of a key is not permission. Inputs: preflight_mode is required: "analyze" (risk only; no receipt, no execution_action) or "authorize" (may mint a receipt; requires context.operation — merge is not deploy is not publish). Supply exactly one artifact source: artifacts[] (1–20 items, each {id, type, before, after} as the FULL spec/schema text, not a path or URL; type is openapi|graphql|grpc|asyncapi|mcp_manifest|agent_tools|agent_operation) XOR derivation="server" (server reads GitHub Compare; needs context.repository + context.base + context.head; sending artifacts[] together is 400). Grant fields (include_execution_grant, grant_version, tenant_id, executor_id, adapter_id, target_uri, expected_state_token, state_nonce, policy_hash) apply only when preflight_mode="authorize" AND include_execution_grant=true; analyze ignores them. previous_receipt is a chain token base64url(body).base64url(signature) to LINK a prior decision — it does not re-verify; use coderifts.verify_receipt instead; for details of a past decision use coderifts.get_decision_details instead. idempotency_key replays authorize only (24h), never analyze.

NameTypeReqDescription
adapter_idstringAuthorize+grant v2 only. Adapter that will apply the change. Conventional values: fs, postgres, git. Must match the adapter the executor actually uses; a git grant does not authorize an fs write.
artifactsarray1–20 contract documents analyzed together. Each item is {id, type, before, after} where before/after are the FULL document strings (YAML/JSON/proto text), not URLs or file paths. Omit this array enti…
audiencestringRequester identity for the decision envelope. Accepted here; the server-derived audience wins when both are present.
contextobjectOptional apply-site context folded into the bundle fingerprint. operation distinguishes merge vs deploy vs publish (and other labels); the server accepts any non-empty string; conventional values: me…
decision_spec_versionstringOptional. Omit or '2.0' = current contract. '1.0' retired (INVALID_INPUT); do not pin 1.0.
derivationstring"server" = the server derives artifacts[] from GitHub Compare via the App installation. Allowed only when context.repository, context.base and context.head are all present and the tenant has a proven…
executor_idstringAuthorize+grant v2 only. Executor identity the grant is bound to (example: agent:ci-bot, host:github-actions). Empty/absent is not "any executor".
expected_state_tokenstringAuthorize+grant v2 only. Compare-and-swap token the executor must observe at apply time (the "before" state). Signed as its own field. Omit only if the adapter has no prior state; do not send a place…
grant_versionstringGrant envelope to mint when include_execution_grant is true. Omitting this yields cr.exec.v1 until 2026-09-18 and cr.exec.v2 on and after it (see x-coderifts-effective-default / x-coderifts-default-c…
idempotency_keystringOptional client key; in authorize mode, a repeat with the same key + body replays the original decision (24h). Analyze responses are not replayed.
include_execution_grantbooleanAuthorize only. When true on an allow-class authorize, the response includes a signed execution_grant, or HTTP 503 SIGNER_UNAVAILABLE — never an unsigned grant. Default false. Analyze ignores this fl…
policy_hashstringAuthorize+grant v2 only. Policy identity bound into the grant, sha256: + 64 hex. When supplied, apply must use that same policy; a different policy is a different grant.
preflight_modestringyesREQUIRED. "analyze" = informational risk only (no decision/execution_action/safe_for_agent; analysis_outcome + may_execute:false). "authorize" = operation-bound path; may mint a receipt (requires con…
previous_receiptstringOptional prior chain token to LINK this call into a receipt chain: base64url(body).base64url(signature). Linking is not verification — a linked token is not re-checked here; use verify_receipt.
state_noncestringAuthorize+grant only. Opaque nonce copied into the signed grant as its own field (not folded into scope_hash). Absent → BEARER grant. Ignored unless include_execution_grant is true.
target_uristringAuthorize+grant v2 only. URI the grant binds (example: git://owner/repo.git/refs/heads/main). Fallback if omitted: context.target_uri, then repository/head-derived. Distinct from context.target_id.
tenant_idstringAuthorize+grant v2 only. Tenant the grant is issued under. ASCII slug. When omitted the server uses "default" — pin it if you are not on the default tenant.

Structured output declared, but exposes no named fields.

No examples provided.

verify_receipt ~838

Verify a CodeRifts signed chain-receipt you ALREADY HOLD: cryptographic authenticity (signature + key id), body binding, and — when lifecycle indices are available — whether it is currently valid authorization (not expired, superseded, or revoked) for a stated operation/target. Use this when: - You already obtained a chain_receipt / receipt token from a prior preflight (or CI artifact) and are about to act (merge/deploy) under that receipt. - A contract-gate or policy requires offline/online proof that the receipt is authentic for this change before proceeding. - You must distinguish "signature ok" from "currently authorized" (stale or superseded receipts must not be treated as live approval). Do not use when: - You do not have a receipt yet — call coderifts.preflight_change_set first. - You need a NEW decision for a changed base→head set — preflight again; verify_receipt does not re-diff specs. - The receipt you hold binds a different operation or target than the one you are about to perform — call coderifts.preflight_change_set with context.operation set to that operation (a merge receipt does not authorize a deploy); verify_receipt cannot re-scope or re-issue a decision. - You only need human-readable history of an old decision_id without a receipt token — use coderifts.get_decision_details. - The change set itself is unknown or incomplete — fix the change set and preflight; do not "verify" a placeholder. Inputs: receipt token (required); optional intended context (operation, environment, fingerprint, target_id, audience, repository/branch/pull_request, base/head) and the body_hash-bound decision_result envelope. 30s clock-skew leeway on expiry. A 0s grace for declared destructive production operations is defined in the policy but is unreachable today: the intended-context schema has no destructive field, so nothing can declare one and the 30s leeway always applies. Returns { valid, status, currently_authorized (bool|null), reason, payload,…

NameTypeReqDescription
audiencestringIntended audience — must match the receipt
basestringIntended base commit/ref SHA the receipt must match (signed-wins vs envelope.base)
branchstringIntended branch the receipt must bind (place binding; optional)
decision_resultobjectThe body_hash-bound decision envelope (carries operation/target/decision). Required for a meaningful AUTHORIZATION evaluation of scope; without it, intended context alone fails closed on authorizatio…
environmentstringIntended environment (e.g. production) — must match the receipt
fingerprintstringIntended change fingerprint — must equal the receipt fp
headstringIntended head commit/ref SHA the receipt must match (signed-wins vs envelope.head)
operationstringIntended operation the receipt must authorize (conventional: merge|deploy|tool_call|publish). Triggers authorization evaluation when non-empty; supply decision_result for full scope binding.
pull_requestIntended pull-request id the receipt must bind (place binding; optional)
repositorystringIntended repository the receipt must bind (place binding; optional)
target_idstringIntended apply-site target the receipt must bind
tokenstringyesThe chain receipt token (base64url(body).base64url(signature))
NameTypeReqDescription
authz_notestringPresent when no intended context supplied: status reflects signature+expiry only
authz_reasonstringWhen currently_authorized=false: the deny reason (operation_mismatch, decision_not_allow, superseded, expired, target_mismatch, environment_mismatch, …)
authz_statestringLifecycle state from isCurrentlyAuthorized when authorization is evaluated (optional; omitted when currently_authorized is null)
authz_statusstringAuthorization-level status (VERIFIED_WRONG_ENVIRONMENT / VERIFIED_SUPERSEDED / VERIFIED_SCOPE_MISMATCH / …)
binding_levelstringplace_and_content | content_only — forensic, not a second verdict
caller_valuestring|nullCaller claim that differed from the signed envelope
correlation_idstringRoute-owned trace id, set by the route itself rather than by correlation middleware; always a non-empty string on 200
currently_authorizedboolean|nullyesWhether the receipt currently authorizes the intended operation/target/fp (§106). null means authorization could not be evaluated (e.g. no intended context) — not unauthorized and not authorized.
payloadobject
reasonstring|null
signed_valuestring|nullSigned envelope slot when signed-wins fail-closed (source_binding_mismatch)
statusstringyes
validbooleanyestrue iff status is VERIFIED_CURRENT or RETIRED_KEY_VALID_AT_ISSUE

No examples provided.

Common questions

What is the io.github.coderifts/api-governance MCP server?

io.github.coderifts/api-governance is an MCP server listed in the public MCP registry as io.github.coderifts/api-governance. Signed, offline-verifiable contract-change authorization. Only a granted change can proceed. This page covers its hosted endpoint (https://app.coderifts.com/mcp).

Is the io.github.coderifts/api-governance MCP server safe to use?

io.github.coderifts/api-governance scores 76 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.coderifts/api-governance MCP server expose?

io.github.coderifts/api-governance exposes 3 tools: preflight_change_set, verify_receipt, get_decision_details. Their descriptions and schemas cost roughly 2,740 tokens of context every time the server is loaded.

Does the io.github.coderifts/api-governance MCP server require authentication?

No. We connected to io.github.coderifts/api-governance without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the io.github.coderifts/api-governance MCP server still maintained?

io.github.coderifts/api-governance is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.