# Moby (remote · mcp.moby.win)

Bearer agent key. Codex, Claude Code CLI, Gemini CLI (paid key), Grok CLI. ChatGPT: workspace plans.

- Trust score: 63/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-04

## Components

- remote · `mcp.moby.win`: 63/100 (this document), [markdown](https://verifymcp.io/servers/win-moby-moby/mcp.md), [page](https://verifymcp.io/servers/win-moby-moby/mcp)

## Channel facts

- Endpoint: `https://mcp.moby.win/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.0.2`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-04.

- **Endpoint Security**: 57/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (execute_swap).
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 64/100
  - AI-judged instruction clarity (excellent).
  - 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.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 7/100
  - Stability observed for 2 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 78 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

## Install

### 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.

### Claude

```bash
claude mcp add --transport http win-moby-moby 'https://mcp.moby.win/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "win-moby-moby": {
      "url": "https://mcp.moby.win/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "win-moby-moby": {
      "type": "http",
      "url": "https://mcp.moby.win/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.win-moby-moby]
url = "https://mcp.moby.win/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "win-moby-moby": {
      "type": "remote",
      "url": "https://mcp.moby.win/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add win-moby-moby --url 'https://mcp.moby.win/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  win-moby-moby:
    url: "https://mcp.moby.win/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "win-moby-moby": {
      "Transport": "http",
      "Url": "https://mcp.moby.win/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add win-moby-moby -t streamable-http -u 'https://mcp.moby.win/mcp'
```

### Other

```json
{
  "mcpServers": {
    "win-moby-moby": {
      "type": "http",
      "url": "https://mcp.moby.win/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-04 (score 63, +3)

We did not load change detail this far back for this component, so this day may have recorded more than is shown.

- [security] 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
- [functional improvement] Tool coverage: 62% → 100%
- [functional improvement] 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
- [cosmetic] “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

### 2026-11-02 (score 60)

First indexed and scored.

## MCP tools (77)

### `get_screener_leaderboard` (~280 tokens)

Trending Solana tokens

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.

Input parameters:

- `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.

### `get_degen_leaderboard` (~265 tokens)

Trending memecoins and new tokens (high risk)

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.

Input parameters:

- `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.

### `get_screener_groups` (~82 tokens)

Token categories

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.

### `get_group_leaderboard` (~368 tokens)

Tokens in a category (majors, tokenized stocks, themes)

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.

Input parameters:

- `group_id` (string, required): 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.

### `get_launchpads` (~63 tokens)

New launches by launchpad (pump.fun)

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.

### `get_market_movers` (~333 tokens)

Market movers and price alerts

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.

Input parameters:

- `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.

### `search_tokens` (~168 tokens)

Search Solana tokens

Find a Solana token's mint address by name, ticker, symbol or pasted contract address (CA). Use first whenever the user names a token. For majors and tokenized stocks (NVDAx, SPYx, GLDx) take the address from the Majors / Stocks boards instead. Never guess an address. Every other token tool needs the address, and impostor tokens share popular symbols: buying the wrong one is unrecoverable. If several results look plausible, show them and ask which one. `safety_tier`: grey is NOT a red flag; red = caution, and Moby refuses agent buys on red.

Input parameters:

- `query` (string, required): Token name, ticker or symbol (e.g. BONK, NVDAx), or a pasted mint address (CA).

### `get_token_trade_brief` (~348 tokens)

Token research brief (rug check + smart money)

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.

Input parameters:

- `token_address` (string, required): Solana token mint address (base58). Get it from search_tokens or a leaderboard row.

### `get_token_overview` (~366 tokens)

Token overview

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.

Input parameters:

- `token_address` (string, required): Solana token mint address (base58). Get it from search_tokens or a leaderboard row.

### `get_token_risk_signals` (~165 tokens)

Token risk check (honeypot, authorities, snipers)

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.

Input parameters:

- `token_address` (string, required): Solana token mint address (base58). Get it from search_tokens or a leaderboard row.

### `get_token_smart_money` (~150 tokens)

Smart money in a token

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.

Input parameters:

- `token_address` (string, required): Solana token mint address (base58). Get it from search_tokens or a leaderboard row.

### `get_token_key_holders` (~536 tokens)

Top holders with win rates

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.

Input parameters:

- `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, required): Solana token mint address (base58). Get it from search_tokens or a leaderboard row.

### `get_token_live_feed` (~325 tokens)

Live whale trades in a token

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.

Input parameters:

- `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, required): Solana token mint address (base58). Get it from search_tokens or a leaderboard row.

