Skip to main content

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.

Read-only

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/mcp as 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.

ToolReturns
get_accountAccount profile: name, national ID, verification status, preferred currency.
get_balancesPer-currency balances (available, frozen, pending, USD value).
get_balance_historyHistorical balance snapshots for one currency (day/week/month buckets).
get_ledgerLedger entries for one currency, each with its source — the reconciliation surface.

Transfers

Requires the transfers:read scope.

ToolReturns
get_withdrawalsWithdrawal history with filters; or one by transaction_id.
get_depositsDeposit history with filters; or one by transaction_id.

Convert (orders & fills)

Requires the trading:read scope.

ToolReturns
get_ordersConvert orders, with filters. It has no fetch-one-by-id mode — narrow with the filters.
get_fillsFills (executions) across all orders — when the question spans orders.
get_order_fillsThe fills of one order, when you already have its id.

Contacts

Requires the contacts:read scope.

ToolReturns
get_contactsSaved transfer destinations (crypto/bank); or one by contact_id.

Market data

Requires the market_data:read scope.

ToolReturns
get_assetsSupported assets (fiat/stablecoin/crypto/stock) and their constraints; or one by asset_symbol.
get_marketsSupported markets (pairs, minimums); or one by market.
get_indicative_priceAn 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.
An indicative price is not a quote

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.

ToolReturns
check_api_healthAPI reachability/health check.
get_server_timeSkipo 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.