{"$schema":"https://static.modelcontextprotocol.io/schemas/mcp-server-card/v1.json","version":"1.0","protocolVersion":"2025-11-25","serverInfo":{"name":"daggs","title":"Daggs","version":"1.0.0"},"description":"Swap and bridge tokens across EVM chains, Solana and Bitcoin. Non-custodial: users sign in their own wallet.","documentationUrl":"https://daggs.xyz/llms.txt","transport":{"type":"streamable-http","endpoint":"https://daggs.xyz/mcp"},"capabilities":{"tools":{"listChanged":false},"resources":{"listChanged":false}},"authentication":{"required":false,"schemes":[]},"instructions":"Swap and bridge tokens across EVM chains, Solana and Bitcoin, comparing routes from several bridges and DEX aggregators.\nUse it when the user wants to move or convert tokens they hold in their own wallet: bridge to another chain, swap on one chain, get into or out of BTC without an exchange, compare route costs, or track a transfer in flight.\nNot for fiat on/off-ramps, custody, limit or recurring orders, NFTs, lending, staking or market data.\nTypical flow: get_quote → share signUrl with the user (they sign in their own wallet) → get_transfer_status.\nAgents with their own wallet can use build_transaction instead and sign it themselves.\nAlways tell the user the amount, the route, and the fees before they sign.","tools":[{"name":"list_chains","title":"List chains","description":"List every chain this service can swap or bridge on: EVM chains, Solana and Bitcoin (native BTC; a Bitcoin recipient address is required when receiving BTC).","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"openWorldHint":true}},{"name":"search_tokens","title":"Search tokens","description":"Find tokens on a chain by symbol, name or address. Returns addresses, decimals and USD prices.","inputSchema":{"type":"object","properties":{"chain":{"type":"string","description":"Source chain: id, key or name, e.g. \"base\", \"solana\", \"8453\"."},"query":{"type":"string","description":"Symbol, name or address fragment, e.g. \"usdc\"."},"limit":{"type":"number","description":"Max results (default 10, max 50)."}},"required":["chain","query"]},"annotations":{"readOnlyHint":true,"openWorldHint":true}},{"name":"get_quote","title":"Quote a swap or bridge","description":"Compare routes from LI.FI, Relay, Mayan, NEAR Intents, Jupiter and Titan (LI.FI covers many bridges and DEXes) for a swap or cross-chain bridge. Returns the best routes with amounts, fees and time, plus a signUrl: a prefilled page where the user reviews and signs in their own wallet. Nothing is executed.","inputSchema":{"type":"object","properties":{"fromChain":{"type":"string","description":"Source chain: id, key or name, e.g. \"base\", \"solana\", \"8453\"."},"fromToken":{"type":"string","description":"Token to pay: symbol (\"USDC\") or address."},"toChain":{"type":"string","description":"Destination chain (same chain = swap)."},"toToken":{"type":"string","description":"Token to receive: symbol or address."},"amount":{"type":"string","description":"Amount of fromToken in human units, e.g. \"25.5\"."},"fromAddress":{"type":"string","description":"Sender wallet address (improves quote accuracy; required to build transactions)."},"toAddress":{"type":"string","description":"Recipient on the destination chain. Defaults to fromAddress; required (a Bitcoin address) when receiving native BTC."},"slippage":{"type":"number","description":"Max slippage as a fraction. Default 0.005 (0.5%)."},"priority":{"type":"string","enum":["cheapest","fastest"],"description":"Route ranking. Default cheapest (most received)."}},"required":["fromChain","fromToken","toChain","toToken","amount"]},"annotations":{"readOnlyHint":true,"openWorldHint":true},"_meta":{"ui":{"resourceUri":"ui://daggs/quote.html"}}},{"name":"build_transaction","title":"Build unsigned transaction","description":"For an agent that signs with its own wallet: build the unsigned transaction(s) for the best route (or routeIndex), including our standard fee. EVM: `approvals` (ready-to-sign ERC-20 approve txs, empty if the allowance is enough) then `transaction` {to, data, value, gasLimit, chainId}. Solana: `transactionBase64` (versioned, sign within ~60s). Bitcoin: `psbtHex` to sign with the fromAddress key. Multi-step routes: build step 0 from quote arguments; when it's DONE, call again with routeId, step and fromAmountRaw from the `next` field. Sign, then send yourself or with send_transaction, then poll get_transfer_status.","inputSchema":{"type":"object","properties":{"fromChain":{"type":"string","description":"Source chain: id, key or name, e.g. \"base\", \"solana\", \"8453\"."},"fromToken":{"type":"string","description":"Token to pay: symbol (\"USDC\") or address."},"toChain":{"type":"string","description":"Destination chain (same chain = swap)."},"toToken":{"type":"string","description":"Token to receive: symbol or address."},"amount":{"type":"string","description":"Amount of fromToken in human units, e.g. \"25.5\"."},"fromAddress":{"type":"string","description":"Sender wallet address (improves quote accuracy; required to build transactions)."},"toAddress":{"type":"string","description":"Recipient on the destination chain. Defaults to fromAddress; required (a Bitcoin address) when receiving native BTC."},"slippage":{"type":"number","description":"Max slippage as a fraction. Default 0.005 (0.5%)."},"priority":{"type":"string","enum":["cheapest","fastest"],"description":"Route ranking. Default cheapest (most received)."},"routeIndex":{"type":"number","description":"Which quoted route to use (default 0 = best)."},"routeId":{"type":"string","description":"Continue a multi-step route (from `next`). Replaces the quote arguments."},"step":{"type":"number","description":"Step index to build with routeId."},"fromAmountRaw":{"type":"string","description":"With routeId: smallest-unit amount the previous step delivered (get_transfer_status receivedRaw)."}},"required":["fromAddress"]},"annotations":{"readOnlyHint":true,"openWorldHint":true}},{"name":"send_transaction","title":"Broadcast a signed transaction","description":"Broadcast a transaction the agent already signed, for agents without their own RPC. EVM: signed raw tx as 0x hex. Solana: signed versioned tx as base64. Bitcoin: signed PSBT (hex or base64; finalized here if needed) or raw tx hex. Returns the hash/signature/txid to pass to get_transfer_status.","inputSchema":{"type":"object","properties":{"chain":{"type":"string","description":"Chain the transaction is for (id, key or name)."},"signedTransaction":{"type":"string","description":"EVM: 0x-prefixed serialized signed tx. Solana: base64 signed transaction."}},"required":["chain","signedTransaction"]},"annotations":{"readOnlyHint":false,"openWorldHint":true}},{"name":"get_transfer_status","title":"Track a transfer","description":"Status of a swap or bridge: PENDING, DONE (with received amount and destination tx) or FAILED. Pass txHash (source transaction hash/signature), requestId for Relay routes, or depositAddress (+ txHash) for NEAR Intents routes (from build_transaction's statusHint).","inputSchema":{"type":"object","properties":{"txHash":{"type":"string","description":"Source-chain transaction hash or Solana signature."},"requestId":{"type":"string","description":"Relay request id, for routes via Relay · direct."},"depositAddress":{"type":"string","description":"Deposit address, for routes via NEAR Intents."},"fromChain":{"type":"string","description":"Source chain: id, key or name, e.g. \"base\", \"solana\", \"8453\"."},"toChain":{"type":"string","description":"Destination chain (same chain = swap)."},"bridge":{"type":"string","description":"Tool from build_transaction's statusHint (optional)."}},"required":[]},"annotations":{"readOnlyHint":true,"openWorldHint":true}}],"resources":[{"uri":"ui://daggs/quote.html","name":"quote","title":"Daggs quote","description":"Routes for a swap or bridge, with a button to review and sign on Daggs.","mimeType":"text/html;profile=mcp-app"}]}