MCP Server
The Skipo MCP server exposes the public v2 API over the Model Context Protocol, so you can connect your account to Claude (Desktop, Code, or any compatible client) and ask about your balances, transactions, and FX activity in natural language. The agent translates your questions into read calls against the API.
The Skipo MCP server only issues GET requests. It cannot move money,
create withdrawals, or execute conversions — even if asked. There is no write
tool at all.
How to connect
Skipo hosts the server; there is nothing to install and you handle no API keys.
- Remote connector (OAuth) — add
https://api.skipo.com/mcpas a custom connector in your client, sign in with your Skipo account (OAuth 2.1), and approve read-only access. You can revoke it at any time from the dashboard, under Connected apps.
Tools
There are 15 tools, all read-only, mapping to GET operations of the
v2 API. Amounts are returned as decimal strings (preserve
precision) and dates in ISO-8601.
Paginated collections arrive as { items, pagination }. Note this is not the
same wrapper as the REST API, which uses
{ data, pagination } — the MCP server renames data to
items so every tool returns one consistent shape. The pagination block is
identical. get_balances is the exception: it returns the full list as an array,
with no wrapper and no pagination.
Account & balances
Requires the accounts:read scope.
| Tool | Returns |
|---|---|
get_account | Account profile: name, national ID, verification status, preferred currency. |
get_balances | Per-currency balances (available, frozen, pending, USD value). |
get_balance_history | Historical balance snapshots for one currency (day/week/month buckets). |
get_ledger | Ledger entries for one currency, each with its source — the reconciliation surface. |
Transfers
Requires the transfers:read scope.
| Tool | Returns |
|---|---|
get_withdrawals | Withdrawal history with filters; or one by transaction_id. |
get_deposits | Deposit history with filters; or one by transaction_id. |
Convert (orders & fills)
Requires the trading:read scope.
| Tool | Returns |
|---|---|
get_orders | Convert orders, with filters. It has no fetch-one-by-id mode — narrow with the filters. |
get_fills | Fills (executions) across all orders — when the question spans orders. |
get_order_fills | The fills of one order, when you already have its id. |
Contacts
Requires the contacts:read scope.
| Tool | Returns |
|---|---|
get_contacts | Saved transfer destinations (crypto/bank); or one by contact_id. |
Market data
Requires the market_data:read scope.
| Tool | Returns |
|---|---|
get_assets | Supported assets (fiat/stablecoin/crypto/stock) and their constraints; or one by asset_symbol. |
get_markets | Supported markets (pairs, minimums); or one by market. |
get_indicative_price | An indicative (non-binding) price for a market: the rate and the converted amount, for buying or selling. Nothing is reserved, there is no expiry and no order id is returned, so it cannot be executed. |
get_indicative_price answers "what rate would I get?", not "hold this rate for me". Skipo prices a
dealer spread, so the rate depends on size and does not scale linearly: pass amount +
amount_asset for a specific size, or omit both and the price is for the market minimum (do not
multiply it up to estimate a larger amount). amount is capped by the asset's
maxIndicativeQuoteAmount (see get_assets); above the cap the call is rejected and the error
states the limit.
Obtaining a confirmable quote is POST /v2/quotes (scope trading:write), and executing it
requires a signed request — neither is reachable through this connector.
It is also the most expensive tool: 10 points per call versus 1–3 for the rest, because it reaches an external pricing provider. See tool costs.
Service status
No scope; useful for diagnostics and anchoring relative dates.
| Tool | Returns |
|---|---|
check_api_health | API reachability/health check. |
get_server_time | Skipo server time (clock skew / relative dates). |
Errors
The server surfaces the v2 API's RFC 9457 errors to the
agent: the stable code, the human-readable detail, and a link to the
error catalog. When the rate limit is reached, the error also states
how long to wait. The assistant can then decide to try again itself: Skipo
does not retry the call for you.