| Axis | Members |
|---|---|
| Surface (how you integrate) | MCP server · SDK · REST API |
| Signing layer (where keys live) | MPC 2-of-2 (DKLS23) · External BYO (KMS / HSM / multisig - SDK or REST) |
| Cross-cutting controls | Bands · Policy gates · Audit trail · Structured errors · Input validation · Secret isolation · HTTPS |
Trust Model
| Component | Layer | Holds keys? | What it can access |
|---|---|---|---|
| WalletSuite REST API | Surface | No | Blockchain data, transaction preparation, fee estimation |
| MCP Server | Surface | No | Tool orchestration, input validation, band filtering |
SDK (@walletsuite/wallet-sdk) | Surface | No | Typed client; signer-agnostic |
| WalletSuite MPC Share | Signing | 1 of 2 DKLS23 shares | Threshold signature share; policy enforcement |
| Customer MPC Share | Signing | 1 of 2 DKLS23 shares | Stored on customer infrastructure, encrypted at rest; never reaches WalletSuite |
| External Signer (BYO) | Signing | Customer-managed | KMS / HSM / multisig - outside WalletSuite |
| Your LLM | Caller | No | MCP tool calls and responses only |
Defense in Depth
1. Band Filtering · MCP only
Tools outside the active band are never registered in the MCP schema — the LLM cannot discover or call them. Default isread. SDK and REST API have no equivalent: they expose their full surface to whatever code holds the API key.
See Band Filtering.
2. Policy Gates · Signing layer
Declarative rules (destination allowlists, value caps, rate limits) enforced at the signing layer before any signature is produced. Same gates apply 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
Sensitive values are supplied through environment variables, never through tool arguments or request bodies:WALLETSUITE_API_KEYWALLETSUITE_PASSPHRASE(when the server holds the customer key share)
6. HTTPS Enforcement · All surfaces
All external URLs are validated as HTTPS. HTTP is allowed only forlocalhost in development. Applies to the backend API, chain RPCs, and MoonPay widget URLs.
7. Audit Trail · Signing layer
Everysign_transaction and send_transaction operation appends a receipt to a hash-chained, append-only JSONL log written by the server core - tamper-evident, local to your deployment, and exportable to your SIEM.
See Audit Trail.
Surface-Specific Notes
MCP server
- Bands constrain tool visibility per agent role
- Tool arguments carry only wallet identifiers, chain ids, and unsigned tx hex — never key material
- Closed-source orchestration; trust is enforced architecturally, not via source review
SDK
- Signer-agnostic: composes with MPC or external (KMS/HSM/multisig/local key)
- No bands - 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 MCP
Non-Custodial Architecture
MPC 2-of-2 (DKLS23)
Attack Model
MCP server compromised:- No full key is exposed - no full key ever exists
- Signing requires the customer share plus the
signband - Broadcast requires the
broadcastband andconfirmBroadcast=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 share
- Policy gates are still evaluated on every co-signing request
MCP_BANDS=read):
Worst case is information disclosure (balances, prices, transaction history). No value can be moved.
What WalletSuite Does Not Do
- Hold a full private key (1 of 2 DKLS23 shares only)
- Custody funds
- Sign transactions alone - both shares are required
- Move funds without an enabled signing band and user/policy approval
Remaining Risks
Non-custodial does not mean zero risk. Operator-side risks:- Enabling broader bands than needed (MCP)
- Running on a compromised host
- Leaking environment secrets (API keys)
Practical Guidance
| Setting | Default | When to change |
|---|---|---|
MCP_BANDS | read | Add prepare when you need tx construction |
| Broadcast | Disabled | Enable only after proving the signing flow |
| Policy | None | Attach to the signing layer before enabling sign |
Related
- Key Management - MPC share storage and key lifecycle
- Audit Trail - co-signing event logging and SIEM export
- Security & Trust (AI Agents) - MCP-specific controls (bands as prompt-injection defense)
- Responsible Disclosure