io.github.coderifts/api-governance
REMOTE · APP.CODERIFTS.COM · SCANNED SEP 20
Signed, offline-verifiable contract-change authorization. Only a granted change can proceed.
Available components
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
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation not fully verified: no authorisation is required to call this server, and 3 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe. See how to fix → View diagnostics → Unverified
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
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
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
claude mcp add --transport http coderifts-api-governance 'https://app.coderifts.com/mcp'
{
"mcpServers": {
"coderifts-api-governance": {
"url": "https://app.coderifts.com/mcp"
}
}
} {
"servers": {
"coderifts-api-governance": {
"type": "http",
"url": "https://app.coderifts.com/mcp"
}
}
} [mcp_servers.coderifts-api-governance] url = "https://app.coderifts.com/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"coderifts-api-governance": {
"type": "remote",
"url": "https://app.coderifts.com/mcp",
"enabled": true
}
}
} openclaw mcp add coderifts-api-governance --url 'https://app.coderifts.com/mcp' --transport streamable-http
mcp_servers:
coderifts-api-governance:
url: "https://app.coderifts.com/mcp" {
"McpServers": {
"coderifts-api-governance": {
"Transport": "http",
"Url": "https://app.coderifts.com/mcp"
}
}
} assistant mcp add coderifts-api-governance -t streamable-http -u 'https://app.coderifts.com/mcp'
{
"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.
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
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 |
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 →
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…
| Name | Type | Req | Description |
|---|---|---|---|
| decision_id | string | – | The decision_id from a prior decision_result envelope. Provide this and/or fingerprint (at least one non-empty string required). |
| fingerprint | string | – | A verdict fingerprint (sha256:...); returns the latest matching decision. Provide this and/or decision_id (at least one non-empty string required). |
| Name | Type | Req | Description |
|---|---|---|---|
| breaking_changes | integer | – | – |
| chain_receipt | string | – | – |
| coderifts_version | string | – | – |
| control_envelope | object | – | Control 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… |
| decision | string | – | – |
| decision_result | object | yes | decision-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_hash | string | – | – |
| decision_spec_version | string | – | – |
| evidence | object|array|null | – | – |
| evidence_quality | string | – | – |
| execution_action | string | – | – |
| meta | object | yes | – |
| operation | string | – | – |
| pattern_sources | array | – | – |
| patterns | array | – | – |
| preflight_mode | string | – | – |
| receipt_kind | string | – | – |
| required_action_core | object | – | Branchable required-action core { type, reason_code, recheck_required } when present on the envelope. |
| requires_migration | boolean | – | – |
| risk_score | integer | – | – |
| safe_for_agent | boolean | – | – |
| timestamp | string | – | – |
| verdict_fingerprint | string | – | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| adapter_id | string | – | Authorize+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. |
| artifacts | array | – | 1–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… |
| audience | string | – | Requester identity for the decision envelope. Accepted here; the server-derived audience wins when both are present. |
| context | object | – | Optional 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_version | string | – | Optional. Omit or '2.0' = current contract. '1.0' retired (INVALID_INPUT); do not pin 1.0. |
| derivation | string | – | "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_id | string | – | Authorize+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_token | string | – | Authorize+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_version | string | – | Grant 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_key | string | – | Optional client key; in authorize mode, a repeat with the same key + body replays the original decision (24h). Analyze responses are not replayed. |
| include_execution_grant | boolean | – | Authorize 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_hash | string | – | Authorize+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_mode | string | yes | REQUIRED. "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_receipt | string | – | Optional 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_nonce | string | – | Authorize+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_uri | string | – | Authorize+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_id | string | – | Authorize+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,…
| Name | Type | Req | Description |
|---|---|---|---|
| audience | string | – | Intended audience — must match the receipt |
| base | string | – | Intended base commit/ref SHA the receipt must match (signed-wins vs envelope.base) |
| branch | string | – | Intended branch the receipt must bind (place binding; optional) |
| decision_result | object | – | The 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… |
| environment | string | – | Intended environment (e.g. production) — must match the receipt |
| fingerprint | string | – | Intended change fingerprint — must equal the receipt fp |
| head | string | – | Intended head commit/ref SHA the receipt must match (signed-wins vs envelope.head) |
| operation | string | – | Intended 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_request | – | – | Intended pull-request id the receipt must bind (place binding; optional) |
| repository | string | – | Intended repository the receipt must bind (place binding; optional) |
| target_id | string | – | Intended apply-site target the receipt must bind |
| token | string | yes | The chain receipt token (base64url(body).base64url(signature)) |
| Name | Type | Req | Description |
|---|---|---|---|
| authz_note | string | – | Present when no intended context supplied: status reflects signature+expiry only |
| authz_reason | string | – | When currently_authorized=false: the deny reason (operation_mismatch, decision_not_allow, superseded, expired, target_mismatch, environment_mismatch, …) |
| authz_state | string | – | Lifecycle state from isCurrentlyAuthorized when authorization is evaluated (optional; omitted when currently_authorized is null) |
| authz_status | string | – | Authorization-level status (VERIFIED_WRONG_ENVIRONMENT / VERIFIED_SUPERSEDED / VERIFIED_SCOPE_MISMATCH / …) |
| binding_level | string | – | place_and_content | content_only — forensic, not a second verdict |
| caller_value | string|null | – | Caller claim that differed from the signed envelope |
| correlation_id | string | – | Route-owned trace id, set by the route itself rather than by correlation middleware; always a non-empty string on 200 |
| currently_authorized | boolean|null | yes | Whether 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. |
| payload | object | – | – |
| reason | string|null | – | – |
| signed_value | string|null | – | Signed envelope slot when signed-wins fail-closed (source_binding_mismatch) |
| status | string | yes | – |
| valid | boolean | yes | true iff status is VERIFIED_CURRENT or RETIRED_KEY_VALID_AT_ISSUE |
No examples provided.
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.