All-in FX quotes and routes between 25 local currencies and stablecoins, after every fee.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Build (and simulate) the calls for a deposit, withdrawal or redemption, for the user's own wallet to sign. Smart wallets send `calls` as one batch; plain wallets sign the returned permit. Nothing is signed or sent here.
Vault id, e.g. "dollar"
USDC for deposit/withdraw, shares for redeem; "max" withdraws everything
The signing wallet
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http fx https://api.landedfx.com/mcp
Build (and simulate) the calls for a deposit, withdrawal or redemption, for the user's own wallet to sign. Smart wallets send `calls` as one batch; plain wallets sign the returned permit. Nothing is signed or sent here.
| Argument | Type | Description |
|---|---|---|
| id* | string | Vault id, e.g. "dollar" |
| action* | string | |
| amount* | string | USDC for deposit/withdraw, shares for redeem; "max" withdraws everything |
| account* | string | The signing wallet |
| receiver | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"action",
"account",
"amount"
],
"properties": {
"id": {
"type": "string",
"description": "Vault id, e.g. \"dollar\""
},
"action": {
"enum": [
"deposit",
"withdraw",
"redeem"
],
"type": "string"
},
"amount": {
"type": "string",
"description": "USDC for deposit/withdraw, shares for redeem; \"max\" withdraws everything"
},
"account": {
"type": "string",
"description": "The signing wallet"
},
"receiver": {
"type": "string"
}
}
}Issue a free LandedFX API key (60 requests a minute, 5,000 calls a month) for the user, by name and email. The key is shown once: tell the user to store it and add it to their MCP client and app as the x-api-key header. One free key per email.
| Argument | Type | Description |
|---|---|---|
| name* | string | |
| email* | string | |
| company | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"name",
"email"
],
"properties": {
"name": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"email": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"company": {
"type": "string",
"maxLength": 120
}
}
}The P2P ads (Bybit, Binance) that can fill an order of this size in a local currency, after reputation and AI screening, best first.
| Argument | Type | Description |
|---|---|---|
| code* | string | Local currency, e.g. "KES" |
| rail | string | |
| side* | string | "ask": the user buys USDT with local currency. "bid": the user sells USDT for local currency. |
| amount* | string | Order size in the local currency |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"code",
"side",
"amount"
],
"properties": {
"code": {
"type": "string",
"maxLength": 3,
"minLength": 3,
"description": "Local currency, e.g. \"KES\""
},
"rail": {
"enum": [
"mpesa",
"pix",
"upi",
"mobile_money",
"wallet",
"cash",
"card",
"balance",
"bank",
"other"
],
"type": "string"
},
"side": {
"enum": [
"ask",
"bid"
],
"type": "string",
"description": "\"ask\": the user buys USDT with local currency. \"bid\": the user sells USDT for local currency."
},
"amount": {
"type": "string",
"pattern": "^\\d+(\\.\\d+)?$",
"description": "Order size in the local currency"
}
}
}The calling API key's plan, limits and usage this month.
No arguments.
{
"type": "object",
"properties": {}
}The non-custodial vaults on Base (ERC-4626, USDC). Without `id`: all vaults with live state. With `id`: TVL, share price, liquidity, fees and allocations; add `account` for a wallet's position, or `historyDays` for share price and realised APY over time.
| Argument | Type | Description |
|---|---|---|
| id | string | Vault id, e.g. "dollar" |
| account | string | A wallet address, for its position |
| historyDays | integer |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"type": "string",
"description": "Vault id, e.g. \"dollar\""
},
"account": {
"type": "string",
"description": "A wallet address, for its position"
},
"historyDays": {
"type": "integer",
"maximum": 365,
"minimum": 1
}
}
}Without `code`: every covered local currency with its rails. With `code` (e.g. "NGN"): the live mid rate against USDT and the payment rails available.
| Argument | Type | Description |
|---|---|---|
| code | string | ISO currency code, e.g. "KES" |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"code": {
"type": "string",
"maxLength": 3,
"minLength": 3,
"description": "ISO currency code, e.g. \"KES\""
}
}
}Tokens and chains the swap layer routes, as asset keys like "USDC:sol".
No arguments.
{
"type": "object",
"properties": {}
}Price a rate lock for a future naira payment from the on-chain futures book: the locked rate, premium over today, margin needed, and the order to sign. Prices only; nothing is placed. Needs an API key.
| Argument | Type | Description |
|---|---|---|
| side* | string | "buy_usd": dollars needed later (importer, payroll). "sell_usd": dollars received later. |
| market | string | A futures series such as cNGN-30NOV26; defaults to the nearest |
| amountUsd* | number |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"side",
"amountUsd"
],
"properties": {
"side": {
"enum": [
"buy_usd",
"sell_usd"
],
"type": "string",
"description": "\"buy_usd\": dollars needed later (importer, payroll). \"sell_usd\": dollars received later."
},
"market": {
"type": "string",
"description": "A futures series such as cNGN-30NOV26; defaults to the nearest"
},
"amountUsd": {
"type": "number",
"exclusiveMinimum": 0
}
}
}The live all-in cost to buy and sell USDT in every covered currency at a standard size, for benchmarking corridors. With `code`, returns that corridor's history instead.
| Argument | Type | Description |
|---|---|---|
| code | string | A currency for its cost history |
| hours | integer | History window in hours (default 24) |
| sizeUsd | any | Order size in USD (default 1000) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"code": {
"type": "string",
"maxLength": 3,
"minLength": 3,
"description": "A currency for its cost history"
},
"hours": {
"type": "integer",
"maximum": 2160,
"minimum": 1,
"description": "History window in hours (default 24)"
},
"sizeUsd": {
"anyOf": [
{
"type": "number",
"const": 100
},
{
"type": "number",
"const": 1000
},
{
"type": "number",
"const": 10000
}
],
"description": "Order size in USD (default 1000)"
}
}
}The cNGN index, futures curve and options chain on Numo: what the market prices the naira at for future dates.
No arguments.
{
"type": "object",
"properties": {}
}The naira risk watchdog: calm, watch or step_aside, with reasons, market signals (24-hour move, street premium over the official index, futures-implied fall) and the recent headlines TypeSafe Jev judged. The Carry vault steps out of naira exposure at step_aside.
No arguments.
{
"type": "object",
"properties": {}
}Compare ways to earn naira interest rates on dollars (T-bills, hedged and unhedged), with outcomes under different devaluation scenarios. Needs an API key.
| Argument | Type | Description |
|---|---|---|
| yieldPct | number | Override the naira yield, % a year |
| amountUsd* | number | |
| tenorDays | integer | |
| hedgeRatio | number | Share hedged, 0 to 1 (default 1) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"amountUsd"
],
"properties": {
"yieldPct": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "Override the naira yield, % a year"
},
"amountUsd": {
"type": "number",
"exclusiveMinimum": 0
},
"tenorDays": {
"type": "integer",
"maximum": 730,
"minimum": 7
},
"hedgeRatio": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Share hedged, 0 to 1 (default 1)"
}
}
}Best of Relay and NEAR Intents for a token-to-token swap, e.g. USDT:tron → USDC:base. With `executable: true` and the user's addresses, also returns the transaction or deposit address to execute it from the user's own wallet.
| Argument | Type | Description |
|---|---|---|
| to* | string | e.g. "USDC:base" |
| from* | string | e.g. "USDT:tron" |
| user | string | Sender address on the origin chain |
| amount* | string | Amount of `from` |
| refundTo | string | Refund address on the origin chain |
| recipient | string | Receiver address on the destination chain |
| executable | boolean | |
| slippageBps | integer |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"from",
"to",
"amount"
],
"properties": {
"to": {
"type": "string",
"description": "e.g. \"USDC:base\""
},
"from": {
"type": "string",
"description": "e.g. \"USDT:tron\""
},
"user": {
"type": "string",
"description": "Sender address on the origin chain"
},
"amount": {
"type": "string",
"pattern": "^\\d+(\\.\\d+)?$",
"description": "Amount of `from`"
},
"refundTo": {
"type": "string",
"description": "Refund address on the origin chain"
},
"recipient": {
"type": "string",
"description": "Receiver address on the destination chain"
},
"executable": {
"type": "boolean"
},
"slippageBps": {
"type": "integer",
"maximum": 1000,
"minimum": 1
}
}
}Price every route between `from` and `to` at this size, across P2P venues, payment rails, withdrawal networks and swap providers. Returns the best route with each leg's cost, up to four alternatives, the all-in cost in bps against mid-market, and a confidence level. Needs an API key.
| Argument | Type | Description |
|---|---|---|
| to* | string | What should arrive, same notation: "USDC:base", "NGN:bank"… |
| from* | string | What is sent: "KES", "KES:mpesa", "USDT:tron"… |
| amount* | string | Amount of `from` |
| maxAds | integer | Most P2P counterparties to split across (default 25; 1 forces a single ad) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"from",
"to",
"amount"
],
"properties": {
"to": {
"type": "string",
"maxLength": 32,
"description": "What should arrive, same notation: \"USDC:base\", \"NGN:bank\"…"
},
"from": {
"type": "string",
"maxLength": 32,
"description": "What is sent: \"KES\", \"KES:mpesa\", \"USDT:tron\"…"
},
"amount": {
"type": "string",
"pattern": "^\\d+(\\.\\d+)?$",
"description": "Amount of `from`"
},
"maxAds": {
"type": "integer",
"maximum": 25,
"minimum": 1,
"description": "Most P2P counterparties to split across (default 25; 1 forces a single ad)"
}
}
}A full docs page as Markdown, by path: "quickstart", "authentication", "concepts/notation", "guides/vaults", "guides/rate-locks"… Use "index" for the overview, "llms" for the page list.
| Argument | Type | Description |
|---|---|---|
| path* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"path"
],
"properties": {
"path": {
"type": "string",
"pattern": "^[a-z0-9-]+(\\/[a-z0-9-]+)*$"
}
}
}Search the LandedFX documentation and API reference. Returns the most relevant sections with links. Use for integration questions: auth, notation, errors, guides, endpoints.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| query* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 8,
"minimum": 1
},
"query": {
"type": "string",
"maxLength": 200,
"minLength": 2
}
}
}Status of a swap started from an executable quote.
| Argument | Type | Description |
|---|---|---|
| id* | string | The request id or deposit address from the quote |
| provider* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"provider",
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The request id or deposit address from the quote"
},
"provider": {
"enum": [
"relay",
"near"
],
"type": "string"
}
}
}Route a vault deposit from any token on any chain (e.g. USDT on Tron) into USDC vault shares on Base, with the transactions or deposit address to pay.
| Argument | Type | Description |
|---|---|---|
| id* | string | Vault id |
| from* | string | What the user pays with, e.g. "USDT:tron" |
| amount* | string | USDC to deposit |
| account* | string | The paying wallet on the origin chain; refunds go here |
| receiver | string | Base address for the shares |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"from",
"account",
"amount"
],
"properties": {
"id": {
"type": "string",
"description": "Vault id"
},
"from": {
"type": "string",
"description": "What the user pays with, e.g. \"USDT:tron\""
},
"amount": {
"type": "string",
"pattern": "^\\d+(\\.\\d+)?$",
"description": "USDC to deposit"
},
"account": {
"type": "string",
"description": "The paying wallet on the origin chain; refunds go here"
},
"receiver": {
"type": "string",
"description": "Base address for the shares"
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 8, 2026.