THORChain Swap MCP Server
THORChain Swap runs a public Model Context Protocol server so AI agents can read live THORChain data natively.
- Endpoint: https://swap.thorchain.org/mcp
- Transport: Streamable HTTP (stateless — single JSON responses, no SSE stream, no sessions)
- Protocol versions: 2025-06-18, 2025-03-26, 2024-11-05
- Manifest: https://swap.thorchain.org/.well-known/mcp/server-card.json (also served by
GET https://swap.thorchain.org/mcp) - Authentication: none required; an optional client-credentials token raises the rate limit
Add it to a client
{
"mcpServers": {
"thorchain-swap": {
"type": "http",
"url": "https://swap.thorchain.org/mcp"
}
}
}Tools
get_swap_quote — Get Swap Quote
Fetch a THORChain swap quote for an asset pair. Assets use CHAIN.SYMBOL notation (e.g. BTC.BTC, ETH.ETH, ETH.USDC-0XA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48). Amount is in 1e8 base units (1 BTC = 100000000). Quotes are indicative and expire quickly; the returned memo and inbound address must not be reused after expiry.
Parameters:
from_asset(string, required) — Source asset, e.g. BTC.BTCto_asset(string, required) — Destination asset, e.g. ETH.ETHamount(string, required) — Amount to swap in 1e8 base unitsdestination(string) — Optional destination address; required for a quote with a usable memostreaming_interval(string) — Optional streaming swap interval in blocks
list_pools — List Liquidity Pools
List THORChain liquidity pools with status, depths (1e8 base units), and USD asset price. Filter by pool status or by chain/asset to avoid pulling the full list.
Parameters:
status(string) — Only return pools in this state. Available pools are the tradable ones.asset(string) — Case-insensitive filter on the pool asset, e.g. BTC.BTC for one pool or ETH for every pool on the Ethereum chain.limit(integer) — Maximum number of pools to return, largest RUNE depth first. Omit to return every match.
get_network_status — Get Network Status
Return current THORChain network parameters, including outbound fees, bond and reserve totals, and halt-related gas information. Pass fields to return only the keys you need.
Parameters:
fields(array) — Subset of top-level keys to return, e.g. ["native_outbound_fee_rune", "outbound_fee_multiplier"]. Omit for the full object.
Every tool is annotated readOnlyHint: true, destructiveHint: false, idempotentHint: true. The server holds no keys, signs nothing, and submits no transactions.
Example
curl -s https://swap.thorchain.org/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_swap_quote",
"arguments": {
"from_asset": "BTC.BTC",
"to_asset": "ETH.ETH",
"amount": "100000000"
}
}
}'List the tools and their JSON Schemas:
curl -s https://swap.thorchain.org/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'MCP Apps
The server implements the MCP Apps extension (io.modelcontextprotocol/ui): get_swap_quote declares _meta.ui.resourceUri pointing at ui://thorchain-swap/swap-quote, a self-contained text/html;profile=mcp-app resource that MCP Apps-capable hosts render as an interactive quote panel. Hosts without MCP Apps support receive plain JSON and structuredContent.
Rate limits
Anonymous callers get 60 requests per 10 minutes per IP. A client registered through dynamic client registration gets 600 per 10 minutes against its own client id. Exceeding either returns JSON-RPC error -32000 with HTTP 429 and a Retry-After header.
Related
This page as markdown: /developers/mcp.md