Warden MCP
Remote MCP server for Warden Token Terminal: AI agents find tokens, quote swaps and trade onchain on Base, BNB Chain, Robinhood Chain and Arc within limits the user sets. Market tools need no account; wallet and trading tools need a free Warden account (OAuth or agent key).
Live Answered an MCP handshake without credentials and listed 12 tools.
- Category
- Finance & markets
- Transport
http- Source
- https://github.com/warden-protocol/warden-mcp
- Endpoint
https://tokens.wardenprotocol.org/mcp- Reports itself as
- warden-token-terminal 1.1.0
- Protocol
- 2025-06-18
- Tools
- 12
- Context cost
- about 1,914 tokens for the tool definitions (estimated at four characters per token)
- Tool definitions last changed
- no change seen since first check
- Handshake time
- 454 ms
- Repository
- 1 stars · last push 2026-11-03
- Last checked
- 2026-11-03 10:54:52 UTC
- Listed since
- 2026-10-21
Health and compatibility
| Endpoint reachable | Verified | Responded in 454 ms |
|---|---|---|
| MCP handshake (initialize) | Verified | Completed without credentials |
| Tool discovery (tools/list) | Verified | 12 tools listed |
| Authentication | Verified | None needed to connect |
| Protocol version | Verified | 2025-06-18 |
| Transport | Verified | Streamable HTTP |
| Capabilities declared | Verified | tools |
Last checked . Verified means the check saw it happen; it says nothing about whether the server is safe.
Recent history
100% of the last 9 daily checks reachable; median response 492 ms. Green answered, violet asked for auth, red did not answer.
Set up in your client
Claude Code
Run this in a terminal:
claude mcp add --transport http warden-mcp https://tokens.wardenprotocol.org/mcpClaude Desktop
Open Settings → Connectors → Add custom connector and paste this URL:
https://tokens.wardenprotocol.org/mcpOr bridge it through mcp-remote in claude_desktop_config.json (needs Node.js):
{
"mcpServers": {
"warden-mcp": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://tokens.wardenprotocol.org/mcp"
]
}
}
}Cursor
Or add it to ~/.cursor/mcp.json (or .cursor/mcp.json in a project):
{
"mcpServers": {
"warden-mcp": {
"url": "https://tokens.wardenprotocol.org/mcp"
}
}
}VS Code
Or add it to .vscode/mcp.json:
{
"servers": {
"warden-mcp": {
"type": "http",
"url": "https://tokens.wardenprotocol.org/mcp"
}
}
}Or from a terminal:
code --add-mcp '{"name": "warden-mcp", "type": "http", "url": "https://tokens.wardenprotocol.org/mcp"}'Windsurf
Add it to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"warden-mcp": {
"serverUrl": "https://tokens.wardenprotocol.org/mcp"
}
}
}Other clients
Most clients accept this shape. The endpoint is:
https://tokens.wardenprotocol.org/mcp{
"mcpServers": {
"warden-mcp": {
"type": "http",
"url": "https://tokens.wardenprotocol.org/mcp"
}
}
}If it does not connect
- Restart the client after editing a config file, and keep keys out of files you commit.
- If the tools do not appear, open the client's MCP log: a 401 means the credentials were not accepted, and a timeout means the server did not answer.
Tools 12
Names, descriptions and input schemas exactly as the server returned them on 2026-11-03. This is the server author's own text. Nothing is run from this page. Labels such as read-only are declared by the server and are not verified. Raw JSON
agent_permissionsread-onlyWhat this connected wallet has authorised agents to do, whether an unattended trading session is open, and …
What this connected wallet has authorised agents to do, whether an unattended trading session is open, and the daily limits that apply.
Takes no parameters.
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "agent_permissions",
"arguments": {}
}
}execute_swapcan modifydestructiveSign and broadcast a swap from the user’s wallet without asking them. Only works while the user has …
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.
| Parameter | Type | Description | |
|---|---|---|---|
chainId | number | required | |
buyChainId | number | optional | |
sellToken | string | required | |
buyToken | string | required | |
sellAmount | string | required | |
slippageBps | integer | optional | |
gasless | boolean | optional | |
idempotencyKey | string | required |
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "execute_swap",
"arguments": {
"chainId": 0,
"sellToken": "...",
"buyToken": "...",
"sellAmount": "...",
"idempotencyKey": "..."
}
}
}get_walletread-onlyexternal accessThe connected wallet, its X handle if linked, and everything it holds on every chain: the gas coin and each …
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.
Takes no parameters.
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "get_wallet",
"arguments": {}
}
}list_chainsread-onlyChains Warden supports, with each chain’s native coin, dollar stable and gasless support.
Chains Warden supports, with each chain’s native coin, dollar stable and gasless support.
Takes no parameters.
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "list_chains",
"arguments": {}
}
}prepare_swapcan modifyBuild a swap for the user to sign. Does not broadcast. Requires the "swap" permission. Native coin, …
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.
| Parameter | Type | Description | |
|---|---|---|---|
chainId | number | required | |
buyChainId | number | optional | |
sellToken | string | required | |
buyToken | string | required | |
sellAmount | string | required | |
slippageBps | integer | optional | |
gasless | boolean | optional |
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "prepare_swap",
"arguments": {
"chainId": 0,
"sellToken": "...",
"buyToken": "...",
"sellAmount": "..."
}
}
}price_historyread-onlyexternal accessCandles for a token on its deepest pool, oldest first, priced in USD: time (unix seconds), open, high, low, …
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.
| Parameter | Type | Description | |
|---|---|---|---|
chainId | number | required | |
token | string | required | |
interval | string | optional | One of: 5m, 15m, 1h, 4h, 1d |
limit | integer | optional |
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "price_history",
"arguments": {
"chainId": 0,
"token": "..."
}
}
}quote_swapread-onlyexternal accessPrice a swap without committing to it. Read-only. Works for the native coin (use its address from …
Price a swap without committing to it. Read-only. Works for the native coin (use its address from list_chains) and across chains (buyChainId).
| Parameter | Type | Description | |
|---|---|---|---|
chainId | number | required | |
buyChainId | number | optional | |
sellToken | string | required | |
buyToken | string | required | |
sellAmount | string | required |
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "quote_swap",
"arguments": {
"chainId": 0,
"sellToken": "...",
"buyToken": "...",
"sellAmount": "..."
}
}
}request_sessioncan modifyAsk the wallet owner to turn on hands-free trading, so execute_swap works. Returns an approveUrl and a code: …
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.
| Parameter | Type | Description | |
|---|---|---|---|
hours | number | required | |
limits | object | optional | |
agentName | string | optional |
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "request_session",
"arguments": {
"hours": "..."
}
}
}search_tokensread-onlyexternal accessFind tokens by name, ticker or contract address across the supported chains. Tickers are not unique: many …
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.
| Parameter | Type | Description | |
|---|---|---|---|
query | string | required | |
chainId | number | optional |
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "search_tokens",
"arguments": {
"query": "..."
}
}
}session_request_statusread-onlyWhether the person has answered a request_session: pending, approved, denied or expired. Once approved, …
Whether the person has answered a request_session: pending, approved, denied or expired. Once approved, execute_swap works until the session ends.
| Parameter | Type | Description | |
|---|---|---|---|
code | string | required |
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "session_request_status",
"arguments": {
"code": "..."
}
}
}swap_statusread-onlyexternal accessWhere a gasless (relayed) or cross-chain (bridged) trade stands. Poll every few seconds until done is true. …
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.
| Parameter | Type | Description | |
|---|---|---|---|
kind | string | required | One of: gasless, cross_chain |
chainId | number | required | |
hash | string | required |
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "swap_status",
"arguments": {
"kind": "gasless",
"chainId": 0,
"hash": "..."
}
}
}trending_tokensread-onlyexternal accessTokens trending right now on a chain.
Tokens trending right now on a chain.
| Parameter | Type | Description | |
|---|---|---|---|
chainId | number | required | |
list | string | optional | One of: trending, new, top |
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "trending_tokens",
"arguments": {
"chainId": 0
}
}
}Badge
Maintain this server? Put its live status in your README:
[](https://mcp.aianytime.net/s/warden-mcp/)Edit this entry · Report a problem
More in Finance & markets
Checks record what a server answered, not whether it is safe. A listing is not a security audit; read a server's source and permissions before you connect it. Add a server · JSON · llms.txt · llms-full.txt
Browse: Agents, IDEs & developer tools · Search & discovery · Knowledge, memory & context · Media & generation · Security · Finance & markets · Marketing, content & social · Cloud, ops & data · Commerce, travel & logistics · Work & productivity · No account needed · Local servers