{"name":"trade.rubin/exchange","slug":"rubin-exchange","title":"Rubin Exchange","description":"Rubin: self-custody DEX for crypto perpetuals & spot - trade, read positions, orders, balances.","url":"https://mcp.market/server/rubin-exchange","rating":null,"grade":"B","score":79,"certified":false,"status":"active","category":"ecommerce","tags":["ecommerce","finance"],"presence":{"score":14,"stars":0,"forks":0,"downloads_week":null,"last_push_at":"2026-07-01T19:54:19.000Z","license":"MIT"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-04T11:06:01.362Z","last_ok_at":"2026-11-04T11:06:01.362Z","latency_ms":720},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/rubin-trade/rubin-mainnet-mcp","website":"https://code.rubin.trade/ai","version":"1.0.2","remotes":[{"type":"streamable-http","url":"https://mcp.mainnet.rubin.trade/mcp","headers":[{"description":"Bearer MCP token - mint one on the Rubin exchange at rubin.trade (Trading Keys -> MCP Token).","isRequired":true,"isSecret":true,"name":"Authorization"}]}],"packages":[],"tools":[{"name":"batch_cancel","description":"Cancel multiple SHORT_TERM orders in one tx. SHORT_TERM only (chain limitation) — for stateful/mixed use cancel_all_orders.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"market":{"type":"string","pattern":"^[A-Z0-9]{1,20}-[A-Z0-9]{1,20}$"},"clientIds":{"type":"array","items":{"type":"integer","minimum":0},"minItems":1,"maxItems":100}},"required":["market","clientIds"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"cancel_all_orders","description":"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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"market":{"type":"string","pattern":"^[A-Z0-9]{1,20}-[A-Z0-9]{1,20}$"},"confirm":{"type":"boolean","description":"After canceling, verify no orders remain OPEN via the indexer (default true)."}},"required":["market"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"cancel_order","description":"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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"market":{"type":"string","pattern":"^[A-Z0-9]{1,20}-[A-Z0-9]{1,20}$"},"clientId":{"type":"integer","minimum":0},"orderFlags":{"type":"string","enum":["SHORT_TERM","LONG_TERM","CONDITIONAL"]},"goodTilBlock":{"type":"integer","exclusiveMinimum":0},"goodTilTimeSeconds":{"type":"integer","exclusiveMinimum":0},"confirm":{"type":"boolean","description":"Verify the cancel actually took via the indexer (default true)."}},"required":["market","clientId","orderFlags"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"close_all_positions","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"slippageBps":{"type":"number","minimum":0,"maximum":10000,"description":"Max slippage vs oracle, in bps (default 500). Raise to sweep thin books."},"confirm":{"type":"boolean"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"close_position","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"market":{"type":"string","pattern":"^[A-Z0-9]{1,20}-[A-Z0-9]{1,20}$","description":"Market ticker, e.g. BTC-USD"},"percent":{"type":"number","exclusiveMinimum":0,"maximum":100,"description":"Portion of the position to close (default 100)."},"slippageBps":{"type":"number","minimum":0,"maximum":10000,"description":"Max slippage vs oracle, in bps (default 500). Raise to sweep a thin book."},"confirm":{"type":"boolean"}},"required":["market"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"deposit_to_subaccount","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"amountUsd":{"type":"number","exclusiveMinimum":0,"description":"USDC to move. Omit to move everything above the $0.95 gas reserve."}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_balance","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_block_height","description":"Return the latest chain block height. Useful for SHORT_TERM order goodTilBlock math.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_candles","description":"Get OHLCV candles for a market at a given resolution. Useful for trend/volatility analysis.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"market":{"type":"string","pattern":"^[A-Z0-9]{1,20}-[A-Z0-9]{1,20}$","description":"Market ticker, e.g. BTC-USD"},"resolution":{"type":"string","enum":["1MIN","5MINS","15MINS","30MINS","1HOUR","4HOURS","1DAY"],"description":"Candle resolution"},"fromISO":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?)?(Z|[+-]\\d{2}:?\\d{2})?$","description":"ISO 8601 start time"},"toISO":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?)?(Z|[+-]\\d{2}:?\\d{2})?$","description":"ISO 8601 end time"},"limit":{"type":"integer","exclusiveMinimum":0,"maximum":1000}},"required":["market","resolution"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_candles_multi","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"market":{"type":"string","pattern":"^[A-Z0-9]{1,20}-[A-Z0-9]{1,20}$","description":"Market ticker, e.g. BTC-USD"},"resolutions":{"type":"array","items":{"type":"string","enum":["1MIN","5MINS","15MINS","30MINS","1HOUR","4HOURS","1DAY"]},"description":"Subset of resolutions (default: all indexer resolutions)."},"limit":{"type":"integer","exclusiveMinimum":0,"maximum":200,"description":"Candles per resolution (default 50, most recent)."}},"required":["market"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_equity","description":"Get the subaccount summary: equity, freeCollateral, marginEnabled, open perpetual positions and asset positions.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_fee_tier","description":"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).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_fills","description":"Get executed fills for the subaccount, including price, size, fee and maker/taker liquidity.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"market":{"type":"string","pattern":"^[A-Z0-9]{1,20}-[A-Z0-9]{1,20}$","description":"Market ticker filter, e.g. BTC-USD"},"limit":{"type":"integer","exclusiveMinimum":0,"maximum":100},"page":{"type":"integer","exclusiveMinimum":0}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_funding_status","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_leaderboard","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"timeSpan":{"type":"string","enum":["ONE_DAY","SEVEN_DAYS","THIRTY_DAYS","ONE_YEAR","ALL_TIME"],"description":"Time span (default SEVEN_DAYS)"},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Rows per page (default 20, max 100)"},"page":{"type":"integer","minimum":1,"description":"Page number, 1-based (default 1)"},"sortBy":{"type":"string","enum":["RANK","PNL","ROI","CURRENT_EQUITY"],"description":"RANK (default), PNL, ROI or CURRENT_EQUITY"},"sortDirection":{"type":"string","enum":["ASC","DESC"],"description":"Sort direction (default: best first)"},"search":{"type":"string","maxLength":256,"description":"Filter by username or (substring of) address"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_market","description":"Get details for one perpetual market (clobPairId, atomicResolution, quantumConversionExponent, tick/step sizes, oracle price, status).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"market":{"type":"string","pattern":"^[A-Z0-9]{1,20}-[A-Z0-9]{1,20}$","description":"Market ticker, e.g. BTC-USD"}},"required":["market"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_my_rank","description":"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).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"timeSpan":{"type":"string","enum":["ONE_DAY","SEVEN_DAYS","THIRTY_DAYS","ONE_YEAR","ALL_TIME"],"description":"One time span; omit for all five"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_news","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"category":{"type":"string","enum":["crypto","markets","business"],"description":"Restrict to one channel category."},"channels":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Explicit hub channel ids (overrides category), e.g. [\"forklog\",\"incrypted\"]."},"query":{"type":"string","description":"Case-insensitive keyword/ticker to match in text or hashtags, e.g. BTC."},"limit":{"type":"integer","exclusiveMinimum":0,"maximum":100,"description":"Max items (default 30)."},"sinceHours":{"type":"number","exclusiveMinimum":0,"maximum":168,"description":"Only items newer than this many hours."}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_open_orders","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"market":{"type":"string","pattern":"^[A-Z0-9]{1,20}-[A-Z0-9]{1,20}$","description":"Market ticker filter, e.g. BTC-USD"},"side":{"type":"string","enum":["BUY","SELL"]},"limit":{"type":"integer","exclusiveMinimum":0,"maximum":100}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_orderbook","description":"Get the live orderbook (bids/asks) for a market, optionally truncated to a depth.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"market":{"type":"string","pattern":"^[A-Z0-9]{1,20}-[A-Z0-9]{1,20}$","description":"Market ticker, e.g. BTC-USD"},"depth":{"type":"integer","exclusiveMinimum":0,"maximum":100,"description":"Max levels per side"}},"required":["market"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_pnl","description":"Get historical PnL ticks for the subaccount (equity, totalPnl, netTransfers over time). Use createdOnOrAfter to bound the range.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"limit":{"type":"integer","exclusiveMinimum":0,"maximum":1000},"createdOnOrAfter":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?)?(Z|[+-]\\d{2}:?\\d{2})?$","description":"ISO 8601 lower bound"},"page":{"type":"integer","exclusiveMinimum":0}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_portfolio","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_position_risk","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_positions","description":"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).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"status":{"type":"string","enum":["OPEN","CLOSED","LIQUIDATED"],"description":"Position status filter"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_referral_program","description":"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).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list_markets","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"open_position","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"market":{"type":"string","pattern":"^[A-Z0-9]{1,20}-[A-Z0-9]{1,20}$","description":"Market ticker, e.g. BTC-USD"},"side":{"type":"string","enum":["BUY","SELL"]},"size":{"type":"number","exclusiveMinimum":0,"description":"Position size in base units."},"notionalUsd":{"type":"number","exclusiveMinimum":0,"description":"Position size in quote USD (converted at oracle). Use instead of size."},"slippageBps":{"type":"number","minimum":0,"maximum":10000,"description":"Max slippage vs oracle for the entry, in bps (default 500)."},"stopLossPrice":{"type":"number","exclusiveMinimum":0,"description":"Attach a reduce-only stop-loss trigger at this price."},"takeProfitPrice":{"type":"number","exclusiveMinimum":0,"description":"Attach a reduce-only take-profit trigger at this price."},"confirm":{"type":"boolean"}},"required":["market","side"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"place_limit_order","description":"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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"market":{"type":"string","pattern":"^[A-Z0-9]{1,20}-[A-Z0-9]{1,20}$","description":"Market ticker, e.g. BTC-USD"},"side":{"type":"string","enum":["BUY","SELL"]},"price":{"type":"number","exclusiveMinimum":0},"size":{"type":"number","exclusiveMinimum":0,"description":"Size in base units"},"timeInForce":{"type":"string","enum":["GTT","SHORT_TERM"],"default":"GTT"},"postOnly":{"type":"boolean","description":"Reject if it would cross (maker-only). Defaults to server config."},"reduceOnly":{"type":"boolean"},"goodTilTimeSeconds":{"type":"integer","exclusiveMinimum":0,"maximum":7776000,"description":"GTT lifetime (default 3600)"},"goodTilBlockOffset":{"type":"integer","minimum":1,"maximum":19,"description":"SHORT_TERM blocks ahead (default 10)"},"clientId":{"type":"integer","minimum":0},"confirm":{"type":"boolean","description":"Verify the real outcome via the indexer after broadcast (default true)."}},"required":["market","side","price","size"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"place_market_order","description":"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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"market":{"type":"string","pattern":"^[A-Z0-9]{1,20}-[A-Z0-9]{1,20}$","description":"Market ticker, e.g. BTC-USD"},"side":{"type":"string","enum":["BUY","SELL"]},"size":{"type":"number","exclusiveMinimum":0,"description":"Size in base units"},"slippageBps":{"type":"number","minimum":0,"maximum":10000,"description":"Max slippage vs oracle, in bps (default 500). BUY bounds above the oracle, SELL below; raise to sweep a thin book."},"reduceOnly":{"type":"boolean"},"clientId":{"type":"integer","minimum":0},"confirm":{"type":"boolean","description":"Verify the real fill via the indexer after broadcast (default true)."}},"required":["market","side","size"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"place_stop_loss","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"market":{"type":"string","pattern":"^[A-Z0-9]{1,20}-[A-Z0-9]{1,20}$"},"side":{"type":"string","enum":["BUY","SELL"]},"triggerPrice":{"type":"number","exclusiveMinimum":0},"size":{"type":"number","exclusiveMinimum":0},"slippageBps":{"type":"number","minimum":0,"maximum":10000,"description":"Execution bound past the trigger, in bps (default 500). Raise for thin books."},"clientId":{"type":"integer","minimum":0}},"required":["market","side","triggerPrice","size"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"place_take_profit","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"market":{"type":"string","pattern":"^[A-Z0-9]{1,20}-[A-Z0-9]{1,20}$"},"side":{"type":"string","enum":["BUY","SELL"]},"triggerPrice":{"type":"number","exclusiveMinimum":0},"size":{"type":"number","exclusiveMinimum":0},"slippageBps":{"type":"number","minimum":0,"maximum":10000,"description":"Execution bound past the trigger, in bps (default 500). Raise for thin books."},"clientId":{"type":"integer","minimum":0}},"required":["market","side","triggerPrice","size"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"top_up_gas","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"whoami","description":"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?\".","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}}],"scan":{"score":79,"grade":"B","scanned_at":"2026-10-14T12:19:10.099Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-14T12:19:10.034Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1951ms"]},"poisoning":{"score":15,"max":15,"notes":["33 tool descriptions checked"]},"auth":{"score":8,"max":15,"notes":["API key sent as a header"]},"maintenance":{"score":8,"max":15,"notes":["last push 105 days ago"]},"identity":{"score":8,"max":10,"notes":["endpoint served from the registry-verified namespace domain"]}},"findings":[],"inputs":{"probes":[{"url":"https://mcp.mainnet.rubin.trade/mcp","reachable":true,"authRequired":false,"latencyMs":1951,"serverInfo":{"name":"ritbit-mcp","version":"0.2.0"}}],"packages":[],"repo":{"found":true,"owner":"rubin-trade","repo":"rubin-mainnet-mcp","archived":false,"pushedAt":"2026-07-01T19:54:19Z","stars":0,"forks":0,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/295734215?v=4","ownerCreatedAt":"2026-06-22T04:50:43Z","license":"MIT"},"icon":{"url":"https://code.rubin.trade/apple-touch-icon.png","source":"registry","width":180,"height":180},"presence":{"stars":0,"forks":0,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-07-01T19:54:19.000Z","score":14}}}},"grade_history":[],"reviews":[]}