Stops agents double-charging across processes: exactly one execution, confirmed by the provider.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Public register: the Retry-Safety Index lists which agent-payment implementations pay once when the answer is lost β verified safe, found & fixed (with time-to-fix), and how to get verified. Every row links to its proof.
Your agents earn the right to spend without you.
Seal and EffectFence stop an irreversible action from firing twice while it happens β runtime enforcement on money movement. Coherence never touches your runtime; it reads the record afterwards and grades what an agent claimed against what it proved. Prevention versus proof. Different problems, different code, no overlap.
Free: submit any client, facilitator, SDK or toolkit that moves money β yours or someone else's β and we read it and publish a verdict on the Retry-Safety Index at no cost. Findings come back with the mechanism, the file and line, and a failing test. You are counted, never named, until you ship a fix. Submit for grading β
Seal is an MCP server (seal-mcp, stdio, JSON-RPC 2.0) β and a Python
library. It gives an MCP host 12 tools for exactly-once execution of
irreversible actions: seal_propose, seal_execute, seal_paths (gateway
mode β the agent holds a single-use ticket, never the provider key), plus
seal_admit, seal_commit, seal_abort, seal_heartbeat, seal_get,
seal_verify, seal_incident_receipt, seal_expect, seal_obligations.
It starts in introspection-only mode with no environment β initialize and
tools/list answer with no database, so a host or registry probe can connect
immediately. Set SEAL_DSN to a Postgres DSN to actually admit actions, and
SEAL_EXECUTORS=your.module for gateway mode.
Not an engineer? Read docs/PLAIN-ENGLISH.md instead β the same thing with no jargon, including what we can't do.
Everyone else ships a lock: a spend cap you set once and forget. The cap never learns, so an agent that has settled ten thousand clean payments is trusted exactly as little as the one you installed this morning β and you keep clicking Approve.
Seal ships the unlock. It reads what a payment path has actually proven β settlements the provider confirmed, sweeps showing nothing moved behind its back β and computes the autonomy that path has earned. L0 OBSERVED β L5 AUTONOMOUS. Nobody types the level.
Since 0.4.0 the licence drives the wheel, not just the dashboard. Turn on
earned autonomy β Gateway(seal, earned_autonomy=True), or
SEAL_EARNED_AUTONOMY=1 for the MCP server β and the gateway lets a path move
money unattended only to the extent its own record has earned (L3+), inside
the operator's ceilings, never above them. Three things hand the wheel back to
a human instantly: a path that hasn't earned it yet, a suspension (money moved
behind the gateway's back), and a hold β an execution reached the provider
and its outcome is unknown, so the path pulls over until settle() has asked
the provider what happened. The hold lifts by itself once the world answers.
A human can still approve any single action through the same maker-checker
door (tier=LICENCE). Off by default: nothing changes until you switch it on.
Can you prove your agents won't double-charge a customer? Three rungs, one ladder, written-only: a $300 founding conformance run β your implementation through the battery, result published on the Index (first three only; book) Β· a $1,200 attestation run β your live endpoint against every ambiguous outcome, signed result, findings within five business days, a clean run signed within 24 h (book) Β· a $12,000 fixed-scope money-path review β one production money path read, tested and attested in 7β10 days, no invoice if no real double-fire is shown on a path you run. For a free self-check first, hostile-facilitator tells you in 60 seconds.
Slow to earn, instant to lose β the only shape that makes a track record mean anything. The full level definitions: docs/AUTONOMY-LEVELS.md.
Seal's ambiguous-outcome doctrine β "could not determine" is terminal, never absent β is now Β§4.3 of the draft MCP retry-safety proposal, co-authored by us, with our conformance battery as its test suite.
Two different agents, on two different machines, both decide to charge order 123 at the same instant. In-process idempotency can't help β the guard has to live in a store both agents talk to, and the winner has to be decided atomically there.
Seal is that layer. One Postgres, one row per intent, one winner:
Every admitted action ends in a certificate: a content-addressed hash over intent + args digest + result digest + the previous cert's hash. Editing, deleting or reordering any cert breaks every hash after it β and anyone with the DSN can check, with no network and no trust in us:
The claim is tested the hostile way: 1,000 real threads released by one barrier against one shared Postgres, where the "charge" increments a measured counter β if two callers run, the counter says 2 and the test fails loudly.
Result, four consecutive runs: ACTUAL_EXECUTIONS = 1. Every loser either replayed the sealed cert, stood down mid-flight, or failed safe when the store was unreachable. A 50-caller post-seal wave: all replayed, none re-ran. Full numbers, including the honest limits: STORM-PROOF.md.
Run it yourself:
To run the 1,000-thread storm proof yourself, clone the repo (the harness ships with the source, not the wheel):
The exact harness above, generalized into a standalone file with zero dependency on this repo β copy it, point it at your own write-bearing tool, and find out for yourself:
It demonstrates itself against a known-unsafe target and a known-safe one before you ever run it for real, so a pass means something. Full writeup, including the three ways an early version of this test lied to us before it was fixed: docs/RANGE-SAFETY-TEST.md.
If the effect fails before anything irreversible happened, release the claim
so a retry is legitimate: seal.fail(adm.intent, adm.fence, reason).
A cert saying "admitted once" is a claim about us. The next question is what Stripe (or Resend, or your bank's webhook) actually recorded β and the answer is allowed to disagree with us.
What it does, against your real Stripe test account, no mocks:
PaymentIntent is created.WORLD_FINAL.WORLD_DIVERGED, the domain freezes, and further spend on it is
refused automatically.No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/seal-2)<a href="https://allmcps.com/mcp/seal-2"><img src="https://allmcps.com/api/badge/seal-2?style=directory" alt="Seal on AllMCPs" /></a>