{"serverId":"mcp-registry/io.github.ghostswap1/mcp","tools":[{"name":"create_swap","fixed":{"name":"create_swap","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["from","to","amountFrom","address","refundAddress"],"properties":{"to":{"type":"string"},"from":{"type":"string"},"mode":{"enum":["float","fixed"],"type":"string"},"rateId":{"type":"string","description":"Required when mode=fixed; from get_quote."},"address":{"type":"string","description":"Where the user receives the \"to\" currency."},"amountFrom":{"type":"string","description":"Decimal as STRING."},"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."},"idempotencyKey":{"type":"string","description":"UUID v4 — one per logical Confirm, reused on retries. Auto-generated if omitted."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":370,"tokensAfter":370},{"name":"get_pair","fixed":{"name":"get_pair","description":"Get the min and max swap amount for a single (from, to) pair. Returns separate min/max for float-rate and fixed-rate modes.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["from","to"],"properties":{"to":{"type":"string","description":"Destination currency ticker, lowercase (e.g. \"eth\")."},"from":{"type":"string","description":"Source currency ticker, lowercase (e.g. \"btc\")."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":130,"tokensAfter":130},{"name":"get_quote","fixed":{"name":"get_quote","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["from","to","amountFrom"],"properties":{"to":{"type":"string","description":"Destination currency ticker."},"from":{"type":"string","description":"Source currency ticker."},"mode":{"enum":["float","fixed"],"type":"string","description":"Float (default) settles at market; fixed locks via rateId."},"amountFrom":{"type":"string","description":"Decimal amount as a STRING (e.g. \"0.01\"). Strings preserve precision."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":205,"tokensAfter":205},{"name":"get_swap","fixed":{"name":"get_swap","description":"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 support@ghostswap.io).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"The swap id from create_swap."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":124,"tokensAfter":124},{"name":"list_currencies","fixed":{"name":"list_currencies","description":"List all coins GhostSwap supports for swapping (1,600+ assets). Use lite=true for just an array of tickers (e.g. [\"btc\",\"eth\",\"ltc\"]).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"lite":{"type":"boolean","description":"Return just tickers (default false — full metadata)."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":105,"tokensAfter":105},{"name":"validate_address","fixed":{"name":"validate_address","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["currency","address"],"properties":{"address":{"type":"string","description":"The wallet address to validate."},"currency":{"type":"string","description":"Ticker, lowercase."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":136,"tokensAfter":136}],"toolsChanged":6,"tokensSaved":0,"todo":[{"tool":"create_swap","params":["to","from","mode"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}