### `get_token_chart` (~178 tokens)

Token price chart

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.

Input parameters:

- `period` (string): Window of history: 5m, 15m, 1h, 1d (default), 7d, 30d, 90d or 365d.
- `token_address` (string, required): Solana token mint address (base58). Get it from search_tokens or a leaderboard row.

### `get_token_ohlcv` (~550 tokens)

Token OHLCV candles

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.

Input parameters:

- `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, required): Solana token mint address (base58). Get it from search_tokens or a leaderboard row.

### `get_token_price` (~66 tokens)

Token price

Current USD price of one Solana token. Cheapest price check. Use `get_token_overview` when you also need market cap, liquidity or volume.

Input parameters:

- `token_address` (string, required): Solana token mint address (base58). Get it from search_tokens or a leaderboard row.

### `get_whalewatch_feed` (~591 tokens)

Whale trade feed (filterable)

Buys and sells by tracked Solana whale wallets, filterable by token, wallet, list and time. Newest first. Filter by `token_address`, `wallet_address` (a TRACKED wallet, never the user's; their trades are `get_my_activity`) or `list_ids` from `get_whalewatch_lists`. For a whole time window use `get_whalewatch_feed_window`. 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. `include_context=true` adds a per-row `context`: pnl_pct_vs_entry (trade price vs the wallet's average entry, a fraction), tags, hold_days_at_trade, share_sold_of_position, position_before_usd, entry_vwap_before, days_since_prev_trade / prev_trade_at and the wallet's 30-day wallet_win_rate / wallet_realized_pnl_30d_usd. Unknown values are null: pnl_pct_vs_entry is null when the wallet's entry was never seen. Wallet quality: use get_whale_wallet_track_record(wallet_address) for a wallet's win rate and PnL.

Input parameters:

- `after_timestamp`: Only trades after this instant. ISO 8601 UTC, e.g. `2026-08-11T14:30:00Z`.
- `before_timestamp`: Only trades before this instant. ISO 8601 UTC, e.g. `2026-08-11T14:30:00Z`.
- `include_context` (boolean): Add the per-row `context` block (position/PnL facts for each trade).
- `limit` (integer): Trades per page, 1-100. Keep it small.
- `list_ids`: Whale list ids from `get_whalewatch_lists`. Omit for all lists.
- `min_days_since_prev_trade`: Only trades by a wallet that had been quiet at least this many days before the trade (no tracked trade on this network, any token), e.g. 14 for 'woke up after two weeks'. Trades with no earlier trade…
- `page` (integer): 1-based page number.
- `token_address`: Restrict to whale trades in this one token.
- `transaction_types`: `buy` and/or `sell`. Omit for both. Anything else is rejected rather than ignored — an unrecognised value used to drop the filter and return every row.
- `wallet_address`: Restrict to one TRACKED WHALE wallet. Not the user's wallet.

### `get_whalewatch_feed_window` (~644 tokens)

Whale trades in a time window

Every tracked whale trade in a window up to 48h, one row per swap, cursor paged. Unlike `get_whalewatch_feed`: ONE ROW PER SWAP (`list_id` is one matching list) and cursor paged (pass `next_cursor` back as `cursor` until null; new trades never shift a page). Filter by side, minimum trade size, minimum market cap, `actions`, `list_ids` and `min_days_since_prev_trade`. A window over 48h is rejected. 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. `include_context=true` adds a per-row `context`: pnl_pct_vs_entry (trade price vs the wallet's average entry, a fraction), tags, hold_days_at_trade, share_sold_of_position, position_before_usd, entry_vwap_before, days_since_prev_trade / prev_trade_at and the wallet's 30-day wallet_win_rate / wallet_realized_pnl_30d_usd. Unknown values are null: pnl_pct_vs_entry is null when the wallet's entry was never seen.

Input parameters:

- `actions`: What the trade did to the wallet's position: `first_buy`, `re_entry`, `add`, `trim`, `close`, `sell_unknown_entry`. Omit for all.
- `after_timestamp` (string, required): Window start (inclusive). At most 48h before the window end. ISO 8601 UTC, e.g. `2026-08-11T14:30:00Z`.
- `before_timestamp`: Window end (inclusive). Omit for now. ISO 8601 UTC, e.g. `2026-08-11T14:30:00Z`.
- `cursor`: `next_cursor` from the previous page. Omit for the first page.
- `include_context` (boolean): Add the per-row `context` block (position/PnL facts for each trade).
- `limit` (integer): Swaps per page, 1-1000. Keep it small unless you need the whole window.
- `list_ids`: Whale list ids from `get_whalewatch_lists`. Omit for all lists.
- `min_amount_usd`: Only trades of at least this many USD.
- `min_days_since_prev_trade`: Only trades by a wallet that had been quiet at least this many days before the trade (no tracked trade on this network, any token), e.g. 14 for 'woke up after two weeks'. Trades with no earlier trade…
- `min_market_cap_usd`: Only trades in tokens whose market cap at trade time was at least this.
- `transaction_types`: `buy` and/or `sell`. Omit for both.

### `get_whalewatch_kol_feed` (~388 tokens)

KOL and influencer trades

What crypto influencers (KOLs, callers) are buying and selling on Solana. Same rows as `get_whalewatch_feed`, pre-filtered to KOLs server-side (no `list_ids`). For one KOL's trades use `get_whalewatch_feed` with its `wallet_address`. `include_context=true` adds a per-row `context`: pnl_pct_vs_entry (trade price vs the wallet's average entry, a fraction), tags, hold_days_at_trade, share_sold_of_position, position_before_usd, entry_vwap_before, days_since_prev_trade / prev_trade_at and the wallet's 30-day wallet_win_rate / wallet_realized_pnl_30d_usd. Unknown values are null: pnl_pct_vs_entry is null when the wallet's entry was never seen. Wallet quality: use get_whale_wallet_track_record(wallet_address) for a wallet's win rate and PnL.

Input parameters:

- `after_timestamp`: Only trades after this instant. ISO 8601 UTC, e.g. `2026-08-11T14:30:00Z`.
- `before_timestamp`: Only trades before this instant. ISO 8601 UTC, e.g. `2026-08-11T14:30:00Z`.
- `include_context` (boolean): Add the per-row `context` block (position/PnL facts for each trade).
- `limit` (integer): Trades per page, 1-100. Keep it small.
- `page` (integer): 1-based page number.
- `token_address`: Restrict to KOL trades in this one token.
- `transaction_types`: `buy` and/or `sell`. Omit for both. Anything else is rejected rather than ignored — an unrecognised value used to drop the filter and return every row.

### `get_smart_money_pulse` (~225 tokens)

Smart money pulse (whale buys and sells)

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`).

