Cross-cutting (all surfaces)
Credentials and authentication
- Production credentials issued — see Credentials & Authentication
- Credentials stored in a secret manager — not hardcoded in source, not committed to version control
- Rate limits reviewed and understood — see Rate Limits
Error handling
All 6 error categories handled:-
validation— fix input and retry -
upstream— retry with exponential backoff -
flow— execute therequiredActionfield before retrying (MCP) -
auth— halt the agent, alert the operator -
limit— back off, retry after the rate limit window -
not_available— inform the user the feature is not enabled
Security
- No private keys or mnemonics in source control or tool arguments
- No secrets passed as MCP tool parameters — credentials are exchanged server-side, never as tool input
- HTTPS enforced for all external URLs
Agent connection & capability (hosted MCP agents)
Per-agent tool profile and token scopes
One hosted platform serves every agent; each is scoped independently. Grant the minimum — see Execution Levels.- Each agent bound to the minimum tool profile for its role (
read/prepare/execute/governed) - Read-only agents bound to the
readprofile — nowallets:signscope present - Token scopes requested at exchange match the agent’s role — nothing beyond what the role needs
- Each agent’s tool profile and scopes have a documented justification
- Confirmed that tools outside the profile are never registered — the tool profile is the prompt-injection boundary, not any per-agent runtime
Connect flow
The server holds the long-lived agent key and authorizes the agent with it — see Connect Your Agent.- Long-lived agent key stored in a secret manager — never in source, browser, prompt, or a downstream MCP call
- Agent key rotation policy documented
- Revocation path verified — revoking the agent key cuts the agent off (it is the revocation anchor)
- Short-lived token refreshed before it expires — re-authorize with the agent key
- Bearer never persisted, logged, or hardcoded
Signing layer
Policy gates
- At least one allowlist rule armed — matching on chain, operation type, contract, method, an optional destination, and an optional per-transaction amount cap in base units, with a mandatory expiry. See Policy Gates
- Policy tested: verified that signing to a non-allowlisted destination or above the amount cap is denied
- Policy denial returns a
flowerror withrequiredAction— verify your agent handles it. See Policy Gates → What a Deny Does - Governed agents’ rules administered through the admin API; every decision lands in the decision record
MPC threshold signing
Non-custodial: no full private key ever exists, and no single party can sign alone. See Trust Model.- Customer-side share held in your own storage (database, HSM, device, or passkey-wrapped envelope) — never reaches WalletSuite; WalletSuite’s share is envelope-encrypted at rest behind the scenes
- External BYO signer verified if used (KMS / HSM / multisig) — SDK or REST surfaces
- Co-signing latency monitored (typical warm path: 200–600ms)
- Audit trail export to SIEM configured if long-term retention is required — see Audit Trail
- Alerts configured for signing failures and policy denials
Deployment validation
- Connect flow returns a scoped token — server authorizes with the agent key and the MCP client points at the hosted endpoint. See Connect Your Agent
- R0 read: a balance query returns expected balances
- R1 prepare:
preparereturns a valid unsigned transaction - R2 execute (if used): signing flow completes (MPC co-sign), broadcast confirms on-chain in staging