Trust Model
Trust boundary: no single party ever holds enough to sign alone, regardless of which surface initiates the request.
Defense in Depth
1. Tool Profile · Agent surfaces
An agent’s callable surface is the server-owned tool profile bound to the agent, narrowed by the scopes in its short-lived token. Tools outside that intersection are never registered in the MCP schema handed to the agent — the model cannot discover, name, or call them, so a poisoned prompt or hostile tool output has nothing to invoke. The profile is set on WalletSuite’s side, never by the caller. SDK and REST have no equivalent: they expose their full surface to whatever code holds the key. See Execution Levels and Security & Trust (AI Agents).2. Policy Gates · Signing layer
A deterministic policy decision point evaluates every signing intent before it can be signed. Your allowlist rules are opt-in and deny-by-default once armed: each rule matches on chain, operation type, contract address, method selector, an optional destination pin, and an optional per-transaction amount cap in base units, with a mandatory expiry. Intents on chains you’re not entitled to are denied, as are operations that can’t be typed. Rules roll out in stages: off, shadow, enforce. No LLM sits in the decision path, and the same gate applies whether the call comes from MCP, SDK, or REST. See Policy Gates.3. Structured Errors · MCP + SDK
Every error includes acategory and code. flow errors include a requiredAction. Agents recover programmatically.
See Structured Errors.
4. Input Validation · All surfaces
Zod schemas (MCP/SDK) and request validators (REST) check inputs before they reach the API:- Address format per chain family (0x-prefixed for EVM, T-prefixed for Tron)
- Amounts as positive numeric strings (no scientific notation)
- Mutually exclusive fields (
amountvsamountWei) - Token contracts validated when provided
5. Secret Isolation · All surfaces
Long-lived credentials stay server-side and never reach a tool argument, request body, or the model:- Agents: the agent’s key stays server-side and authorizes the agent; the raw key never reaches the model, a prompt, or a downstream MCP call. See Connect Your Agent.
- SDK / REST: the
x-api-keycredential is sent only as a request header.
6. HTTPS Enforcement · All surfaces
Every WalletSuite endpoint and callback is HTTPS-only. External URLs (chain RPCs, webhook targets) are validated as HTTPS before use.7. Audit Trail · Signing layer
Everysign_transaction and send_transaction operation appends a receipt to a hash-chained, append-only JSONL log — tamper-evident and exportable to your SIEM.
See Audit Trail.
8. Decision Provenance · Signing layer
WalletSuite records a decision on every signing intent at the point it is authorized. Each record carries apolicyDecisionId, the decision reason, and the matched rule when one admitted the operation. Allowed and denied intents alike are written to the signing-intents ledger, so a denial is durable evidence, not a silent drop.
See Policy Decisions.
Surface-Specific Notes
Hosted MCP
- The tool profile and token scopes bound which tools exist in the agent’s schema
- Tool arguments carry only wallet identifiers, chain ids, and unsigned tx hex — never key material
- The agent’s key stays server-side; the agent connects with a short-lived token — see Connect Your Agent
- Closed-source orchestration; trust is enforced architecturally, not via source review
SDK
- Signer-agnostic: composes with MPC or External BYO (KMS/HSM/multisig)
- No tool profile — the SDK exposes its full surface to whatever code imports it
- Typed errors share the
category/codetaxonomy with MCP
REST API
- Stateless HTTPS with
x-api-keyheader - Same input validation and structured error envelope as the SDK
- Customer brings the signer (External BYO) or routes signing through hosted MPC
Non-Custodial Architecture
MPC threshold signing
WalletSuite operates a fully-managed cosigner holding one share; you hold the other share in your own storage (database, HSM, device, or passkey-wrapped envelope). Both are required for every signature.Attack Model
Hosted MCP endpoint compromised / poisoned prompt:- The model only ever sees its bounded tool surface — tools outside its profile and scopes were never registered, so there is nothing to invoke
- No full key is exposed — no full key ever exists
- Every signing intent still clears the policy engine;
send_transactionadditionally requiresconfirmBroadcast=true
- Attacker has 1 of 2 shares — cannot produce a valid signature without the customer share
- Internal access is M-of-N gated and audit-logged
- Attacker has 1 of 2 shares — cannot produce a valid signature without WalletSuite’s cosigner share
- Policy gates are still evaluated on every co-signing request
What WalletSuite Does Not Do
- Hold a full private key (one of two key shares only)
- Custody funds
- Sign transactions alone — both shares are required
- Move funds without a passing policy decision
Remaining Risks
Non-custodial does not mean zero risk. Operator-side risks:- Granting a broader tool profile than the workflow needs
- Leaking the agent’s key or an API key
- Enabling signing before arming policy rules
Practical Guidance
See Production Checklist.
Related
- Key Management - MPC share custody and lifecycle
- Audit Trail - co-signing event logging and SIEM export
- Execution Levels - tool profiles and scopes per agent
- Security & Trust (AI Agents) - the tool profile as prompt-injection boundary
- Policy Gates - deny-by-default authorization on the signing layer
- Responsible Disclosure