### `get_whalewatch_lists` (~61 tokens)

Whale lists (for feed filters)

Tracked whale, KOL and trader lists and their list_ids, for filtering whale feeds. Pass `list_ids` to `get_whalewatch_feed`. Not the browse-and-follow lists (`get_whalewatch_wallet_lists`).

### `get_whale_wallet_holdings` (~91 tokens)

Whale wallet holdings

Current holdings of one tracked wallet. ⚠️ Somebody else's portfolio, not the user's (that is `get_my_balances`). Take `wallet_address` from a whale feed row; opaque references work. `get_whale_wallet_positions` adds cost basis and PnL.

Input parameters:

- `wallet_address` (string, required): Tracked wallet, from a whale feed row. Opaque references work too.

### `get_whale_wallet_wins` (~92 tokens)

Whale wallet best trades

Top 5 closed trades by profit for one wallet. Judge a wallet before weighting its trades. ⚠️ Somebody else's track record, not the user's (theirs is `get_my_closed_positions`). An empty list means no wins data, not that the wallet never won.

Input parameters:

- `wallet_address` (string, required): Tracked trader wallet, from a WhaleWatch feed. Opaque references work here too.

### `get_whalewatch_home_feed` (~96 tokens)

Notable whale trades now

The latest headline whale buy on Solana ($10k or more), as the Moby app's home screen shows it. For anything filtered (one token, one wallet, lists, a time window, more rows) use `get_whalewatch_feed`; for market-wide flow use `get_smart_money_pulse`.

