Rubin Exchange
REMOTE · MCP.MAINNET.RUBIN.TRADE · SCANNED SEP 24
Rubin: self-custody DEX for crypto perpetuals & spot - trade, read positions, orders, balances.
Available components
Recent critical change
Authorization (10 Sept 2026). See the changelog before you install this server.
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security57
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (cancel_order). See how to fix → View diagnostics → Fail
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability83
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 5227 tokens (~158/item across 33 items; 33 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage86
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 58% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 33 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 34 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the Rubin Exchange MCP server?
Rubin Exchange is a hosted endpoint at https://mcp.mainnet.rubin.trade/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · mcp.mainnet.rubin.trade
claude mcp add --transport http trade-rubin-exchange 'https://mcp.mainnet.rubin.trade/mcp'
{
"mcpServers": {
"trade-rubin-exchange": {
"url": "https://mcp.mainnet.rubin.trade/mcp"
}
}
} {
"servers": {
"trade-rubin-exchange": {
"type": "http",
"url": "https://mcp.mainnet.rubin.trade/mcp"
}
}
} [mcp_servers.trade-rubin-exchange] url = "https://mcp.mainnet.rubin.trade/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"trade-rubin-exchange": {
"type": "remote",
"url": "https://mcp.mainnet.rubin.trade/mcp",
"enabled": true
}
}
} openclaw mcp add trade-rubin-exchange --url 'https://mcp.mainnet.rubin.trade/mcp' --transport streamable-http
mcp_servers:
trade-rubin-exchange:
url: "https://mcp.mainnet.rubin.trade/mcp" {
"McpServers": {
"trade-rubin-exchange": {
"Transport": "http",
"Url": "https://mcp.mainnet.rubin.trade/mcp"
}
}
} assistant mcp add trade-rubin-exchange -t streamable-http -u 'https://mcp.mainnet.rubin.trade/mcp'
{
"mcpServers": {
"trade-rubin-exchange": {
"type": "http",
"url": "https://mcp.mainnet.rubin.trade/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 17 Sept 26 +1
- Stability: 0.97 → pass security
- 15 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.
- 14 Sept 26 −2
- Stability: pass → 0.90 functional
- 10 Sept 26 0
- Authorization: unverified → fail ▼ critical
- HSTS header: unverified → fail ▼ security
- DNSSEC: unverified → fail ▼ security
- Injection markers: unverified → pass ▲ security
- Stability: unverified → pass ▲ security
- TLS certificate: unverified → pass ▲ security
- Transport: fail → pass ▲ security
- Endpoint reachability: unreachable → reachable ▲ functional
- Tool coverage: unverified → 100 ▲ functional
- Schema quality: unverified → 100 ▲ functional
- MCP protocol: unverified → pass ▲ functional
- 9 Sept 26 0
- Endpoint reachability: reachable → unreachable ▼ security
- DNSSEC: fail → unverified ▼ security
- Authorization: fail → unverified ▼ security
- HSTS header: fail → unverified ▼ security
- Stability: pass → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- TLS certificate: pass → unverified ▼ security
- Transport: pass → fail ▼ security
- Schema quality: 100 → unverified ▼ functional
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- 26 Aug 26 79
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 25 Aug 26 0
- Stability: 0.97 → pass security
- 24 Aug 26 0
- The server rewrote its instructions, which are the text every model session reads security
- Tool “get_balance” rewrote its description, which is the text the model reads security
- Tool “whoami” rewrote its description, which is the text the model reads security
- Schema quality: 139 → 158 ▼ functional
- New prompt “fund_account” functional
- New prompt “my_account” functional
- New prompt “my_fees” functional
- New prompt “my_rank” functional
- New prompt “referral_program” functional
- Server version: 0.0.1 → 0.2.0 functional
- New tool “deposit_to_subaccount” functional
- New tool “get_fee_tier” functional
- New tool “get_funding_status” functional
- New tool “get_leaderboard” functional
- New tool “get_my_rank” functional
- New tool “get_referral_program” functional
- New tool “top_up_gas” functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 24 Sept 2026 · Probed https://mcp.mainnet.rubin.trade/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=mcp.mainnet.rubin.trade | CN=YR1,O=Let's Encrypt,C=US | 19 Aug 2026 | 17 Nov 2026 | RSA 4096 | SHA256-RSA | 5f9e2c33e1e846e9274a31bec77cb422ed8 |
| SANs: mcp.mainnet.rubin.trade | ||||||
| CN=YR1,O=Let's Encrypt,C=US (CA) | CN=Root YR,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | RSA 2048 | SHA256-RSA | a20253f15f2691c05dc1ce13b9bcca4e |
| CN=Root YR,O=ISRG,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | RSA 4096 | SHA256-RSA | f24b6d17f9d9ad7cb1c9fea78782699f |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of mcp.mainnet.rubin.trade. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| trade. | present | 64969 | 8 | Verified |
| rubin.trade. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://mcp.mainnet.rubin.trade/mcp | Verified | 200 | |
| http (plaintext) | http://mcp.mainnet.rubin.trade/mcp | HTTPS enforced | 301 | https://mcp.mainnet.rubin.trade/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
batch_cancel Batch cancel short-term orders ~50
Cancel multiple SHORT_TERM orders in one tx. SHORT_TERM only (chain limitation) — for stateful/mixed use cancel_all_orders.
| Name | Type | Req | Description |
|---|---|---|---|
| clientIds | array | yes | – |
| market | string | yes | – |
No output schema declared.
No examples provided.
cancel_all_orders Cancel all orders in a market ~85
Cancel every OPEN order for the subaccount in a market (handles SHORT_TERM and LONG_TERM automatically). Returns `confirmation.remainingOpen` — orders still OPEN after the cancel (0 = all gone); if > 0, retry.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | – | After canceling, verify no orders remain OPEN via the indexer (default true). |
| market | string | yes | – |
No output schema declared.
No examples provided.
cancel_order Cancel an order ~161
Cancel a single order by clientId. For SHORT_TERM pass goodTilBlock; for LONG_TERM/CONDITIONAL pass goodTilTimeSeconds (the original good-til value, available from get_open_orders). Returns `confirmation` with the verified result (canceled / still_open / filled / pending): `code: 0` only means the cancel was broadcast. If `still_open`, the goodTil value likely did not match the original — retry.
| Name | Type | Req | Description |
|---|---|---|---|
| clientId | integer | yes | – |
| confirm | boolean | – | Verify the cancel actually took via the indexer (default true). |
| goodTilBlock | integer | – | – |
| goodTilTimeSeconds | integer | – | – |
| market | string | yes | – |
| orderFlags | string | yes | – |
No output schema declared.
No examples provided.
close_all_positions Close all positions ~129
Flatten EVERY open perpetual position with reduce-only MARKET orders (one per market). Respects the operator market allowlist (disallowed markets are skipped and reported). Each close is bounded at oracle ± slippageBps mirrored by side (default 500 bps = 5%). Returns a per-market result array — for any market reporting unfilled/partially_filled, re-run with a larger slippageBps.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | – | – |
| slippageBps | number | – | Max slippage vs oracle, in bps (default 500). Raise to sweep thin books. |
No output schema declared.
No examples provided.
close_position Close a position ~246
Close all or part of an open perpetual position with a reduce-only MARKET order. Reads the current position, flips the side automatically (LONG→SELL, SHORT→BUY) and sizes the close. percent defaults to 100 (full close); a partial close is floored to the market step size. The close is bounded at oracle ± slippageBps mirrored by side (closing a SHORT buys up to oracle×(1+slip), closing a LONG sells down to oracle×(1−slip); default 500 bps = 5%). Returns the verified `confirmation` outcome — if it is `unfilled` or `partially_filled`, the book was thinner than the cap: re-run with a larger slippageBps to sweep deeper. Errors NOT_FOUND if there is no open position in the market.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | – | – |
| market | string | yes | Market ticker, e.g. BTC-USD |
| percent | number | – | Portion of the position to close (default 100). |
| slippageBps | number | – | Max slippage vs oracle, in bps (default 500). Raise to sweep a thin book. |
No output schema declared.
No examples provided.
deposit_to_subaccount Move wallet USDC into the trading account ~141
Deposit USDC from the account's WALLET into its trading SUBACCOUNT so it becomes collateral. Without amountUsd it moves everything above the $0.95 gas reserve (what the web app does); with amountUsd it moves exactly that much, as long as $0.95 stays in the wallet. Funds never leave the account — this is an internal transfer the trading key is allowed to make. Use it when the user has sent money to the account and the subaccount collateral is 0 or too low to trade.
| Name | Type | Req | Description |
|---|---|---|---|
| amountUsd | number | – | USDC to move. Omit to move everything above the $0.95 gas reserve. |
No output schema declared.
No examples provided.
get_balance Get balances ~101
Get the subaccount collateral (USDC asset position) and the on-chain wallet bank balances. Collateral is what backs trading; the WALLET balance is where money sent to the account lands and is NOT collateral until deposited. `funding` summarizes it: depositableUsdc (wallet minus the $0.95 gas reserve) and a suggestedAction — deposit_to_subaccount when the wallet holds spare USDC, top_up_gas when gas is low.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_block_height Get latest block height ~26
Return the latest chain block height. Useful for SHORT_TERM order goodTilBlock math.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_candles Get candles (OHLCV) ~91
Get OHLCV candles for a market at a given resolution. Useful for trend/volatility analysis.
| Name | Type | Req | Description |
|---|---|---|---|
| fromISO | string | – | ISO 8601 start time |
| limit | integer | – | – |
| market | string | yes | Market ticker, e.g. BTC-USD |
| resolution | string | yes | Candle resolution |
| toISO | string | – | ISO 8601 end time |
No output schema declared.
No examples provided.
get_candles_multi Get multi-timeframe candles ~172
Get recent OHLCV candles for a market across MULTIPLE resolutions in one call — by default ALL indexer resolutions (1MIN, 5MINS, 15MINS, 30MINS, 1HOUR, 4HOURS, 1DAY) — so the agent can read the trend across timeframes at once. Returns { candles: { <resolution>: [...] } }, newest first. Lower `limit` (e.g. 20) or pass a `resolutions` subset to keep the payload small.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Candles per resolution (default 50, most recent). |
| market | string | yes | Market ticker, e.g. BTC-USD |
| resolutions | array | – | Subset of resolutions (default: all indexer resolutions). |
No output schema declared.
No examples provided.
get_equity Get account summary ~30
Get the subaccount summary: equity, freeCollateral, marginEnabled, open perpetual positions and asset positions.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_fee_tier My fee tier ~93
This account's current trading fee tier and conditions: maker/taker fee (% of notional; a negative maker fee is a rebate), the 30-day maker/taker volume it is judged on, any staking discount, the next tier and how much more 30d volume it takes, plus the full fee-tier table. Referred users start at the program's minimum fee tier (see get_referral_program).
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_fills Get fills (trade history) ~60
Get executed fills for the subaccount, including price, size, fee and maker/taker liquidity.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | – |
| market | string | – | Market ticker filter, e.g. BTC-USD |
| page | integer | – | – |
No output schema declared.
No examples provided.
get_funding_status Wallet vs trading-account funds ~111
Where the account's USDC sits: in the WALLET (bank balance — money sent to the account lands here and is NOT collateral) vs in the trading SUBACCOUNT (equity / free collateral). Returns depositableUsdc (wallet minus the $0.95 gas reserve), whether gas is low, and a suggestedAction (deposit_to_subaccount / top_up_gas / null). Call this when the user says they sent funds, when collateral reads 0, or before any funding decision.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_leaderboard PnL leaderboard ~218
The trader PnL leaderboard for a time span (ONE_DAY, SEVEN_DAYS, THIRTY_DAYS, ONE_YEAR, ALL_TIME): rank, username, address, PnL (USD), ROI (%) and current equity per trader, paginated. Also returns `me` — this account's own row on that board, if it is ranked. Use `search` to find a trader by username or address. For this account's rank across ALL time spans at once, use get_my_rank.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Rows per page (default 20, max 100) |
| page | integer | – | Page number, 1-based (default 1) |
| search | string | – | Filter by username or (substring of) address |
| sortBy | string | – | RANK (default), PNL, ROI or CURRENT_EQUITY |
| sortDirection | string | – | Sort direction (default: best first) |
| timeSpan | string | – | Time span (default SEVEN_DAYS) |
No output schema declared.
No examples provided.
get_market Get a perpetual market ~53
Get details for one perpetual market (clobPairId, atomicResolution, quantumConversionExponent, tick/step sizes, oracle price, status).
| Name | Type | Req | Description |
|---|---|---|---|
| market | string | yes | Market ticker, e.g. BTC-USD |
No output schema declared.
No examples provided.
get_my_rank My leaderboard rank ~96
Where THIS account ranks on the PnL leaderboard: rank, board size ("21 of 66"), PnL, ROI and equity — for one time span, or for every time span (ONE_DAY … ALL_TIME) when none is given. A null entry means the account is not ranked on that board (no qualifying activity in the window).
| Name | Type | Req | Description |
|---|---|---|---|
| timeSpan | string | – | One time span; omit for all five |
No output schema declared.
No examples provided.
get_news Get latest news ~240
Fetch the latest headlines from the ritbit news feed (curated crypto / markets / business channels, newest first). Filter by `category` (crypto|markets|business) or explicit `channels`, and/or a free-text `query` (a ticker or keyword, matched in the post text and hashtags, e.g. BTC). Each item returns { source, url, publishedAt, tags (hashtags — where tickers appear), text }. There is NO importance field: judge impact yourself from the content (hacks, regulation, large moves, ⚠️ warnings). Use this to factor sentiment/catalysts into an assessment, or to answer "what's the latest?". Headlines are ru/en.
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | – | Restrict to one channel category. |
| channels | array | – | Explicit hub channel ids (overrides category), e.g. ["forklog","incrypted"]. |
| limit | integer | – | Max items (default 30). |
| query | string | – | Case-insensitive keyword/ticker to match in text or hashtags, e.g. BTC. |
| sinceHours | number | – | Only items newer than this many hours. |
No output schema declared.
No examples provided.
get_open_orders Get open orders ~135
Get currently active ORDERS for the subaccount, optionally filtered by market and side. Includes OPEN resting orders and UNTRIGGERED conditional orders (TP/SL accepted on-chain but not yet triggered). Returns { orders: [...] }. This does NOT include filled positions — a filled market/limit order leaves NO open order, it becomes a POSITION (see get_positions). When there are 0 orders but open positions exist, the result carries a `note` pointing you there.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | – |
| market | string | – | Market ticker filter, e.g. BTC-USD |
| side | string | – | – |
No output schema declared.
No examples provided.
get_orderbook Get orderbook ~57
Get the live orderbook (bids/asks) for a market, optionally truncated to a depth.
| Name | Type | Req | Description |
|---|---|---|---|
| depth | integer | – | Max levels per side |
| market | string | yes | Market ticker, e.g. BTC-USD |
No output schema declared.
No examples provided.
get_pnl Get historical PnL ~72
Get historical PnL ticks for the subaccount (equity, totalPnl, netTransfers over time). Use createdOnOrAfter to bound the range.
| Name | Type | Req | Description |
|---|---|---|---|
| createdOnOrAfter | string | – | ISO 8601 lower bound |
| limit | integer | – | – |
| page | integer | – | – |
No output schema declared.
No examples provided.
get_portfolio Get full portfolio ~94
One-call snapshot of everything the account has "open": equity & freeCollateral, every open POSITION (with notional, unrealized PnL and estimated liquidation price), every active ORDER (resting + untriggered TP/SL), and account margin risk. Use this to answer "what do I have open?" or "how am I doing?" without worrying whether the user means orders or positions — it returns both.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_position_risk Get position risk ~85
Margin health for the subaccount: equity, freeCollateral, total maintenance/initial margin, maintenanceMarginBufferUsd (the EXACT liquidation guard — liquidatable when < 0), marginUsageRatio (1.0 = at liquidation), account leverage, and per-position estimated liquidation price + distance to it. Use before adding risk or to decide whether to protect/close a position.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_positions Get perpetual positions ~95
Get perpetual POSITIONS with size, side, entryPrice, unrealizedPnl, realizedPnl and netFunding. Defaults to OPEN positions. NOTE: a position is what you HOLD after an order fills — it is NOT an open order. When the user asks loosely "what is open?", check BOTH this and get_open_orders (or call get_portfolio for both at once).
| Name | Type | Req | Description |
|---|---|---|---|
| status | string | – | Position status filter |
No output schema declared.
No examples provided.
get_referral_program My referral (affiliate) program ~91
This account's referral / affiliate program status: referral code and link, whether the link is unlocked (lifetime volume threshold, or already an affiliate), current affiliate tier and taker-fee share, referred volume (30d / all-time), earnings and referred-user stats, who referred this account, the full affiliate tier table and the program parameters (referee starting fee tier, 30d caps).
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_markets List perpetual markets ~42
List all perpetual markets with ticker, status and oracle price. Use this first to discover valid market tickers (e.g. BTC-USD) before placing orders.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
open_position Open a position (market entry + optional bracket) ~278
Enter a NEW position with a MARKET order, sized by base `size` OR quote `notionalUsd` (exactly one required; notionalUsd converts at the oracle price and is floored to the step size). Optionally attach a reduce-only stopLossPrice and/or takeProfitPrice as conditional orders in the SAME call (the bracket, placed with the opposite/closing side and a 500 bps execution bound past the trigger). slippageBps caps the entry fill vs oracle (default 500). Returns the entry `confirmation` plus any bracket order ids. Bracket legs are placed only if the entry broadcast succeeds; each is reduce-only so it can only close, never flip.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | – | – |
| market | string | yes | Market ticker, e.g. BTC-USD |
| notionalUsd | number | – | Position size in quote USD (converted at oracle). Use instead of size. |
| side | string | yes | – |
| size | number | – | Position size in base units. |
| slippageBps | number | – | Max slippage vs oracle for the entry, in bps (default 500). |
| stopLossPrice | number | – | Attach a reduce-only stop-loss trigger at this price. |
| takeProfitPrice | number | – | Attach a reduce-only take-profit trigger at this price. |
No output schema declared.
No examples provided.
place_limit_order Place a limit order ~296
Place a limit order. Default timeInForce=GTT (long-term, durable, broadcast-commit so errors return synchronously). Use SHORT_TERM only for latency-sensitive orders (expire within ~20 blocks, broadcast async). NOTE: stateful (GTT) orders are rate-limited to 2/block and 20 per 100 blocks — pace placements. Returns `confirmation` with the REAL outcome verified via the indexer (filled / partially_filled / resting / unfilled / pending) — broadcast `code: 0` only means the tx was accepted, NOT that it filled. Report from `confirmation.outcome`; if it is `pending`, the indexer is lagging — re-check shortly.
| Name | Type | Req | Description |
|---|---|---|---|
| clientId | integer | – | – |
| confirm | boolean | – | Verify the real outcome via the indexer after broadcast (default true). |
| goodTilBlockOffset | integer | – | SHORT_TERM blocks ahead (default 10) |
| goodTilTimeSeconds | integer | – | GTT lifetime (default 3600) |
| market | string | yes | Market ticker, e.g. BTC-USD |
| postOnly | boolean | – | Reject if it would cross (maker-only). Defaults to server config. |
| price | number | yes | – |
| reduceOnly | boolean | – | – |
| side | string | yes | – |
| size | number | yes | Size in base units |
| timeInForce | string | – | – |
No output schema declared.
No examples provided.
place_market_order Place a market order ~310
Place an IOC market order. It executes as an IOC limit at a worst-acceptable price mirrored around the oracle by side — BUY caps ABOVE the oracle, SELL below — at slippageBps distance (default 500 = 5%). Fills happen at book prices; the cap only limits how deep the sweep goes. reduceOnly closes an existing position. Returns `confirmation` with the REAL outcome verified via the indexer (filled / partially_filled / unfilled / pending): broadcast `code: 0` only means the tx was accepted — an IOC order cancels UNFILLED when the book is entirely beyond the slippage cap (thin/spread market). Always report from `confirmation.outcome`, not `code`; if `unfilled` or `partially_filled`, retry with a larger slippageBps to sweep deeper; if `pending`, the indexer is lagging — wait a few seconds and re-check before concluding.
| Name | Type | Req | Description |
|---|---|---|---|
| clientId | integer | – | – |
| confirm | boolean | – | Verify the real fill via the indexer after broadcast (default true). |
| market | string | yes | Market ticker, e.g. BTC-USD |
| reduceOnly | boolean | – | – |
| side | string | yes | – |
| size | number | yes | Size in base units |
| slippageBps | number | – | Max slippage vs oracle, in bps (default 500). BUY bounds above the oracle, SELL below; raise to sweep a thin book. |
No output schema declared.
No examples provided.
place_stop_loss Stop loss ~158
Place a reduce-only Stop loss (conditional market order) that triggers at triggerPrice. Side must be the CLOSING side of the position: SELL closes a LONG, BUY closes a SHORT. Once triggered it executes as an IOC limit bounded at triggerPrice ± slippageBps in the direction of execution (BUY above the trigger, SELL below; default 500 bps) so the close can cross the book.
| Name | Type | Req | Description |
|---|---|---|---|
| clientId | integer | – | – |
| market | string | yes | – |
| side | string | yes | – |
| size | number | yes | – |
| slippageBps | number | – | Execution bound past the trigger, in bps (default 500). Raise for thin books. |
| triggerPrice | number | yes | – |
No output schema declared.
No examples provided.
place_take_profit Take profit ~158
Place a reduce-only Take profit (conditional market order) that triggers at triggerPrice. Side must be the CLOSING side of the position: SELL closes a LONG, BUY closes a SHORT. Once triggered it executes as an IOC limit bounded at triggerPrice ± slippageBps in the direction of execution (BUY above the trigger, SELL below; default 500 bps) so the close can cross the book.
| Name | Type | Req | Description |
|---|---|---|---|
| clientId | integer | – | – |
| market | string | yes | – |
| side | string | yes | – |
| size | number | yes | – |
| slippageBps | number | – | Execution bound past the trigger, in bps (default 500). Raise for thin books. |
| triggerPrice | number | yes | – |
No output schema declared.
No examples provided.
top_up_gas Restore the wallet gas reserve ~85
Move a little USDC from the trading subaccount back to the WALLET when the wallet is at or below $0.55 — just enough to restore the $0.95 gas reserve that deposit/withdraw transactions need. Only the gas reserve, only to the account's own wallet; it cannot send funds anywhere else. Use after a transaction fails for lack of gas.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
whoami Describe this session ~117
Report what this session controls: the master account (its address in BOTH forms — cosmos rit1… and EVM 0x…, the same 20 bytes), the subaccount, whether it can trade or is read-only, and the exact on-chain authorization scope (which messages, which subaccount, and that it CANNOT withdraw/transfer). Also states what this session can NOT do: create wallets, reveal keys/mnemonics, or switch accounts. Call this first, and use it to answer "what is my address?".
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
What is the Rubin Exchange MCP server?
Rubin Exchange is an MCP server listed in the public MCP registry as trade.rubin/exchange. Rubin: self-custody DEX for crypto perpetuals & spot - trade, read positions, orders, balances. This page covers its hosted endpoint (https://mcp.mainnet.rubin.trade/mcp).
Is the Rubin Exchange MCP server safe to use?
Rubin Exchange scores 79 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Rubin Exchange MCP server expose?
Rubin Exchange exposes 33 tools: whoami, get_block_height, list_markets, get_market, get_orderbook, and 28 more. Their descriptions and schemas cost roughly 4,176 tokens of context every time the server is loaded.
Does the Rubin Exchange MCP server require authentication?
No. We connected to Rubin Exchange without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the Rubin Exchange MCP server still maintained?
Rubin Exchange is still listed as active in the MCP registry. We last reached this channel on 24 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.