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 controll...
This record as markdown: /tools/com-1inch-business-mcp/walletconnect.md
What walletconnect does on 1inch MCP
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.
| Parameter | Type | Required | Description |
|---|---|---|---|
tx | object | — | 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 | — | Required when action is "sign". EVM: personal_sign | eth_signTypedData_v4. Solana: solana_signMessage | solana_signTransaction. Omit for connect, status, send_t |
params | array | — | Required when action is "sign": exactly two items. personal_sign: [message, 0xAddress]. eth_signTypedData_v4: [0xSigner, typedDataJsonString]. solana_signMessag |
address | string | — | 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 | — | 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 | — | 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 | — | 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 | — | 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 | — | 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.
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 definition Pair and use an EVM and/or Solana wallet via WalletConnect v2... the user approves every signature/transaction in their own wallet
Risk signalsHigh parameter count (17 properties) · Bulk/mass operation — affects multiple targets
Attacks that exploit this kind of access
The rule that runs walletconnect safely
PolicyLayer is an MCP gateway: it sits between your AI agents and 1inch MCP, and checks every tool call against a rule you set before the call runs. Nothing changes on the server itself. For walletconnect, this is the rule to start with:
Any call to walletconnect is blocked until a human approves it. The rest of the server keeps working.
The button opens the PolicyLayer dashboard: create your workspace, connect 1inch MCP, apply this rule, and every walletconnect call is checked against it from then on.
Questions about 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. It is categorised as a Financial tool in the 1inch MCP MCP Server, which means it involves financial transactions. Block by default and require explicit approval.
walletconnect accepts 10 parameters: tx, action, method, params, address, chainId, pairingTarget, solanaChainId, sessionTtlDays, walletSessionToken. Required: action. The full parameter table on this page comes from the server's own tool schema.
Register the 1inch MCP server in PolicyLayer and add a rule for walletconnect: allow, deny, rate-limit, or require approval. Point your MCP client at the PolicyLayer proxy URL and the rule is enforced on every call, before it reaches 1inch MCP. Nothing to install.
walletconnect is a Financial tool with critical risk. Critical-risk tools should be blocked by default and only enabled with explicit human approval.
Yes. Add a rate_limit block to the walletconnect rule in your PolicyLayer policy. For example, setting max: 10 and window: 60 limits the tool to 10 calls per minute. Rate limits are tracked per agent session and reset automatically.
Set action: deny in the PolicyLayer policy for walletconnect. The AI agent will receive a policy violation error and cannot call the tool. You can also include a reason field to explain why the tool is blocked.
walletconnect is provided by the 1inch MCP server (https://api.1inch.com/mcp/protocol). PolicyLayer sits as a proxy in front of this server to enforce policies before tool calls reach the server.
More on 1inch, and thousands of servers like it.
Across the catalogue