Input parameters:

- `limit` (integer): Rows to return. The headline feed serves 1.

### `get_whalewatch_legend` (~51 tokens)

Whale feed legend

Static legend for badges on whale feed rows. Static reference data: call it once to explain a marker on a feed row, never poll it. It has no market data and no wallets.

### `get_top_held` (~102 tokens)

Most-held tokens by whales or Moby users

Tokens ranked by total USD held by tracked whales (default) or by Moby users. Use for "what are whales holding most". Always TOKENS, never a ranking of people. `holder_type=whale` for 'what are whales piling into', `holder_type=user` for 'what do Moby users hold most'.

Input parameters:

- `holder_type` (string): whale (default) = held by tracked whales; user = held by Moby users.

### `get_screener_event_filters` (~54 tokens)

Market mover filter values

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'.

### `get_token_holdings` (~79 tokens)

Holder distribution summary

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`.

Input parameters:

- `token_address` (string, required): Solana token mint address (base58). Get it from search_tokens or a leaderboard row.

### `get_token_holders` (~120 tokens)

All top holders

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.

Input parameters:

- `limit` (integer): Holders per page, 1-100. Keep it small.
- `page` (integer): 1-based page number.
- `token_address` (string, required): Solana token mint address (base58). Get it from search_tokens or a leaderboard row.

### `get_token_whale_holders` (~91 tokens)

Whales holding a token, by list

Tracked whales holding one Solana token, grouped by whale list. `get_token_key_holders` is the same population ungrouped (whales and KOLs together, with win rates); use this for 'which KIND of whale is in this'.

Input parameters:

- `token_address` (string, required): Solana token mint address (base58). Get it from search_tokens or a leaderboard row.

### `get_kol_top_held` (~87 tokens)

KOLs holding a token

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`.

Input parameters:

- `token_address` (string, required): Solana token mint address (base58). Get it from search_tokens or a leaderboard row.

### `get_token_dca_orders` (~126 tokens)

Public DCA orders on a token

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.

Input parameters:

