Find tokens, price swaps and trade onchain on Base, BNB Chain, Robinhood Chain and Arc.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
What this connected wallet has authorised agents to do, whether an unattended trading session is open, and the daily limits that apply.
This tool takes no arguments.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http token-terminal https://tokens.wardenprotocol.org/mcp
What this connected wallet has authorised agents to do, whether an unattended trading session is open, and the daily limits that apply.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}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. On Solana it trades from the agent Solana wallet (get_wallet → solana.address), with SOL, USDC or USDT on one side.
| Argument | Type | Description |
|---|---|---|
| chainId* | number | |
| gasless | boolean | |
| buyToken* | string | |
| sellToken* | string | |
| buyChainId | number | |
| sellAmount* | string | |
| slippageBps | integer | |
| idempotencyKey* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"chainId",
"sellToken",
"buyToken",
"sellAmount",
"idempotencyKey"
],
"properties": {
"chainId": {
"type": "number"
},
"gasless": {
"type": "boolean",
"default": false
},
"buyToken": {
"type": "string"
},
"sellToken": {
"type": "string"
},
"buyChainId": {
"type": "number"
},
"sellAmount": {
"type": "string",
"pattern": "^\\d{1,78}$"
},
"slippageBps": {
"type": "integer",
"default": 100,
"maximum": 300,
"minimum": 1
},
"idempotencyKey": {
"type": "string",
"maxLength": 64,
"minLength": 8
}
}
}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. Where Solana is on, `solana` is the agent Solana wallet execute_swap trades from, and its holdings.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Chains Warden supports, with each chain’s native coin, dollar stable and gasless support.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}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. On Solana it is quoted for the user’s own Solana wallet and signed in the app.
| Argument | Type | Description |
|---|---|---|
| chainId* | number | |
| gasless | boolean | |
| buyToken* | string | |
| sellToken* | string | |
| buyChainId | number | |
| sellAmount* | string | |
| slippageBps | integer |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"chainId",
"sellToken",
"buyToken",
"sellAmount"
],
"properties": {
"chainId": {
"type": "number"
},
"gasless": {
"type": "boolean",
"default": false
},
"buyToken": {
"type": "string"
},
"sellToken": {
"type": "string"
},
"buyChainId": {
"type": "number"
},
"sellAmount": {
"type": "string",
"pattern": "^\\d{1,78}$"
},
"slippageBps": {
"type": "integer",
"default": 100,
"maximum": 5000,
"minimum": 1
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| token* | string | |
| chainId* | number | |
| interval | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"chainId",
"token"
],
"properties": {
"limit": {
"type": "integer",
"default": 96,
"maximum": 300,
"minimum": 10
},
"token": {
"type": "string",
"pattern": "^0x[a-fA-F0-9]{40}$"
},
"chainId": {
"type": "number"
},
"interval": {
"enum": [
"5m",
"15m",
"1h",
"4h",
"1d"
],
"type": "string",
"default": "1h"
}
}
}Price a swap without committing to it. Read-only. Works for the native coin (use its address from list_chains), across EVM chains (buyChainId) and on Solana (base58 mints, case intact).
| Argument | Type | Description |
|---|---|---|
| chainId* | number | |
| buyToken* | string | |
| sellToken* | string | |
| buyChainId | number | |
| sellAmount* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"chainId",
"sellToken",
"buyToken",
"sellAmount"
],
"properties": {
"chainId": {
"type": "number"
},
"buyToken": {
"type": "string"
},
"sellToken": {
"type": "string"
},
"buyChainId": {
"type": "number"
},
"sellAmount": {
"type": "string",
"pattern": "^\\d{1,78}$"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| hours* | any | |
| limits | object | |
| agentName | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"hours"
],
"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",
"required": [
"maxSwapValuePerDay",
"humanApprovalAboveValue"
],
"properties": {
"maxSwapValuePerDay": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1
},
"humanApprovalAboveValue": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1
}
}
},
"agentName": {
"type": "string",
"maxLength": 40
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| query* | string | |
| chainId | number |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"maxLength": 64,
"minLength": 2
},
"chainId": {
"type": "number"
}
}
}Whether the person has answered a request_session: pending, approved, denied or expired. Once approved, execute_swap works until the session ends.
| Argument | Type | Description |
|---|---|---|
| code* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"code"
],
"properties": {
"code": {
"type": "string",
"pattern": "^[A-Za-z0-9]{4}-[A-Za-z0-9]{4}$"
}
}
}Where a gasless (relayed) or cross-chain (bridged) trade stands, or a Solana swap (kind "solana", its signature) that execute_swap left unconfirmed. Poll every few seconds until done is true. Plain EVM same-chain swaps confirm on-chain and need no polling.
| Argument | Type | Description |
|---|---|---|
| hash* | string | |
| kind* | string | |
| chainId* | number |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"kind",
"chainId",
"hash"
],
"properties": {
"hash": {
"type": "string"
},
"kind": {
"enum": [
"gasless",
"cross_chain",
"solana"
],
"type": "string"
},
"chainId": {
"type": "number"
}
}
}Tokens trending right now on a chain.
| Argument | Type | Description |
|---|---|---|
| list | string | |
| chainId* | number |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"chainId"
],
"properties": {
"list": {
"enum": [
"trending",
"new",
"top"
],
"type": "string",
"default": "trending"
},
"chainId": {
"type": "number"
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 6, 2026.
Takes a password, API key or token as an argument, so the secret passes through the model's context and chat logs.
Fix: Read credentials from the server's own configuration (environment, OAuth) instead of a tool argument.