Moby
REMOTE · MCP.MOBY.WIN
Bearer agent key. Codex, Claude Code CLI, Gemini CLI (paid key), Grok CLI. ChatGPT: workspace plans.
Available components
Last scanned (20 hours ago)
Scores higher than 44% of remote servers
Reachable. Last reached 4 Nov 2026.
Category Crypto and Web3
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 (execute_swap). 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 Usability64
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 19792 tokens (~257/item across 77 items; 77 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 Management7
- Stability observed for 2 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 78 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
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.
- 4 Nov 26 +3
We did not load change detail this far back for this component, so this day may have recorded more than is shown.
- The server rewrote its instructions, which are the text every model session reads security
- Tool “get_my_guardrails” rewrote its description, which is the text the model reads security
- Tool “get_my_followed_wallets” rewrote its description, which is the text the model reads security
- Tool “get_my_closed_positions” rewrote its description, which is the text the model reads security
- Tool “get_my_position” rewrote its description, which is the text the model reads security
- Tool “get_whalewatch_feed_window” rewrote its description, which is the text the model reads security
- Tool “get_screener_groups” rewrote its description, which is the text the model reads security
- Tool “get_token_holdings” rewrote its description, which is the text the model reads security
- Tool “search_tokens” rewrote its description, which is the text the model reads security
- Tool “get_my_following_feed” rewrote its description, which is the text the model reads security
- Tool “get_my_closed_trades” rewrote its description, which is the text the model reads security
- Tool “get_my_watchlist_tokens” rewrote its description, which is the text the model reads security
- Tool “get_token_holders” rewrote its description, which is the text the model reads security
- Tool “get_my_token_balance” rewrote its description, which is the text the model reads security
- Tool “get_my_balances” rewrote its description, which is the text the model reads security
- Tool “get_whalewatch_feed” rewrote its description, which is the text the model reads security
- Tool “get_top_held” rewrote its description, which is the text the model reads security
- Tool “get_whalewatch_kol_feed” rewrote its description, which is the text the model reads security
- Tool “get_token_x_profile” rewrote its description, which is the text the model reads security
- Tool “get_whale_wallet_pnl_chart” rewrote its description, which is the text the model reads security
- Tool “get_token_overview” rewrote its description, which is the text the model reads security
- Tool “get_whalewatch_wallet_lists” rewrote its description, which is the text the model reads security
- Tool “get_strategy” rewrote its description, which is the text the model reads security
- Tool “get_token_dca_orders” rewrote its description, which is the text the model reads security
- Tool “unfollow_wallet” rewrote its description, which is the text the model reads security
- Tool “save_active_strategy” rewrote its description, which is the text the model reads security
- Tool “cancel_order” rewrote its description, which is the text the model reads security
- Tool “list_strategies” rewrote its description, which is the text the model reads security
- Tool “get_whale_wallet_wins” rewrote its description, which is the text the model reads security
- Tool “discover_wallets_to_follow” rewrote its description, which is the text the model reads security
- Tool “get_whale_wallet_positions” rewrote its description, which is the text the model reads security
- Tool “get_whalewatch_lists” rewrote its description, which is the text the model reads security
- Tool “get_group_leaderboard” rewrote its description, which is the text the model reads security
- Tool “get_degen_leaderboard” rewrote its description, which is the text the model reads security
- Tool “get_whale_wallet_profile” rewrote its description, which is the text the model reads security
- Tool “get_my_portfolio” rewrote its description, which is the text the model reads security
- Tool “get_launchpads” rewrote its description, which is the text the model reads security
- Tool “get_my_watchlists” rewrote its description, which is the text the model reads security
- Tool “get_token_price” rewrote its description, which is the text the model reads security
- Tool “get_my_dca_schedules” rewrote its description, which is the text the model reads security
- Tool “get_kol_top_held” rewrote its description, which is the text the model reads security
- Tool “get_token_trade_brief” rewrote its description, which is the text the model reads security
- Tool “get_token_ohlcv” rewrote its description, which is the text the model reads security
- Tool “save_trading_profile” rewrote its description, which is the text the model reads security
- Tool “get_my_active_strategies” rewrote its description, which is the text the model reads security
- Tool “get_my_orders” rewrote its description, which is the text the model reads security
- Tool “execute_swap” rewrote its description, which is the text the model reads security
- Tool “get_token_chart” rewrote its description, which is the text the model reads security
- Tool “get_whale_wallet_profiles” rewrote its description, which is the text the model reads security
- Tool “get_token_smart_money” rewrote its description, which is the text the model reads security
- Tool “get_screener_leaderboard” rewrote its description, which is the text the model reads security
- Tool “get_token_live_feed” rewrote its description, which is the text the model reads security
- Tool “search_whalewatch_wallets” rewrote its description, which is the text the model reads security
- Tool “get_my_activity” rewrote its description, which is the text the model reads security
- Tool “quick_buy” rewrote its description, which is the text the model reads security
- Tool “get_my_transaction” rewrote its description, which is the text the model reads security
- Tool “get_swap_status” rewrote its description, which is the text the model reads security
- Tool “get_token_key_holders” rewrote its description, which is the text the model reads security
- Tool “quick_sell” rewrote its description, which is the text the model reads security
- Tool “get_screener_event_filters” rewrote its description, which is the text the model reads security
- Tool “get_whale_wallet_holdings” rewrote its description, which is the text the model reads security
- Tool “get_my_feedback” rewrote its description, which is the text the model reads security
- Tool “get_whalewatch_home_feed” rewrote its description, which is the text the model reads security
- Tool “get_smart_money_pulse” rewrote its description, which is the text the model reads security
- Tool “get_token_whale_holders” rewrote its description, which is the text the model reads security
- Tool “get_my_transactions” rewrote its description, which is the text the model reads security
- Tool “get_swap_quote” rewrote its description, which is the text the model reads security
- Tool “create_order” rewrote its description, which is the text the model reads security
- Tool “submit_feedback” rewrote its description, which is the text the model reads security
- Tool “get_my_trading_profile” rewrote its description, which is the text the model reads security
- Tool “get_token_risk_signals” rewrote its description, which is the text the model reads security
- Tool “get_whalewatch_wallet_list_detail” rewrote its description, which is the text the model reads security
- Tool “follow_wallet” rewrote its description, which is the text the model reads security
- Tool “get_my_recommended_wallets” rewrote its description, which is the text the model reads security
- Tool “get_whalewatch_legend” rewrote its description, which is the text the model reads security
- Tool “get_market_movers” rewrote its description, which is the text the model reads security
- Tool “get_my_wallets” rewrote its description, which is the text the model reads security
- Tool “get_whale_wallet_track_record” rewrote its description, which is the text the model reads security
- Tool coverage: 62% → 100% ▲ functional
- Schema quality: 353 → 257 ▲ functional
- Too many changes on this day to record them all, so 37 were dropped functional
- Schema quality: good → excellent functional
- Server version: 1.0.0 → 1.1.0 functional
- “get_token_live_feed” reworded the description of “token_address” cosmetic
- “get_token_trade_brief” reworded the description of “token_address” cosmetic
- “get_token_smart_money” reworded the description of “token_address” cosmetic
- “search_tokens” reworded the description of “query” cosmetic
- “get_token_key_holders” reworded the description of “token_address” cosmetic
- “get_kol_top_held” reworded the description of “token_address” cosmetic
- “get_my_closed_trades” reworded the description of “include_fills” cosmetic
- “get_token_dca_orders” reworded the description of “order_direction” cosmetic
- “get_my_closed_trades” reworded the description of “limit” cosmetic
- “save_trading_profile” reworded the description of “profile” cosmetic
- “get_whale_wallet_pnl_chart” reworded the description of “period” cosmetic
- “get_whalewatch_home_feed” reworded the description of “limit” cosmetic
- “get_token_whale_holders” reworded the description of “token_address” cosmetic
- “get_token_chart” reworded the description of “period” cosmetic
- “get_token_x_profile” reworded the description of “token_address” cosmetic
- “get_token_price” reworded the description of “token_address” cosmetic
- “get_token_holdings” reworded the description of “token_address” cosmetic
- “discover_wallets_to_follow” reworded the description of “wallet_type” cosmetic
- “get_token_holders” reworded the description of “token_address” cosmetic
- “get_my_portfolio” reworded the description of “refresh” cosmetic
- “get_token_chart” reworded the description of “token_address” cosmetic
- “get_token_ohlcv” reworded the description of “token_address” cosmetic
- “get_my_token_balance” reworded the description of “token_address” cosmetic
- “get_token_dca_orders” reworded the description of “token_address” cosmetic
- “get_token_holders” dropped the optional parameter “network” cosmetic
- “get_token_chart” dropped the optional parameter “network” cosmetic
- “get_whale_wallet_profile” dropped the optional parameter “network” cosmetic
- “get_token_dca_orders” dropped the optional parameter “network” cosmetic
- “get_token_smart_money” dropped the optional parameter “network” cosmetic
- “get_token_live_feed” dropped the optional parameter “network” cosmetic
- “get_whalewatch_feed_window” dropped the optional parameter “network” cosmetic
- “get_my_transactions” dropped the optional parameter “network” cosmetic
- “get_token_x_profile” dropped the optional parameter “network” cosmetic
- “discover_wallets_to_follow” dropped the optional parameter “network” cosmetic
- “get_my_token_balance” dropped the optional parameter “network” cosmetic
- “get_group_leaderboard” dropped the optional parameter “network” cosmetic
- “get_whale_wallet_track_record” dropped the optional parameter “network” cosmetic
- “get_token_price” dropped the optional parameter “network” cosmetic
- “get_whalewatch_lists” dropped the optional parameter “network” cosmetic
- “get_whalewatch_kol_feed” dropped the optional parameter “network” cosmetic
- “get_whale_wallet_pnl_chart” dropped the optional parameter “network” cosmetic
- “get_my_position” dropped the optional parameter “network” cosmetic
- “get_whalewatch_wallet_lists” dropped the optional parameter “network” cosmetic
- “get_my_activity” dropped the optional parameter “network” cosmetic
- “get_screener_groups” dropped the optional parameter “network” cosmetic
- “get_swap_quote” dropped the optional parameter “network” cosmetic
- “get_whale_wallet_profiles” dropped the optional parameter “network” cosmetic
- “get_screener_leaderboard” dropped the optional parameter “network” cosmetic
- “get_my_recommended_wallets” dropped the optional parameter “network” cosmetic
- “search_whalewatch_wallets” dropped the optional parameter “network” cosmetic
- “get_token_ohlcv” dropped the optional parameter “network” cosmetic
- “get_launchpads” dropped the optional parameter “network” cosmetic
- “get_top_held” dropped the optional parameter “network” cosmetic
- “get_token_holdings” dropped the optional parameter “network” cosmetic
- “follow_wallet” dropped the optional parameter “network” cosmetic
- “quick_buy” dropped the optional parameter “network” cosmetic
- “get_my_watchlists” dropped the optional parameter “network” cosmetic
- “get_whale_wallet_positions” dropped the optional parameter “network” cosmetic
- “get_screener_event_filters” dropped the optional parameter “network” cosmetic
- “get_my_balances” dropped the optional parameter “network” cosmetic
- “get_my_dca_schedules” dropped the optional parameter “network” cosmetic
- “unfollow_wallet” dropped the optional parameter “network” cosmetic
- “get_whale_wallet_holdings” dropped the optional parameter “network” cosmetic
- “get_token_overview” dropped the optional parameter “network” cosmetic
- “quick_sell” dropped the optional parameter “network” cosmetic
- Tool “get_whalewatch_wallet_lists” changed its title: Find-wallets shell → Wallet lists to browse and follow cosmetic
- Tool “get_my_orders” changed its title: My orders and order history → My open orders (limit, TP, SL, DCA) cosmetic
- Tool “get_my_portfolio” changed its title: My whole portfolio → My portfolio value cosmetic
- Tool “get_whalewatch_home_feed” changed its title: Whale feed highlights → Notable whale trades now cosmetic
- Tool “create_order” changed its title: Place a trigger order → Place limit, stop-loss, take-profit or DCA order (real money) cosmetic
- Tool “get_token_holders” changed its title: All token holders → All top holders cosmetic
- Tool “get_token_live_feed” changed its title: Token trade feed → Live whale trades in a token cosmetic
- Tool “save_active_strategy” changed its title: Record a running strategy → Save, pause or stop a strategy cosmetic
- Tool “get_whale_wallet_profile” changed its title: Whale wallet full profile → Wallet profile and track record cosmetic
- Tool “get_my_recommended_wallets” changed its title: Wallets recommended for me → Wallets similar to my holdings cosmetic
- Tool “get_whalewatch_wallet_list_detail” changed its title: One find-wallets list → Wallets in a curated list cosmetic
- Tool “get_token_ohlcv” changed its title: Token candles → Token OHLCV candles cosmetic
- Tool “quick_sell” changed its title: Quick sell a position → Sell a token to USDC (real money) cosmetic
- Tool “get_screener_leaderboard” changed its title: Token leaderboard → Trending Solana tokens cosmetic
- Tool “get_whalewatch_kol_feed” changed its title: KOL transaction feed → KOL and influencer trades cosmetic
- Tool “get_kol_top_held” changed its title: Tracked KOLs holding a token → KOLs holding a token cosmetic
- Tool “get_my_watchlist_tokens” changed its title: Tokens on my watchlist → My watchlist tokens cosmetic
- Tool “search_whalewatch_wallets” changed its title: Search wallets by name or brand → Search whale and KOL wallets cosmetic
- Tool “get_whale_wallet_track_record” changed its title: Whale wallet track record → Wallet track record cosmetic
- Tool “get_smart_money_pulse” changed its title: Smart-money pulse → Smart money pulse (whale buys and sells) cosmetic
- Tool “quick_buy” changed its title: Quick buy a token → Buy a token with USDC (real money) cosmetic
- Tool “cancel_order” changed its title: Cancel an order → Cancel an order or DCA cosmetic
- Tool “get_degen_leaderboard” changed its title: Degen leaderboard → Trending memecoins and new tokens (high risk) cosmetic
- Tool “get_swap_status” changed its title: Check a swap's outcome → Swap status cosmetic
- Tool “get_my_transaction” changed its title: One of my transactions in full → Transaction detail cosmetic
- Tool “get_swap_quote” changed its title: Price a swap → Quote a swap cosmetic
- Tool “list_strategies” changed its title: Starter strategies → Starter trading strategies cosmetic
- Tool “get_whalewatch_feed” changed its title: Whale transaction feed → Whale trade feed (filterable) cosmetic
- Tool “get_my_closed_positions” changed its title: My closed positions → My closed positions (realized PnL) cosmetic
- Tool “get_strategy” changed its title: One starter strategy, ready to run → Get a strategy's instructions cosmetic
- Tool “get_top_held” changed its title: Top-held tokens leaderboard → Most-held tokens by whales or Moby users cosmetic
- Tool “get_my_closed_trades” changed its title: My closed trades → My trade history for a token cosmetic
- Tool “get_token_risk_signals” changed its title: Token risk signals → Token risk check (honeypot, authorities, snipers) cosmetic
- Tool “get_my_following_feed” changed its title: My following feed → Trades by wallets I follow cosmetic
- Tool “get_token_whale_holders” changed its title: Tracked whales holding a token → Whales holding a token, by list cosmetic
- Tool “get_my_feedback” changed its title: My feedback to Moby → My feedback status cosmetic
- Tool “get_screener_event_filters” changed its title: Market-mover filter values → Market mover filter values cosmetic
- Tool “get_whale_wallet_positions” changed its title: Whale wallet positions with cost basis → Whale wallet positions with PnL cosmetic
- Tool “get_token_x_profile” changed its title: Token's X/Twitter profile → Project X account check cosmetic
- Tool “get_my_position” changed its title: My position in a token → My position and PnL in a token cosmetic
- Tool “get_market_movers” changed its title: Market events → Market movers and price alerts cosmetic
- Tool “get_token_dca_orders” changed its title: Token DCA orders → Public DCA orders on a token cosmetic
- Tool “get_my_guardrails” changed its title: My trading guardrails → My trading limits (guardrails) cosmetic
- Tool “get_my_trading_profile” changed its title: My trading profile → My trading profile (call first) cosmetic
- Tool “discover_wallets_to_follow” changed its title: Suggested wallets to follow → Find wallets to copy trade cosmetic
- Tool “get_launchpads” changed its title: Launchpad activity → New launches by launchpad (pump.fun) cosmetic
- Tool “save_trading_profile” changed its title: Save my trading profile → Save trading profile cosmetic
- Tool “execute_swap” changed its title: Execute a swap → Execute quoted swap (real money) cosmetic
- Tool “get_my_balances” changed its title: My balances → My balances (USDC and tokens) cosmetic
- Tool “get_whale_wallet_profiles” changed its title: Rate many whale wallets at once → Rate many wallets at once cosmetic
- Tool “get_whale_wallet_wins” changed its title: Whale wallet wins → Whale wallet best trades cosmetic
- 2 Nov 26 60
First indexed and scored.
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 4 Nov 2026 · Probed https://mcp.moby.win/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=moby.win | CN=WE1,O=Google Trust Services,C=US | 6 Oct 2026 | 4 Jan 2027 | ECDSA 256 | ECDSA-SHA256 | 5fb5b6124e795d7213c772b8d7e5c22d |
| SANs: moby.win, *.moby.win | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of mcp.moby.win. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| win. | present | 29737 | 8 | Verified |
| moby.win. | 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.moby.win/mcp | Verified | 200 | |
| http (plaintext) | http://mcp.moby.win/mcp | HTTPS enforced | 301 | https://mcp.moby.win/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 →
cancel_order Cancel an order or DCA ~155
Cancel one open order or a whole DCA schedule. Moves no funds; not reversible. Pass EXACTLY ONE of `order_id` (from `get_my_orders`) or `schedule_id` (stops every remaining DCA slice; filled slices stay filled). A cancelled stop-loss stops protecting the position, and re-placing it gets whatever price is available then. Confirm which order when there are several. Cancels are never blocked by the user's order-type switches.
| Name | Type | Req | Description |
|---|---|---|---|
| order_id | – | – | `order_id` from `get_my_orders`. Omit when cancelling a DCA by `schedule_id`. |
| schedule_id | – | – | `schedule_id` from `get_my_dca_schedules` — cancels that whole DCA. |
Structured output declared, but exposes no named fields.
No examples provided.
create_order Place limit, stop-loss, take-profit or DCA order (real money) ~1,153
Place a limit buy or sell, take-profit, stop-loss, bracket (SL + TP), trigger buy or DCA on a Solana token. Real money when it fires. Buy orders are checked against app-set limits. ⚠️ THIS SPENDS REAL MONEY from the user's agent wallet and cannot be undone. Confirm the exact amount and token with the user and get an explicit yes BEFORE calling it. It can fire while the user is not looking: read back the type, token, amount and every price, and get an explicit yes. Trade limits: SELL orders (TP, SL, limit or DCA sells into USDC) never count toward or get blocked by `maxTradeUsd` / `dailyVolumeUsd`. A BUY order is checked against both and reserves its USD value in the daily volume when placed; the unfilled part comes back if it is cancelled, expires or fails. `order_type` selects what to place, and which price arguments are required: - `limit_buy` — buy when the price falls to `limit_price`. Needs `limit_price`. `amount` is the amount of the FUNDING asset to spend. - `limit_sell` — sell when the price rises to `limit_price`. Needs `limit_price`. `amount` is the amount of the held token to sell. - `tp_only` — take profit: sell when the price rises to `take_profit_price`. Needs `take_profit_price`. - `sl_only` — stop loss: sell when the price falls to `stop_loss_price`. Needs `stop_loss_price`. - `trigger_buy` — buy when the price DROPS to the trigger. The trigger goes in `stop_loss_price`; no other price. `amount` is the FUNDING asset to spend. - `sl_and_tp` — a BRACKET: stop loss AND take profit on one position in ONE call. Needs `stop_loss_price` and `take_profit_price`; `amount` is the held token, and both legs cover it (whichever fires first sells it). It places TWO orders, a stop loss and a take profit: the result says `order_type: "sl_and_tp"` and lists them in `legs` (`order_id` + `order_type` each; also `stop_loss_order_id` / `take_profit_order_id`). When one fills, Moby cancels the other. If ONE leg could not be placed, `failed_leg` says which and `failed_l…
| Name | Type | Req | Description |
|---|---|---|---|
| amount | number | yes | How much to SPEND, in whole token units: the funding asset on a buy, the held token on a sell. |
| interval_seconds | – | – | Seconds between DCA slices. Required for `dca_buy` and `dca_sell`. |
| limit_price | – | – | USD limit price. Required for `limit_buy` and `limit_sell`. |
| order_count | – | – | How many DCA slices to split the amount into. Required for `dca_buy` and `dca_sell`. |
| order_type | string | yes | Which kind of order to place. See the tool description for what each one needs. |
| rationale | – | – | Optional. Your 2–4 line thesis: why this coin, why now, who's in it, what breaks it. Stored with the trade and shown to the user; ≤500 chars. |
| stop_loss_price | – | – | USD price at which to stop out. Required for `sl_only` and `sl_and_tp`; for `trigger_buy` it is the price the buy fires at when the price drops to it. |
| take_profit_price | – | – | USD price at which to take profit. Required for `tp_only` and `sl_and_tp`. |
| token_address | string | yes | Contract address of the token the order is about. |
Structured output declared, but exposes no named fields.
No examples provided.
discover_wallets_to_follow Find wallets to copy trade ~162
Suggested profitable public Solana wallets to follow or copy trade, or search one by name or address. Each row has `is_following`. With `query`: search by name, brand or an exact pasted address (followed wallets included). Without: a ranked pool EXCLUDING wallets already followed (`get_my_followed_wallets`). Following shows a wallet's trades in the user's feed; it never copies them automatically.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Wallets to return, 1-50. Keep it small. |
| query | – | – | A KOL name, whale-list brand, or exact pasted address. Omit to browse. |
| wallet_type | string | – | kol = influencers, trader = proven traders, whale = large wallets, all (default). |
Structured output declared, but exposes no named fields.
No examples provided.
execute_swap Execute quoted swap (real money) ~289
Execute a quoted swap from the user's agent wallet. Real money. Only after the user approves the quote. Buys are checked against the app-set limits. ⚠️ THIS SPENDS REAL MONEY from the user's agent wallet and cannot be undone. Confirm the exact amount and token with the user and get an explicit yes BEFORE calling it. Only pass a `quote_id` from `get_swap_quote` in this conversation, after the user saw its numbers and said yes. Never call it to 'check' anything. An expired quote needs a fresh quote, never the old id. When `fill_pending` is true, call `get_swap_status(request_id=quote_id)`. AMOUNTS: quote the `_ui` fields (whole tokens); un-suffixed `output_amount` / `minimum_output_amount` / `filled_*_amount` are the smallest unit. Null = unknown, never zero: `fill_pending: true` = submitted, fill not booked yet; read it from `get_swap_status`. A full sell cancels every resting TP/SL on the token, all lots (`cancelled_order_ids`; `cancel_failed_order_ids` / `cancel_pending_order_ids` + `cancel_note` are retried); a partial sell or a buy leaves them (null).
| Name | Type | Req | Description |
|---|---|---|---|
| quote_id | string | yes | `quote_id` from a recent `get_swap_quote` response. |
Structured output declared, but exposes no named fields.
No examples provided.
follow_wallet Follow a wallet ~119
Follow a public Solana wallet so its trades appear in the user's following feed. Moves no money and does not copy trades automatically. Idempotent: following an already-followed wallet is a no-op and does not count against `max_follows` (see `get_my_followed_wallets`). Fails when the user is at the cap. Needs no agent wallet.
| Name | Type | Req | Description |
|---|---|---|---|
| custom_name | – | – | Optional nickname for this wallet, max 50 characters. |
| wallet_address | string | yes | Public wallet ref from a Find-wallets or WhaleWatch tool. |
Structured output declared, but exposes no named fields.
No examples provided.
get_degen_leaderboard Trending memecoins and new tokens (high risk) ~265
Newer, smaller, high-risk Solana memecoins ranked by activity. Say plainly they can lose most of their value fast. Riskier than `get_screener_leaderboard`, and many are short-lived. Ranked best-first; page 1 is the top. `whale_windows` (any of h1/h4/h8/h24) adds a per-row `whale` block per window: whale_count (distinct tracked wallets that bought OR sold — buyers plus sellers, not buyers alone), whale_buyers_count (distinct buyers only), whale_buys_count, whale_sells_count and whale_net_flow_usd. The row's `whale_count_h24` is the same buyers-plus-sellers count. Null figures mean unknown. `safety_tier`: grey is NOT a red flag; red = caution, and Moby refuses agent buys on red.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Tokens per page, 1-100. Keep it small. |
| page | integer | – | 1-based page number. Page 1 is the top. |
| whale_windows | – | – | Windows for the optional per-row `whale` block, e.g. ["h1", "h4"]. Omit for the default row. |
Structured output declared, but exposes no named fields.
No examples provided.
get_group_leaderboard Tokens in a category (majors, tokenized stocks, themes) ~368
Ranked tokens in one category: majors (`home_majors`), tokenized stocks such as NVDAx, SPYx, GLDx (`home_stocks`), Pulse (`home_pulse`) or a theme from get_screener_groups. Source of truth for major and tokenized-stock mint addresses. `group_id` comes from `get_screener_groups` (a group's `group_id` or a `home_tabs` `tab_id`); never invent one. Take `token_address` from the row and never keep your own mint list. Ranked best-first; page 1 is the top. `whale_windows` (any of h1/h4/h8/h24) adds a per-row `whale` block per window: whale_count (distinct tracked wallets that bought OR sold — buyers plus sellers, not buyers alone), whale_buyers_count (distinct buyers only), whale_buys_count, whale_sells_count and whale_net_flow_usd. The row's `whale_count_h24` is the same buyers-plus-sellers count. Null figures mean unknown. `safety_tier`: grey is NOT a red flag; red = caution, and Moby refuses agent buys on red.
| Name | Type | Req | Description |
|---|---|---|---|
| group_id | string | yes | home_majors, home_stocks (tokenized stocks), home_pulse, or a group_id from get_screener_groups |
| limit | integer | – | Tokens per page, 1-100. Keep it small. |
| page | integer | – | 1-based page number. Page 1 is the top. |
| whale_windows | – | – | Windows for the optional per-row `whale` block, e.g. ["h1", "h4"]. Omit for the default row. |
Structured output declared, but exposes no named fields.
No examples provided.
get_kol_top_held KOLs holding a token ~87
Named crypto influencers (KOLs) holding one Solana token. The KOL-only slice of `get_token_key_holders`. Use for 'which influencers hold X'; their trades are in `get_whalewatch_kol_feed`.
| Name | Type | Req | Description |
|---|---|---|---|
| token_address | string | yes | Solana token mint address (base58). Get it from search_tokens or a leaderboard row. |
Structured output declared, but exposes no named fields.
No examples provided.
get_launchpads New launches by launchpad (pump.fun) ~63
Recently launched Solana tokens grouped by launchpad such as pump.fun. Highest-risk category. Use for 'what launched recently' and 'new pump.fun coins'; pair with `get_smart_money_pulse` (`fresh_launch`) to see which launches whales are buying.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
get_market_movers Market movers and price alerts ~333
What just happened on Solana: sudden price and volume moves, newest first, with smart-money flow. Use for "what pumped in the last hour", "what changed". Use it for what CHANGED, not what ranks highest now. Poll with `after_timestamp`; page back with `before_timestamp`; valid filter values come from `get_screener_event_filters`. Each event has `token_symbol` / `token_address`, `liquidity_usd` and h1/h4 smart-money flow (`smart_money_net_flow_usd`, `smart_money_buys_count`, `smart_money_sells_count`) AS OF NOW, while `market_cap_usd` and `price_usd` are AT THE TIME OF THE EVENT.
| Name | Type | Req | Description |
|---|---|---|---|
| after_timestamp | – | – | Only events after this instant. ISO 8601 UTC, e.g. `2026-08-11T14:30:00Z`. |
| before_timestamp | – | – | Only events before this instant. ISO 8601 UTC, e.g. `2026-08-11T14:30:00Z`. |
| event_types | – | – | Restrict to these event types. Omit for all types. |
| limit | integer | – | Events per page, 1-100. Keep it small. |
| market_cap_group | – | – | Market-cap band. `all` or omitted disables the filter. |
| page | integer | – | 1-based page number. |
| period | – | – | Time window. `all` or omitted disables the filter. |
| token_address | – | – | Restrict to one token's events. Omit for the whole market. |
Structured output declared, but exposes no named fields.
No examples provided.
get_my_active_strategies My running strategies ~182
Strategies the agent is running for this user. Check before starting one. Saved on Moby so every client and session sees them: `name`, `strategy_id` (the starter card, null = custom), `settings`, `schedule`, `status` (active / paused; pass `include_stopped=true` for stopped ones too), `started_at`, `last_run_at`. Call it at the start of every session to learn what is already running, and before starting a strategy, so two sessions never run the same one twice. Resume what is `active` on its `schedule`; leave `paused` ones alone unless the user asks. `app_links` are Moby app deep links to hand to the user; they open the Moby app on their phone.
| Name | Type | Req | Description |
|---|---|---|---|
| include_stopped | boolean | – | True also returns stopped strategies. |
Structured output declared, but exposes no named fields.
No examples provided.
get_my_activity My activity ~248
The user's recent trades, deposits and transfers timeline. Newest first and CURSOR-paginated: pass the response's `cursor` back; there are no page numbers. Choosing between the two history feeds: `get_my_activity` is the merged, human-readable timeline the app shows, cursor-paginated. `get_my_transactions` is the raw transaction list, page-numbered and filterable by transaction type. Prefer activity for 'what have I been doing'; use transactions when you need a specific type such as deposits.
| Name | Type | Req | Description |
|---|---|---|---|
| category | – | – | Restrict to one activity category. Omit (or `all`) for everything. ⚠️ `buys`, `sells` and `closed_trades` REQUIRE `token_address` — without one the call is rejected, deliberately: 'bought' means 'thi… |
| cursor | – | – | Opaque cursor from the previous response. Omit for the first page. |
| limit | integer | – | Items per page. Keep it small. |
| token_address | – | – | Restrict to activity involving one token. Omit for all. |
Structured output declared, but exposes no named fields.
No examples provided.
get_my_balances My balances (USDC and tokens) ~327
Per-token balances in the Solana agent wallet, with available USDC to size a buy. USDC is your cash (`is_cash: true`). SOL and every other token are positions; sell with quick_sell to raise USDC. `tokens` is EVERYTHING held, SOL (`is_native`) and USDC (`is_quote`) included; empty means the wallet is empty. `native_token` / `usd_token` repeat those two as fixed slots: never add them to the total. Quantities are read on the CHAIN (`balance_source: "chain"`; `"ledger"` = a stale snapshot, say so; `ledger_disagrees: true` = the snapshot was wrong). `swap_user_tokens` is the ledger: cost and PnL, not amounts held. `get_my_closed_positions` is exited positions ONLY; what the user holds now is `get_my_balances`. Never say they hold nothing from an empty closed list. `available_usdc` is spendable now; `reserved_usdc` is held by resting DCAs and buy orders (`reserved_breakdown`) until `cancel_order`; not the guardrails' `daily_volume_reserved_usd`. One wallet: the total is `get_my_portfolio`. `app_links.deposit` adds funds. `interview_due: true` = onboarding was skipped: go back to `get_my_trading_profile` and the 5-question interview (onboarding FIRST) before acting on these numbers.
| Name | Type | Req | Description |
|---|---|---|---|
| refresh | boolean | – | true only right after an outside deposit that is not showing; slow. |
Structured output declared, but exposes no named fields.
No examples provided.
get_my_closed_positions My closed positions (realized PnL) ~193
Positions the user fully exited, with realized PnL. `get_my_closed_positions` is exited positions ONLY; what the user holds now is `get_my_balances`. Never say they hold nothing from an empty closed list. An empty result says nothing about what they hold today. Choosing between the two history tools: `get_my_closed_positions` is the POSITION-level rollup — one entry per token the user entered and fully exited, with total realised PnL. `get_my_closed_trades` is the individual TRADES underneath, one entry per fill. Use positions for 'how did I do on X', trades for 'show me every trade'.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Positions per page, 1-100. Keep it small. |
| page | integer | – | 1-based page number. |
| token_address | – | – | Restrict to closed positions in one token. Omit for all. |
Structured output declared, but exposes no named fields.
No examples provided.
get_my_closed_trades My trade history for a token ~276
Each closed buy and sell cycle for one token, with fills and tx hashes. Newest first; each cycle has `fills` (timestamp, side, price_usd, token_amount, usd_amount, tx_hash; `include_fills=false` skips them) and your `rationale`. ONE TOKEN AT A TIME: `token_address` is required; for the whole history use `get_my_closed_positions`. Choosing between the two history tools: `get_my_closed_positions` is the POSITION-level rollup — one entry per token the user entered and fully exited, with total realised PnL. `get_my_closed_trades` is the individual TRADES underneath, one entry per fill. Use positions for 'how did I do on X', trades for 'show me every trade'. `get_my_closed_positions` is exited positions ONLY; what the user holds now is `get_my_balances`. Never say they hold nothing from an empty closed list.
| Name | Type | Req | Description |
|---|---|---|---|
| include_fills | boolean | – | Attach every buy/sell leg (`fills`, with tx hashes). Default true. |
| limit | integer | – | Closed cycles per page, 1-100. |
| page | integer | – | 1-based page number. |
| token_address | string | yes | Contract address of the ONE token to show trades for. Required. |
Structured output declared, but exposes no named fields.
No examples provided.
get_my_dca_schedules My DCA schedules ~185
The user's recurring DCA buys and sells with progress. The same rows `get_my_orders` returns as `dca_schedules`. `get_my_orders` answers 'what is running' in ONE call: `orders` (limit, TP, SL) plus `dca_schedules` (one row per DCA; slices never appear in `orders`). `get_my_dca_schedules` is the DCA rows alone. A null `dca_schedules` means the DCA read failed (`dca_schedules_error`): call `get_my_dca_schedules` before saying there is none. `include_terminal` adds finished and cancelled ones. Pass a `schedule_id` to `cancel_order` to stop the whole DCA.
| Name | Type | Req | Description |
|---|---|---|---|
| include_terminal | boolean | – | True also returns completed and cancelled schedules. Default: live only. |
Structured output declared, but exposes no named fields.
No examples provided.
get_my_feedback My feedback status ~92
Status and team replies for earlier feedback. Mention a shipped one to the user when relevant. Each has `id`, `kind`, `title`, `status` (new / reviewed / planned / shipped / wont_fix) and the team's `reply` when there is one, newest first.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | How many to return (1-50). |
| status | – | – | Only submissions in this status. |
Structured output declared, but exposes no named fields.
No examples provided.
get_my_followed_wallets My followed wallets ~54
Wallets the user follows, with the follow cap. `max_follows` lets you say 'N of 50' in one call; rows carry list associations and any nickname set with `follow_wallet`.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
get_my_following_feed Trades by wallets I follow ~156
Recent trades by the wallets the user follows. Newest first. ⚠️ EMPTY means the user follows nobody or nobody they follow traded lately, NOT 'no whale activity'; the market-wide feed is `get_whalewatch_feed`. Same filters as that tool, minus lists.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Trades per page, 1-100. Keep it small. |
| page | integer | – | 1-based page number. |
| token_address | – | – | Restrict to trades in one token. Omit for every token. |
| transaction_types | – | – | `buy` and/or `sell`. Omit for both. |
| wallet_addresses | – | – | Restrict to specific FOLLOWED wallets. Omit for all followed wallets. |
Structured output declared, but exposes no named fields.
No examples provided.
get_my_guardrails My trading limits (guardrails) ~315
The user's app-set limits on max per trade, daily buy volume and market-cap range, allowed order types and pause state. Read-only. Use for "what can my agent spend", "what are my limits". READ-ONLY: you cannot change them; only the user can, in the app. Read them before planning instead of learning by refusal. - `maxTradeUsd` / `dailyVolumeUsd`: per-trade and rolling-24h limits (null = uncapped). `maxTradeUsd` caps BUYS only. Sells into USDC (swaps and TP/SL/limit sells) never count or get blocked; other swaps count when placed or filled. A resting buy order reserves its value (`dailyVolumeReservedUsd`) until it fills or is cancelled. Room left = `dailyVolumeUsd - dailyVolumeUsedUsd`. - `defaults_applied`: Moby's defaults, not the user's; say so. - `minCapUsd` / `maxCapUsd`: market-cap range for BUYS (null = no bound). Red safety tier buys are always refused. - `orderTypes`: what you may place (`market` = swaps, `quick_buy`, `quick_sell`); cancels are never blocked. `paused: true` = every trade is refused. - `platform_limits`: Moby's rate limits for this key (per minute and daily; 0 = off). Read once per session and pace polling to it. `app_links`: settings and deposit links.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
get_my_orders My open orders (limit, TP, SL, DCA) ~519
The user's open and past limit, take-profit, stop-loss orders and DCA schedules. Live orders by default: check before placing one (no duplicates) and to find an `order_id` for `cancel_order`. History: `status="terminal"` (with `since` / `until`), paged by `limit` / `page`. Filled rows carry `filled_price`, `fill_tx_hash`, `slippage_vs_trigger_pct`; cancelled rows `cancel_reason` (`sibling_filled` = the other exit sold the position). `input_*` is what the user SPENDS and `token_*` the subject token: name an order by `token_symbol`. A row with `data_warning` contradicts itself: call its state unclear. `origin: agent` = yours; `agent_auto_exit` = an older Moby-attached exit, still live. DCA rows: `schedule_id` (what `cancel_order` takes), progress `filled_order_count` / `order_count`. `get_my_orders` answers 'what is running' in ONE call: `orders` (limit, TP, SL) plus `dca_schedules` (one row per DCA; slices never appear in `orders`). `get_my_dca_schedules` is the DCA rows alone. A null `dca_schedules` means the DCA read failed (`dca_schedules_error`): call `get_my_dca_schedules` before saying there is none.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | History only: rows per page, newest first (max 200). |
| page | integer | – | History only: 1-based page number. |
| since | – | – | ISO 8601 time, e.g. `2026-10-23T00:00:00Z`. Only orders whose last state change (fill, else cancel/update) is at or after this. |
| status | – | – | Omit for LIVE orders only. `terminal` = every finished order (filled, cancelled, expired, failed) — the history; `all` = live and finished; or one status / a list of statuses. A resting, unfilled ord… |
| token_address | – | – | Contract address: only orders on this token, whether it is the token being sold (TP/SL) or bought (limit buy). Omit for every token. |
| until | – | – | ISO 8601 upper bound, same clock as `since`. |
Structured output declared, but exposes no named fields.
No examples provided.
get_my_portfolio My portfolio value ~196
Total value and holdings of the user's agent wallet. Use for "how am I doing". Counts the AGENT's wallets only (`scope: agent_wallets`): Copy Trading and manual wallets are left out (`excluded_wallets`); never add them back. Quote `summary.hero_usd`, the agent's equity; `summary.wallets` breaks it down (do not re-add it), `holdings.items` is every position, `trading_balances.items` the funding balances. USDC is your cash; SOL and every other token are positions. Per-token detail and the affordability check: `get_my_balances`. `interview_due: true` = onboarding was skipped: go back to `get_my_trading_profile` and the 5-question interview (onboarding FIRST) before acting on these numbers.
| Name | Type | Req | Description |
|---|---|---|---|
| refresh | boolean | – | true only right after an outside deposit that is not showing; slow. |
Structured output declared, but exposes no named fields.
No examples provided.
get_my_position My position and PnL in a token ~324
Holding, cost basis and unrealized PnL for one token. Use for "am I up on X". Quantities come from the CHAIN; cost basis and PnL from Moby's swap ledger, which only sees Moby swaps. Never size a sell from a ledger quantity. - `balance_token_amount` / `balance_usd`: held ON CHAIN now ('how much do I have'). - `cost_basis_usd` / `current_pnl_usd` / `current_pnl_pct`: UNREALISED, over `basis_known_token_amount` only; when that is below the balance, the rest has no known cost: say so. - `invested_usd` / `sold_usd`: LIFETIME totals; `balance_usd + sold_usd - invested_usd` will NOT equal `current_pnl_usd`, and both are right. - `realized_total_usd`: realised PnL including partial sells (`closed_trades_count` can be 0). - `ledger_present: false`: no swap history, so every money field is unknown. A null profit field is UNKNOWN, never zero. `take_profit_orders_count` / `stop_loss_set` include your `create_order` legs. `closed_cycles`: the last 5 closed cycles (fills: get_my_closed_trades(token_address)). `rationale`: your thesis on the open cycle.
| Name | Type | Req | Description |
|---|---|---|---|
| token_address | string | yes | Solana token mint address (base58). Get it from search_tokens or a leaderboard row. |
Structured output declared, but exposes no named fields.
No examples provided.
get_my_recommended_wallets Wallets similar to my holdings ~67
Tracked wallets that hold the same tokens as the user. 'For you', in the same shape as `get_whalewatch_wallet_list_detail`. Holding nothing Moby tracks gives `total: 0, rows: []`, a real answer, not an error.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
get_my_token_balance My balance of one token ~202
How much of one token the user holds now. Use to size a sell. `balance_token_amount` IS THE ANSWER: the on-chain balance, same as `get_my_balances`; 0 means they do not hold it. `ledger_balance_token_amount` and `cost_basis_usd` are the ledger's, for cost context only: check `ledger_present` first (false = both unknown, and `ledger_disagrees: false` then means nothing to compare). A disagreeing ledger is normal after transfers; never average the two or sell the larger. Quantities come from the CHAIN; cost basis and PnL from Moby's swap ledger, which only sees Moby swaps. Never size a sell from a ledger quantity. Use `get_my_position` for unrealised PnL.
| Name | Type | Req | Description |
|---|---|---|---|
| token_address | string | yes | Solana token mint address (base58). Get it from search_tokens or a leaderboard row. |
Structured output declared, but exposes no named fields.
No examples provided.
get_my_trading_profile My trading profile (call first) ~305
The user's saved trading preferences and onboarding state. Call first on every connect. 🔴 BEFORE ANY OTHER TOOL. - `interview_due: true`: show `onboarding_brief` verbatim, then run the skippable 5-question interview in `interview_questions`, then its closing step (TWO-line playback, `save_trading_profile`, strategy offer). The scan schedule is kept on the agent's side, never saved to Moby: keep it in your own memory or as a recurring task in your own app, and recreate it at the start of each session. - `access_state` / `access_expires_at`: the user's AI Trading invite. `unlocked` = a code was redeemed but the agent wallet isn't funded; access is LOST at `access_expires_at` unless USDC is deposited. Warn the user once, with the deposit address. `active` = kept for good; null = unknown. - `recommended_strategies`: the live starter-strategy ids matching the user's assets; offer one or two of 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 app cap; Moby enforces the cap (`get_my_guardrails`).
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
get_my_transaction Transaction detail ~58
One transaction by id. Get the id from `get_my_transactions` first; this tool does not search or list. The row carries the full detail of that one transaction.
| Name | Type | Req | Description |
|---|---|---|---|
| transaction_id | string | yes | Transaction id from get_my_transactions. |
Structured output declared, but exposes no named fields.
No examples provided.
get_my_transactions My transactions ~238
Raw transaction list, filterable by type (swaps, deposits, withdrawals, transfers, order fills). Newest first, page-numbered. `bridge` rows are inbound deposits only; there is no bridge tool. Choosing between the two history feeds: `get_my_activity` is the merged, human-readable timeline the app shows, cursor-paginated. `get_my_transactions` is the raw transaction list, page-numbered and filterable by transaction type. Prefer activity for 'what have I been doing'; use transactions when you need a specific type such as deposits.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Transactions per page, 1-100. Keep it small. |
| page | integer | – | 1-based page number. |
| token_address | – | – | Restrict to transactions involving one token. Omit for all. |
| transaction_type | – | – | Restrict to one movement type. Omit for every type. `trigger_order_placed` and `trigger_order_cancelled` are an order's LIFECYCLE rather than money moving — the description used to list only six of t… |
Structured output declared, but exposes no named fields.
No examples provided.
get_my_wallets My agent wallet address ~64
The user's Solana agent wallet address, for deposits. AI Trading is Solana only for now: tell the user to deposit to the Solana one. The user's regular app wallets are NOT here; every `get_my_*` tool reads one of these agent wallets.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
get_my_watchlist_tokens My watchlist tokens ~173
Tokens on a watchlist with price, 24h change, market cap and safety tier. One call instead of a `get_token_overview` per token: `price_usd`, `price_change_24hr` (no 1h figure), `market_cap`, `liquidity_usd`, `whale_count`, `key_holder_count` and `token` (address, symbol, `safety_tier`). `safety_tier`: grey is NOT a red flag; red = caution, and Moby refuses agent buys on red. Omit `watchlist_id` for the default list, or pass an id from `get_my_watchlists`. Read-only.
| Name | Type | Req | Description |
|---|---|---|---|
| watchlist_id | – | – | Watchlist id from get_my_watchlists. Omit for the default list. |
Structured output declared, but exposes no named fields.
No examples provided.
get_my_watchlists My watchlists ~76
The user's watchlist names and ids. Pass an id to `get_my_watchlist_tokens` for a list's contents. Start here for 'what's on my watchlist'. A watchlist is tokens the user chose to follow, NOT what they hold (`get_my_balances`). Read-only: no adding or removing tokens.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
get_screener_event_filters Market mover filter values ~54
Valid event_types, period and market_cap_group values for get_market_movers. Call it BEFORE filtering `get_market_movers`: an invented filter value returns an empty list that reads as 'no events found'.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
get_screener_groups Token categories ~82
List Moby's token categories and themes on Solana, and their group_id values. Pass a `group_id` to `get_group_leaderboard`. `home_tabs` lists the app's Home boards by `tab_id` (`home_majors`, `home_stocks`, `home_pulse`), also valid `group_id`s.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
get_screener_leaderboard Trending Solana tokens ~280
What's trending and moving on Solana right now, ranked by Moby's 24h activity score with whale counts and safety tier. Use for "what's hot", "top gainers", "trending coins". Page 1 is the top of the board; for 'what is hot right now' the default page is the whole answer. `whale_windows` (any of h1/h4/h8/h24) adds a per-row `whale` block per window: whale_count (distinct tracked wallets that bought OR sold — buyers plus sellers, not buyers alone), whale_buyers_count (distinct buyers only), whale_buys_count, whale_sells_count and whale_net_flow_usd. The row's `whale_count_h24` is the same buyers-plus-sellers count. Null figures mean unknown. `safety_tier`: grey is NOT a red flag; red = caution, and Moby refuses agent buys on red.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Tokens per page, 1-100. Keep it small. |
| page | integer | – | 1-based page number. Page 1 is the top. |
| whale_windows | – | – | Windows for the optional per-row `whale` block, e.g. ["h1", "h4"]. Omit for the default row. |
Structured output declared, but exposes no named fields.
No examples provided.
get_smart_money_pulse Smart money pulse (whale buys and sells) ~225
Market-wide whale, KOL and smart-money buying and selling on Solana for 1h, 4h, 24h, with top net-bought and net-sold tokens. Use first for "what are whales buying today". Tells 'whales are dumping everything' from 'this one coin is weak' before you read a single token. Each window (`h1`, `h4`, `h24`) has `totals`, `by_wallet_type` (whale / kol / smart_money, overlapping), `fresh_launch` (`under_24h` / `under_1h`) and the top 5 `top_net_buy` / `top_net_sell` tokens. Every slice has trades, tokens, buys, sells, buy/sell volume, net_flow_usd, distinct buyers and sellers, dump_sells (sold half or more), dump_wallets and first_buys. Swaps under `min_trade_usd` are left out. Refreshed every ~2 minutes (`data_as_of`).
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
get_strategy Get a strategy's instructions ~199
The full prompt and editable settings for one starter strategy. `prompt` is ready to run: the same text the app copies. Run that prompt as the user's standing instructions for this session. Before starting: confirm the editable numbers (`chips`: amounts, exits, schedule) with the user, and check `get_my_active_strategies` so you never run one twice. Once the user says go, record it with `save_active_strategy` (pass `strategy_id`). `ask_before_every_trade=true` adds the 'ask me before every trade' line, on cards that support it (`ask_line_supported`). `app_links` are Moby app deep links to hand to the user; they open the Moby app on their phone.
| Name | Type | Req | Description |
|---|---|---|---|
| ask_before_every_trade | boolean | – | True adds the 'ask me before every trade' line to the prompt. |
| strategy_id | string | yes | A card `id` from list_strategies. |
Structured output declared, but exposes no named fields.
No examples provided.
get_swap_quote Quote a swap ~211
Price a Solana swap before doing it: output, price impact, fees, slippage, and a quote_id. Moves nothing. Quote `output_amount_ui` and `minimum_output_amount_ui` (the least the route delivers) to the user; `output_amount` is the smallest unit. `pricing_basis` says what produced it. This only prices the trade. It does not move funds and nothing is submitted on-chain. `execute_swap` takes the `quote_id`. Quotes go stale in seconds: show the numbers, get an answer, re-quote if the user hesitates. If `execute_swap` returns `pending` or `fill_pending`, only `get_swap_status` can confirm it.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | number | yes | How much of `input_token` to spend, in whole token units (not the smallest unit). |
| input_token | string | yes | Contract address of the token being SPENT. |
| output_token | string | yes | Contract address of the token being RECEIVED. |
Structured output declared, but exposes no named fields.
No examples provided.
get_swap_status Swap status ~293
Status and fill of a swap by quote_id or signature. Safe to repeat. Moves nothing. Pass `request_id` (the `quote_id`, or a failure message's Reference ID) OR `transaction_signature`. `status`: `not_executed` (quoted, never executed, nothing traded; executable until `quote_expires_at`), `expired` (never executed, too old), `pending`, `confirmed`, `failed`. Once booked, `filled_input_amount_ui` / `filled_output_amount_ui` are what was spent and received, `effective_slippage_bps` the gap to the quote. `failed` carries `failure_details` (`stage`, `error_class`: `slippage_exceeded`, `insufficient_funds` / `insufficient_lamports`, `program_error`, `unknown_revert`; `dropped_tx_blockhash_expired` = never landed). A `confirmed` sell lists `resting_order_ids`. 🔴 Call this whenever `execute_swap` or `quick_buy` returned a `next_step`: until it says `confirmed`, never tell the user tokens arrived, and never re-execute to find out (that trades twice).
| Name | Type | Req | Description |
|---|---|---|---|
| request_id | – | – | The `quote_id` of the swap you executed. Give this OR `transaction_signature`. |
| transaction_signature | – | – | The `transaction_signature` the swap returned. Give this OR `request_id`. |
Structured output declared, but exposes no named fields.
No examples provided.
get_token_chart Token price chart ~178
Price history line for one Solana token over a `period` (5m to 365d). Use to describe a trend. Prices are USD; `period` defaults to `1d`. Choosing between the two price tools: `get_token_chart` returns a ready-to-read price line for describing a trend; `get_token_ohlcv` returns raw open/high/low/close/volume candles for calculation and technical analysis. Prefer the chart unless you need per-candle numbers.
| Name | Type | Req | Description |
|---|---|---|---|
| period | string | – | Window of history: 5m, 15m, 1h, 1d (default), 7d, 30d, 90d or 365d. |
| token_address | string | yes | Solana token mint address (base58). Get it from search_tokens or a leaderboard row. |
Structured output declared, but exposes no named fields.
No examples provided.
get_token_dca_orders Public DCA orders on a token ~126
Other people's open on-chain DCA orders on one Solana token (who is accumulating). Not the user's DCAs. ⚠️ The user's own DCAs are `get_my_dca_schedules`; the two datasets are unrelated.
| Name | Type | Req | Description |
|---|---|---|---|
| order_by | string | – | Sort field. Default amount. |
| order_direction | string | – | asc or desc (default). |
| size | integer | – | Max rows to scan, 1-500. |
| token_address | string | yes | Solana token mint address (base58). Get it from search_tokens or a leaderboard row. |
Structured output declared, but exposes no named fields.
No examples provided.
get_token_holders All top holders ~120
Every top holder of one Solana token by size, not only tracked wallets. Use for supply concentration ("does one wallet own 30%"). `get_token_key_holders` is the tracked whale and KOL subset of this population, with win rates.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Holders per page, 1-100. Keep it small. |
| page | integer | – | 1-based page number. |
| token_address | string | yes | Solana token mint address (base58). Get it from search_tokens or a leaderboard row. |
Structured output declared, but exposes no named fields.
No examples provided.
get_token_holdings Holder distribution summary ~79
Bucketed holder distribution for one Solana token (how supply is spread). For the itemised top holders use `get_token_holders`; for tracked whales and KOLs use `get_token_key_holders`.
| Name | Type | Req | Description |
|---|---|---|---|
| token_address | string | yes | Solana token mint address (base58). Get it from search_tokens or a leaderboard row. |
Structured output declared, but exposes no named fields.
No examples provided.
get_token_key_holders Top holders with win rates ~536
Tracked whale, KOL and trader holders of one Solana token, with position size, entry, 30-day win rate and PnL, and concentration. Use for "who holds X", "are the holders good wallets". ⚠️ OTHER people's wallets, not the user's position (that is `get_my_position`). State high concentration as a risk. `whale_count` / `trader_count` / `kol_count` (and `tag_count`) are true totals; rows and counts include positions >= `min_position_usd` (default $100). Rows carry 30-day `win_rate` / `realized_pnl_30d_usd` and `days_since_prev_trade`. `position` = the wallet's tracked buys / sells of THIS token: `bought_usd`, `sold_usd`, `realized_pnl_usd`, `buys_count`, `sells_count`, `pct_of_peak_held`, `first_buy_at`, `entry_known`; sells can exceed buys. With `entry_known` false, P/L and `pct_of_peak_held` are null (unknown, not 0). An untagged KOL's `platform` is `unknown` with `platform_reason` `not_tagged`; `distinct_kol_platforms` has `unknown` excluded. Wallet quality: use get_whale_wallet_track_record(wallet_address) for a wallet's win rate and PnL.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Holders per page, 1-100. Keep it small. |
| min_position_usd | – | – | Minimum live USD position to list or count a holder (whales, traders and KOLs). Omit for the default $100; raise it (e.g. 500) for conviction-only counts. Ignored when `tag` is set. |
| page | integer | – | 1-based page number. |
| sort | string | – | Row order: value (default, largest position first) / newest (most recent first tracked buy first) / oldest (earliest first buy first) / recent_trade (latest tracked buy or sell first). |
| tag | – | – | Claim filter behind the expanded Smart Money read: one of the four exclusive tags (holding / bought / trimming / closed) or one of the read's own claims (never_sold / exited_24h / new_24h / left_7d /… |
| token_address | string | yes | Solana token mint address (base58). Get it from search_tokens or a leaderboard row. |
Structured output declared, but exposes no named fields.
No examples provided.
get_token_live_feed Live whale trades in a token ~325
Newest trades by tracked whales, KOLs and traders in one Solana token, with quick-flip flags. NOT the whole market: only wallets Moby tracks; every tracked trade (no $ floor), one row per swap (`identities`, `is_whale`, `is_kol`), from when Moby began tracking the token's traders. Pass `next_cursor` back as `cursor` until null. `wallet.win_rate` / `wallet.realized_pnl_30d_usd` are 30-day quality. Each row's `days_since_prev_trade` / `prev_trade_at` say how long the wallet was quiet before the trade (any token; null = no earlier trade on record). Rows sort by `timestamp`, then `sequence` (ingest order), so trades by one wallet in the same second stay in order. Rows carry `wallet_list_type` (whale, trader, kol); SELL rows carry `held_seconds` and `quick_flip: true` when sold within 15 minutes of the first buy: check it before reading that wallet's buy as conviction.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | – | – | `next_cursor` from the previous response. Wins over `page`; no gaps or duplicates. |
| limit | integer | – | Trades per page, 1-100. Keep it small. |
| page | integer | – | 1-based page number. Ignored when `cursor` is given. |
| token_address | string | yes | Solana token mint address (base58). Get it from search_tokens or a leaderboard row. |
Structured output declared, but exposes no named fields.
No examples provided.
get_token_ohlcv Token OHLCV candles ~550
Open/high/low/close/volume candles for one Solana token, for technical analysis (RSI, moving averages, returns). Series is newest-first. Prices are USD. Candle size: `interval` (`1m`, `5m`, `15m`, `1h`, `4h`, `1d`; wins over `timeframe` / `aggregate`; default 15m). An unsupported size is rejected; the response echoes `interval` and `candle_seconds`. `t` is Unix MILLISECONDS; time arguments take seconds or milliseconds. 🔴 NEWEST-FIRST, unlike TradingView: `c[0]` is the LATEST close and `c[-1]` the OLDEST, so a return is `(c[0] - c[-1]) / c[-1]` (the other way round flips the sign; `order` says so). Every candle is CLOSED: the forming one is dropped unless `include_in_progress_candle` is true (then it is index 0). Choosing between the two price tools: `get_token_chart` returns a ready-to-read price line for describing a trend; `get_token_ohlcv` returns raw open/high/low/close/volume candles for calculation and technical analysis. Prefer the chart unless you need per-candle numbers.
| Name | Type | Req | Description |
|---|---|---|---|
| aggregate | – | – | How many `timeframe` units per candle. 1 when only `timeframe` is given. |
| before_timestamp | – | – | Return candles before this Unix timestamp, in seconds or milliseconds. Use to page further back in history — a `t` value from a previous response can be passed straight back. |
| include_in_progress_candle | boolean | – | True keeps the current, still-forming candle at index 0. Leave false for any calculation — its close is not a close. |
| interval | – | – | Candle size. Wins over `timeframe`/`aggregate`. Omit all three for 15m. |
| limit | integer | – | How many candles to return. |
| time_from | – | – | Window start, Unix timestamp in SECONDS or MILLISECONDS — either is accepted. Requires `time_to` as well. |
| time_to | – | – | Window end, Unix timestamp in SECONDS or MILLISECONDS — either is accepted. Requires `time_from` as well. |
| timeframe | – | – | Candle unit. Candle size is `aggregate` × this (`aggregate` defaults to 1 when only this is given). Only the sizes listed under `interval` are served; anything else is rejected. |
| token_address | string | yes | Solana token mint address (base58). Get it from search_tokens or a leaderboard row. |
Structured output declared, but exposes no named fields.
No examples provided.
get_token_overview Token overview ~366
Price, market cap, FDV, liquidity, volume, holders, safety tier and smart-money read for one Solana token. Use for "tell me about X", "what's the market cap of X". `liquidity_source`: `bonding_curve` (`liquidity` = curve reserve) or `dex_pool`. `market_cap` is circulating (`market_cap_basis` is `circulating`), else the FDV (`fully_diluted`). `fdv` = price x total supply; `ath_market_cap` (alias `ath_mc`) shares `market_cap`'s basis and `ath_fdv` pairs with `fdv`: never compare `market_cap` with `ath_fdv`. `safety_tier`: grey is NOT a red flag; red = caution, and Moby refuses agent buys on red. `stats.untouched_pct` equals the `detail.tags` Untouched cell (one window, one denominator). `smart_money_read_v2`: `tier`/`label`/`verdict` grade the LAST HOUR of tracked flow; `text`/`bullets`/`stats` describe the 7-DAY holder base. They can disagree: say both, gate entries on `tier`. `stats.left_*` = every tracked wallet that sold out; `stats.exited_*` = the entry-known subset. `concentration.flagged` or `tier_cap_reason: concentration` = one wallet carries the read. `data_notes` lists fields Moby lacks or knows only in part; verify those on the web before quoting them.
| Name | Type | Req | Description |
|---|---|---|---|
| token_address | string | yes | Solana token mint address (base58). Get it from search_tokens or a leaderboard row. |
Structured output declared, but exposes no named fields.
No examples provided.
get_token_price Token price ~66
Current USD price of one Solana token. Cheapest price check. Use `get_token_overview` when you also need market cap, liquidity or volume.
| Name | Type | Req | Description |
|---|---|---|---|
| token_address | string | yes | Solana token mint address (base58). Get it from search_tokens or a leaderboard row. |
Structured output declared, but exposes no named fields.
No examples provided.
get_token_risk_signals Token risk check (honeypot, authorities, snipers) ~165
Rug-pull and scam risk for one Solana token: honeypot, buy/sell tax, mint and freeze authority, dev hold, sniper, insider, bundler and fresh-wallet shares. Use for "is this a honeypot", "check mint authority". Same fields and rules as the app's Risk Signals block. `status`: `ok`, `pending` (retry in a few seconds), `unavailable` / `unsupported` (no data; do not hammer). Nulls mean no data, not zero; early buyers stay `unavailable`. `fetched_at` says how fresh the read is.
| Name | Type | Req | Description |
|---|---|---|---|
| token_address | string | yes | Solana token mint address (base58). Get it from search_tokens or a leaderboard row. |
Structured output declared, but exposes no named fields.
No examples provided.
get_token_smart_money Smart money in a token ~150
Which tracked whales, KOLs and proven traders are buying or selling one Solana token over 1h, 4h and 24h. Use for "is smart money in X", "are whales buying X". These are OTHER people's wallets. Each window (`h1`, `h4`, `h24`) has `last_buy_at` / `last_sell_at`; `data_as_of` is when the windows were rolled up. A net that flips with no newer `last_sell_at` means older buys aged out, not new selling.
| Name | Type | Req | Description |
|---|---|---|---|
| token_address | string | yes | Solana token mint address (base58). Get it from search_tokens or a leaderboard row. |
Structured output declared, but exposes no named fields.
No examples provided.
get_token_trade_brief Token research brief (rug check + smart money) ~348
One-call pre-buy research and rug check for a Solana token: safety tier, risk signals (snipers, insiders, bundlers, dev hold, mint/freeze authority), smart-money flow, top holders and recent trades by winning wallets. Use for "should I buy X", "is X a rug", "research this coin". Sections: `about` (socials, age, launchpad, `liquidity_source`, `graduation_pct`), `safety`, `smart_money_flow` (h1/h4/h24 net $, buys vs sells, `last_buy_at` / `last_sell_at`), `smart_money_read` (`tier` over the last hour, `concentration`, `tier_cap_reason`), `risk_signals` (`status`), `key_holders` (top 10 positions >= $100: entry MC, `position`, 30-day `win_rate`), `recent_quality_trades` (by wallets with win_rate >= 0.5 and positive 30-day P/L) and `market` (`fdv`, `ath_market_cap`, `ath_fdv`, `pct_from_ath` on the `market_cap_basis` pair). A failed section is null with its reason in `errors`. Cached 15 s. Go deeper with `get_token_key_holders`, `get_token_live_feed` and `get_whale_wallet_profiles`. `data_notes` lists fields Moby lacks or knows only in part; verify those on the web before quoting them.
| Name | Type | Req | Description |
|---|---|---|---|
| token_address | string | yes | Solana token mint address (base58). Get it from search_tokens or a leaderboard row. |
Structured output declared, but exposes no named fields.
No examples provided.
How do I install the Moby MCP server?
Moby is a hosted endpoint at https://mcp.moby.win/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.moby.win
claude mcp add --transport http win-moby-moby 'https://mcp.moby.win/mcp'
What is the Moby MCP server?
Moby is an MCP server listed in the public MCP registry as win.moby/moby. Bearer agent key. Codex, Claude Code CLI, Gemini CLI (paid key), Grok CLI. ChatGPT: workspace plans. This page covers its hosted endpoint (https://mcp.moby.win/mcp).
Is the Moby MCP server safe to use?
Moby scores 63 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 Moby MCP server expose?
Moby exposes 77 tools: get_screener_leaderboard, get_degen_leaderboard, get_screener_groups, get_group_leaderboard, get_launchpads, and 72 more. Their descriptions and schemas cost roughly 17,089 tokens of context every time the server is loaded.
Does the Moby MCP server require authentication?
No. We connected to Moby without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the Moby MCP server still maintained?
Moby is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.