- `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, required): Solana token mint address (base58). Get it from search_tokens or a leaderboard row.

### `get_token_x_profile` (~89 tokens)

Project X account check

Follower count, age and verification of a Solana token's X (Twitter) account. Paid per lookup; use sparingly. Answers 'is this project's social presence real or a two-day-old burner'. Not for routine enrichment of every token in a list.

Input parameters:

- `token_address` (string, required): Solana token mint address (base58). Get it from search_tokens or a leaderboard row.

### `get_whale_wallet_track_record` (~101 tokens)

Wallet track record

Win rate, realized PnL, trade count and hold time for one wallet. Prefer the profile tool. Also `backfill_state` (whether Moby finished indexing it). `get_whale_wallet_profile` has this plus holdings and follow state in one call. ⚠️ Somebody else's record, never the user's.

Input parameters:

- `wallet_address` (string, required): Tracked trader wallet, from a WhaleWatch feed. Opaque references work too.

### `get_whale_wallet_pnl_chart` (~99 tokens)

Whale wallet PnL chart

One wallet's cumulative realized PnL curve (1d, 7d, 30d, 1y). Is the record a steady climb or one lucky trade? ⚠️ Somebody else's equity curve, never the user's.

Input parameters:

- `period` (string): Chart window. Default 30d.
- `wallet_address` (string, required): Tracked trader wallet, from a WhaleWatch feed. Opaque references work too.

### `get_whale_wallet_positions` (~90 tokens)

Whale wallet positions with PnL

One tracked wallet's positions with cost basis and unrealized PnL. Richer than `get_whale_wallet_holdings` (amount and USD only). ⚠️ Somebody else's positions; the user's own are `get_my_balances` / `get_my_position`.

Input parameters:

- `wallet_address` (string, required): Tracked trader wallet, from a WhaleWatch feed. Opaque references work too.

### `get_whale_wallet_profile` (~228 tokens)

Wallet profile and track record

Identity, 7d and 30d win rate and PnL, holdings and recent trades for one public Solana wallet. Use for "is this wallet any good". Also whether Moby stopped tracking it (`identity.tracking_paused_at`). Prefer it over `get_whale_wallet_track_record` + `get_whale_wallet_positions`. `windows.d7` / `windows.d30`: realized P/L, closes, win rate, avg/median hold days, share of closes held under 24h. Read `read.situation` with the window stats. `include_holdings=false` = stats only, much smaller; to rate many wallets use `get_whale_wallet_profiles`. A wallet Moby has seen but not indexed returns null sections, not an error. ⚠️ Somebody else's profile, never the user's.

Input parameters:

- `include_holdings` (boolean): false = stats only, no holdings (smaller, faster). Default true.
- `wallet_address` (string, required): Tracked trader wallet, from a WhaleWatch feed. Opaque references work too.

### `get_whale_wallet_profiles` (~147 tokens)

Rate many wallets at once

Win rate and PnL for up to 20 wallets in one call. Rate 10-20 key holders before a buy; stats only. Pass the `wallet_address` refs from `get_token_key_holders`. Each profile has `windows.d7` / `windows.d30` (realized P/L, closes, win rate, median hold, short-hold share), `track_record`, `realized` and `identity`. An unknown wallet is left out: match rows on `wallet_ref`. ⚠️ Other people's wallets.

Input parameters:

- `wallet_addresses` (array, required): 1-20 tracked wallet refs, e.g. from get_token_key_holders.

### `get_my_balances` (~327 tokens)

My balances (USDC and tokens)

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.

Input parameters:

- `refresh` (boolean): true only right after an outside deposit that is not showing; slow.

### `get_my_portfolio` (~196 tokens)

My portfolio value

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.

Input parameters:

- `refresh` (boolean): true only right after an outside deposit that is not showing; slow.

### `get_my_position` (~324 tokens)

My position and PnL in a token

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.

Input parameters:

- `token_address` (string, required): Solana token mint address (base58). Get it from search_tokens or a leaderboard row.

### `get_my_closed_positions` (~193 tokens)

My closed positions (realized PnL)

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'.

Input parameters:

- `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.

### `get_my_activity` (~248 tokens)

My activity

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.

Input parameters:

- `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.

### `get_my_token_balance` (~202 tokens)

My balance of one token

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.

Input parameters:

- `token_address` (string, required): Solana token mint address (base58). Get it from search_tokens or a leaderboard row.

### `get_my_closed_trades` (~276 tokens)

My trade history for a token

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.

Input parameters:

- `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, required): Contract address of the ONE token to show trades for. Required.

### `get_my_transactions` (~238 tokens)

My transactions

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.

Input parameters:

