Skip to content

com.ratchetgate/ratchet

by ratchetgate.com · remote · local (npm) · no sign-in to list tools · v0.3.0 · published by com.ratchetgate

Your agent asks before it acts, so the same real-world action is attempted at most once.

Final · 2Changes · 6

15 tools: 2 do something that can't be undone, 6 change things and 7 only read.

Scanned Oct 21, 2026

4 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http ratchet https://ratchetgate.com/mcp

Findings

Matches of fixed checks, with the text they matched.

3 warn1 info
  • The server marks "ratchet_get_circuit" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "ratchet_get_circuit" says "get": a word for reading.

    What this check looks for
  • The server marks "ratchet_resolve_effect" as not read-only (readOnlyHint: false), and its words say it reads.

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "ratchet_resolve_effect" says "resolve": a word for reading.

    What this check looks for
  • The server marks "ratchet_get_group" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "ratchet_get_group" says "get": a word for reading.

    What this check looks for
  • The description mentions "credentials".

    Matched text

    description: "...about. Send references only; never send credentials."

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

15 tools

Can't be undone 2Claude Code: ask
  • ratchet_get_groupShows every step in a multi-step unit of work: what succeeded, what can still be undone, what has already been undone, what is irreversible, and what has an unknown outcome.1 finding

    Why it is in this group

    • The name "ratchet_get_group" says "get": a word for reading.
    • The description says "irreversible".
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "ratchet_get_group" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "ratchet_get_group" says "get": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Shows every step in a multi-step unit of work: what succeeded, what can still be undone, what has already been undone, what is irreversible, and what has an unknown outcome. Use it to answer "where did this workflow actually get to?" after a crash, without changing anything.

    Annotations the server declares

    • title: Inspect a unit of work
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • ratchet_unwind_groupCall this when a multi-step workflow fails partway and the steps that already succeeded must be undone — a booking made but not paid for, a resource created but not configured.No findings

    Why it is in this group

    • The description's first verb is "call": a word for a change.
    • The description says "irreversible".
    Description, as the server wrote it
    Call this when a multi-step workflow fails partway and the steps that already succeeded must be undone — a booking made but not paid for, a resource created but not configured. Returns the exact compensations to perform, in the order to perform them, which is the REVERSE of the order they succeeded in. Undoing forwards can strand a step that depended on an earlier one. Ratchet does NOT perform the compensations. For each step: call ratchet_begin_effect with the step's suggested_idempotency_key and compensates_effect_id, do the real undo, then call ratchet_report_effect. Gating the undo is what stops a retry from refunding twice. Read `unresolved` first. If any effect in the group has an unknown outcome, STOP and resolve it before undoing anything around it. Read `irreversible` too: those steps succeeded and declared no way to undo themselves, so a human has to decide what to do about them. Say so plainly rather than implying the rollback was complete.

    Annotations the server declares

    • title: Roll back a multi-step unit of work
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
Changes things 6Claude Code: ask
  • ratchet_begin_effectCall this IMMEDIATELY BEFORE performing any side effect that touches the outside world (sending a message, charging a card, creating a resource, writing to someone else's system).No findings

    Why it is in this group

    • The description's first verb is "call": a word for a change.
    Description, as the server wrote it
    Call this IMMEDIATELY BEFORE performing any side effect that touches the outside world (sending a message, charging a card, creating a resource, writing to someone else's system). Returns a decision you MUST obey. If the response carries budget_warning, a spend ceiling exists but nothing was counted toward it — surface that to the operator rather than ignoring it. If it carries integration_warning, you have been beginning effects without reporting them: call ratchet_report_effect after every action, and tell the operator, because the effects already begun will start being blocked. Decisions: - "execute": you hold the lease. Perform the action now, then call ratchet_report_effect. If the response carries vendor_idempotency_key, send that key to the vendor as ITS own idempotency key (the response says where it goes). Where enforced is true the vendor itself will then refuse a duplicate, which protects the action even if some other caller skips this gate entirely. - "duplicate": this action ALREADY HAPPENED. Do NOT perform it. Use the returned `result` as though you had just done the work. - "in_flight": another process is doing it right now. Do NOT perform it. Wait `retry_after_seconds` and ask again. - "blocked": an earlier attempt may or may not have taken effect. Do NOT perform it. Tell the user what is unresolved, or verify at the vendor and call ratchet_resolve_effect. - "approval_required": a human must approve. Do NOT perform it. - "denied": policy or budget refused it. Do NOT perform it. The idempotency_key must be derived deterministically from the work itself so that a retry of the same logical action produces the same key. Never use a random value or the current time.

    Annotations the server declares

    • title: Ask permission to perform a side effect
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • ratchet_extend_leaseCall this periodically during a long action you were authorised to perform, before the lease expires.No findings

    Why it is in this group

    • The description's first verb is "call": a word for a change.
    Description, as the server wrote it
    Call this periodically during a long action you were authorised to perform, before the lease expires. It tells Ratchet you are alive and extends your hold. Use it when work turns out to take longer than the lease you asked for — a slow vendor, a large export, a retrying upload. Without it, the lease expires while you are still working, the effect is recorded as having an UNKNOWN outcome, and your report is then refused. If it fails with lease_expired or lease_lost, STOP. Your hold is gone and the outcome is already recorded as unknown. Do not keep going and do not retry the action — call ratchet_begin_effect to find out where things actually stand.

    Annotations the server declares

    • title: Say you are still working on an effect
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • ratchet_get_circuitCall this when a begin returned "approval_required" or "denied" and the reason mentions a circuit breaker.1 finding

    Why it is in this group

    • The name "ratchet_get_circuit" says "get": a word for reading.
    • The description's first verb is "call": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "ratchet_get_circuit" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "ratchet_get_circuit" says "get": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Call this when a begin returned "approval_required" or "denied" and the reason mentions a circuit breaker. A breaker opens when an effect type is being performed far more often than its configured hourly ceiling — usually because something is looping. What to do with the answer: - If a breaker is open, STOP creating effects of that type. Retrying will not help and each attempt is recorded. - resets_at tells you when it closes itself. If it is null, a human opened it deliberately and only a human will close it — do not wait, and do not poll. - Report the reason to your operator and stop. Do not attempt to work around it by renaming the effect type, splitting the work across keys, or using a different idempotency key: that defeats a safety control that exists to protect the people your actions reach. - effect_type "*" means every effect type in the workspace is stopped.

    Annotations the server declares

    • title: Check whether surge containment is holding your work
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • ratchet_reconcile_effectsGiven the idempotency keys for actions a vendor says actually happened, returns which ones went through Ratchet and which it has never seen.1 finding

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Info

      The description mentions "credentials".

      Matched text

      description: "...about. Send references only; never send credentials."

      What this check looks for
    Description, as the server wrote it
    Given the idempotency keys for actions a vendor says actually happened, returns which ones went through Ratchet and which it has never seen. The unseen ones are code paths that acted WITHOUT asking, so a retry there can act twice — a bug the operator almost certainly does not know about. Send references only; never send credentials.

    Annotations the server declares

    • title: Find real-world actions that bypassed the gate
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • ratchet_report_effectCall this IMMEDIATELY AFTER performing an action that ratchet_begin_effect authorised.No findings

    Why it is in this group

    • The description's first verb is "call": a word for a change.
    Description, as the server wrote it
    Call this IMMEDIATELY AFTER performing an action that ratchet_begin_effect authorised. Pass the lease_token you were given. Report "succeeded" with a result — future duplicate callers replay that result instead of repeating the action. Report "failed" ONLY when you are certain the action did NOT reach the outside world (for example, a validation error before the request was sent). That permits a clean retry. If you are UNSURE whether it went through — a timeout, a dropped connection, an ambiguous error — do NOT report anything. Say so to the user. Letting the lease lapse records an honest "indeterminate", which is far safer than a false "failed" that licenses a duplicate.

    Annotations the server declares

    • title: Report the outcome of an effect you executed
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • ratchet_resolve_effectUse ONLY after you have checked the third-party system and now know what really happened to an effect that was left "indeterminate".1 finding

    Why it is in this group

    • The name "ratchet_resolve_effect" says "resolve": a word for reading.
    • The server marks it as not read-only (readOnlyHint: false).

    Findings

    • Warn

      The server marks "ratchet_resolve_effect" as not read-only (readOnlyHint: false), and its words say it reads.

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "ratchet_resolve_effect" says "resolve": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Use ONLY after you have checked the third-party system and now know what really happened to an effect that was left "indeterminate". Record "succeeded" if the action did occur, "failed" if it did not, or "cancelled" to abandon it. Include how you verified it in `evidence`. Never guess: resolving incorrectly is exactly the duplicate or lost action this service exists to prevent.

    Annotations the server declares

    • title: Settle an effect whose outcome was unknown
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
Only reads 7Claude Code: allow
  • ratchet_get_effectLook up the recorded state of an action WITHOUT reserving a lease and without consuming your plan allowance.No findings

    Why it is in this group

    • The name "ratchet_get_effect" says "get": a word for reading.
    Description, as the server wrote it
    Look up the recorded state of an action WITHOUT reserving a lease and without consuming your plan allowance. Use it to answer "did I already do this?" — for example when resuming after a crash, or when a user asks whether something went through. To actually perform work, use ratchet_begin_effect instead; this tool never grants permission.

    Annotations the server declares

    • title: Check whether an action has already been done
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • ratchet_get_policyShows how this workspace has configured a given effect type: whether it is allowed, how long a lease lasts, the attempt ceiling, spend limits, the approval threshold above which an…No findings

    Why it is in this group

    • The name "ratchet_get_policy" says "get": a word for reading.
    Description, as the server wrote it
    Shows how this workspace has configured a given effect type: whether it is allowed, how long a lease lasts, the attempt ceiling, spend limits, the approval threshold above which an action waits for a human, and — most importantly — what happens when an attempt ends indeterminate. Check this before designing a retry strategy.

    Annotations the server declares

    • title: Read the policy for an effect type
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • ratchet_get_prevented_lossCounts duplicate actions refused in the last 30 days and what they would have cost.No findings

    Why it is in this group

    • The name "ratchet_get_prevented_loss" says "get": a word for reading.
    Description, as the server wrote it
    Counts duplicate actions refused in the last 30 days and what they would have cost. Only counts refusals where a cost was declared on the effect, so it under-reports rather than flatters. IMPORTANT: pass estimated_cost_micros on ratchet_begin_effect or this reads zero — the number is only as good as what callers declare. This is money not spent at your vendors, never money paid to Ratchet.

    Annotations the server declares

    • title: What the gate has actually saved
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • ratchet_get_runRecall the work already gated under a run id, before doing anything that might repeat it.No findings

    Why it is in this group

    • The name "ratchet_get_run" says "get": a word for reading.
    Description, as the server wrote it
    Recall the work already gated under a run id, before doing anything that might repeat it. Call this FIRST when resuming a task — after a restart, a handoff, or when your context has been compacted and you are no longer certain what you did. It returns what succeeded with the recorded results, what is still in flight, what failed, and — separately, because it is the only category that can hurt you — what has an unknown outcome. Anything under "done" has already happened: use its result rather than performing it again. Costs about a seventeenth of the context of listing the same effects.

    Annotations the server declares

    • title: What have I already done in this run?
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • ratchet_get_usageReturns the current plan, remaining included effects for the month, prepaid credit balance, and today's declared external spend against each budget ceiling.No findings

    Why it is in this group

    • The name "ratchet_get_usage" says "get": a word for reading.
    Description, as the server wrote it
    Returns the current plan, remaining included effects for the month, prepaid credit balance, and today's declared external spend against each budget ceiling. Use it to warn a user before a long run exhausts an allowance or a budget.

    Annotations the server declares

    • title: Check plan, credit balance, and spend
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • ratchet_list_effectsReview recent effects for this workspace, optionally filtered by state or run.No findings

    Why it is in this group

    • The name "ratchet_list_effects" says "list": a word for reading.
    Description, as the server wrote it
    Review recent effects for this workspace, optionally filtered by state or run. Use it to find unresolved work — filter by state "indeterminate" to see every action whose outcome is unknown and still needs verification.

    Annotations the server declares

    • title: List recent gated effects
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • ratchet_list_receiptsReturns a signed receipt for every decision made about one effect, refusals included.No findings

    Why it is in this group

    • The name "ratchet_list_receipts" says "list": a word for reading.
    Description, as the server wrote it
    Returns a signed receipt for every decision made about one effect, refusals included. Each signature is over the exact bytes in `body` and verifies offline against the Ed25519 key published at /.well-known/ratchet-receipt-key — you do not have to trust this server to check them. Use this when a human asks you to PROVE an action was or was not authorised, rather than asserting it.

    Annotations the server declares

    • title: Get signed proof of the decisions on an effect
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 0.3.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http ratchet https://ratchetgate.com/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__ratchet__ratchet_get_effect",
      "mcp__ratchet__ratchet_get_run",
      "mcp__ratchet__ratchet_list_effects",
      "mcp__ratchet__ratchet_get_policy",
      "mcp__ratchet__ratchet_get_usage",
      "mcp__ratchet__ratchet_list_receipts",
      "mcp__ratchet__ratchet_get_prevented_loss"
    ],
    "ask": [
      "mcp__ratchet__ratchet_get_circuit",
      "mcp__ratchet__ratchet_begin_effect",
      "mcp__ratchet__ratchet_report_effect",
      "mcp__ratchet__ratchet_extend_lease",
      "mcp__ratchet__ratchet_resolve_effect",
      "mcp__ratchet__ratchet_unwind_group",
      "mcp__ratchet__ratchet_get_group",
      "mcp__ratchet__ratchet_reconcile_effects"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as ratchet. Review it before you use it.