# walletconnect

Pair and use an EVM and/or Solana wallet via WalletConnect v2. No authentication required — available to every user (including unauthenticated/anonymous). Non-custodial: the server never holds keys and the user approves every signature/transaction in their own wallet. Pairing proposal is controlled per request via optional pairingTarget on action: "connect": eth (default, eip155 only), solana, or both. Many mobile wallets fail if eip155 and solana are proposed together; prefer eth or solana unless the user needs both in one session. Every call must include action (string). Connect QR (critical for assistants): On action: "connect", successful responses return (1) a resource_link to the pairing QR PNG when storage works, then (2) text JSON with pairingQrResourceUri, presentation, nextSteps, url, optional mobileDeeplinks, etc. Desktop / scan UX: surface the pairing QR first: call MCP resources/read on pairingQrResourceUri in the same MCP session as connect, then open the PNG per OS (open / xdg-open / start) or render it inline so the user can scan. Mobile / no-camera: follow nextSteps; when present, mobileDeeplinks lists HTTPS url (+ nativeUrl) per curated WalletConnect wallet so the user can open pairing without QR (presentation.mobilePreferred === "deeplinks"); links overlay WalletConnect Explorer data when Redis cache allows; otherwise curated fallbacks still work. Raw wc: (url / walletConnectLinkForUser) remains fallback if links fail to open in the host. Avoid calling connect again while pairing is still in progress unless the user must reset—duplicate calls used to invalidate the WalletConnect URI; the server now returns the same in-flight URI when Redis shows pairing pending *and* pairingTarget matches, but the wallet may still expire stale links if you wait too long. Flow: (1) connect as above. (2) User approves in the wallet (EVM only, Solana only, or both). (3) status until kind is session — optional evm / solana blocks; address/chains remain legacy EVM when EVM is connected. (4) sign / send_transaction or swap execute=true (swap execute remains EVM unless extended elsewhere). kind: "pending" on status is success — keep polling. Actions (exact JSON shapes): - connect — { "action": "connect", "sessionTtlDays"?: number, "pairingTarget"?: "eth" | "solana" | "both" } - status — { "action": "status" } (anonymous sessions include a terms block showing the connected wallet's 1inch Terms-of-Use acceptance state) - sign — EVM: personal_sign / eth_signTypedData_v4. Solana: solana_signMessage / solana_signTransaction (see schema fields params, chainId, solanaChainId). - send_transaction — EVM: tx.to, numeric tx.chainId. Solana: string tx.chainId (solana:...), tx.serializedTransaction (base64). Set tx.namespace when both WC namespaces are active and the payload is ambiguous. - accept_terms — { "action": "accept_terms", "address"?: "0x…" }. One-time per wallet: the user signs the 1inch Terms-of-Use acceptance message in their wallet (personal_sign); the consent is stored durably. Required before anonymous (unauthenticated) write actions such as aqua build_ship/build_swap. Idempotent — safe to call again; already-accepted wallets return immediately without a wallet prompt. - disconnect — { "action": "disconnect" } Anonymous durable sessions: for unauthenticated callers, connect returns a walletSessionToken. Store it and pass it back as walletSessionToken on later status / sign / send_transaction / accept_terms / disconnect so the wallet stays connected after the MCP session rotates; omit it and the session is scoped to the current MCP session only. Authenticated callers ignore the token (their WC session is scoped by org/app). Non-custodial relay; no authentication required.

Agent View of the PolicyLayer registry record for `walletconnect`. HTML page: https://policylayer.com/tools/com-1inch-business-mcp/walletconnect

## Facts

- Tool: `walletconnect`
- Server: 1inch MCP (`https://api.1inch.com/mcp/protocol`) — https://policylayer.com/tools/com-1inch-business-mcp.md
- Homepage: https://github.com/1inch/1inch-ai
- Risk category: Financial (Critical risk)
- Registry record: grade F, identity unverified
- Server auth posture: open
- Server rate-limited: no
- Parameters: 10 (1 required)
- Recommended policy verdict: Approval-gated

## Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `tx` | object | no | Required when action is "send_transaction". EVM or Solana shape — see `tx` field descriptions. Omit for connect, status, sign, disconnect. |
| `action` | string | yes | Required. One of: connect (start pairing), status (session info), sign (EVM + Solana WC methods), send_transaction (EVM eth_sendTransaction or Solana solana_sig |
| `method` | string | no | Required when action is "sign". EVM: personal_sign \| eth_signTypedData_v4. Solana: solana_signMessage \| solana_signTransaction. Omit for connect, status, send_t |
| `params` | array | no | Required when action is "sign": exactly two items. personal_sign: [message, 0xAddress]. eth_signTypedData_v4: [0xSigner, typedDataJsonString]. solana_signMessag |
| `address` | string | no | Optional; only with action "accept_terms". EVM address that signs the Terms-of-Use acceptance; must belong to the active WalletConnect session. When omitted, th |
| `chainId` | integer | no | Optional; only when action is "sign" and method is personal_sign (EVM numeric chain id). Must be omitted for eth_signTypedData_v4, Solana methods, send_transact |
| `pairingTarget` | string | no | Optional; only with action "connect". What to advertise in the WalletConnect proposal: "eth" (eip155 only, default), "solana" only, or "both". Many mobile walle |
| `solanaChainId` | string | no | Optional; only when action is "sign" and method is solana_signMessage or solana_signTransaction. CAIP-2 string (e.g. solana:5eykt4…). When omitted, the server u |
| `sessionTtlDays` | integer | no | Optional; only with action "connect". How long to persist this WalletConnect client state in Redis (days). Server clamps to [1, WALLETCONNECT_SESSION_TTL_DAYS_M |
| `walletSessionToken` | string | no | Optional durable token for ANONYMOUS (unauthenticated) sessions. A fresh token is returned by `connect`; store it and pass it back on status/sign/send_transacti |

Parameters from the server's own tool schema.

## Example call (MCP tools/call, JSON-RPC 2.0)

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "walletconnect",
    "arguments": {
      "action": "<action>"
    }
  }
}
```

## Why walletconnect is rated Critical

This tool facilitates wallet pairing and transaction/signature workflows. Even though it is non-custodial and requires user approval, it directly orchestrates financial transactions (swaps, limit orders, cross-chain transfers) on EVM and Solana chains. An AI agent misusing this tool could construct and present malicious transactions for user approval, leading to financial loss.

From the tool's own definition: "Pair and use an EVM and/or Solana wallet via WalletConnect v2... the user approves every signature/transaction in their own wallet"

Risk signals: High parameter count (17 properties) · Bulk/mass operation — affects multiple targets

## Use case

AI agents use walletconnect to commit financial operations through 1inch MCP, usually the final step of a payment, billing, or trading workflow. A call moves real money.

## Recommended policy (PolicyLayer)

Verdict: **Approval-gated**. Enforced by the PolicyLayer MCP gateway (https://policylayer.com/mcp-gateway) before a call reaches 1inch MCP:

```json
{
  "version": "1",
  "default": "deny",
  "tools": {
    "walletconnect": {
      "deny_if": [
        {
          "conditions": [],
          "on_deny": "Requires human approval."
        }
      ]
    }
  }
}
```

## Other tools on 1inch MCP (8)

- `orderbook` — Financial — https://policylayer.com/tools/com-1inch-business-mcp/orderbook.md
- `product_api` — Financial — https://policylayer.com/tools/com-1inch-business-mcp/product-api.md
- `swap` — Financial — https://policylayer.com/tools/com-1inch-business-mcp/swap.md
- `aqua` — Read — https://policylayer.com/tools/com-1inch-business-mcp/aqua.md
- `debug` — Read — https://policylayer.com/tools/com-1inch-business-mcp/debug.md
- `get_example` — Read — https://policylayer.com/tools/com-1inch-business-mcp/get-example.md
- `list_examples` — Read — https://policylayer.com/tools/com-1inch-business-mcp/list-examples.md
- `search` — Read — https://policylayer.com/tools/com-1inch-business-mcp/search.md

## For agents

This record is a snapshot. Live verdicts and the full registry:

- Check every server in your MCP config at once: `npx -y policylayer stack`
- Vet a server before you add it: install the mcp-precheck skill — `npx skills add https://policylayer.com` (skill text: https://policylayer.com/skill.md)
- Query the registry over MCP: endpoint `https://api.policylayer.com/mcp` — tools `check_mcp_server`, `check_mcp_stack`, `check_tool`, `search_registry`, `get_change_events`

---

Source: the PolicyLayer MCP registry — one continuously verified record per MCP server. Full record: https://policylayer.com/registry?q=com-1inch-business-mcp · API: https://policylayer.com/registry/api · Policy library: https://policylayer.com/policies/com-1inch-business-mcp