- `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…

### `get_my_wallets` (~64 tokens)

My agent wallet address

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.

### `get_my_transaction` (~58 tokens)

Transaction detail

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.

Input parameters:

- `transaction_id` (string, required): Transaction id from get_my_transactions.

### `get_my_watchlists` (~76 tokens)

My watchlists

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.

### `get_my_watchlist_tokens` (~173 tokens)

My watchlist tokens

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.

Input parameters:

- `watchlist_id`: Watchlist id from get_my_watchlists. Omit for the default list.

### `get_my_orders` (~519 tokens)

My open orders (limit, TP, SL, DCA)

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.

Input parameters:

- `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`.

### `get_my_dca_schedules` (~185 tokens)

My DCA schedules

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.

Input parameters:

- `include_terminal` (boolean): True also returns completed and cancelled schedules. Default: live only.

### `get_my_guardrails` (~315 tokens)

My trading limits (guardrails)

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.

### `get_swap_quote` (~211 tokens)

Quote a swap

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.

Input parameters:

- `amount` (number, required): How much of `input_token` to spend, in whole token units (not the smallest unit).
- `input_token` (string, required): Contract address of the token being SPENT.
- `output_token` (string, required): Contract address of the token being RECEIVED.

### `execute_swap` (~289 tokens)

Execute quoted swap (real money)

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).

Input parameters:

- `quote_id` (string, required): `quote_id` from a recent `get_swap_quote` response.

### `quick_buy` (~406 tokens)

Buy a token with USDC (real money)

Buy a Solana token or tokenized stock with USDC in one step. Real money. Confirm token and amount first. Checked server-side against max per trade, daily buy volume and market-cap range. ⚠️ 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. There is no quote step, so the user sees no price first: prefer `get_swap_quote` + `execute_swap` when they may want the price. Exactly one of `amount_usd` or `amount_in`. Take the address from `search_tokens` or the Majors / Stocks boards: an impostor is unrecoverable. Red safety tier buys are refused. The result has `quote_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`. Moby attaches no exits: place this position's TP/SL yourself with `create_order`.

Input parameters:

- `amount_in`: How much to spend in whole units of USDC, the only funding asset — SOL is a position, never spent by a buy. Mutually exclusive with `amount_usd`.
- `amount_usd`: How much to spend in US DOLLARS. Mutually exclusive with `amount_in`.
- `output_token` (string, required): Contract address of the token to BUY. Get it from `search_tokens`.
- `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.

### `quick_sell` (~375 tokens)

Sell a token to USDC (real money)

Sell all or part of a held token to USDC at market. Real money. Full sells also cancel that token's open exits. Quote and execute happen together, so it never fails on an expired quote: THE tool to close or trim. ⚠️ 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. `pct` is a percent of the CURRENT on-chain balance (default 100 = all); proceeds land in USDC in the same wallet. The result has `sold_amount`, `transaction_signature` and the `quote_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). Sells are never blocked by market cap, safety tier or trade limits; the `market` switch still applies.

Input parameters:

- `max_slippage_bps`: Slippage tolerance in basis points (100 = 1%). Omit for Moby's default.
- `pct` (number): Percent of the current balance to sell, 1-100. Default 100 = close it.
- `token_address` (string, required): Contract address of the HELD token to sell. Get it from `get_my_balances`.

### `get_swap_status` (~293 tokens)

Swap status

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).

Input parameters:

- `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`.

### `create_order` (~1153 tokens)

Place limit, stop-loss, take-profit or DCA order (real money)

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…

Input parameters:

- `amount` (number, required): 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, required): 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, required): Contract address of the token the order is about.

### `cancel_order` (~155 tokens)

Cancel an order or DCA

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.

Input parameters:

