{"server":"Warden MCP","checked":"2026-11-03","tools":[{"name":"agent_permissions","title":"Agent permissions","description":"What this connected wallet has authorised agents to do, whether an unattended trading session is open, and the daily limits that apply.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}},{"name":"execute_swap","title":"Execute a swap","description":"Sign and broadcast a swap from the user’s wallet without asking them. Only works while the user has hands-free trading on (agent_permissions → handsFree), and within the same limits as prepare_swap; if it is off, tell the user how to turn it on (handsFree.tellUser). Spends real funds: check agent_permissions first, and reuse the idempotencyKey on any retry. Sell the native coin by its address from list_chains. If the wallet has no gas coin (see get_wallet), sell an ERC-20 with gasless=true. Set buyChainId to land the bought token on another chain; then follow the trade with swap_status.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"chainId":{"type":"number"},"buyChainId":{"type":"number"},"sellToken":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"buyToken":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"sellAmount":{"type":"string","pattern":"^\\d{1,78}$"},"slippageBps":{"default":100,"type":"integer","minimum":1,"maximum":300},"gasless":{"default":false,"type":"boolean"},"idempotencyKey":{"type":"string","minLength":8,"maxLength":64}},"required":["chainId","sellToken","buyToken","sellAmount","idempotencyKey"]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false}},{"name":"get_wallet","title":"Connected wallet","description":"The connected wallet, its X handle if linked, and everything it holds on every chain: the gas coin and each token, with the exact raw amount to use as sellAmount and a USD value where Warden can price it. A chain with no gas coin means: sell an ERC-20 with gasless=true where gaslessAvailable, or fund it first. Tokens under unrecognised were sent to the wallet unasked (not listed, not bought): never count them as money or suggest selling them unless the person names one.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}},{"name":"list_chains","title":"List chains","description":"Chains Warden supports, with each chain’s native coin, dollar stable and gasless support.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}},{"name":"prepare_swap","title":"Prepare a swap","description":"Build a swap for the user to sign. Does not broadcast. Requires the \"swap\" permission. Native coin, cross-chain (buyChainId) and gasless (typed-data payloads instead of calldata) are all supported. Give the user reviewUrl: it opens the app with this exact trade filled in, ready to sign. If hands-free trading is on, use execute_swap instead.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"chainId":{"type":"number"},"buyChainId":{"type":"number"},"sellToken":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"buyToken":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"sellAmount":{"type":"string","pattern":"^\\d{1,78}$"},"slippageBps":{"default":100,"type":"integer","minimum":1,"maximum":5000},"gasless":{"default":false,"type":"boolean"}},"required":["chainId","sellToken","buyToken","sellAmount"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false}},{"name":"price_history","title":"Price history","description":"Candles for a token on its deepest pool, oldest first, priced in USD: time (unix seconds), open, high, low, close, volume. Also returns a summary: the change over the window, its high and low, and how far the last close sits below the high and above the low, to judge a pullback or a breakout before buying. Read-only.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"chainId":{"type":"number"},"token":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"interval":{"default":"1h","type":"string","enum":["5m","15m","1h","4h","1d"]},"limit":{"default":96,"type":"integer","minimum":10,"maximum":300}},"required":["chainId","token"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}},{"name":"quote_swap","title":"Quote a swap","description":"Price a swap without committing to it. Read-only. Works for the native coin (use its address from list_chains) and across chains (buyChainId).","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"chainId":{"type":"number"},"buyChainId":{"type":"number"},"sellToken":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"buyToken":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"sellAmount":{"type":"string","pattern":"^\\d{1,78}$"}},"required":["chainId","sellToken","buyToken","sellAmount"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}},{"name":"request_session","title":"Ask for hands-free trading","description":"Ask the wallet owner to turn on hands-free trading, so execute_swap works. Returns an approveUrl and a code: give both to the person and ask them to open the link and check the code matches. They approve with one tap in Warden; nothing changes until they do. Then poll session_request_status every few seconds (the request lasts 10 minutes). hours is how long the session lasts. limits is optional and replaces the wallet's daily and per-trade limits in whole dollars; leave it out to keep them.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"hours":{"anyOf":[{"type":"number","const":1},{"type":"number","const":4},{"type":"number","const":24},{"type":"number","const":168},{"type":"number","const":720}]},"limits":{"type":"object","properties":{"maxSwapValuePerDay":{"type":"integer","minimum":1,"maximum":9007199254740991},"humanApprovalAboveValue":{"type":"integer","minimum":1,"maximum":9007199254740991}},"required":["maxSwapValuePerDay","humanApprovalAboveValue"]},"agentName":{"type":"string","maxLength":40}},"required":["hours"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false}},{"name":"search_tokens","title":"Search tokens","description":"Find tokens by name, ticker or contract address across the supported chains. Tickers are not unique: many contracts call themselves USDC, USDT or ETH. Prefer rows with verifiedByWarden true (Warden reviewed the team, or it is a Warden token) or establishedAsset true (a well-known token at its genuine contract, not reviewed by Warden); never trade a row that carries a warning as if it were the real asset, and for dollars and gas use `cash` and `native` from list_chains.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"query":{"type":"string","minLength":2,"maxLength":64},"chainId":{"type":"number"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}},{"name":"session_request_status","title":"Hands-free request status","description":"Whether the person has answered a request_session: pending, approved, denied or expired. Once approved, execute_swap works until the session ends.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"code":{"type":"string","pattern":"^[A-Za-z0-9]{4}-[A-Za-z0-9]{4}$"}},"required":["code"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}},{"name":"swap_status","title":"Swap status","description":"Where a gasless (relayed) or cross-chain (bridged) trade stands. Poll every few seconds until done is true. Plain same-chain swaps confirm on-chain and need no polling.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"kind":{"type":"string","enum":["gasless","cross_chain"]},"chainId":{"type":"number"},"hash":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"}},"required":["kind","chainId","hash"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}},{"name":"trending_tokens","title":"Trending tokens","description":"Tokens trending right now on a chain.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"chainId":{"type":"number"},"list":{"default":"trending","type":"string","enum":["trending","new","top"]}},"required":["chainId"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}}]}