# Warden Token Terminal

> Find tokens, price swaps and trade onchain on Base, BNB Chain, Robinhood Chain and Arc.

- name: org.wardenprotocol/token-terminal
- version: 1.1.0
- connection class: R0 (autonomous)
- trust: 96/100
- quality: 93/100 (strong)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/org.wardenprotocol%2Ftoken-terminal
- tools: https://api.protogrid.dev/v1/servers/org.wardenprotocol%2Ftoken-terminal/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "token-terminal": {
      "type": "http",
      "url": "https://tokens.wardenprotocol.org/mcp"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 100
- freshness: 100
- provenance: 85
- drivers: +repository +dns-namespace +website +reachable +uptime-100% +updated-8d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 93/100 (strong)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 94 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 12 of 12 tools declare readOnlyHint or destructiveHint
- warn `tools.directory_hints`: 1 of 12 tools declare all four hints; missing: trending_tokens (idempotentHint); price_history (idempotentHint); request_session (idempotentHint); …
- pass `tools.token_cost`: about 2,036 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump
- pass `tools.hidden_text`: no hidden text in tool names, descriptions, schemas or annotations

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name
- pass `stability.new_links`: no tool change named a new site

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 12, about 2,036 tokens to load them all
- tool set hash: 7beba206bb5ba87a4d399da3bac6f2a7
- badge: [![protogrid quality](https://protogrid.dev/badge/org.wardenprotocol/token-terminal.svg)](https://protogrid.dev/servers/org.wardenprotocol/token-terminal)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://tokens.wardenprotocol.org/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (12)

- `agent_permissions`: What this connected wallet has authorised agents to do, whether an unattended trading session is open, and the daily limits that apply.
- `execute_swap`: 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.
- `get_wallet`: 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.
- `list_chains`: Chains Warden supports, with each chain’s native coin, dollar stable and gasless support.
- `prepare_swap`: 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.
- `price_history`: 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.
- `quote_swap`: 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).
- `request_session`: 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.
- `search_tokens`: 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.
- `session_request_status`: Whether the person has answered a request_session: pending, approved, denied or expired. Once approved, execute_swap works until the session ends.
- `swap_status`: 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.
- `trending_tokens`: Tokens trending right now on a chain.
