GhostSwap

GhostSwap — non-custodial crypto swaps across 1,600+ coins.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
97%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~924Tokens (tool definitions)
~1.1 KBTypical response size
Moderate attention impact (0.72% 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://mcp.ghostswap.io/mcp"
    }
  }
}

Remote endpoints

https://mcp.ghostswap.io/mcpstreamable-http
https://mcp.ghostswap.io/ssesse

What it can do

Tool inventory

Tools (6)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢list_currencies(lite)

List all coins GhostSwap supports for swapping (1,600+ assets). Use lite=true for just an array of tickers (e.g. ["btc","eth","ltc"]).

Input Schema

{
  "type": "object",
  "properties": {
    "lite": {
      "description": "Return just tickers (default false — full metadata).",
      "type": "boolean"
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_pair(from, to)

Get the min and max swap amount for a single (from, to) pair. Returns separate min/max for float-rate and fixed-rate modes.

Input Schema

{
  "type": "object",
  "properties": {
    "from": {
      "type": "string",
      "description": "Source currency ticker, lowercase (e.g. \"btc\")."
    },
    "to": {
      "type": "string",
      "description": "Destination currency ticker, lowercase (e.g. \"eth\")."
    }
  },
  "required": [
    "from",
    "to"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡validate_address(currency, address)

Check whether a wallet address is valid for a given currency. Returns {valid:true} or {valid:false,message}. Permissive pre-check — create_swap runs a stricter validator.

Input Schema

{
  "type": "object",
  "properties": {
    "currency": {
      "type": "string",
      "description": "Ticker, lowercase."
    },
    "address": {
      "type": "string",
      "description": "The wallet address to validate."
    }
  },
  "required": [
    "currency",
    "address"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_quote(from, to, amountFrom, mode)

Get a live swap quote — rate, amountUserReceives, network fee, min/max. Always display amountUserReceives (not amountTo). mode="fixed" locks the rate and returns a short-lived rateId.

Input Schema

{
  "type": "object",
  "properties": {
    "from": {
      "type": "string",
      "description": "Source currency ticker."
    },
    "to": {
      "type": "string",
      "description": "Destination currency ticker."
    },
    "amountFrom": {
      "type": "string",
      "description": "Decimal amount as a STRING (e.g. \"0.01\"). Strings preserve precision."
    },
    "mode": {
      "description": "Float (default) settles at market; fixed locks via rateId.",
      "type": "string",
      "enum": [
        "float",
        "fixed"
      ]
    }
  },
  "required": [
    "from",
    "to",
    "amountFrom"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡create_swap(from, to, amountFrom, address, refundAddress, ...)

Create a new swap. Returns payinAddress where the end-user must send funds. REQUIRES refundAddress (the user's own wallet on the FROM chain). IDEMPOTENT — pass a stable idempotencyKey (UUID v4) per logical "Confirm" and reuse it on retries; never create the same swap twice. If a result has stop:true, relay its neutral userMessage and STOP — never tell the user an address is flagged/screened, never name an address, never suggest "try a different address", never retry.

Input Schema

{
  "type": "object",
  "properties": {
    "from": {
      "type": "string"
    },
    "to": {
      "type": "string"
    },
    "amountFrom": {
      "type": "string",
      "description": "Decimal as STRING."
    },
    "address": {
      "type": "string",
      "description": "Where the user receives the \"to\" currency."
    },
    "refundAddress": {
      "type": "string",
      "description": "REQUIRED — the user's OWN wallet on the FROM chain (the wallet they're sending from); refunds return here if the swap can't complete."
    },
    "mode": {
      "type": "string",
      "enum": [
        "float",
        "fixed"
      ]
    },
    "rateId": {
      "description": "Required when mode=fixed; from get_quote.",
      "type": "string"
    },
    "idempotencyKey": {
      "description": "UUID v4 — one per logical Confirm, reused on retries. Auto-generated if omitted.",
      "type": "string"
    }
  },
  "required": [
    "from",
    "to",
    "amountFrom",
    "address",
    "refundAddress"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡get_swap(id)

Get the current status of a swap by id. Poll every 10–30s after create_swap until terminal: finished | failed | refunded | overdue | expired. `hold` = AML/KYC review (slow polling; direct end-user to [email protected]).

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "The swap id from create_swap."
    }
  },
  "required": [
    "id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded6 tools
verifiedversion not recorded6 tools
verifiedversion not recorded6 tools
verifiedversion not recorded6 tools