- `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.

### `get_whalewatch_wallet_lists` (~96 tokens)

Wallet lists to browse and follow

Curated wallet lists to browse for copy trading, with their slugs. The Find-wallets tab: a 'picks' strip, then one summary per curated list (whale groups, KOL groups, proven traders). Pass a `slug` to `get_whalewatch_wallet_list_detail`. Not `get_whalewatch_lists`, which is for filtering `get_whalewatch_feed`.

### `get_whalewatch_wallet_list_detail` (~78 tokens)

Wallets in a curated list

Ranked wallets in one curated list (slug from the browse lists tool). Pre-ranked. `slug` MUST come from `get_whalewatch_wallet_lists`: an invented or stale slug is a 404, not an empty list.

Input parameters:

- `slug` (string, required): List slug from get_whalewatch_wallet_lists.

### `search_whalewatch_wallets` (~87 tokens)

Search whale and KOL wallets

Find a public whale or KOL wallet by name or list brand. By KOL name or whale-list brand, NOT by pasted address, and not a token search (`search_tokens`). `discover_wallets_to_follow` also says which results the user already follows.

Input parameters:

- `query` (string, required): A KOL name or a whale-list brand. Minimum 2 characters.

### `discover_wallets_to_follow` (~162 tokens)

Find wallets to copy trade

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.

Input parameters:

- `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).

### `get_my_recommended_wallets` (~67 tokens)

Wallets similar to my holdings

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.

### `follow_wallet` (~119 tokens)

Follow a wallet

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.

Input parameters:

- `custom_name`: Optional nickname for this wallet, max 50 characters.
- `wallet_address` (string, required): Public wallet ref from a Find-wallets or WhaleWatch tool.

### `unfollow_wallet` (~69 tokens)

Unfollow a wallet

Stop following a wallet. Moves no money. Idempotent: a no-op if the user does not follow it. Also clears that wallet from `get_my_following_feed` at once.

Input parameters:

- `wallet_address` (string, required): Public wallet ref, as returned by get_my_followed_wallets.

### `get_my_followed_wallets` (~54 tokens)

My followed wallets

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`.

### `get_my_following_feed` (~156 tokens)

Trades by wallets I follow

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.

Input parameters:

- `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.

### `get_my_trading_profile` (~305 tokens)

