Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Added "get_my_invite_codes" and "get_my_invite_payouts"; changed the definition of "create_order", "get_my_trading_profile" and "scan_tokens" (79 tools before, 81 now)
⟨131 unchanged words⟩ if it is cancelled, expires or fails. A timeout or `order_in_flight` is NOT a failure: the order may be live. Retry only with the same arguments and the same `client_order_id` (the error names it), never as a new order. `order_type` selects what to place, and which price ⟨447 unchanged words⟩
⟨148 unchanged words⟩ ":"Amount","type":"number"},"client_order_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Optional idempotency key, up to 64 chars. Omit it and Moby makes one per call. To retry an order whose result you did not get (`order_in_flight`, a timeout), resend the SAME arguments with the SAME `client_order_id`: you get the first result back and nothing is placed twice.","title":"Client Order Id"},"confidence":{"anyOf":[{"enum":[" ⟨329 unchanged words⟩
⟨11 unchanged words⟩ every connect. 🔴 BEFORE ANY OTHER TOOL. - `agent`: this key's agent (`name`). - `interview_due: true`: show `onboarding_brief` verbatim, then run ⟨57 unchanged words⟩ : the user's AI Trading invite. `unlocked` =acodewasredeemed but the agent wallet isn't funded; access is LOST at `access_expires_at` unless USDC isdeposited.deposited:Warnwarn the user once, with the deposit address. `active` =kept for good;kept; null = unknown. - `recommended_strategies`:thelive starter-strategy ids matching the user's assets; offer one or twoof them(names from `list_strategies`) in the closing step. - `status`: `missing` / `saved`(use it)/ `skipped` (do not re-ask unless `interview_due`). - The profile is INTENT: `guardrail_conflicts` lists wishes above an appcap;cap, which Moby enforcesthe cap(`get_my_guardrails`).
⟨83 unchanged words⟩ why candidates failed; null fields are left out. At most 12 candidates are enriched per scan (wallets desc, liquidity desc, market cap desc, smart-money h1 desc, address asc); the rest come back as `not_enriched` in that order, first = next in line. An override replaces that one rule of the ⟨18 unchanged words⟩
{"properties":{"exclude_asset_classes":{"anyOf":[{"items":{"const":"tokenized_stock","type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Override: drop these asset classes before enrichment (unknown class is kept).","title":"Exclude Asset Classes"},"is_new":{"anyOf":[{"type":"boolean ⟨89 unchanged words⟩ ","title":"Max Market Cap"},"max_price_change_pct_h4":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Override: max 4h price change, % (-10 = down >= 10% over 4h).","title":"Max Price Change Pct H4"},"max_top10_pct":{"anyOf":[{"maximum":100, ⟨55 unchanged words⟩ cap, USD.","title":"Min Market Cap"},"min_price_change_pct_h4":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Override: min 4h price change, % (20 = up >= 20% over 4h).","title":"Min Price Change Pct H4"},"min_wallet_buy_usd":{"anyOf":[{"minimum ⟨275 unchanged words⟩
My AI Trading invite codes — The user's AI Trading (AGENT-) invite codes with share links, the friends who redeemed them and the USDC earned from their trading fees. Read-only. Use for "my invite codes", "invite a friend", "how much have my referrals earned". - `codes[]`: each `AGENT-` code with `status` (unused / redeemed / activated), `share_url` (the https invite link) and `share_text` (the app's share message, code and link filled in). `share_text` / `invite_link` at the top are the NEXT unused code's: hand that text to the user to send to a friend, one code per friend; `unused_count` is how many are left (Moby tops …
My invite payout history — The USDC referral payouts swept to the user's agent wallet, paged. Read-only, newest first. Each payout has `amount_usdc`, `status` (pending / success / failure), `tx_hash` (the Solana transfer to the user's agent wallet, once sent) and `created`. `total` is the count across pages. For what is still accruing, read `pending_usdc` from `get_my_invite_codes`. Never Copy Trading payouts.
Changed the definition of "create_order", "execute_swap", "get_whalewatch_kol_feed" and 2 more
{"$defs":{"TradeLevelsParam":{"properties":{"entry_price":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Entry price in USD.","title":"Entry Price"},"invalidation":{"anyOf":[{"maxLength":140,"type":"string"},{"type":"null"}],"default":null,"description":"One line: what breaks the idea.","title":"Invalidation"},"risk_reward":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Reward divided by risk, e.g. 3.0.","title":"Risk Reward"},"stop_price":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Stop price in USD.","title":"Stop Price"},"target_price":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Target price in USD.","title":"Target Price"},"timeframe":{"anyOf":[{"enum":["1m","5m","15m","1h","4h","1d"],"type":"string"},{"type":"null"}],"default":null,"description":"Chart timeframe the levels come from.","title":"Timeframe"}},"title":"TradeLevelsParam","type":"object"}},"properties":{"amount":{"description":"How much to SPEND ⟨17 unchanged words⟩ ":"Amount","type":"number"},"confidence":{"anyOf":[{"enum":["low","medium","high"],"type":"string"},{"type":"null"}],"default":null,"description":"Optional. How sure you are: `low`, `medium` or `high`.","title":"Confidence"},"expected_hold":{"anyOf":[{"enum":["minutes","hours","days","weeks"],"type":"string"},{"type":"null"}],"default":null,"description":"Optional. How long you expect to hold: `minutes`, `hours`, `days` or `weeks`.","title":"Expected Hold"},"
Added "check_positions" and "scan_tokens"; changed the definition of "execute_swap", "get_my_guardrails", "get_my_orders" and 4 more (77 tools before, 79 now)
⟨90 unchanged words⟩ id. When `fill_pending` is true, call `get_swap_status(request_id=quote_idquote_id=...)`. AMOUNTS: quote the `_ui` fields (whole ⟨60 unchanged words⟩
⟨156 unchanged words⟩ = every trade is refused. - `platform_limits`:Moby'sthis key's rate limitsfor this key
Certificate recorded, valid to 2027-01-04
Authorization not required
Unknown → Live
First tool surface recorded: 77 tools (server version 1.1.0)
https://mcp.moby.win/mcp (mcp_streamable_http) — from mcp_registry, with the record
Showing the latest 8 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
{"$defs":{"TradeLevelsParam":{"properties":{"entry_price":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Entry price in USD.","title":"Entry Price"},"invalidation":{"anyOf":[{"maxLength":140,"type":"string"},{"type":"null"}],"default":null,"description":"One line: what breaks the idea.","title":"Invalidation"},"risk_reward":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Reward divided by risk, e.g. 3.0.","title":"Risk Reward"},"stop_price":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Stop price in USD.","title":"Stop Price"},"target_price":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Target price in USD.","title":"Target Price"},"timeframe":{"anyOf":[{"enum":["1m","5m","15m","1h","4h","1d"],"type":"string"},{"type":"null"}],"default":null,"description":"Chart timeframe the levels come from.","title":"Timeframe"}},"title":"TradeLevelsParam","type":"object"}},"properties":{"confidence":{"anyOf":[{"enum":["low","medium","high"],"type":"string"},{"type":"null"}],"default":null,"description":"Optional. How sure you are: `low`, `medium` or `high`.","title":"Confidence"},"expected_hold":{"anyOf":[{"enum":["minutes","hours","days","weeks"],"type":"string"},{"type":"null"}],"default":null,"description":"Optional. How long you expect to hold: `minutes`, `hours`, `days` or `weeks`.","title":"Expected Hold"},"levels":{"anyOf":[{"$ref":"#/$defs/TradeLevelsParam"},{"type":"null"}],"default":null,"description":"Optional. Your chart levels as numbers: entry_price, stop_price, target_price (USD), timeframe (1m/5m/15m/1h/4h/1d), risk_reward, invalidation (one line, <=140 chars). Pass `levels` when you have them; images are not accepted. Stored with the trade and shown back to you."},"quote_id":{"description":"`quote_id` from a recent `get_swap_quote` response.","title":"Quote Id","type":"string"},"thesis":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Optional. Your own note on this trade, 2–4 lines: why this coin, why now, who's in it, what breaks it. Stored with the trade and shown back to you; ≤500 chars.","title":"Thesis"}},"required":["quote_id"],"title ⟨3 unchanged words⟩
What crypto influencers (KOLs, callers) are buying and selling on Solana. Same ⟨75 unchanged words⟩
{"$defs":{"TradeLevelsParam":{"properties":{"entry_price":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Entry price in USD.","title":"Entry Price"},"invalidation":{"anyOf":[{"maxLength":140,"type":"string"},{"type":"null"}],"default":null,"description":"One line: what breaks the idea.","title":"Invalidation"},"risk_reward":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Reward divided by risk, e.g. 3.0.","title":"Risk Reward"},"stop_price":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Stop price in USD.","title":"Stop Price"},"target_price":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Target price in USD.","title":"Target Price"},"timeframe":{"anyOf":[{"enum":["1m","5m","15m","1h","4h","1d"],"type":"string"},{"type":"null"}],"default":null,"description":"Chart timeframe the levels come from.","title":"Timeframe"}},"title":"TradeLevelsParam","type":"object"}},"properties":{"amount_in":{"anyOf":[{"type":"number ⟨54 unchanged words⟩ `amount_in`.","title":"Amount Usd"},"confidence":{"anyOf":[{"enum":["low","medium","high"],"type":"string"},{"type":"null"}],"default":null,"description":"Optional. How sure you are: `low`, `medium` or `high`.","title":"Confidence"},"expected_hold":{"anyOf":[{"enum":["minutes","hours","days","weeks"],"type":"string"},{"type":"null"}],"default":null,"description":"Optional. How long you expect to hold: `minutes`, `hours`, `days` or `weeks`.","title":"Expected Hold"},"levels":{"anyOf":[{"$ref":"#/$defs/TradeLevelsParam"},{"type":"null"}],"default":null,"description":"Optional. Your chart levels as numbers: entry_price, stop_price, target_price (USD), timeframe (1m/5m/15m/1h/4h/1d), risk_reward, invalidation (one line, <=140 chars). Pass `levels` when you have them; images are not accepted. Stored with the trade and shown back to you."},"output_token":{"description":"Contract address of the ⟨8 unchanged words⟩ "Output Token","type":"string"},"rationalethesis":{"anyOf":[{"maxLength":500," ⟨4 unchanged words⟩ ,"default":null,"description":"Optional. Your2–4ownlinenotethesison this trade, 2–4 lines: why this coin, why now, who's in it, what breaks it. Stored with the trade and showntobackthetouser;you; ≤500 chars.","title":"RationaleThesis"}},"required":["output_token"],"title ⟨3 unchanged words⟩
{"$defs":{"TradeLevelsParam":{"properties":{"entry_price":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Entry price in USD.","title":"Entry Price"},"invalidation":{"anyOf":[{"maxLength":140,"type":"string"},{"type":"null"}],"default":null,"description":"One line: what breaks the idea.","title":"Invalidation"},"risk_reward":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Reward divided by risk, e.g. 3.0.","title":"Risk Reward"},"stop_price":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Stop price in USD.","title":"Stop Price"},"target_price":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Target price in USD.","title":"Target Price"},"timeframe":{"anyOf":[{"enum":["1m","5m","15m","1h","4h","1d"],"type":"string"},{"type":"null"}],"default":null,"description":"Chart timeframe the levels come from.","title":"Timeframe"}},"title":"TradeLevelsParam","type":"object"}},"properties":{"confidence":{"anyOf":[{"enum":["low","medium","high"],"type":"string"},{"type":"null"}],"default":null,"description":"Optional. How sure you are: `low`, `medium` or `high`.","title":"Confidence"},"expected_hold":{"anyOf":[{"enum":["minutes","hours","days","weeks"],"type":"string"},{"type":"null"}],"default":null,"description":"Optional. How long you expect to hold: `minutes`, `hours`, `days` or `weeks`.","title":"Expected Hold"},"levels":{"anyOf":[{"$ref":"#/$defs/TradeLevelsParam"},{"type":"null"}],"default":null,"description":"Optional. Your chart levels as numbers: entry_price, stop_price, target_price (USD), timeframe (1m/5m/15m/1h/4h/1d), risk_reward, invalidation (one line, <=140 chars). Pass `levels` when you have them; images are not accepted. Stored with the trade and shown back to you."},"max_slippage_bps":{"anyOf":[{"maximum":5000, ⟨46 unchanged words⟩ 1,"title":"Pct","type":"number"},"thesis":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Optional. Your own note on this trade, 2–4 lines: why this coin, why now, who's in it, what breaks it. Stored with the trade and shown back to you; ≤500 chars.","title":"Thesis"},"token_address":{"description":"Contract address ⟨21 unchanged words⟩
⟨101 unchanged words⟩ what `cancel_order` takes), progress `filled_order_count` / `order_count`. Trailing stops: `trail_pct` and `trailing` (live high and sell level). `get_my_orders` answers 'what is running' in ONE call: ⟨38 unchanged words⟩
⟨77 unchanged words⟩ `pending` or `fill_pending`, only `get_swap_status` can confirm it. `fee_usd` / `fee_pct_of_trade` = Moby's fee; relay any `fee_warning` (fee over 10%; quote first).
⟨8 unchanged words⟩ or signature. Safe to repeat. Moves nothing. Pass`request_id``quote_id` (from the`quote_id`swap result, or a failure message's Reference ID) OR ⟨87 unchanged words⟩
{"properties":{"request_idquote_id":{"anyOf":[{"type":"string" ⟨2 unchanged words⟩ ,"default":null,"description":"The `quote_id`ofthe swapyou executed.returned. Give this OR `transaction_signature`.","title":"Quote Id"},"request_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Older name for `quote_id`.","title":"Request Id"},"transaction_signature":{"anyOf":[ ⟨7 unchanged words⟩ The `transaction_signature` the swap returned. Give this OR`request_id`.`quote_id`.","title":"Transaction Signature"}},"title ⟨3 unchanged words⟩
⟨114 unchanged words⟩ `quote_id`; when `fill_pending` is true, call `get_swap_status(request_id=quote_idquote_id=...)`. AMOUNTS: quote the `_ui` fields (whole ⟨21 unchanged words⟩ fill not booked yet; read it from `get_swap_status`. `fee_usd` / `fee_pct_of_trade` = Moby's fee; relay any `fee_warning` (fee over 10%; quote first). Moby attaches no exits: place this position's TP/SL yourself with `create_order`.
⟨15 unchanged words⟩ sells also cancel that token's open exits. Quoteand+ executehappen together, so it neverinfailsoneoncallan(no expiredquotequotes): THE tool to close or trim. ⚠️ ⟨23 unchanged words⟩ get an explicit yes BEFORE calling it. `pct`is a= percent of the CURRENT on-chain balance (default 100 = all); proceeds land in USDC in the same wallet.The result hasResult: `sold_amount`, `transaction_signature`and the, `quote_id`;whenif `fill_pending`is true, call `get_swap_status(request_id=quote_idquote_id=...)`. AMOUNTS: quote the `_ui` fields (whole ⟨21 unchanged words⟩ fill not booked yet; read it from `get_swap_status`.A`fee_usd`full/sell`fee_pct_of_trade`cancels=everyMoby'srestingfee;TP/SLrelayonanythe`fee_warning`token,(fee over 10%; quote first). A full sell cancels alllotslots' resting TP/SL (`cancelled_order_ids`; `cancel_failed_order_ids` / `cancel_pending_order_ids` + `cancel_note` are retried).Sells are neverNever blocked by market cap, safety tier or trade limits; the `market` switchstillapplies.
Check my open positions and exits — THE first call of every scheduled run, before the scan: what each held position needs now under a strategy's exit rules. One call for position upkeep: for each held token, the live exit legs, age, PnL and the actions due (time-stop sell or sell-now, missing SL/TP, cancel the orphan leg) under the strategy's rules, plus today's counts (buys, stop-outs, open positions, closed-at-loss 7d) so you never recompute them. Do what `actions` says with quick_sell / create_order / cancel_order, then scan. Each action's `params` are the arguments for that tool; `verdict` is `sell_now`, `fix_exits` or `hol…
Scan for tokens that pass a strategy — THE first call of a scheduled scan: Moby applies a strategy's thresholds server-side and returns only the Solana tokens that pass, already deduplicated for this user. Empty `qualifiers` = end the run silently. Pass the previous run's `next_since` back as `since`: tokens returned to you for the same rules in the last <window> (the preset's scan interval, 5-15 min) are dropped. Deep-check ONLY the qualifiers, with `get_token_trade_brief` and `get_whale_wallet_profiles`; `agent_checks` is what the scan did NOT check, so apply it yourself. `rejected` counts why candidates failed; null fields are …