Mmcp.market

Is Stabledrop escrow payments safe?

Probably. Read the findings first.

C57/100grade C

Use with care. Some checks failed or could not be verified.

What to know before installing
  • highWrite-action tools reachable without authentication

Public scan report

scanner v0.1.2 · 2026-09-18 · same rubric, same numbers if you re-run it

1 high1 low
  • Code scanremote-only server, no package to scann/a
  • Live reliabilityremote reachable in 1820ms20/20
  • Tool poisoning6 tool descriptions checked13/15
  • Auth qualityopen endpoint exposes 1 write-action tools with no auth3/15
  • Maintenancerepository not readable: repo not found3/15
  • Maintainer identityverified namespace with website, no repo4/10

Findings (2)

  • highWrite-action tools reachable without authenticationauth.open-write
  • lowUnusually long tool description (over 2,000 characters)poison.long-description
    tool prepare_escrow_payment: …Work out where a payment must go, before anybody signs or sends anything. Returns the escrow address these terms produce, and TWO ways to fund it. Both end at the same address holding the same money; they differ only in who sends the transaction. **Transfer it yourself.** Send the tokens to the address from any wallet — a browser wallet, a hardware wallet, an exchange withdrawal. Nothing to sign for us, and no `payer` needed, because the escrow never asks who paid: it reads its own balance. Then call `settle_escrow_payment` with no signature and we create the escrow around what is there. **Or let us relay it.** Pass `payer` and this returns an EIP-3009 authorization for them to sign. We broadcast it and pay the gas, so **the payer needs no gas at all**. This is the only one an agent can complete unattended, and the only one that needs a key anywhere. Either way the address is the same, because it is a pure function of the terms. That is also what makes the relayed form safe: the payer signs `to` as part of the authorization, committing to every term at once — alter any of them afterwards and the address moves and the signature stops matching. `amount` is in the TOKEN's base units (1 USDC = 1000000), because that exact figure is one of the terms the address derives from. `expiry_timestamp` is an absolute Unix time — when the dispute window closes. `0` settles instantly with no recourse. There is no default: "instant, deliberately" and "nobody said" are different, and a caller must not discover afterwards which one they got. `nominal_buyer` is who may dispute and receives a refund. For an agentic payment this should be the PERSON, not the agent — they are the one who will later read a report and decide whether to object. `external_id` keeps two otherwise-identical payments apart, and is one of the terms the address derives from. **Leave it out and a unique one is generated.** That is the right default: two payments matching in seller, amount, maturity and buyer would otherwise derive to the SAME address, and funding the second sends money into the first escrow — recoverable only after that one is claimed, and only to ITS buyer. ⚠️ PASS BACK THE `external_id` THIS RETURNS, not the one you sent. A generated one is only knowable from the result, and settle derives the address again from whatever it is given: a different id is a different address, and the money is at this one. Supply your own for the opposite behaviour — a checkout hash gives "one checkout, one escrow", so re-presenting the same purchase returns the same address rather than a second. `description` is what the payment is FOR, in the buyer's own words — ask them for it rather than defaulting. It is what they will be looking at in the dashboard weeks later deciding whether to dispute, and "Escrow payment" tells them nothing about which one this was. It does not affect the address, so it can be set freely here. ⚠️ 1 to 160 characters. Longer is refused HERE rather than at the chain, where the check happens after the money has already moved.…
Overall 57/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

Full listing, tools and install