My trading profile (call first)

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`).

### `save_trading_profile` (~303 tokens)

Save trading profile

Save onboarding answers or a skip. Changes no limit and moves no money. Call it after you played the answers back in TWO lines and the user said yes, or with `skipped: true` when they decline. Pass `profile` OR `skipped`, not both.
\- `replace: false` (default) MERGES into what is saved, so for 'update my trading profile' send only the changed fields. `replace: true` overwrites the whole profile.
\- Amounts are USD. If the user spoke in SOL, convert at the current price and say both.
\- After the save, the closing step: offer one or two cards from the result's `recommended_strategies`. `strategies_followup`, when present, is that step as an instruction to you: follow it once, do not read it out.
\- The scan schedule has no field here. 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.
This changes NO guardrail and moves no money; the guardrails still decide what you may trade.

Input parameters:

- `profile`: The interview answers. Omit when `skipped` is true.
- `replace` (boolean): False merges into the saved answers; true overwrites them.
- `skipped` (boolean): True when the user declined the interview.

### `list_strategies` (~275 tokens)

Starter trading strategies

Moby's ready-made strategies (Large Cap Allocator, Smart Money Confirmed, others) with risk labels. From the Strategies section of AI Trading in the Moby app: each card's `id`, `name`, `summary`, `how_it_works`, `chips` (the editable defaults), `risk_label`, `warning` and the Moby `tools` it uses, with the user's max per trade filled in. Use it during or after onboarding to recommend a card, and whenever the user asks what strategies there are. To match a card to the user, offer the one or two ids in `recommended_strategies` from `get_my_trading_profile` / `save_trading_profile` (majors or stocks → Large Cap Allocator, BTC <> ZEC Barbell; launches or memes → StonkFun Trend Rider, StonkFun Whale Swarm, Early Launch Hunter; mix → Smart Money Confirmed). Read each card's `summary`, `how_it_works` and `risk_label` before you recommend it, and only recommend cards this tool returned. The full prompt is NOT here: call `get_strategy(strategy_id)` for it. `app_links` are Moby app deep links to hand to the user; they open the Moby app on their phone.

### `get_strategy` (~199 tokens)

Get a strategy's instructions

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.

Input parameters:

- `ask_before_every_trade` (boolean): True adds the 'ask me before every trade' line to the prompt.
- `strategy_id` (string, required): A card `id` from list_strategies.

### `get_my_active_strategies` (~182 tokens)

My running strategies

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.

Input parameters:

- `include_stopped` (boolean): True also returns stopped strategies.

### `save_active_strategy` (~384 tokens)

Save, pause or stop a strategy

Record a strategy start, pause, resume, stop or run heartbeat. Moves no money. So other sessions and clients see what you run:
\- START: omit `active_strategy_id`; pass `strategy_id` for a starter card (its name is used if you omit `name`) or `name` for a custom one, plus `settings` (the numbers the user confirmed: amounts, mix, exits, the ask-first flag) and `schedule` in plain words ('every 4 hours').
\- PAUSE / RESUME / STOP: pass `active_strategy_id` and `status` paused / active / stopped.
\- EDIT: pass `active_strategy_id` and only the fields that changed (an empty value clears `settings`, `schedule` or `notes`).
\- HEARTBEAT: after each run, pass `active_strategy_id` and `last_run_at` (now, ISO 8601).
At most 20 active or paused per user; stop one to start another. This moves no money and changes no guardrail.

Input parameters:

- `active_strategy_id`: Omit to start a new one; an `id` from get_my_active_strategies to update.
- `last_run_at`: ISO 8601 time of the run just finished, e.g. `2026-10-29T14:00:00Z`.
- `name`: Display name (max 120 chars).
- `notes`: Anything to remember (max 1000 chars).
- `schedule`: How often it runs, in plain words (max 120 chars).
- `settings`: The confirmed numbers as a small JSON object (max 8 KB); `{}` clears it.
- `status`: active, paused or stopped.
- `strategy_id`: The starter card `id` from list_strategies; omit for a custom strategy.

### `submit_feedback` (~290 tokens)

Send feedback to Moby

Log a bug, wrong data or feature idea for the Moby team. Once per issue; tell the user it was logged, with its id. Not for payments, lost funds or account problems: send those to support in the Moby app.
\`kind`: bug (something broke), data_issue (a Moby number looks wrong; `tool_name` is required, and `expected` / `actual` help), idea (a missing tool or 'they should add X'). `title` is one line (max 160 chars); `details` is what happened (max 2000 chars). The same title within 24 hours returns the earlier submission with `duplicate: true` instead of a new one. At most 10 a day. Moves no money.

Input parameters:

- `actual`: What Moby returned (max 500 chars).
- `details` (string, required): What happened or what to add (max 2000 chars).
- `expected`: What the number should be, and where you saw it (max 500 chars).
- `kind` (string, required): bug, data_issue or idea.
- `title` (string, required): One line (max 160 chars).
- `token_address`: The token's contract address, when it is about one token.
- `tool_name`: The Moby tool it is about, e.g. `get_token_overview`. Required for data_issue.

### `get_my_feedback` (~92 tokens)

My feedback status

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.

Input parameters:

- `limit` (integer): How many to return (1-50).
- `status`: Only submissions in this status.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/win-moby-moby/mcp#diagnostics

## Score history

- 2026-11-04: 63
- 2026-11-03: 60
- 2026-11-02: 60

## Common questions

### 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.

## Links

- Remote endpoint: https://mcp.moby.win/mcp
- Authorisation metadata: https://mcp.moby.win/.well-known/oauth-protected-resource/mcp
- Website: https://moby.win/agents/
- Changelog RSS feed: https://verifymcp.io/servers/win-moby-moby/mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/win-moby-moby/mcp.json
- HTML version of this page: https://verifymcp.io/servers/win-moby-moby/mcp
