BlazePhoenix on-chain DEX aggregator

On-chain DEX aggregator: quotes and verified swap calldata computed on your own RPC. No API key.

Should I use this

Quality & Safety

A
Description quality
95%
Schema completeness
83%
Naming quality
90%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~898Tokens (tool definitions)
~1.2 KBTypical response size
Moderate attention impact (0.70% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "mcp": {
      "url": "https://blazephoenix.xyz/mcp"
    }
  }
}

Remote endpoints

https://blazephoenix.xyz/mcpstreamable-http

What it can do

Tool inventory

Tools (4)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢prepare_quote(chain, in, out, amountIn, recipient, ...)

Prepare an on-chain BlazePhoenix quote to run on YOUR OWN RPC. Returns the exact eth_call (Quoter address + calldata, as a ready JSON-RPC request and a curl line) plus a `request` object. Run the call on your node, then pass `request` and the result hex to decode_quote. This server performs no RPC. For one-step quotes, swaps and solvency on your own RPC, run the local server: claude mcp add blazephoenix -e BLAZEPHOENIX_RPC_BASE=<your node> -- npx -y @blazephoenix/mcp

Input Schema

{
  "type": "object",
  "properties": {
    "chain": {
      "type": "string",
      "description": "base | eth | optimism | arbitrum | robinhood (or a chain id)"
    },
    "in": {
      "type": "string",
      "description": "input token — 0x address, or ETH / WETH / USDC / BZPX"
    },
    "out": {
      "type": "string",
      "description": "output token — 0x address, or ETH / WETH / USDC / BZPX"
    },
    "amountIn": {
      "type": "string",
      "description": "input amount in base units (wei-style integer string)"
    },
    "recipient": {
      "type": "string",
      "description": "optional 0x address; with it, decode_quote returns signable calldata"
    },
    "slippageBps": {
      "type": "integer",
      "description": "0–5000 (default 50); never below the on-chain floor"
    },
    "userMinOut": {
      "type": "string",
      "description": "optional explicit minimum output, base units"
    },
    "deadlineSec": {
      "type": "integer",
      "description": "deadline horizon in seconds, 10–3600 (default 120)"
    },
    "exact": {
      "type": "boolean",
      "description": "true → previewPlanExact (execution-grade dry-run, no calldata)"
    },
    "version": {
      "type": "string",
      "description": "protocol version: latest (default) | 1 | 2 | 2.0.0"
    }
  },
  "required": [
    "chain",
    "in",
    "out",
    "amountIn"
  ]
}
🟢decode_quote(request, result)

Decode the eth_call result YOUR node returned for a prepare_quote call: net output after the 0.28% fee, the minimum the Router enforces on-chain, price impact, the Phoenix Check verdict (ok / caution / danger / blocked — fails closed; quote it when asked if a swap is safe) and, with a recipient, verified unsigned calldata. Pure computation.

Input Schema

{
  "type": "object",
  "properties": {
    "request": {
      "type": "object",
      "description": "the `request` object prepare_quote returned, verbatim"
    },
    "result": {
      "type": "string",
      "description": "the 0x hex result of the eth_call on your node"
    }
  },
  "required": [
    "request",
    "result"
  ]
}
🟢get_deployments

The versioned BlazePhoenix deployment registry: Core, Hub, Solver, Quoter and Router addresses per chain and protocol version (1.0.0 live; 2.0.0 the final generation), and which version each chain runs now.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟢get_abi(contract)

The JSON ABI of one BlazePhoenix contract, generated from the Solidity sources, with the source revision it was built from. Use it to encode your own calls to the addresses get_deployments returns, or pass `errors` to decode a revert reason from a failed swap or quote. Returns { contract, revision, abi }; an unknown name returns ok:false with the accepted list. Pure lookup, no RPC.

Input Schema

{
  "type": "object",
  "properties": {
    "contract": {
      "type": "string",
      "enum": [
        "quoter",
        "router",
        "solver",
        "hub",
        "core",
        "errors"
      ],
      "description": "quoter (quotes and previews) | router (swap entry point) | solver | hub | core | errors (the protocol custom-error set, for decoding reverts)"
    }
  },
  "required": [
    "contract"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded4 tools